From 8a786758b7d9fb7e3abb50044f8da0a9605ff37c Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Thu, 4 Apr 2019 11:45:54 +0200 Subject: [PATCH 001/980] NEW browser mobil app support --- htdocs/main.inc.php | 13 ++++ .../theme/common/appli_dolibarr_256x256.png | Bin 0 -> 4008 bytes htdocs/theme/eldy/manifest.json.php | 57 ++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 htdocs/theme/common/appli_dolibarr_256x256.png create mode 100644 htdocs/theme/eldy/manifest.json.php diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 74069429043..25a64966b79 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1234,6 +1234,19 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr //if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) print ''."\n"; //if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) print ''."\n"; + // Mobile appli like icon + $manifest=dol_buildpath('/theme/'.$conf->theme.'/manifest.json.php', 1, 1); + if(!empty($manifest)){ + print ''."\n"; + } + + if(!empty($conf->global->THEME_ELDY_TOPMENU_BACK1)) { + // TODO: use auto theme color switch + print '' . "\n"; + } + + + // Auto refresh page if (GETPOST('autorefresh', 'int') > 0) print ''; diff --git a/htdocs/theme/common/appli_dolibarr_256x256.png b/htdocs/theme/common/appli_dolibarr_256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..970f841001bbd165a955f094f6505a75fe7b5fb6 GIT binary patch literal 4008 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 Q3RVMc4Sigxnr*~?0Ios=rvLx| literal 0 HcmV?d00001 diff --git a/htdocs/theme/eldy/manifest.json.php b/htdocs/theme/eldy/manifest.json.php new file mode 100644 index 00000000000..ef5459cf600 --- /dev/null +++ b/htdocs/theme/eldy/manifest.json.php @@ -0,0 +1,57 @@ + + * Copyright (C) 2006 Rodolphe Quiedeville + * Copyright (C) 2007-2017 Regis Houssin + * Copyright (C) 2011 Philippe Grand + * Copyright (C) 2012 Juanjo Menent + * Copyright (C) 2018 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FI8TNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/theme/eldy/manifest.json.php + * \brief File for The Web App + */ + +//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Not disabled because need to load personalized language +//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Not disabled to increase speed. Language code is found on url. +if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); +//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Not disabled because need to do translations +if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', 1); +if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', 1); +if (! defined('NOLOGIN')) define('NOLOGIN', 1); // File must be accessed by logon page so without login +//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU',1); // We need top menu content +if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', 1); +if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); + +require_once __DIR__.'/../../main.inc.php'; + +$appli=constant('DOL_APPLICATION_TITLE'); +if (!empty($conf->global->MAIN_APPLICATION_TITLE)) $appli=$conf->global->MAIN_APPLICATION_TITLE; + +?> +{ + "name": "", + "icons": [ + { + "src": "", + "sizes": "256x256", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} From 788e7a40a8f784e221b1f2f3204408af6a9f8977 Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Thu, 4 Apr 2019 11:47:07 +0200 Subject: [PATCH 002/980] remove space --- htdocs/main.inc.php | 2 -- htdocs/theme/eldy/manifest.json.php | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 25a64966b79..9b12f892ea9 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1245,8 +1245,6 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr print '' . "\n"; } - - // Auto refresh page if (GETPOST('autorefresh', 'int') > 0) print ''; diff --git a/htdocs/theme/eldy/manifest.json.php b/htdocs/theme/eldy/manifest.json.php index ef5459cf600..afaa3a4258c 100644 --- a/htdocs/theme/eldy/manifest.json.php +++ b/htdocs/theme/eldy/manifest.json.php @@ -54,4 +54,4 @@ if (!empty($conf->global->MAIN_APPLICATION_TITLE)) $appli=$conf->global->MAIN_AP "theme_color": "#ffffff", "background_color": "#ffffff", "display": "standalone" -} +} \ No newline at end of file From 9957b8aed5a1a7863c4d9992d6190c870acaeea3 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 15 Apr 2019 09:07:36 +0200 Subject: [PATCH 003/980] WIP - FEC - Validate --- htdocs/accountancy/closure/index.html | 0 htdocs/accountancy/closure/index.php | 416 ++++++++++++++++++++++++ htdocs/core/menus/standard/eldy.lib.php | 13 +- 3 files changed, 427 insertions(+), 2 deletions(-) create mode 100644 htdocs/accountancy/closure/index.html create mode 100644 htdocs/accountancy/closure/index.php diff --git a/htdocs/accountancy/closure/index.html b/htdocs/accountancy/closure/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/accountancy/closure/index.php b/htdocs/accountancy/closure/index.php new file mode 100644 index 00000000000..9786734ab82 --- /dev/null +++ b/htdocs/accountancy/closure/index.php @@ -0,0 +1,416 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * \file htdocs/accountancy/customer/index.php + * \ingroup Accountancy + * \brief Home closure page + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/accountancy/class/bookkeeping.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->societe_id > 0) + accessforbidden(); +if (! $user->rights->accounting->closure->read) + 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'); +else +{ + $year_start = dol_print_date(dol_now(), '%Y'); + if (dol_print_date(dol_now(), '%m') < $month_start) $year_start--; // If current month is lower that starting fiscal month, we start last year +} +$year_end = $year_start + 1; +$month_end = $month_start - 1; +if ($month_end < 1) +{ + $month_end = 12; + $year_end--; +} +$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; + +// Validate History +$action = GETPOST('action', 'aZ09'); + + +/* + * Actions + */ + +if ($action == 'clean' || $action == 'validatehistory') +{ + // Clean database + $db->begin(); + $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facturedet as fd"; + $sql1 .= " SET fk_code_ventilation = 0"; + $sql1 .= ' WHERE fd.fk_code_ventilation NOT IN'; + $sql1 .= ' (SELECT accnt.rowid '; + $sql1 .= ' FROM ' . MAIN_DB_PREFIX . 'accounting_account as accnt'; + $sql1 .= ' INNER JOIN ' . MAIN_DB_PREFIX . 'accounting_system as syst'; + $sql1 .= ' ON accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=' . $conf->global->CHARTOFACCOUNTS . ' AND accnt.entity = '.$conf->entity.')'; + $sql1 .= ' AND fd.fk_facture IN (SELECT rowid FROM ' . MAIN_DB_PREFIX . 'facture WHERE entity = '.$conf->entity.')'; + $sql1 .= ' AND fk_code_ventilation <> 0'; + + dol_syslog("htdocs/accountancy/customer/index.php fixaccountancycode", LOG_DEBUG); + $resql1 = $db->query($sql1); + if (! $resql1) { + $error ++; + $db->rollback(); + setEventMessages($db->lasterror(), null, 'errors'); + } else { + $db->commit(); + } + // End clean database +} + +if ($action == 'validatehistory') { + + $error = 0; + $db->begin(); + + // Now make the binding. Bind automatically only for product with a dedicated account that exists into chart of account, others need a manual bind + if ($db->type == 'pgsql') { + $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facturedet"; + $sql1 .= " SET fk_code_ventilation = accnt.rowid"; + $sql1 .= " FROM " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accounting_account as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; + $sql1 .= " WHERE " . MAIN_DB_PREFIX . "facturedet.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS.' AND accnt.entity = '.$conf->entity; + $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_sell=accnt.account_number"; + $sql1 .= " AND " . MAIN_DB_PREFIX . "facturedet.fk_code_ventilation = 0"; + } else { + $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facturedet as fd, " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accounting_account as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; + $sql1 .= " SET fk_code_ventilation = accnt.rowid"; + $sql1 .= " WHERE fd.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS.' AND accnt.entity = '.$conf->entity; + $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_sell=accnt.account_number"; + $sql1 .= " AND fd.fk_code_ventilation = 0"; + } + + dol_syslog('htdocs/accountancy/customer/index.php'); + + $resql1 = $db->query($sql1); + if (! $resql1) { + $error ++; + $db->rollback(); + setEventMessages($db->lasterror(), null, 'errors'); + } else { + $db->commit(); + setEventMessages($langs->trans('AutomaticBindingDone'), null, 'mesgs'); + } +} + + +/* + * View + */ + +llxHeader('', $langs->trans("CustomersVentilation")); + +$textprevyear = '' . img_previous() . ''; +$textnextyear = ' ' . img_next() . ''; + + +print load_fiche_titre($langs->trans("CustomersVentilation") . " " . $textprevyear . " " . $langs->trans("Year") . " " . $year_start . " " . $textnextyear, '', 'title_accountancy'); + +print $langs->trans("DescVentilCustomer") . '
'; +print $langs->trans("DescVentilMore", $langs->transnoentitiesnoconv("ValidateHistory"), $langs->transnoentitiesnoconv("ToBind")) . '
'; +print '
'; + + +$y = $year_current; + +$buttonbind = '' . $langs->trans("ValidateHistory") . ''; + +print_barre_liste($langs->trans("OverviewOfAmountOfLinesNotBound"), '', '', '', '', '', '', -1, '', '', 0, $buttonbind, '', 0, 1, 1); +//print load_fiche_titre($langs->trans("OverviewOfAmountOfLinesNotBound"), $buttonbind, ''); + +print '
'; +print ''; +print ''; +print ''; +for($i = 1; $i <= 12; $i ++) { + $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; + if ($j > 12) $j-=12; + print ''; +} +print ''; + +$sql = "SELECT " . $db->ifsql('aa.account_number IS NULL', "'tobind'", 'aa.account_number') . " AS codecomptable,"; +$sql .= " " . $db->ifsql('aa.label IS NULL', "'tobind'", 'aa.label') . " AS intitule,"; +for($i = 1; $i <= 12; $i ++) { + $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; + if ($j > 12) $j-=12; + $sql .= " SUM(" . $db->ifsql('MONTH(f.datef)=' . $j, 'fd.total_ht', '0') . ") AS month" . str_pad($j, 2, '0', STR_PAD_LEFT) . ","; +} +$sql .= " SUM(fd.total_ht) as total"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON aa.rowid = fd.fk_code_ventilation"; +$sql .= " WHERE f.datef >= '" . $db->idate($search_date_start) . "'"; +$sql .= " AND f.datef <= '" . $db->idate($search_date_end) . "'"; +$sql .= " AND f.fk_statut > 0"; +$sql .= " AND f.entity IN (" . getEntity('invoice', 0) . ")"; // We don't share object for accountancy +$sql .= " AND aa.account_number IS NULL"; +if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_SITUATION . ")"; +} else { + $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_DEPOSIT . "," . Facture::TYPE_SITUATION . ")"; +} +$sql .= " GROUP BY fd.fk_code_ventilation,aa.account_number,aa.label"; + +dol_syslog('htdocs/accountancy/customer/index.php sql=' . $sql, LOG_DEBUG); +$resql = $db->query($sql); +if ($resql) { + $num = $db->num_rows($resql); + + while ( $row = $db->fetch_row($resql)) { + + print ''; + print ''; + for($i = 2; $i <= 12; $i ++) { + print ''; + } + print ''; + print ''; + print ''; + } + $db->free($resql); +} else { + print $db->lasterror(); // Show last sql error +} +print "
' . $langs->trans("Account") . '' . $langs->trans("Label") . '' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . $langs->trans("Total") . '
'; + if ($row[0] == 'tobind') + { + print $langs->trans("Unknown"); + } + else print length_accountg($row[0]); + print ''; + if ($row[0] == 'tobind') + { + print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/customer/list.php?search_year='.$y, $langs->transnoentitiesnoconv("ToBind")); + } + else print $row[1]; + print '' . price($row[$i]) . '' . price($row[13]) . '' . price($row[14]) . '
\n"; +print '
'; + + +print '
'; + + +print_barre_liste($langs->trans("OverviewOfAmountOfLinesBound"), '', '', '', '', '', '', -1, '', '', 0, '', '', 0, 1, 1); +//print load_fiche_titre($langs->trans("OverviewOfAmountOfLinesBound"), '', ''); + +print '
'; +print ''; +print ''; +print ''; +for($i = 1; $i <= 12; $i ++) { + $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; + if ($j > 12) $j-=12; + print ''; +} +print ''; + +$sql = "SELECT " . $db->ifsql('aa.account_number IS NULL', "'tobind'", 'aa.account_number') . " AS codecomptable,"; +$sql .= " " . $db->ifsql('aa.label IS NULL', "'tobind'", 'aa.label') . " AS intitule,"; +for($i = 1; $i <= 12; $i ++) { + $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; + if ($j > 12) $j-=12; + $sql .= " SUM(" . $db->ifsql('MONTH(f.datef)=' . $j, 'fd.total_ht', '0') . ") AS month" . str_pad($j, 2, '0', STR_PAD_LEFT) . ","; +} +$sql .= " SUM(fd.total_ht) as total"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON aa.rowid = fd.fk_code_ventilation"; +$sql .= " WHERE f.datef >= '" . $db->idate($search_date_start) . "'"; +$sql .= " AND f.datef <= '" . $db->idate($search_date_end) . "'"; +$sql .= " AND f.entity IN (" . getEntity('invoice', 0) . ")"; // We don't share object for accountancy +$sql .= " AND f.fk_statut > 0"; +if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_SITUATION . ")"; +} else { + $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_DEPOSIT . "," . Facture::TYPE_SITUATION . ")"; +} +$sql .= " AND aa.account_number IS NOT NULL"; +$sql .= " GROUP BY fd.fk_code_ventilation,aa.account_number,aa.label"; + +dol_syslog('htdocs/accountancy/customer/index.php'); +$resql = $db->query($sql); +if ($resql) { + $num = $db->num_rows($resql); + + while ( $row = $db->fetch_row($resql)) { + + print ''; + + print ''; + + for($i = 2; $i <= 12; $i++) { + print ''; + } + print ''; + print ''; + print ''; + } + $db->free($resql); +} else { + print $db->lasterror(); // Show last sql error +} +print "
' . $langs->trans("Account") . '' . $langs->trans("Label") . '' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . $langs->trans("Total") . '
'; + if ($row[0] == 'tobind') + { + print $langs->trans("Unknown"); + } + else print length_accountg($row[0]); + print ''; + if ($row[0] == 'tobind') + { + print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/customer/list.php?search_year='.$y, $langs->transnoentitiesnoconv("ToBind")); + } + else print $row[1]; + print '' . price($row[$i]) . '' . price($row[13]) . '' . price($row[14]) . '
\n"; +print '
'; + + +if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange. Why showing a report that should rely on result of this step ? +{ + print '
'; + print '
'; + + print_barre_liste($langs->trans("OtherInfo"), '', '', '', '', '', '', -1, '', '', 0, '', '', 0, 1, 1); + //print load_fiche_titre($langs->trans("OtherInfo"), '', ''); + + print '
'; + print ''; + print ''; + for($i = 1; $i <= 12; $i ++) { + $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; + if ($j > 12) $j-=12; + print ''; + } + print ''; + + $sql = "SELECT '" . $langs->trans("TotalVente") . "' AS total,"; + for($i = 1; $i <= 12; $i ++) { + $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; + if ($j > 12) $j-=12; + $sql .= " SUM(" . $db->ifsql('MONTH(f.datef)=' . $j, 'fd.total_ht', '0') . ") AS month" . str_pad($j, 2, '0', STR_PAD_LEFT) . ","; + } + $sql .= " SUM(fd.total_ht) as total"; + $sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; + $sql .= " WHERE f.datef >= '" . $db->idate($search_date_start) . "'"; + $sql .= " AND f.datef <= '" . $db->idate($search_date_end) . "'"; + $sql .= " AND f.entity IN (" . getEntity('invoice', 0) . ")"; // We don't share object for accountancy + $sql .= " AND f.fk_statut > 0"; + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_SITUATION . ")"; + } else { + $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_DEPOSIT . "," . Facture::TYPE_SITUATION . ")"; + } + + dol_syslog('htdocs/accountancy/customer/index.php'); + $resql = $db->query($sql); + if ($resql) { + $num = $db->num_rows($resql); + + while ($row = $db->fetch_row($resql)) { + print ''; + for($i = 1; $i <= 12; $i ++) { + print ''; + } + print ''; + print ''; + } + $db->free($resql); + } else { + print $db->lasterror(); // Show last sql error + } + print "
' . $langs->trans("TotalVente") . '' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . $langs->trans("Total") . '
' . $row[0] . '' . price($row[$i]) . '' . price($row[13]) . '
\n"; + print '
'; + + + if (! empty($conf->margin->enabled)) { + print "
\n"; + print '
'; + print ''; + print ''; + for($i = 1; $i <= 12; $i ++) { + $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; + if ($j > 12) $j-=12; + print ''; + } + print ''; + + $sql = "SELECT '" . $langs->trans("Vide") . "' AS marge,"; + for($i = 1; $i <= 12; $i ++) { + $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; + if ($j > 12) $j-=12; + $sql .= " SUM(" . $db->ifsql('MONTH(f.datef)=' . $j, '(fd.total_ht-(fd.qty * fd.buy_price_ht))', '0') . ") AS month" . str_pad($j, 2, '0', STR_PAD_LEFT) . ","; + } + $sql .= " SUM((fd.total_ht-(fd.qty * fd.buy_price_ht))) as total"; + $sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; + $sql .= " WHERE f.datef >= '" . $db->idate($search_date_start) . "'"; + $sql .= " AND f.datef <= '" . $db->idate($search_date_end) . "'"; + $sql .= " AND f.entity IN (" . getEntity('invoice', 0) . ")"; // We don't share object for accountancy + $sql .= " AND f.fk_statut > 0"; + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_SITUATION . ")"; + } else { + $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_DEPOSIT . "," . Facture::TYPE_SITUATION . ")"; + } + + dol_syslog('htdocs/accountancy/customer/index.php'); + $resql = $db->query($sql); + if ($resql) { + $num = $db->num_rows($resql); + + while ($row = $db->fetch_row($resql)) { + + print ''; + for($i = 1; $i <= 12; $i ++) { + print ''; + } + print ''; + print ''; + } + $db->free($resql); + } else { + print $db->lasterror(); // Show last sql error + } + print "
' . $langs->trans("TotalMarge") . '' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . $langs->trans("Total") . '
' . $row[0] . '' . price(price2num($row[$i])) . '' . price(price2num($row[13])) . '
\n"; + print '
'; + } +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 7491556bebd..9382e3d4984 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1303,9 +1303,9 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM $newmenu->add("/compta/resultat/index.php?mainmenu=accountancy&leftmenu=accountancy_report", $langs->trans("Reportings"), 1, $user->rights->accounting->comptarapport->lire, '', $mainmenu, 'ca'); - if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_report/', $leftmenu)) { + if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_report/', $leftmenu)) { $newmenu->add("/compta/resultat/index.php?leftmenu=accountancy_report", $langs->trans("MenuReportInOut"), 2, $user->rights->accounting->comptarapport->lire); - $newmenu->add("/compta/resultat/clientfourn.php?leftmenu=accountancy_report", $langs->trans("ByPredefinedAccountGroups"), 3, $user->rights->accounting->comptarapport->lire); + $newmenu->add("/compta/resultat/clientfourn.php?leftmenu=accountancy_report", $langs->trans("ByPredefinedAccountGroups"), 3, $user->rights->accounting->comptarapport->lire); $newmenu->add("/compta/resultat/result.php?leftmenu=accountancy_report", $langs->trans("ByPersonalizedAccountGroups"), 3, $user->rights->accounting->comptarapport->lire); } @@ -1335,6 +1335,15 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM } } + // Closure + if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 2) { + $newmenu->add("/accountancy/closure/index.php?mainmenu=accountancy&leftmenu=accountancy_closure", $langs->trans("Closure"), 1, $user->rights->accounting->closure->read, '', $mainmenu, 'closure'); + + if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_closure/', $leftmenu)) { + $newmenu->add("/accountancy/closure/validation.php?leftmenu=accountancy_closure", $langs->trans("MenuAccountancyValidationMovements"), 2, $user->rights->accounting->closure->read); + } + } + // Accountancy (simple) if (! empty($conf->comptabilite->enabled)) { From d7abad4566ee63b1879fdad75664320e0160ef8e Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Mon, 29 Apr 2019 17:40:59 +0200 Subject: [PATCH 004/980] NEW : mass email action on invoice list use billing contact if exists --- htdocs/core/actions_massactions.inc.php | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 55dda5a5934..819683af55e 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -70,6 +70,7 @@ if (! $error && $massaction == 'confirm_presend') $listofobjectid=array(); $listofobjectthirdparties=array(); + $listofobjectcontacts = array(); $listofobjectref=array(); if (! $error) @@ -94,6 +95,16 @@ if (! $error && $massaction == 'confirm_presend') if ($objecttmp->element == 'holiday') $thirdpartyid=$objecttmp->fk_user; if (empty($thirdpartyid)) $thirdpartyid=0; + if ($objectclass == 'Facture') { + $tmparraycontact = array(); + $tmparraycontact = $objecttmp->liste_contact(-1, 'external', 0, 'BILLING'); + if (is_array($tmparraycontact) && count($tmparraycontact) > 0) { + foreach ($tmparraycontact as $data_email) { + $listofobjectcontacts[$toselectid][$data_email['id']] = $data_email['email']; + } + } + } + $listofobjectthirdparties[$thirdpartyid]=$thirdpartyid; $listofobjectref[$thirdpartyid][$toselectid]=$objecttmp; } @@ -216,7 +227,7 @@ if (! $error && $massaction == 'confirm_presend') $resaction.='
'.$langs->trans('ErrorOnlyProposalNotDraftCanBeSentInMassAction', $objectobj->ref).'

'; continue; // Payment done or started or canceled } - if ($objectclass == 'Commande' && $objectoj->statut == Commande::STATUS_DRAFT) + if ($objectclass == 'Commande' && $objectobj->statut == Commande::STATUS_DRAFT) { $langs->load("errors"); $nbignored++; @@ -245,6 +256,16 @@ if (! $error && $massaction == 'confirm_presend') $fuser = new User($db); $fuser->fetch($objectobj->fk_user); $sendto = $fuser->email; + } elseif ($objectobj->element == 'facture' && !empty($listofobjectcontacts[$objectid])) { + $emails_to_sends = array(); + $objectobj->fetch_thirdparty(); + foreach ($listofobjectcontacts[$objectid] as $contactemailid => $contactemailemail) { + + $emails_to_sends[] = $objectobj->thirdparty->contact_get_property((int)$contactemailid, 'email'); + } + if (count($emails_to_sends) > 0) { + $sendto = implode(',', $emails_to_sends); + } } else { From face07ece1577311119b2df0bf2243003a62f9ba Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Wed, 1 May 2019 15:15:20 +0200 Subject: [PATCH 005/980] new constant PRODUCT_STATS_WITH_PARENT_PROD_IF_INCDEC --- htdocs/product/class/product.class.php | 87 +++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 3796f5b022e..6afd42e3aae 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -2410,6 +2410,28 @@ class Product extends CommonObject $this->stats_propale['nb']=$obj->nb; $this->stats_propale['rows']=$obj->nb_rows; $this->stats_propale['qty']=$obj->qty?$obj->qty:0; + + // if it's a virtual product, maybe it is in proposal by extension + if (! empty($conf->global->PRODUCT_STATS_WITH_PARENT_PROD_IF_INCDEC)) { + $TFather = $this->getFather(); + if (is_array($TFather) && !empty($TFather)) { + foreach($TFather as &$fatherData) { + $pFather = new Product($this->db); + $pFather->id = $fatherData['id']; + $qtyCoef = $fatherData['qty']; + + if ($fatherData['incdec']) { + $pFather->load_stats_propale($socid); + + $this->stats_propale['customers']+=$pFather->stats_propale['customers']; + $this->stats_propale['nb']+=$pFather->stats_propale['nb']; + $this->stats_propale['rows']+=$pFather->stats_propale['rows']; + $this->stats_propale['qty']+=$pFather->stats_propale['qty'] * $qtyCoef; + } + } + } + } + return 1; } else @@ -2512,7 +2534,7 @@ class Product extends CommonObject $this->stats_commande['qty']=$obj->qty?$obj->qty:0; // if it's a virtual product, maybe it is in order by extension - if (! empty($conf->global->ORDER_ADD_ORDERS_WITH_PARENT_PROD_IF_INCDEC)) { + if (! empty($conf->global->PRODUCT_STATS_WITH_PARENT_PROD_IF_INCDEC)) { $TFather = $this->getFather(); if (is_array($TFather) && !empty($TFather)) { foreach($TFather as &$fatherData) { @@ -2665,6 +2687,27 @@ class Product extends CommonObject $this->stats_expedition['nb']=$obj->nb; $this->stats_expedition['rows']=$obj->nb_rows; $this->stats_expedition['qty']=$obj->qty?$obj->qty:0; + + // if it's a virtual product, maybe it is in sending by extension + if (! empty($conf->global->PRODUCT_STATS_WITH_PARENT_PROD_IF_INCDEC)) { + $TFather = $this->getFather(); + if (is_array($TFather) && !empty($TFather)) { + foreach($TFather as &$fatherData) { + $pFather = new Product($this->db); + $pFather->id = $fatherData['id']; + $qtyCoef = $fatherData['qty']; + + if ($fatherData['incdec']) { + $pFather->load_stats_sending($socid, $filtrestatut, $forVirtualStock); + + $this->stats_expedition['customers']+=$pFather->stats_expedition['customers']; + $this->stats_expedition['nb']+=$pFather->stats_expedition['nb']; + $this->stats_expedition['rows']+=$pFather->stats_expedition['rows']; + $this->stats_expedition['qty']+=$pFather->stats_expedition['qty'] * $qtyCoef; + } + } + } + } return 1; } else @@ -2762,6 +2805,27 @@ class Product extends CommonObject $this->stats_contrat['nb']=$obj->nb; $this->stats_contrat['rows']=$obj->nb_rows; $this->stats_contrat['qty']=$obj->qty?$obj->qty:0; + + // if it's a virtual product, maybe it is in contract by extension + if (! empty($conf->global->PRODUCT_STATS_WITH_PARENT_PROD_IF_INCDEC)) { + $TFather = $this->getFather(); + if (is_array($TFather) && !empty($TFather)) { + foreach($TFather as &$fatherData) { + $pFather = new Product($this->db); + $pFather->id = $fatherData['id']; + $qtyCoef = $fatherData['qty']; + + if ($fatherData['incdec']) { + $pFather->load_stats_contrat($socid); + + $this->stats_contrat['customers']+=$pFather->stats_contrat['customers']; + $this->stats_contrat['nb']+=$pFather->stats_contrat['nb']; + $this->stats_contrat['rows']+=$pFather->stats_contrat['rows']; + $this->stats_contrat['qty']+=$pFather->stats_contrat['qty'] * $qtyCoef; + } + } + } + } return 1; } else @@ -2811,6 +2875,27 @@ class Product extends CommonObject $this->stats_facture['nb']=$obj->nb; $this->stats_facture['rows']=$obj->nb_rows; $this->stats_facture['qty']=$obj->qty?$obj->qty:0; + + // if it's a virtual product, maybe it is in invoice by extension + if (! empty($conf->global->PRODUCT_STATS_WITH_PARENT_PROD_IF_INCDEC)) { + $TFather = $this->getFather(); + if (is_array($TFather) && !empty($TFather)) { + foreach($TFather as &$fatherData) { + $pFather = new Product($this->db); + $pFather->id = $fatherData['id']; + $qtyCoef = $fatherData['qty']; + + if ($fatherData['incdec']) { + $pFather->load_stats_facture($socid); + + $this->stats_facture['customers']+=$pFather->stats_facture['customers']; + $this->stats_facture['nb']+=$pFather->stats_facture['nb']; + $this->stats_facture['rows']+=$pFather->stats_facture['rows']; + $this->stats_facture['qty']+=$pFather->stats_facture['qty'] * $qtyCoef; + } + } + } + } return 1; } else From 8dc494890a8514ba5f988cf62bc9434ed07dcbbe Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Fri, 3 May 2019 16:24:25 +0200 Subject: [PATCH 006/980] =?UTF-8?q?=09modifi=C3=A9=C2=A0:=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20../core/actions=5Fmassactions.inc.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/core/actions_massactions.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index ef76611359a..2a0795a60ed 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -261,7 +261,7 @@ if (! $error && $massaction == 'confirm_presend') $objectobj->fetch_thirdparty(); foreach ($listofobjectcontacts[$objectid] as $contactemailid => $contactemailemail) { - $emails_to_sends[] = $objectobj->thirdparty->contact_get_property((int)$contactemailid, 'email'); + $emails_to_sends[] = $objectobj->thirdparty->contact_get_property((int) $contactemailid, 'email'); } if (count($emails_to_sends) > 0) { $sendto = implode(',', $emails_to_sends); From 7af203e519b0fe7cd4b5963dcf914cd303326b8d Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Fri, 3 May 2019 16:28:44 +0200 Subject: [PATCH 007/980] =?UTF-8?q?=09modifi=C3=A9=C2=A0:=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20../core/actions=5Fmassactions.inc.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/core/actions_massactions.inc.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 2a0795a60ed..26e168c3dc6 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -72,6 +72,7 @@ if (! $error && $massaction == 'confirm_presend') $listofobjectthirdparties=array(); $listofobjectcontacts = array(); $listofobjectref=array(); + $contactidtosend=array(); if (! $error) { @@ -259,9 +260,13 @@ if (! $error && $massaction == 'confirm_presend') } elseif ($objectobj->element == 'facture' && !empty($listofobjectcontacts[$objectid])) { $emails_to_sends = array(); $objectobj->fetch_thirdparty(); + $contactidtosend=array(); foreach ($listofobjectcontacts[$objectid] as $contactemailid => $contactemailemail) { - $emails_to_sends[] = $objectobj->thirdparty->contact_get_property((int) $contactemailid, 'email'); + $emails_to_sends[] = $objectobj->thirdparty->contact_get_property($contactemailid, 'email'); + if (!in_array($contactemailid, $contactidtosend)) { + $contactidtosend[] = $contactemailid; + } } if (count($emails_to_sends) > 0) { $sendto = implode(',', $emails_to_sends); @@ -480,7 +485,7 @@ if (! $error && $massaction == 'confirm_presend') $actionmsg2=''; // Initialisation donnees - $objectobj2->sendtoid = 0; + $objectobj2->sendtoid = (empty($contactidtosend)?0:$contactidtosend); $objectobj2->actionmsg = $actionmsg; // Long text $objectobj2->actionmsg2 = $actionmsg2; // Short text $objectobj2->fk_element = $objid2; From 4e16992796061f3c4a0f051dfd721934a93b6f00 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 5 May 2019 14:07:42 +0200 Subject: [PATCH 008/980] WIP --- htdocs/accountancy/closure/index.php | 2 +- htdocs/core/menus/standard/eldy.lib.php | 4 ++-- htdocs/core/modules/modAccounting.class.php | 8 ++++++++ htdocs/langs/en_US/accountancy.lang | 2 ++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/htdocs/accountancy/closure/index.php b/htdocs/accountancy/closure/index.php index 9786734ab82..8d2b93ccb6f 100644 --- a/htdocs/accountancy/closure/index.php +++ b/htdocs/accountancy/closure/index.php @@ -36,7 +36,7 @@ if (empty($conf->accounting->enabled)) { } if ($user->societe_id > 0) accessforbidden(); -if (! $user->rights->accounting->closure->read) +if (! $user->rights->accounting->fiscalyear->closure) accessforbidden(); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 6e935d4bc49..0ccd2b671a1 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1304,10 +1304,10 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM // Closure if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 2) { - $newmenu->add("/accountancy/closure/index.php?mainmenu=accountancy&leftmenu=accountancy_closure", $langs->trans("Closure"), 1, $user->rights->accounting->closure->read, '', $mainmenu, 'closure'); + $newmenu->add("/accountancy/closure/index.php?mainmenu=accountancy&leftmenu=accountancy_closure", $langs->trans("MenuAccountancyClosure"), 1, $user->rights->accounting->fiscalyear->closure, '', $mainmenu, 'closure'); if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_closure/', $leftmenu)) { - $newmenu->add("/accountancy/closure/validation.php?leftmenu=accountancy_closure", $langs->trans("MenuAccountancyValidationMovements"), 2, $user->rights->accounting->closure->read); + $newmenu->add("/accountancy/closure/validation.php?leftmenu=accountancy_closure", $langs->trans("MenuAccountancyValidationMovements"), 2, $user->rights->accounting->fiscalyear->closure); } } diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php index 8250549b9e1..54187b16d6c 100644 --- a/htdocs/core/modules/modAccounting.class.php +++ b/htdocs/core/modules/modAccounting.class.php @@ -228,6 +228,14 @@ class modAccounting extends DolibarrModules $this->rights[$r][5] = ''; $r++; + $this->rights[$r][0] = 50431; + $this->rights[$r][1] = 'Validate movements of a fiscal year'; + $this->rights[$r][2] = 'w'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'fiscalyear'; + $this->rights[$r][5] = 'closure'; + $r++; + // Menus //------- diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index a2195784bef..ffc097f23a0 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -97,6 +97,8 @@ MenuExpenseReportAccounts=Expense report accounts MenuLoanAccounts=Loan accounts MenuProductsAccounts=Product accounts MenuClosureAccounts=Closure accounts +MenuAccountancyClosure=Closure +MenuAccountancyValidationMovements=Validate movements ProductsBinding=Products accounts TransferInAccounting=Transfer in accounting RegistrationInAccounting=Registration in accounting From b30929af6d7d63344d9a003d11ce4b3f1247eef7 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 6 May 2019 11:05:00 +0200 Subject: [PATCH 009/980] WIP --- htdocs/accountancy/closure/index.php | 217 +-------------------------- 1 file changed, 2 insertions(+), 215 deletions(-) diff --git a/htdocs/accountancy/closure/index.php b/htdocs/accountancy/closure/index.php index 8d2b93ccb6f..25fdf013f9a 100644 --- a/htdocs/accountancy/closure/index.php +++ b/htdocs/accountancy/closure/index.php @@ -17,7 +17,7 @@ */ /** - * \file htdocs/accountancy/customer/index.php + * \file htdocs/accountancy/closure/index.php * \ingroup Accountancy * \brief Home closure page */ @@ -140,7 +140,6 @@ $textnextyear = ' trans("DescVentilCustomer") . '
'; -print $langs->trans("DescVentilMore", $langs->transnoentitiesnoconv("ValidateHistory"), $langs->transnoentitiesnoconv("ToBind")) . '
'; print '
'; @@ -149,12 +148,9 @@ $y = $year_current; $buttonbind = '
' . $langs->trans("ValidateHistory") . ''; print_barre_liste($langs->trans("OverviewOfAmountOfLinesNotBound"), '', '', '', '', '', '', -1, '', '', 0, $buttonbind, '', 0, 1, 1); -//print load_fiche_titre($langs->trans("OverviewOfAmountOfLinesNotBound"), $buttonbind, ''); print '
'; print ''; -print ''; -print ''; for($i = 1; $i <= 12; $i ++) { $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; if ($j > 12) $j-=12; @@ -178,11 +174,6 @@ $sql .= " AND f.datef <= '" . $db->idate($search_date_end) . "'"; $sql .= " AND f.fk_statut > 0"; $sql .= " AND f.entity IN (" . getEntity('invoice', 0) . ")"; // We don't share object for accountancy $sql .= " AND aa.account_number IS NULL"; -if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_SITUATION . ")"; -} else { - $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_DEPOSIT . "," . Facture::TYPE_SITUATION . ")"; -} $sql .= " GROUP BY fd.fk_code_ventilation,aa.account_number,aa.label"; dol_syslog('htdocs/accountancy/customer/index.php sql=' . $sql, LOG_DEBUG); @@ -192,20 +183,7 @@ if ($resql) { while ( $row = $db->fetch_row($resql)) { - print ''; - print ''; + print ''; for($i = 2; $i <= 12; $i ++) { print ''; } @@ -220,197 +198,6 @@ if ($resql) { print "
' . $langs->trans("Account") . '' . $langs->trans("Label") . '
'; - if ($row[0] == 'tobind') - { - print $langs->trans("Unknown"); - } - else print length_accountg($row[0]); - print ''; - if ($row[0] == 'tobind') - { - print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/customer/list.php?search_year='.$y, $langs->transnoentitiesnoconv("ToBind")); - } - else print $row[1]; - print '
' . price($row[$i]) . '
\n"; print '
'; - -print '
'; - - -print_barre_liste($langs->trans("OverviewOfAmountOfLinesBound"), '', '', '', '', '', '', -1, '', '', 0, '', '', 0, 1, 1); -//print load_fiche_titre($langs->trans("OverviewOfAmountOfLinesBound"), '', ''); - -print '
'; -print ''; -print ''; -print ''; -for($i = 1; $i <= 12; $i ++) { - $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; - if ($j > 12) $j-=12; - print ''; -} -print ''; - -$sql = "SELECT " . $db->ifsql('aa.account_number IS NULL', "'tobind'", 'aa.account_number') . " AS codecomptable,"; -$sql .= " " . $db->ifsql('aa.label IS NULL', "'tobind'", 'aa.label') . " AS intitule,"; -for($i = 1; $i <= 12; $i ++) { - $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; - if ($j > 12) $j-=12; - $sql .= " SUM(" . $db->ifsql('MONTH(f.datef)=' . $j, 'fd.total_ht', '0') . ") AS month" . str_pad($j, 2, '0', STR_PAD_LEFT) . ","; -} -$sql .= " SUM(fd.total_ht) as total"; -$sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; -$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; -$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON aa.rowid = fd.fk_code_ventilation"; -$sql .= " WHERE f.datef >= '" . $db->idate($search_date_start) . "'"; -$sql .= " AND f.datef <= '" . $db->idate($search_date_end) . "'"; -$sql .= " AND f.entity IN (" . getEntity('invoice', 0) . ")"; // We don't share object for accountancy -$sql .= " AND f.fk_statut > 0"; -if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_SITUATION . ")"; -} else { - $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_DEPOSIT . "," . Facture::TYPE_SITUATION . ")"; -} -$sql .= " AND aa.account_number IS NOT NULL"; -$sql .= " GROUP BY fd.fk_code_ventilation,aa.account_number,aa.label"; - -dol_syslog('htdocs/accountancy/customer/index.php'); -$resql = $db->query($sql); -if ($resql) { - $num = $db->num_rows($resql); - - while ( $row = $db->fetch_row($resql)) { - - print ''; - - print ''; - - for($i = 2; $i <= 12; $i++) { - print ''; - } - print ''; - print ''; - print ''; - } - $db->free($resql); -} else { - print $db->lasterror(); // Show last sql error -} -print "
' . $langs->trans("Account") . '' . $langs->trans("Label") . '' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . $langs->trans("Total") . '
'; - if ($row[0] == 'tobind') - { - print $langs->trans("Unknown"); - } - else print length_accountg($row[0]); - print ''; - if ($row[0] == 'tobind') - { - print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/customer/list.php?search_year='.$y, $langs->transnoentitiesnoconv("ToBind")); - } - else print $row[1]; - print '' . price($row[$i]) . '' . price($row[13]) . '' . price($row[14]) . '
\n"; -print '
'; - - -if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange. Why showing a report that should rely on result of this step ? -{ - print '
'; - print '
'; - - print_barre_liste($langs->trans("OtherInfo"), '', '', '', '', '', '', -1, '', '', 0, '', '', 0, 1, 1); - //print load_fiche_titre($langs->trans("OtherInfo"), '', ''); - - print '
'; - print ''; - print ''; - for($i = 1; $i <= 12; $i ++) { - $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; - if ($j > 12) $j-=12; - print ''; - } - print ''; - - $sql = "SELECT '" . $langs->trans("TotalVente") . "' AS total,"; - for($i = 1; $i <= 12; $i ++) { - $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; - if ($j > 12) $j-=12; - $sql .= " SUM(" . $db->ifsql('MONTH(f.datef)=' . $j, 'fd.total_ht', '0') . ") AS month" . str_pad($j, 2, '0', STR_PAD_LEFT) . ","; - } - $sql .= " SUM(fd.total_ht) as total"; - $sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; - $sql .= " WHERE f.datef >= '" . $db->idate($search_date_start) . "'"; - $sql .= " AND f.datef <= '" . $db->idate($search_date_end) . "'"; - $sql .= " AND f.entity IN (" . getEntity('invoice', 0) . ")"; // We don't share object for accountancy - $sql .= " AND f.fk_statut > 0"; - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_SITUATION . ")"; - } else { - $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_DEPOSIT . "," . Facture::TYPE_SITUATION . ")"; - } - - dol_syslog('htdocs/accountancy/customer/index.php'); - $resql = $db->query($sql); - if ($resql) { - $num = $db->num_rows($resql); - - while ($row = $db->fetch_row($resql)) { - print ''; - for($i = 1; $i <= 12; $i ++) { - print ''; - } - print ''; - print ''; - } - $db->free($resql); - } else { - print $db->lasterror(); // Show last sql error - } - print "
' . $langs->trans("TotalVente") . '' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . $langs->trans("Total") . '
' . $row[0] . '' . price($row[$i]) . '' . price($row[13]) . '
\n"; - print '
'; - - - if (! empty($conf->margin->enabled)) { - print "
\n"; - print '
'; - print ''; - print ''; - for($i = 1; $i <= 12; $i ++) { - $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; - if ($j > 12) $j-=12; - print ''; - } - print ''; - - $sql = "SELECT '" . $langs->trans("Vide") . "' AS marge,"; - for($i = 1; $i <= 12; $i ++) { - $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; - if ($j > 12) $j-=12; - $sql .= " SUM(" . $db->ifsql('MONTH(f.datef)=' . $j, '(fd.total_ht-(fd.qty * fd.buy_price_ht))', '0') . ") AS month" . str_pad($j, 2, '0', STR_PAD_LEFT) . ","; - } - $sql .= " SUM((fd.total_ht-(fd.qty * fd.buy_price_ht))) as total"; - $sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; - $sql .= " WHERE f.datef >= '" . $db->idate($search_date_start) . "'"; - $sql .= " AND f.datef <= '" . $db->idate($search_date_end) . "'"; - $sql .= " AND f.entity IN (" . getEntity('invoice', 0) . ")"; // We don't share object for accountancy - $sql .= " AND f.fk_statut > 0"; - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_SITUATION . ")"; - } else { - $sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_REPLACEMENT . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_DEPOSIT . "," . Facture::TYPE_SITUATION . ")"; - } - - dol_syslog('htdocs/accountancy/customer/index.php'); - $resql = $db->query($sql); - if ($resql) { - $num = $db->num_rows($resql); - - while ($row = $db->fetch_row($resql)) { - - print ''; - for($i = 1; $i <= 12; $i ++) { - print ''; - } - print ''; - print ''; - } - $db->free($resql); - } else { - print $db->lasterror(); // Show last sql error - } - print "
' . $langs->trans("TotalMarge") . '' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . $langs->trans("Total") . '
' . $row[0] . '' . price(price2num($row[$i])) . '' . price(price2num($row[13])) . '
\n"; - print '
'; - } -} - // End of page llxFooter(); $db->close(); From 876e1147d134386d87aff4ad74e096f29aa0558e Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sat, 18 May 2019 09:41:29 +0200 Subject: [PATCH 010/980] WIP Correct right on fiscal year --- htdocs/core/menus/standard/eldy.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 0ccd2b671a1..d0962f454be 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1317,8 +1317,8 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM $newmenu->add("/accountancy/admin/index.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("General"), 1, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_general', 10); // Fiscal year - Not really yet used. In a future will lock some periods. - if ($conf->global->MAIN_FEATURES_LEVEL > 1) { - $newmenu->add("/accountancy/admin/fiscalyear.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("FiscalPeriod"), 1, $user->rights->accounting->fiscalyear, '', $mainmenu, 'fiscalyear', 20); + if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 2) { + $newmenu->add("/accountancy/admin/fiscalyear.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("FiscalPeriod"), 1, $user->rights->accounting->chartofaccount, '', $mainmenu, 'fiscalyear', 20); } $newmenu->add("/accountancy/admin/journals_list.php?id=35&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("AccountingJournals"), 1, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_journal', 30); From d993d80a130f72efdcb4d067645951b9966a3bb9 Mon Sep 17 00:00:00 2001 From: ATM John BOTELLA Date: Sat, 18 May 2019 16:27:57 +0200 Subject: [PATCH 011/980] FIX url --- 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 da077045cdc..e386a4ad2cf 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1227,7 +1227,7 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr print ''."\n"; // Favicon - $favicon=dol_buildpath('/theme/'.$conf->theme.'/img/favicon.ico', 1); + $favicon = DOL_MAIN_URL_ROOT . '/theme/'.$conf->theme.'/img/favicon.ico'; if (! empty($conf->global->MAIN_FAVICON_URL)) $favicon=$conf->global->MAIN_FAVICON_URL; if (empty($conf->dol_use_jmobile)) print ''."\n"; // Not required into an Android webview //if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) print ''."\n"; @@ -1235,7 +1235,7 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr //if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) print ''."\n"; // Mobile appli like icon - $manifest=dol_buildpath('/theme/'.$conf->theme.'/manifest.json.php', 1, 1); + $manifest = DOL_MAIN_URL_ROOT . '/theme/'.$conf->theme.'/manifest.json.php'; if(!empty($manifest)){ print ''."\n"; } From b6615eab36be93a520550536803cd3feaa1a335e Mon Sep 17 00:00:00 2001 From: ATM John BOTELLA Date: Sat, 18 May 2019 23:47:22 +0200 Subject: [PATCH 012/980] FIX travis --- htdocs/public/payment/newpayment.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 51b4c0580e0..49ca337f800 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1947,7 +1947,7 @@ if (preg_match('/^dopayment/', $action)) { print info_admin($langs->trans("ErrorModuleSetupNotComplete", "stripe"), 0, 0, 'error'); } - else + else { print ''."\n"; From 65070afce447d2ad7d728d1f6063b2759347bc91 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 22 May 2019 17:22:49 +0200 Subject: [PATCH 013/980] WIP --- htdocs/accountancy/closure/index.php | 103 +++----------------- htdocs/core/menus/standard/eldy.lib.php | 4 +- htdocs/core/modules/modAccounting.class.php | 2 +- htdocs/langs/en_US/accountancy.lang | 4 + 4 files changed, 23 insertions(+), 90 deletions(-) diff --git a/htdocs/accountancy/closure/index.php b/htdocs/accountancy/closure/index.php index 25fdf013f9a..f060be19440 100644 --- a/htdocs/accountancy/closure/index.php +++ b/htdocs/accountancy/closure/index.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2019 Open-DSI * * 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 @@ -58,96 +58,32 @@ $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; -// Validate History -$action = GETPOST('action', 'aZ09'); - - /* * Actions */ -if ($action == 'clean' || $action == 'validatehistory') -{ - // Clean database - $db->begin(); - $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facturedet as fd"; - $sql1 .= " SET fk_code_ventilation = 0"; - $sql1 .= ' WHERE fd.fk_code_ventilation NOT IN'; - $sql1 .= ' (SELECT accnt.rowid '; - $sql1 .= ' FROM ' . MAIN_DB_PREFIX . 'accounting_account as accnt'; - $sql1 .= ' INNER JOIN ' . MAIN_DB_PREFIX . 'accounting_system as syst'; - $sql1 .= ' ON accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=' . $conf->global->CHARTOFACCOUNTS . ' AND accnt.entity = '.$conf->entity.')'; - $sql1 .= ' AND fd.fk_facture IN (SELECT rowid FROM ' . MAIN_DB_PREFIX . 'facture WHERE entity = '.$conf->entity.')'; - $sql1 .= ' AND fk_code_ventilation <> 0'; - - dol_syslog("htdocs/accountancy/customer/index.php fixaccountancycode", LOG_DEBUG); - $resql1 = $db->query($sql1); - if (! $resql1) { - $error ++; - $db->rollback(); - setEventMessages($db->lasterror(), null, 'errors'); - } else { - $db->commit(); - } - // End clean database -} - -if ($action == 'validatehistory') { - - $error = 0; - $db->begin(); - - // Now make the binding. Bind automatically only for product with a dedicated account that exists into chart of account, others need a manual bind - if ($db->type == 'pgsql') { - $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facturedet"; - $sql1 .= " SET fk_code_ventilation = accnt.rowid"; - $sql1 .= " FROM " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accounting_account as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; - $sql1 .= " WHERE " . MAIN_DB_PREFIX . "facturedet.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS.' AND accnt.entity = '.$conf->entity; - $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_sell=accnt.account_number"; - $sql1 .= " AND " . MAIN_DB_PREFIX . "facturedet.fk_code_ventilation = 0"; - } else { - $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facturedet as fd, " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accounting_account as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; - $sql1 .= " SET fk_code_ventilation = accnt.rowid"; - $sql1 .= " WHERE fd.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS.' AND accnt.entity = '.$conf->entity; - $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_sell=accnt.account_number"; - $sql1 .= " AND fd.fk_code_ventilation = 0"; - } - - dol_syslog('htdocs/accountancy/customer/index.php'); - - $resql1 = $db->query($sql1); - if (! $resql1) { - $error ++; - $db->rollback(); - setEventMessages($db->lasterror(), null, 'errors'); - } else { - $db->commit(); - setEventMessages($langs->trans('AutomaticBindingDone'), null, 'mesgs'); - } -} - /* * View */ -llxHeader('', $langs->trans("CustomersVentilation")); +llxHeader('', $langs->trans("Closure")); $textprevyear = '' . img_previous() . ''; $textnextyear = ' ' . img_next() . ''; -print load_fiche_titre($langs->trans("CustomersVentilation") . " " . $textprevyear . " " . $langs->trans("Year") . " " . $year_start . " " . $textnextyear, '', 'title_accountancy'); +print load_fiche_titre($langs->trans("Closure") . " " . $textprevyear . " " . $langs->trans("Year") . " " . $year_start . " " . $textnextyear, '', 'title_accountancy'); -print $langs->trans("DescVentilCustomer") . '
'; +print $langs->trans("DescClosure") . '
'; print '
'; $y = $year_current; -$buttonbind = '' . $langs->trans("ValidateHistory") . ''; +$buttonbind = '' . $langs->trans("ValidateMovements") . ''; -print_barre_liste($langs->trans("OverviewOfAmountOfLinesNotBound"), '', '', '', '', '', '', -1, '', '', 0, $buttonbind, '', 0, 1, 1); +print_barre_liste($langs->trans("OverviewOfMovementsNotValidated"), '', '', '', '', '', '', -1, '', '', 0, $buttonbind, '', 0, 1, 1); print '
'; print ''; @@ -158,25 +94,19 @@ for($i = 1; $i <= 12; $i ++) { } print ''; -$sql = "SELECT " . $db->ifsql('aa.account_number IS NULL', "'tobind'", 'aa.account_number') . " AS codecomptable,"; -$sql .= " " . $db->ifsql('aa.label IS NULL', "'tobind'", 'aa.label') . " AS intitule,"; +$sql = "SELECT COUNT(b.rowid) as detail,"; for($i = 1; $i <= 12; $i ++) { $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; if ($j > 12) $j-=12; - $sql .= " SUM(" . $db->ifsql('MONTH(f.datef)=' . $j, 'fd.total_ht', '0') . ") AS month" . str_pad($j, 2, '0', STR_PAD_LEFT) . ","; + $sql .= " SUM(" . $db->ifsql('MONTH(b.doc_date)=' . $j, '1', '0') . ") AS month" . str_pad($j, 2, '0', STR_PAD_LEFT) . ","; } -$sql .= " SUM(fd.total_ht) as total"; -$sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; -$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; -$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON aa.rowid = fd.fk_code_ventilation"; -$sql .= " WHERE f.datef >= '" . $db->idate($search_date_start) . "'"; -$sql .= " AND f.datef <= '" . $db->idate($search_date_end) . "'"; -$sql .= " AND f.fk_statut > 0"; -$sql .= " AND f.entity IN (" . getEntity('invoice', 0) . ")"; // We don't share object for accountancy -$sql .= " AND aa.account_number IS NULL"; -$sql .= " GROUP BY fd.fk_code_ventilation,aa.account_number,aa.label"; +$sql .= " COUNT(b.rowid) as total"; +$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as b"; +$sql .= " WHERE b.doc_date >= '" . $db->idate($search_date_start) . "'"; +$sql .= " AND b.doc_date <= '" . $db->idate($search_date_end) . "'"; +$sql .= " AND b.entity IN (" . getEntity('bookkeeping', 0) . ")"; // We don't share object for accountancy -dol_syslog('htdocs/accountancy/customer/index.php sql=' . $sql, LOG_DEBUG); +dol_syslog('htdocs/accountancy/closure/index.php sql=' . $sql, LOG_DEBUG); $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); @@ -184,11 +114,10 @@ if ($resql) { while ( $row = $db->fetch_row($resql)) { print ''; - for($i = 2; $i <= 12; $i ++) { + for($i = 1; $i <= 12; $i ++) { print ''; } - print ''; - print ''; + print ''; print ''; } $db->free($resql); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 47ff76d6b56..a432069c9fa 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1298,7 +1298,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM $newmenu->add("/accountancy/closure/index.php?mainmenu=accountancy&leftmenu=accountancy_closure", $langs->trans("MenuAccountancyClosure"), 1, $user->rights->accounting->fiscalyear->closure, '', $mainmenu, 'closure'); if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_closure/', $leftmenu)) { - $newmenu->add("/accountancy/closure/validation.php?leftmenu=accountancy_closure", $langs->trans("MenuAccountancyValidationMovements"), 2, $user->rights->accounting->fiscalyear->closure); + $newmenu->add("/accountancy/closure/validate.php?leftmenu=accountancy_closure", $langs->trans("MenuAccountancyValidationMovements"), 2, $user->rights->accounting->fiscalyear->closure); } } @@ -1309,7 +1309,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM // Fiscal year - Not really yet used. In a future will lock some periods. if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 2) { - $newmenu->add("/accountancy/admin/fiscalyear.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("FiscalPeriod"), 1, $user->rights->accounting->chartofaccount, '', $mainmenu, 'fiscalyear', 20); + $newmenu->add("/accountancy/admin/fiscalyear.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("FiscalPeriod"), 1, $user->rights->accounting->fiscalyear->write, '', $mainmenu, 'fiscalyear', 20); } $newmenu->add("/accountancy/admin/journals_list.php?id=35&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("AccountingJournals"), 1, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_journal', 30); diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php index 956f7ea24fc..d1a9de7bef4 100644 --- a/htdocs/core/modules/modAccounting.class.php +++ b/htdocs/core/modules/modAccounting.class.php @@ -225,7 +225,7 @@ class modAccounting extends DolibarrModules $this->rights[$r][2] = 'r'; $this->rights[$r][3] = 0; $this->rights[$r][4] = 'fiscalyear'; - $this->rights[$r][5] = ''; + $this->rights[$r][5] = 'write'; $r++; $this->rights[$r][0] = 50431; diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 17bbfc41f66..01c5752f4b5 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -242,6 +242,10 @@ DescVentilExpenseReport=Consult here the list of expense report lines bound (or DescVentilExpenseReportMore=If you setup accounting account on type of expense report lines, the application will be able to make all the binding between your expense report lines and the accounting account of your chart of accounts, just in one click with the button "%s". If account was not set on fees dictionary or if you still have some lines not bound to any account, you will have to make a manual binding from the menu "%s". DescVentilDoneExpenseReport=Consult here the list of the lines of expenses reports and their fees accounting account +DescClosure=Consult here the number of movements by month who are not validated & fiscal years already open +OverviewOfMovementsNotValidated=Step 1/ Overview of movements not validated. (Necessary to close a fiscal year) +ValidateMovements=Validate movements + ValidateHistory=Bind Automatically AutomaticBindingDone=Automatic binding done From d4384f507d48c6f92d276de930d0110d86a419e1 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Thu, 23 May 2019 09:25:09 +0200 Subject: [PATCH 014/980] WIP --- htdocs/accountancy/closure/index.php | 4 +- htdocs/accountancy/closure/validate.php | 158 ++++++++++++++++++++++++ htdocs/langs/en_US/accountancy.lang | 2 + 3 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 htdocs/accountancy/closure/validate.php diff --git a/htdocs/accountancy/closure/index.php b/htdocs/accountancy/closure/index.php index f060be19440..1c9fa255fed 100644 --- a/htdocs/accountancy/closure/index.php +++ b/htdocs/accountancy/closure/index.php @@ -115,9 +115,9 @@ if ($resql) { print ''; for($i = 1; $i <= 12; $i ++) { - print ''; + print ''; } - print ''; + print ''; print ''; } $db->free($resql); diff --git a/htdocs/accountancy/closure/validate.php b/htdocs/accountancy/closure/validate.php new file mode 100644 index 00000000000..7271ef4d98e --- /dev/null +++ b/htdocs/accountancy/closure/validate.php @@ -0,0 +1,158 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * \file htdocs/accountancy/closure/validate.php + * \ingroup Accountancy + * \brief Validate entries page + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/accountancy/class/bookkeeping.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->societe_id > 0) + accessforbidden(); +if (! $user->rights->accounting->fiscalyear->closure) + 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'); +else +{ + $year_start = dol_print_date(dol_now(), '%Y'); + if (dol_print_date(dol_now(), '%m') < $month_start) $year_start--; // If current month is lower that starting fiscal month, we start last year +} +$year_end = $year_start + 1; +$month_end = $month_start - 1; +if ($month_end < 1) +{ + $month_end = 12; + $year_end--; +} +$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; + +/* + * Actions + */ + +if ($action == 'validate') +{ + $now = dol_now(); + + // Update database + $db->begin(); + $sql = "UPDATE " . MAIN_DB_PREFIX . "accounting_bookkeeping as b"; + $sql .= " SET b.date_validated = '" . $db->idate($now) . "'"; + $sql .= ' WHERE b.date_validated IS NULL'; + + dol_syslog("htdocs/accountancy/closure/validate.php validate", LOG_DEBUG); + $resql = $db->query($sql); + if (! $resql1) { + $error ++; + $db->rollback(); + setEventMessages($db->lasterror(), null, 'errors'); + } else { + $db->commit(); + } + // End clean database +} + + +/* + * View + */ + +llxHeader('', $langs->trans("ValidateMovements")); + +$textprevyear = '' . img_previous() . ''; +$textnextyear = ' ' . img_next() . ''; + + +print load_fiche_titre($langs->trans("ValidateMovements") . " " . $textprevyear . " " . $langs->trans("Year") . " " . $year_start . " " . $textnextyear, '', 'title_accountancy'); + +print $langs->trans("DescValidateMovements") . '
'; +print '
'; + + +$y = $year_current; + +print_barre_liste($langs->trans("SelectMonthAndValidate"), '', '', '', '', '', '', -1, '', '', 0, '', 'class="right"', 0, 1, 1); + +print '
'; +print '
' . $langs->trans("Total") . '
' . price($row[$i]) . '' . price($row[13]) . '' . price($row[14]) . '' . price($row[13]) . '
' . price($row[$i]) . '' . $row[$i] . '' . price($row[13]) . '' . $row[13] . '
'; +print ''; +for($i = 1; $i <= 12; $i ++) { + $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; + if ($j > 12) $j-=12; + print ''; +} +print ''; + +print ''; +$sql = "SELECT COUNT(b.rowid) as detail,"; +for($i = 1; $i <= 12; $i ++) { + $j = $i + ($conf->global->SOCIETE_FISCAL_MONTH_START?$conf->global->SOCIETE_FISCAL_MONTH_START:1) - 1; + if ($j > 12) $j-=12; + $sql .= " SUM(" . $db->ifsql('MONTH(b.doc_date)=' . $j, '1', '0') . ") AS month" . str_pad($j, 2, '0', STR_PAD_LEFT) . ","; +} +$sql .= " COUNT(b.rowid) as total"; +$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as b"; +$sql .= " WHERE b.doc_date >= '" . $db->idate($search_date_start) . "'"; +$sql .= " AND b.doc_date <= '" . $db->idate($search_date_end) . "'"; +$sql .= " AND b.entity IN (" . getEntity('bookkeeping', 0) . ")"; // We don't share object for accountancy + +dol_syslog('htdocs/accountancy/closure/index.php sql=' . $sql, LOG_DEBUG); +$resql = $db->query($sql); +if ($resql) { + $num = $db->num_rows($resql); + + while ( $row = $db->fetch_row($resql)) { + + for($i = 1; $i <= 12; $i ++) { + print '' ; + } + print ''; + } + print + $db->free($resql); +} else { + print $db->lasterror(); // Show last sql error +} +print ''; +print "
' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . $langs->trans("Total") . '
' . $row[$i] . '

'; + print ''; + print '
' . $row[13] . '
\n"; + +print '
'; +print '
'; + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 01c5752f4b5..2819ff372ec 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -245,6 +245,8 @@ DescVentilDoneExpenseReport=Consult here the list of the lines of expenses repor DescClosure=Consult here the number of movements by month who are not validated & fiscal years already open OverviewOfMovementsNotValidated=Step 1/ Overview of movements not validated. (Necessary to close a fiscal year) ValidateMovements=Validate movements +DescValidateMovements=Any modification or deletion of writing, lettering and deletes will be prohibited. All entries for an exercise must be validated otherwise closing will not be possible +SelectMonthAndValidate=Select month and validate movements ValidateHistory=Bind Automatically AutomaticBindingDone=Automatic binding done From c6ab092af18efd3e75a72ccf082a48630cc08e48 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 14 Jun 2019 09:12:53 +0200 Subject: [PATCH 015/980] add capacity value for product --- htdocs/install/mysql/tables/llx_product.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/install/mysql/tables/llx_product.sql b/htdocs/install/mysql/tables/llx_product.sql index fb6e4cf5f1a..953a087f189 100755 --- a/htdocs/install/mysql/tables/llx_product.sql +++ b/htdocs/install/mysql/tables/llx_product.sql @@ -69,6 +69,8 @@ create table llx_product accountancy_code_sell_export varchar(32), -- Selling accountancy code for vat export accountancy_code_buy varchar(32), -- Buying accountancy code partnumber varchar(32), -- Part/Serial number. TODO To use it into screen if not a duplicate of barcode. + capacity float DEFAULT NULL, + capcity_units tinyint DEFAULT NULL, weight float DEFAULT NULL, weight_units tinyint DEFAULT NULL, length float DEFAULT NULL, From 695a00f21caf4f797f8fd928cd3cbd7311b08536 Mon Sep 17 00:00:00 2001 From: Abbes Bahfir Date: Wed, 19 Jun 2019 14:04:01 +0100 Subject: [PATCH 016/980] New:Show labels of countries in modulebuilder --- htdocs/core/class/ccountry.class.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php index a97d992bf89..d5a929be0dd 100644 --- a/htdocs/core/class/ccountry.class.php +++ b/htdocs/core/class/ccountry.class.php @@ -30,7 +30,7 @@ /** * Class to manage dictionary Countries (used by imports) */ -class Ccountry // extends CommonObject +class Ccountry extends CommonObject { /** * @var DoliDB Database handler. @@ -332,4 +332,19 @@ class Ccountry // extends CommonObject return 1; } } + /** + * Return a link to the object card (with optionaly the picto) + * + * @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto) + * @param string $option On what the link point to ('nolink', ...) + * @param int $notooltip 1=Disable tooltip + * @param string $morecss Add more css on link + * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking + * @return string String with URL + */ + function getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1) + { + global $langs; + return $langs->trans($this->label); + } } From 7f34a03034e835e2e7344b67cfdc648ca48a4eac Mon Sep 17 00:00:00 2001 From: Bahfir Abbes Date: Thu, 20 Jun 2019 20:55:48 +0100 Subject: [PATCH 017/980] It's just a mistake. In order to declare a getnomUrl method, Ccountry does not need to extend Commonobject --- htdocs/core/class/ccountry.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php index d5a929be0dd..71df0784fba 100644 --- a/htdocs/core/class/ccountry.class.php +++ b/htdocs/core/class/ccountry.class.php @@ -30,7 +30,7 @@ /** * Class to manage dictionary Countries (used by imports) */ -class Ccountry extends CommonObject +class Ccountry// extends CommonObject { /** * @var DoliDB Database handler. From f7134340e8946fcc32ff14674a4431d95b1b3cfb Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 4 Aug 2019 13:22:01 +0200 Subject: [PATCH 018/980] Update llx_product.sql --- htdocs/install/mysql/tables/llx_product.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/tables/llx_product.sql b/htdocs/install/mysql/tables/llx_product.sql index 953a087f189..1603ee52eff 100755 --- a/htdocs/install/mysql/tables/llx_product.sql +++ b/htdocs/install/mysql/tables/llx_product.sql @@ -70,7 +70,7 @@ create table llx_product accountancy_code_buy varchar(32), -- Buying accountancy code partnumber varchar(32), -- Part/Serial number. TODO To use it into screen if not a duplicate of barcode. capacity float DEFAULT NULL, - capcity_units tinyint DEFAULT NULL, + capacity_units tinyint DEFAULT NULL, weight float DEFAULT NULL, weight_units tinyint DEFAULT NULL, length float DEFAULT NULL, From f5f6882583398a27c45861c86794d552a3c703b4 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 4 Aug 2019 13:42:50 +0200 Subject: [PATCH 019/980] Update product.class.php --- htdocs/product/class/product.class.php | 158 ++++++++++++++++++------- 1 file changed, 114 insertions(+), 44 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index de0d28cee83..7d323ebadcf 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -59,7 +59,10 @@ class Product extends CommonObject */ public $fk_element='fk_product'; - protected $childtables=array('supplier_proposaldet', 'propaldet','commandedet','facturedet','contratdet','facture_fourn_det','commande_fournisseurdet'); // To test if we can delete object + /** + * @var array List of child tables. To test if we can delete object. + */ + protected $childtables=array('supplier_proposaldet', 'propaldet', 'commandedet', 'facturedet', 'contratdet', 'facture_fourn_det', 'commande_fournisseurdet'); /** * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe @@ -254,6 +257,8 @@ class Product extends CommonObject public $url; //! Unites de mesure + public $capacity; + public $capacity_units; public $weight; public $weight_units; public $length; @@ -269,13 +274,26 @@ class Product extends CommonObject public $accountancy_code_buy; /** - * Main barcode - * barcode value + * Main Barcode value * * @var string */ public $barcode; + /** + * Main Barcode type ID + * + * @var int + */ + public $barcode_type; + + /** + * Main Barcode type code + * + * @var string + */ + public $barcode_type_code; + /** * Additional barcodes (Some products have different barcodes according to the country of origin of manufacture) * @@ -291,7 +309,7 @@ class Product extends CommonObject public $multilangs=array(); - //! Taille de l'image + //! Size of image public $imgWidth; public $imgHeight; @@ -345,16 +363,7 @@ class Product extends CommonObject public $fields = array( - 'rowid' => array( - 'type'=>'integer', - 'label'=>'TechnicalID', - 'enabled'=>1, - 'visible'=>-2, - 'notnull'=>1, - 'index'=>1, - 'position'=>1, - 'comment'=>'Id', - ), + 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'index'=>1, 'position'=>1, 'comment'=>'Id'), 'ref' =>array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'), 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20), 'note_public' =>array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>61), @@ -799,6 +808,8 @@ class Product extends CommonObject $this->label = trim($this->label); $this->description = trim($this->description); $this->note = (isset($this->note) ? trim($this->note) : null); + $this->capacity = price2num($this->capacity); + $this->capacity_units = trim($this->capacity_units); $this->weight = price2num($this->weight); $this->weight_units = trim($this->weight_units); $this->length = price2num($this->length); @@ -945,6 +956,8 @@ class Product extends CommonObject $sql.= ", tobuy = " . (int) $this->status_buy; $sql.= ", tobatch = " . ((empty($this->status_batch) || $this->status_batch < 0) ? '0' : (int) $this->status_batch); $sql.= ", finished = " . ((! isset($this->finished) || $this->finished < 0) ? "null" : (int) $this->finished); + $sql.= ", capacity = " . ($this->capacity!='' ? "'".$this->db->escape($this->capacity)."'" : 'null'); + $sql.= ", capacity_units = " . ($this->capacity_units!='' ? "'".$this->db->escape($this->capacityt_units)."'": 'null'); $sql.= ", weight = " . ($this->weight!='' ? "'".$this->db->escape($this->weight)."'" : 'null'); $sql.= ", weight_units = " . ($this->weight_units!='' ? "'".$this->db->escape($this->weight_units)."'": 'null'); $sql.= ", length = " . ($this->length!='' ? "'".$this->db->escape($this->length)."'" : 'null'); @@ -2101,6 +2114,8 @@ class Product extends CommonObject $this->duration_value = substr($obj->duration, 0, dol_strlen($obj->duration)-1); $this->duration_unit = substr($obj->duration, -1); $this->canvas = $obj->canvas; + $this->capacity = $obj->capacity; + $this->capacity_units = $obj->capacity_units; $this->weight = $obj->weight; $this->weight_units = $obj->weight_units; $this->length = $obj->length; @@ -3246,6 +3261,57 @@ class Product extends CommonObject return $this->_get_stats($sql, $mode, $year); } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Return nb of units or orders in which product is included + * + * @param int $socid Limit count on a particular third party id + * @param string $mode 'byunit'=number of unit, 'bynumber'=nb of entities + * @param int $filteronproducttype 0=To filter on product only, 1=To filter on services only + * @param int $year Year (0=last 12 month) + * @param string $morefilter More sql filters + * @return array <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11 + */ + public function get_nb_contract($socid, $mode, $filteronproducttype = -1, $year = 0, $morefilter = '') + { + // phpcs:enable + global $conf, $user; + + $sql = "SELECT sum(d.qty), date_format(c.date_contrat, '%Y%m')"; + if ($mode == 'bynumber') { + $sql.= ", count(DISTINCT c.rowid)"; + } + $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as d, ".MAIN_DB_PREFIX."contrat as c, ".MAIN_DB_PREFIX."societe as s"; + if ($filteronproducttype >= 0) { + $sql.=", ".MAIN_DB_PREFIX."product as p"; + } + if (!$user->rights->societe->client->voir && !$socid) { + $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + } + $sql.= " WHERE c.rowid = d.fk_contrat"; + if ($this->id > 0) { + $sql.= " AND d.fk_product =".$this->id; + } else { + $sql.=" AND d.fk_product > 0"; + } + if ($filteronproducttype >= 0) { + $sql.= " AND p.rowid = d.fk_product AND p.fk_product_type =".$filteronproducttype; + } + $sql.= " AND c.fk_soc = s.rowid"; + $sql.= " AND c.entity IN (".getEntity('contract').")"; + if (!$user->rights->societe->client->voir && !$socid) { + $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id; + } + if ($socid > 0) { + $sql.= " AND c.fk_soc = ".$socid; + } + $sql.=$morefilter; + $sql.= " GROUP BY date_format(c.date_contrat,'%Y%m')"; + $sql.= " ORDER BY date_format(c.date_contrat,'%Y%m') DESC"; + + return $this->_get_stats($sql, $mode, $year); + } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Link a product/service to a parent product/service @@ -3662,7 +3728,7 @@ class Product extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Fonction recursive uniquement utilisee par get_arbo_each_prod, recompose l'arborescence des sousproduits - * Define value of this->res + * Define value of this->res * * @param array $prod Products array * @param string $compl_path Directory path of parents to add before @@ -3676,7 +3742,7 @@ class Product extends CommonObject // phpcs:enable global $conf,$langs; - $product = new Product($this->db); + $tmpproduct = null; //var_dump($prod); foreach($prod as $id_product => $desc_pere) // $id_product is 0 (first call starting with root top) or an id of a sub_product { @@ -3692,23 +3758,26 @@ class Product extends CommonObject } //print "XXX We add id=".$id." - label=".$label." - nb=".$nb." - multiply=".$multiply." fullpath=".$compl_path.$label."\n"; - $this->fetch($id); // Load product - $this->load_stock('nobatch,novirtual'); // Load stock to get true this->stock_reel + if (is_null($tmpproduct)) $tmpproduct = new Product($this->db); // So we initialize tmpproduct only once for all loop. + $tmpproduct->fetch($id); // Load product to get ->ref + $tmpproduct->load_stock('nobatch,novirtual'); // Load stock to get true ->stock_reel + //$this->fetch($id); // Load product to get ->ref + //$this->load_stock('nobatch,novirtual'); // Load stock to get true ->stock_reel $this->res[]= array( - 'id'=>$id, // Id product - 'id_parent'=>$id_parent, - 'ref'=>$this->ref, // Ref product - 'nb'=>$nb, // Nb of units that compose parent product - 'nb_total'=>$nb*$multiply, // Nb of units for all nb of product - 'stock'=>$this->stock_reel, // Stock - 'stock_alert'=>$this->seuil_stock_alerte, // Stock alert - 'label'=>$label, - 'fullpath'=>$compl_path.$label, // Label - 'type'=>$type, // Nb of units that compose parent product - 'desiredstock'=>$this->desiredstock, - 'level'=>$level, - 'incdec'=>$incdec, - 'entity'=>$this->entity + 'id'=>$id, // Id product + 'id_parent'=>$id_parent, + 'ref'=>$tmpproduct->ref, // Ref product + 'nb'=>$nb, // Nb of units that compose parent product + 'nb_total'=>$nb*$multiply, // Nb of units for all nb of product + 'stock'=>$tmpproduct->stock_reel, // Stock + 'stock_alert'=>$tmpproduct->seuil_stock_alerte, // Stock alert + 'label'=>$label, + 'fullpath'=>$compl_path.$label, // Label + 'type'=>$type, // Nb of units that compose parent product + 'desiredstock'=>$tmpproduct->desiredstock, + 'level'=>$level, + 'incdec'=>$incdec, + 'entity'=>$tmpproduct->entity ); // Recursive call if there is childs to child @@ -4030,14 +4099,11 @@ class Product extends CommonObject } $linkclose.= ' title="'.dol_escape_htmltag($label, 1, 1).'"'; - $linkclose.= ' class="classfortooltip"'; - - /* - $hookmanager->initHooks(array('productdao')); - $parameters=array('id'=>$this->id); - $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks - if ($reshook > 0) $linkclose = $hookmanager->resPrint; - */ + $linkclose.= ' class="nowraponall classfortooltip"'; + } + else + { + $linkclose = ' class="nowraponall"'; } if ($option == 'supplier' || $option == 'category') { @@ -4066,9 +4132,11 @@ class Product extends CommonObject $result.=$linkstart; if ($withpicto) { - if ($this->type == Product::TYPE_PRODUCT) { $result.=(img_object(($notooltip?'':$label), 'product', ($notooltip?'class="paddingright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); + if ($this->type == Product::TYPE_PRODUCT) { + $result.=(img_object(($notooltip?'':$label), 'product', ($notooltip?'class="paddingright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); } - if ($this->type == Product::TYPE_SERVICE) { $result.=(img_object(($notooltip?'':$label), 'service', ($notooltip?'class="paddinright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); + if ($this->type == Product::TYPE_SERVICE) { + $result.=(img_object(($notooltip?'':$label), 'service', ($notooltip?'class="paddinright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); } } $result.= $newref; @@ -4078,8 +4146,10 @@ class Product extends CommonObject $hookmanager->initHooks(array('productdao')); $parameters=array('id'=>$this->id, 'getnomurl'=>$result); $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; + if ($reshook > 0) { + $result = $hookmanager->resPrint; + } else { + $result .= $hookmanager->resPrint; } return $result; From c9e481d6f7b60a3a28edbea0b63ed3a1876782d5 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 4 Aug 2019 14:09:59 +0200 Subject: [PATCH 020/980] Update product.class.php --- htdocs/product/class/product.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 7d323ebadcf..8cebf3a2ce4 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -957,7 +957,7 @@ class Product extends CommonObject $sql.= ", tobatch = " . ((empty($this->status_batch) || $this->status_batch < 0) ? '0' : (int) $this->status_batch); $sql.= ", finished = " . ((! isset($this->finished) || $this->finished < 0) ? "null" : (int) $this->finished); $sql.= ", capacity = " . ($this->capacity!='' ? "'".$this->db->escape($this->capacity)."'" : 'null'); - $sql.= ", capacity_units = " . ($this->capacity_units!='' ? "'".$this->db->escape($this->capacityt_units)."'": 'null'); + $sql.= ", capacity_units = " . ($this->capacity_units!='' ? "'".$this->db->escape($this->capacity_units)."'": 'null'); $sql.= ", weight = " . ($this->weight!='' ? "'".$this->db->escape($this->weight)."'" : 'null'); $sql.= ", weight_units = " . ($this->weight_units!='' ? "'".$this->db->escape($this->weight_units)."'": 'null'); $sql.= ", length = " . ($this->length!='' ? "'".$this->db->escape($this->length)."'" : 'null'); From 2d77bfd873df6cc3b382f2dd0c8f2d2830c81a26 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 4 Aug 2019 14:50:25 +0200 Subject: [PATCH 021/980] Update product.class.php --- htdocs/product/class/product.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 8cebf3a2ce4..bdc4fa9be51 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -2050,7 +2050,7 @@ class Product extends CommonObject $sql = "SELECT rowid, ref, ref_ext, label, description, url, note as note_private, customcode, fk_country, price, price_ttc,"; $sql.= " price_min, price_min_ttc, price_base_type, cost_price, default_vat_code, tva_tx, recuperableonly as tva_npr, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, tosell,"; - $sql.= " tobuy, fk_product_type, duration, fk_default_warehouse, seuil_stock_alerte, canvas, weight, weight_units,"; + $sql.= " tobuy, fk_product_type, duration, fk_default_warehouse, seuil_stock_alerte, canvas, capacity, capacity_units, weight, weight_units,"; $sql.= " length, length_units, width, width_units, height, height_units,"; $sql.= " surface, surface_units, volume, volume_units, barcode, fk_barcode_type, finished,"; $sql.= " accountancy_code_buy, accountancy_code_sell, accountancy_code_sell_intra, accountancy_code_sell_export, stock, pmp,"; From d22c2960b7878e4eee53fc6242d6b6c0bca0abc5 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 6 Aug 2019 00:14:19 +0200 Subject: [PATCH 022/980] Update product.class.php --- htdocs/product/class/product.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index bdc4fa9be51..09038866e45 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -258,7 +258,7 @@ class Product extends CommonObject //! Unites de mesure public $capacity; - public $capacity_units; + public $capacity_units; public $weight; public $weight_units; public $length; @@ -957,7 +957,7 @@ class Product extends CommonObject $sql.= ", tobatch = " . ((empty($this->status_batch) || $this->status_batch < 0) ? '0' : (int) $this->status_batch); $sql.= ", finished = " . ((! isset($this->finished) || $this->finished < 0) ? "null" : (int) $this->finished); $sql.= ", capacity = " . ($this->capacity!='' ? "'".$this->db->escape($this->capacity)."'" : 'null'); - $sql.= ", capacity_units = " . ($this->capacity_units!='' ? "'".$this->db->escape($this->capacity_units)."'": 'null'); + $sql.= ", capacity_units = " . ($this->capacity_units!='' ? "'".$this->db->escape($this->capacity_units)."'": 'null'); $sql.= ", weight = " . ($this->weight!='' ? "'".$this->db->escape($this->weight)."'" : 'null'); $sql.= ", weight_units = " . ($this->weight_units!='' ? "'".$this->db->escape($this->weight_units)."'": 'null'); $sql.= ", length = " . ($this->length!='' ? "'".$this->db->escape($this->length)."'" : 'null'); From 60a7ba463c52dcf9369431d9de2999aa88a71c00 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 23 Aug 2019 14:53:40 +0200 Subject: [PATCH 023/980] Update 10.0.0-11.0.0.sql --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 9ffda1e9132..ece1f918845 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -78,3 +78,5 @@ UPDATE llx_bank_url set url = REPLACE( url, 'compta/salaries/', 'salaries/'); ALTER TABLE llx_stock_mouvement ADD COLUMN fk_projet INTEGER NOT NULL DEFAULT 0 AFTER model_pdf; ALTER TABLE llx_oauth_token ADD COLUMN fk_soc integer DEFAULT NULL after token; + +ALTER TABLE llx_adherent_type ADD COLUMN duration varchar(6) DEFAULT NULL after morphy; From b8fce830f762068ffbb38224fa623602283d178f Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 23 Aug 2019 14:56:38 +0200 Subject: [PATCH 024/980] Update llx_adherent_type.sql --- htdocs/install/mysql/tables/llx_adherent_type.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/install/mysql/tables/llx_adherent_type.sql b/htdocs/install/mysql/tables/llx_adherent_type.sql index 084d0457941..57ec8becfff 100644 --- a/htdocs/install/mysql/tables/llx_adherent_type.sql +++ b/htdocs/install/mysql/tables/llx_adherent_type.sql @@ -30,6 +30,7 @@ create table llx_adherent_type statut smallint NOT NULL DEFAULT 0, libelle varchar(50) NOT NULL, morphy varchar(3) NOT NULL, + duration varchar6(3) NOT NULL DEFAULT 1y, subscription varchar(3) NOT NULL DEFAULT 'yes', vote varchar(3) NOT NULL DEFAULT 'yes', note text, From 01f0a6a19feb547e189dcb09c549813cb00d3cac Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 23 Aug 2019 14:56:59 +0200 Subject: [PATCH 025/980] Update llx_adherent_type.sql --- htdocs/install/mysql/tables/llx_adherent_type.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/tables/llx_adherent_type.sql b/htdocs/install/mysql/tables/llx_adherent_type.sql index 57ec8becfff..99d4b691d46 100644 --- a/htdocs/install/mysql/tables/llx_adherent_type.sql +++ b/htdocs/install/mysql/tables/llx_adherent_type.sql @@ -30,7 +30,7 @@ create table llx_adherent_type statut smallint NOT NULL DEFAULT 0, libelle varchar(50) NOT NULL, morphy varchar(3) NOT NULL, - duration varchar6(3) NOT NULL DEFAULT 1y, + duration varchar(6) NOT NULL DEFAULT '1y', subscription varchar(3) NOT NULL DEFAULT 'yes', vote varchar(3) NOT NULL DEFAULT 'yes', note text, From 1b4788c6d0d33a9fa6890f0c4a1a39b8cd74e4d3 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 14:21:41 +0200 Subject: [PATCH 026/980] Update product.class.php --- htdocs/product/class/product.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 09038866e45..6b1877d0b51 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -3288,7 +3288,8 @@ class Product extends CommonObject if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; } - $sql.= " WHERE c.rowid = d.fk_contrat"; + $sql.= " WHERE c.entity IN (".getEntity('contract').")"; + $sql.= " AND c.rowid = d.fk_contrat"; if ($this->id > 0) { $sql.= " AND d.fk_product =".$this->id; } else { @@ -3298,7 +3299,6 @@ class Product extends CommonObject $sql.= " AND p.rowid = d.fk_product AND p.fk_product_type =".$filteronproducttype; } $sql.= " AND c.fk_soc = s.rowid"; - $sql.= " AND c.entity IN (".getEntity('contract').")"; if (!$user->rights->societe->client->voir && !$socid) { $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id; } From 54d0b94b6db0e579cac20794145b1e91e7c584e5 Mon Sep 17 00:00:00 2001 From: Tim Otte Date: Wed, 4 Sep 2019 15:13:42 +0200 Subject: [PATCH 027/980] Added extrafield support to the product supplier price lines --- .../core/class/commondocgenerator.class.php | 12 +- htdocs/core/lib/product.lib.php | 5 + ...duct_fournisseur_price_extrafields.key.sql | 20 +++ ..._product_fournisseur_price_extrafields.sql | 24 ++++ htdocs/langs/de_DE/products.lang | 1 + .../admin/product_supplier_extrafields.php | 132 ++++++++++++++++++ htdocs/product/fournisseurs.php | 68 +++++++++ 7 files changed, 261 insertions(+), 1 deletion(-) create mode 100644 htdocs/install/mysql/tables/llx_product_fournisseur_price_extrafields.key.sql create mode 100644 htdocs/install/mysql/tables/llx_product_fournisseur_price_extrafields.sql create mode 100644 htdocs/product/admin/product_supplier_extrafields.php diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index fadd0c02fde..28b1dc9d4c1 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -577,7 +577,7 @@ abstract class CommonDocGenerator { $resarray['line_unit']=$outputlangs->trans($line->getLabelOfUnit('long')); $resarray['line_unit_short']=$outputlangs->trans($line->getLabelOfUnit('short')); - } + } // Retrieve extrafields $extrafieldkey=$line->element; @@ -588,6 +588,16 @@ abstract class CommonDocGenerator $line->fetch_optionals(); $resarray = $this->fill_substitutionarray_with_extrafields($line, $resarray, $extrafields, $array_key, $outputlangs); + + // Add the product supplier extrafields to the substitutions + $resql = $this->db->query("SELECT * FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields AS ex INNER JOIN " . MAIN_DB_PREFIX . "product_fournisseur_price AS f ON ex.fk_object = f.rowid WHERE f.ref_fourn = " . $line->ref_fourn); + if ($this->db->num_rows($resql) > 0) { + $resql = $this->db->fetch_object($resql); + $extralabels=$extrafields->fetch_name_optionals_label("product_fournisseur_price"); + foreach ($extralabels as $key => $value) { + $resarray['line_product_supplier_'.$key] = $resql->{$key}; + } + } // Load product data optional fields to the line -> enables to use "line_options_{extrafield}" if (isset($line->fk_product) && $line->fk_product > 0) diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index 68a6d9082f2..38541bc8fe3 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -292,6 +292,11 @@ function product_admin_prepare_head() $head[$h][2] = 'attributes'; $h++; + $head[$h][0] = DOL_URL_ROOT.'/product/admin/product_supplier_extrafields.php'; + $head[$h][1] = $langs->trans("ProductSupplierExtraFields"); + $head[$h][2] = 'supplierAttributes'; + $h++; + complete_head_from_modules($conf, $langs, null, $head, $h, 'product_admin', 'remove'); return $head; diff --git a/htdocs/install/mysql/tables/llx_product_fournisseur_price_extrafields.key.sql b/htdocs/install/mysql/tables/llx_product_fournisseur_price_extrafields.key.sql new file mode 100644 index 00000000000..b0d9345b604 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_product_fournisseur_price_extrafields.key.sql @@ -0,0 +1,20 @@ +-- =================================================================== +-- Copyright (C) 2011 Laurent Destailleur +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- =================================================================== + + +ALTER TABLE llx_product_fournisseur_price_extrafields ADD INDEX idx_product_fournisseur_price_extrafields (fk_object); diff --git a/htdocs/install/mysql/tables/llx_product_fournisseur_price_extrafields.sql b/htdocs/install/mysql/tables/llx_product_fournisseur_price_extrafields.sql new file mode 100644 index 00000000000..51d5499e825 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_product_fournisseur_price_extrafields.sql @@ -0,0 +1,24 @@ +-- ============================================================================ +-- Copyright (C) 2011 Laurent Destailleur +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- ============================================================================ + +Create Table llx_product_fournisseur_price_extrafields ( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, + import_key varchar(14) -- import key +) ENGINE=innodb; \ No newline at end of file diff --git a/htdocs/langs/de_DE/products.lang b/htdocs/langs/de_DE/products.lang index c21d97aeafe..7e81f96de25 100644 --- a/htdocs/langs/de_DE/products.lang +++ b/htdocs/langs/de_DE/products.lang @@ -341,3 +341,4 @@ ErrorDestinationProductNotFound=Zielprodukt nicht gefunden ErrorProductCombinationNotFound=Produktvariante nicht gefunden ActionAvailableOnVariantProductOnly=Action only available on the variant of product ProductsPricePerCustomer=Product prices per customers +ProductSupplierExtraFields=Ergänzende Attribute (Lieferantenpreise) \ No newline at end of file diff --git a/htdocs/product/admin/product_supplier_extrafields.php b/htdocs/product/admin/product_supplier_extrafields.php new file mode 100644 index 00000000000..149178ead36 --- /dev/null +++ b/htdocs/product/admin/product_supplier_extrafields.php @@ -0,0 +1,132 @@ + + * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2004-2011 Laurent Destailleur + * Copyright (C) 2012 Marcos García + * Copyright (C) 2012 Regis Houssin + * Copyright (C) 2019 Tim Otte + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/product/admin/product_supplier_extrafields.php + * \ingroup product + * \brief Page to setup extra fields of products + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; + +// Load translation files required by the page +$langs->loadLangs(array('companies', 'admin', 'products')); + +$extrafields = new ExtraFields($db); +$form = new Form($db); + +// List of supported format +$tmptype2label=ExtraFields::$type2label; +$type2label=array(''); +foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->transnoentitiesnoconv($val); + +$action=GETPOST('action', 'alpha'); +$attrname=GETPOST('attrname', 'alpha'); +$elementtype='product_fournisseur_price'; //Must be the $element of the class that manage extrafield + +if (!$user->admin) accessforbidden(); + + +/* + * Actions + */ + +require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; + + + +/* + * View + */ + +$title = $langs->trans('ProductServiceSetup'); +$textobject = $langs->trans("ProductsAndServices"); +if (empty($conf->product->enabled)) +{ + $title = $langs->trans('ServiceSetup'); + $textobject = $langs->trans('Services'); +} +elseif (empty($conf->service->enabled)) +{ + $title = $langs->trans('ProductSetup'); + $textobject = $langs->trans('Products'); +} + +//$help_url='EN:Module Third Parties setup|FR:Paramétrage_du_module_Tiers'; +$help_url=''; +llxHeader('', $title, $help_url); + + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($title, $linkback, 'title_setup'); + + +$head = product_admin_prepare_head(); + +dol_fiche_head($head, 'supplierAttributes', $textobject, -1, 'product'); + +require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; + +dol_fiche_end(); + + +// Buttons +if ($action != 'create' && $action != 'edit') +{ + print '
'; + print "".$langs->trans("NewAttribute").""; + print "
"; +} + + +/* ************************************************************************** */ +/* */ +/* Creation of an optional field */ +/* */ +/* ************************************************************************** */ + +if ($action == 'create') +{ + print '
'; + print load_fiche_titre($langs->trans('NewAttribute')); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php'; +} + +/* ************************************************************************** */ +/* */ +/* Edition of an optional field */ +/* */ +/* ************************************************************************** */ +if ($action == 'edit' && ! empty($attrname)) +{ + print "
"; + print load_fiche_titre($langs->trans("FieldEdition", $attrname)); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php'; +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index 587d494a51f..0771f0ab108 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -33,6 +33,7 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php'; require_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_expression.class.php'; @@ -53,6 +54,8 @@ $cost_price=GETPOST('cost_price', 'alpha'); $backtopage=GETPOST('backtopage', 'alpha'); $error=0; +$extrafields = new ExtraFields($db); + // If socid provided by ajax company selector if (! empty($_REQUEST['search_fourn_id'])) { @@ -138,6 +141,7 @@ if (empty($reshook)) $action = ''; $result=$object->remove_product_fournisseur_price($rowid); if($result > 0){ + $db->query("DELETE FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields WHERE fk_object = $rowid"); setEventMessages($langs->trans("PriceRemoved"), null, 'mesgs'); }else{ $error++; @@ -257,6 +261,36 @@ if (empty($reshook)) if (isset($_POST['ref_fourn_price_id'])) $object->fetch_product_fournisseur_price($_POST['ref_fourn_price_id']); + $extralabels=$extrafields->fetch_name_optionals_label("product_fournisseur_price"); + $extrafield_values = $extrafields->getOptionalsFromPost("product_fournisseur_price"); + + $sql = ""; + $resql = $db->query("SELECT * FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields WHERE fk_object = " . $object->product_fourn_price_id); + // Insert a new extrafields row, if none exists + if ($db->num_rows($resql) != 1) { + + $sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields (fk_object, "; + foreach ($extrafield_values as $key => $value) { + $sql .= str_replace('options_', '', $key) . ', '; + } + $sql = substr($sql, 0, strlen($sql)-2) . ") VALUES (" . $object->product_fourn_price_id . ", "; + foreach ($extrafield_values as $key => $value) { + $sql .= '"' . $value . '", '; + } + $sql = substr($sql, 0, strlen($sql)-2) . ')'; + } + // else update the existing one + else { + $sql = "UPDATE " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields SET "; + foreach ($extrafield_values as $key => $value) { + $sql .= str_replace('options_', '', $key) . ' = "' . $value . '", '; + } + $sql = substr($sql, 0, strlen($sql)-2) . ' WHERE fk_object = ' . $object->product_fourn_price_id; + } + + // Execute the sql command from above + $db->query($sql); + $newprice = price2num(GETPOST("price", "alpha")); if ($conf->multicurrency->enabled) @@ -723,6 +757,20 @@ SCRIPT; print ''; } + $extralabels=$extrafields->fetch_name_optionals_label("product_fournisseur_price"); + // Extrafields + $resql = $db->query("SELECT * FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields WHERE fk_object = " . $rowid); + if ($db->num_rows($resql) != 1) { + foreach ($extralabels as $key => $value) { + print '' . $langs->trans($value) . '' . $extrafields->showInputField($key, '', '', '', '', '', 0, 'product_fournisseur_price') . ''; + } + } else { + $resql = $db->fetch_object($resql); + foreach ($extralabels as $key => $value) { + print '' . $langs->trans($value) . '' . $extrafields->showInputField($key, $resql->{$key}, '', '', '', '', 0, 'product_fournisseur_price') . ''; + } + } + if (is_object($hookmanager)) { $parameters=array('id_fourn'=>$id_fourn,'prod_id'=>$object->id); @@ -810,6 +858,13 @@ SCRIPT; print_liste_field_titre("BarcodeType", $_SERVER["PHP_SELF"], "pfp.fk_barcode_type", "", $param, '', $sortfield, $sortorder, 'center '); } print_liste_field_titre("DateModification", $_SERVER["PHP_SELF"], "pfp.tms", "", $param, '', $sortfield, $sortorder, 'right '); + + // fetch optionals attributes and labels + $extralabels=$extrafields->fetch_name_optionals_label("product_fournisseur_price"); + foreach ($extralabels as $extrafield) { + print_liste_field_titre($langs->trans($extrafield), $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); + } + if (is_object($hookmanager)) { $parameters=array('id_fourn'=>$id_fourn, 'prod_id'=>$object->id); @@ -924,6 +979,19 @@ SCRIPT; print dol_print_date(($productfourn->fourn_date_modification ? $productfourn->fourn_date_modification : $productfourn->date_modification), "dayhour"); print ''; + // Extrafields + $resql = $db->query("SELECT * FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields WHERE fk_object = " . $productfourn->product_fourn_price_id); + if ($db->num_rows($resql) != 1) { + foreach ($extralabels as $extrafield) { + print ""; + } + } else { + $resql = $db->fetch_object($resql); + foreach ($extralabels as $key => $value) { + print "" . $extrafields->showOutputField($key, $resql->{$key}) . ""; + } + } + if (is_object($hookmanager)) { $parameters=array('id_pfp'=>$productfourn->product_fourn_price_id,'id_fourn'=>$id_fourn,'prod_id'=>$object->id); From fbafbc3e19f4dab00bda2b7a527021538fc0f3fb Mon Sep 17 00:00:00 2001 From: Tim Otte Date: Wed, 4 Sep 2019 15:16:29 +0200 Subject: [PATCH 028/980] Added myself to the author list --- htdocs/product/fournisseurs.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index 0771f0ab108..ca9e36832e4 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -8,7 +8,8 @@ * Copyright (C) 2014 Ion Agorria * Copyright (C) 2015 Alexandre Spangaro * Copyright (C) 2016 Ferran Marcet - * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019 Tim Otte * * 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 From be000b96ee72926b2e1a0933a383783764f61118 Mon Sep 17 00:00:00 2001 From: Tim Otte Date: Wed, 4 Sep 2019 16:42:13 +0200 Subject: [PATCH 029/980] Fixed error that occurred in the travis CI build --- htdocs/product/fournisseurs.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index ca9e36832e4..3d8585ecfc4 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -863,7 +863,7 @@ SCRIPT; // fetch optionals attributes and labels $extralabels=$extrafields->fetch_name_optionals_label("product_fournisseur_price"); foreach ($extralabels as $extrafield) { - print_liste_field_titre($langs->trans($extrafield), $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); + print_liste_field_titre($extrafield, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); } if (is_object($hookmanager)) From 0f9b01cd5b4f7829b49c495fd5cd1be4180e5bad Mon Sep 17 00:00:00 2001 From: Tim Otte Date: Thu, 5 Sep 2019 09:47:40 +0200 Subject: [PATCH 030/980] Added support for extrafield styling options: - visibility now implemented - fieldrequired now implemented --- htdocs/product/fournisseurs.php | 35 ++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index 3d8585ecfc4..f4431d7bf77 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -151,7 +151,7 @@ if (empty($reshook)) } } - if ($action == 'updateprice') + if ($action == 'save_price') { $id_fourn=GETPOST("id_fourn"); if (empty($id_fourn)) $id_fourn=GETPOST("search_id_fourn"); @@ -437,7 +437,7 @@ if ($id > 0 || $ref) // Form to add or update a price - if (($action == 'add_price' || $action == 'updateprice' ) && $usercancreate) + if (($action == 'add_price' || $action == 'update_price' ) && $usercancreate) { $langs->load("suppliers"); @@ -453,7 +453,7 @@ if ($id > 0 || $ref) print '
'; print ''; - print ''; + print ''; dol_fiche_head(); @@ -763,12 +763,16 @@ SCRIPT; $resql = $db->query("SELECT * FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields WHERE fk_object = " . $rowid); if ($db->num_rows($resql) != 1) { foreach ($extralabels as $key => $value) { - print '' . $langs->trans($value) . '' . $extrafields->showInputField($key, '', '', '', '', '', 0, 'product_fournisseur_price') . ''; + if (! empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && ($extrafields->attributes["product_fournisseur_price"]['list'][$key] == 1 || $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 3 || ($action == "update_price" && $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 4))) { + print 'attributes["product_fournisseur_price"]['required'][$key] ? ' class="fieldrequired"' : '') . '>' . $langs->trans($value) . '' . $extrafields->showInputField($key, '', '', '', '', '', 0, 'product_fournisseur_price') . ''; + } } } else { $resql = $db->fetch_object($resql); foreach ($extralabels as $key => $value) { - print '' . $langs->trans($value) . '' . $extrafields->showInputField($key, $resql->{$key}, '', '', '', '', 0, 'product_fournisseur_price') . ''; + if (! empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && ($extrafields->attributes["product_fournisseur_price"]['list'][$key] == 1 || $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 3 || ($action == "update_price" && $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 4))) { + print 'attributes["product_fournisseur_price"]['required'][$key] ? ' class="fieldrequired"' : '') . '>' . $langs->trans($value) . '' . $extrafields->showInputField($key, $resql->{$key}, '', '', '', '', 0, 'product_fournisseur_price') . ''; + } } } @@ -796,7 +800,7 @@ SCRIPT; print "\n
\n"; - if ($action != 'add_price' && $action != 'updateprice') + if ($action != 'add_price' && $action != 'update_price') { $parameters=array(); $reshook=$hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook @@ -862,8 +866,11 @@ SCRIPT; // fetch optionals attributes and labels $extralabels=$extrafields->fetch_name_optionals_label("product_fournisseur_price"); - foreach ($extralabels as $extrafield) { - print_liste_field_titre($extrafield, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); + foreach ($extralabels as $key => $value) { + // Show field if not hidden + if (! empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && $extrafields->attributes["product_fournisseur_price"]['list'][$key] != 3) { + print_liste_field_titre($value, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); + } } if (is_object($hookmanager)) @@ -983,13 +990,17 @@ SCRIPT; // Extrafields $resql = $db->query("SELECT * FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields WHERE fk_object = " . $productfourn->product_fourn_price_id); if ($db->num_rows($resql) != 1) { - foreach ($extralabels as $extrafield) { - print ""; + foreach ($extralabels as $key => $value) { + if (! empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && $extrafields->attributes["product_fournisseur_price"]['list'][$key] != 3) { + print ""; + } } } else { $resql = $db->fetch_object($resql); foreach ($extralabels as $key => $value) { - print "" . $extrafields->showOutputField($key, $resql->{$key}) . ""; + if (! empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && $extrafields->attributes["product_fournisseur_price"]['list'][$key] != 3) { + print '' . $extrafields->showOutputField($key, $resql->{$key}) . ""; + } } } @@ -1003,7 +1014,7 @@ SCRIPT; print ''; if ($usercancreate) { - print ''.img_edit().""; + print ''.img_edit().""; print '   '; print ''.img_picto($langs->trans("Remove"), 'delete').''; } From e55c7bc378295bd6db964434bb6e8b604484f814 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 6 Sep 2019 11:22:22 +0200 Subject: [PATCH 031/980] Update llx_facture.sql --- htdocs/install/mysql/tables/llx_facture.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/install/mysql/tables/llx_facture.sql b/htdocs/install/mysql/tables/llx_facture.sql index 742c63d0a6e..3c678699a7e 100644 --- a/htdocs/install/mysql/tables/llx_facture.sql +++ b/htdocs/install/mysql/tables/llx_facture.sql @@ -41,6 +41,7 @@ create table llx_facture date_pointoftax date DEFAULT NULL, -- date point of tax (for GB) date_valid date, -- date validation tms timestamp, -- date creation/modification + date_cloture datetime, -- date de cloture paye smallint DEFAULT 0 NOT NULL, amount double(24,8) DEFAULT 0 NOT NULL, remise_percent real DEFAULT 0, -- remise relative @@ -62,7 +63,8 @@ create table llx_facture fk_user_author integer, -- user making creation fk_user_modif integer, -- user making last change fk_user_valid integer, -- user validating - + fk_user_cloture integer, -- user closing + module_source varchar(32), -- name of module when invoice generated by a dedicated module (POS, ...) pos_source varchar(32), -- name of POS station when invoice is generated by a POS module fk_fac_rec_source integer, -- facture rec source From ead8d29ed32ecd8cc65ad90254e912a2dc8cf097 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 6 Sep 2019 11:32:46 +0200 Subject: [PATCH 032/980] Update 10.0.0-11.0.0.sql --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 64de0364139..065104164c9 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -47,7 +47,8 @@ ALTER TABLE llx_entrepot_extrafields ADD INDEX idx_entrepot_extrafields (fk_obje ALTER TABLE llx_facture ADD COLUMN retained_warranty real DEFAULT NULL after situation_final; ALTER TABLE llx_facture ADD COLUMN retained_warranty_date_limit date DEFAULT NULL after retained_warranty; ALTER TABLE llx_facture ADD COLUMN retained_warranty_fk_cond_reglement integer DEFAULT NULL after retained_warranty_date_limit; - +ALTER TABLE llx_facture ADD COLUMN date_cloture datetime DEFAULT NULL after date_valid; +ALTER TABLE llx_facture ADD COLUMN fk_user_cloture integer DEFAULT NULL after fk_user_valid; ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1 NOT NULL; @@ -105,4 +106,4 @@ create table llx_c_hrm_public_holiday )ENGINE=innodb; - \ No newline at end of file + From fc75d72290578cb488ba1480b75c1ed51122dbba Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 6 Sep 2019 11:35:52 +0200 Subject: [PATCH 033/980] Update list.php --- htdocs/compta/facture/list.php | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index ad9e2295d6d..54f0fdb6d08 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -180,6 +180,7 @@ $arrayfields=array( 'rtp'=>array('label'=>"Rest", 'checked'=>0), 'f.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), 'f.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500), + 'f.date_cloture'=>array('label'=>"DateClosing", 'checked'=>0, 'position'=>500), 'f.fk_statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000), ); @@ -381,7 +382,7 @@ $sql.= ' f.rowid as id, f.ref, f.ref_client, f.type, f.note_private, f.note_publ $sql.= ' f.localtax1 as total_localtax1, f.localtax2 as total_localtax2,'; $sql.= ' f.datef as df, f.date_lim_reglement as datelimite,'; $sql.= ' f.paye as paye, f.fk_statut,'; -$sql.= ' f.datec as date_creation, f.tms as date_update,'; +$sql.= ' f.datec as date_creation, f.tms as date_update, f.date_cloture as date_cloture,'; if($conf->global->INVOICE_USE_SITUATION && $conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY) { $sql.= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final,f.situation_cycle_ref,f.situation_counter,'; @@ -495,7 +496,7 @@ if (! $sall) $sql.= ' f.localtax1, f.localtax2,'; $sql.= ' f.datef, f.date_lim_reglement,'; $sql.= ' f.paye, f.fk_statut,'; - $sql.= ' f.datec, f.tms,'; + $sql.= ' f.datec, f.tms, f.date_cloture,'; $sql.= ' s.rowid, s.nom, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,'; $sql.= ' typent.code,'; $sql.= ' state.code_departement, state.nom,'; @@ -864,6 +865,12 @@ if ($resql) print ''; print ''; } + if (! empty($arrayfields['f.date_cloture']['checked'])) + { + print ''; + print ''; + } + // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; @@ -930,6 +937,7 @@ if ($resql) print $hookmanager->resPrint; if (! empty($arrayfields['f.datec']['checked'])) print_liste_field_titre($arrayfields['f.datec']['label'], $_SERVER["PHP_SELF"], "f.datec", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); if (! empty($arrayfields['f.tms']['checked'])) print_liste_field_titre($arrayfields['f.tms']['label'], $_SERVER["PHP_SELF"], "f.tms", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); + if (! empty($arrayfields['f.date_cloture']['checked'])) print_liste_field_titre($arrayfields['f.date_cloture']['label'], $_SERVER["PHP_SELF"], "f.date_cloture", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); if (! empty($arrayfields['f.fk_statut']['checked'])) print_liste_field_titre($arrayfields['f.fk_statut']['label'], $_SERVER["PHP_SELF"], "f.fk_statut,f.paye,f.type,dynamount_payed", "", $param, 'class="right"', $sortfield, $sortorder); print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); print "\n"; @@ -1260,6 +1268,14 @@ if ($resql) print ''; if (! $i) $totalarray['nbfield']++; } + // Date cloture + if (! empty($arrayfields['f.date_cloture']['checked'])) + { + print ''; + print dol_print_date($db->jdate($obj->date_cloture), 'dayhour', 'tzuser'); + print ''; + if (! $i) $totalarray['nbfield']++; + } // Status if (! empty($arrayfields['f.fk_statut']['checked'])) { From 5d81b0271d6a6eedae203ddaaefcf6c598aaa16c Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 6 Sep 2019 11:40:26 +0200 Subject: [PATCH 034/980] Update facture.class.php --- htdocs/compta/facture/class/facture.class.php | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 131f0ee90fd..73323235448 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2136,6 +2136,8 @@ class Facture extends CommonInvoice if ($this->paye != 1) { $this->db->begin(); + + $now=dol_now(); dol_syslog(get_class($this)."::set_paid rowid=".$this->id, LOG_DEBUG); @@ -2144,6 +2146,8 @@ class Facture extends CommonInvoice if (! $close_code) $sql.= ', paye=1'; if ($close_code) $sql.= ", close_code='".$this->db->escape($close_code)."'"; if ($close_note) $sql.= ", close_note='".$this->db->escape($close_note)."'"; + $sql.= ', fk_user_cloture = '.$user->id; + $sql.= ", date_cloture = '".$this->db->idate($now)."'"; $sql.= ' WHERE rowid = '.$this->id; $resql = $this->db->query($sql); @@ -2196,6 +2200,8 @@ class Facture extends CommonInvoice $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture'; $sql.= ' SET paye=0, fk_statut='.self::STATUS_VALIDATED.', close_code=null, close_note=null'; + $sql.= ' date_cloture as datecloture,'; + $sql.= ' fk_user_author, fk_user_valid, fk_user_cloture'; $sql.= ' WHERE rowid = '.$this->id; dol_syslog(get_class($this)."::set_unpaid", LOG_DEBUG); @@ -3521,7 +3527,8 @@ class Facture extends CommonInvoice public function info($id) { $sql = 'SELECT c.rowid, datec, date_valid as datev, tms as datem,'; - $sql.= ' fk_user_author, fk_user_valid'; + $sql.= ' date_cloture as datecloture,'; + $sql.= ' fk_user_author, fk_user_valid, fk_user_cloture'; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as c'; $sql.= ' WHERE c.rowid = '.$id; @@ -3536,7 +3543,7 @@ class Facture extends CommonInvoice { $cuser = new User($this->db); $cuser->fetch($obj->fk_user_author); - $this->user_creation = $cuser; + $this->user_creation = $cuser; } if ($obj->fk_user_valid) { @@ -3544,9 +3551,17 @@ class Facture extends CommonInvoice $vuser->fetch($obj->fk_user_valid); $this->user_validation = $vuser; } + if ($obj->fk_user_cloture) + { + $cluser = new User($this->db); + $cluser->fetch($obj->fk_user_cloture); + $this->user_cloture = $cluser; + } + $this->date_creation = $this->db->jdate($obj->datec); $this->date_modification = $this->db->jdate($obj->datem); - $this->date_validation = $this->db->jdate($obj->datev); // Should be in log table + $this->date_validation = $this->db->jdate($obj->datev); + $this->date_cloture = $this->db->jdate($obj->datecloture); } $this->db->free($result); } From 2d3b0a7d43b529913dce11579207d4b34c50a9f2 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 8 Sep 2019 20:05:13 +0200 Subject: [PATCH 035/980] Update adherent.class.php --- htdocs/adherents/class/adherent.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 1b516e1c94e..28667cb047f 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -581,6 +581,7 @@ class Adherent extends CommonObject $sql.= ", fk_adherent_type = ".$this->db->escape($this->typeid); $sql.= ", morphy = '".$this->db->escape($this->morphy)."'"; $sql.= ", birth = ".($this->birth?"'".$this->db->idate($this->birth)."'":"null"); + if ($this->socid) $sql.= ", fk_soc = '".$this->db->escape($this->socid)."'"; // Must be modified only when creating from a thirdpart if ($this->datefin) $sql.= ", datefin = '".$this->db->idate($this->datefin)."'"; // Must be modified only when deleting a subscription if ($this->datevalid) $sql.= ", datevalid = '".$this->db->idate($this->datevalid)."'"; // Must be modified only when validating a member $sql.= ", fk_user_mod = ".($user->id>0?$user->id:'null'); // Can be null because member can be create by a guest From a83c0670811683075c684ff07d92dbeccb79475e Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 8 Sep 2019 20:08:32 +0200 Subject: [PATCH 036/980] Update card.php --- htdocs/adherents/card.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 5836bf48332..d443eb6e462 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -866,6 +866,18 @@ else $object->country_code=$tmparray['code']; $object->country=$tmparray['label']; } + + if (!empty($socid)) { +$object = new Societe($db); +if ($socid > 0) $object->fetch($socid); + +if (! ($object->id > 0)) +{ + $langs->load("errors"); + print($langs->trans('ErrorRecordNotFound')); + exit; +} + } $adht = new AdherentType($db); @@ -905,6 +917,7 @@ else print ''; print ''; print ''; + print ''; if ($backtopage) print ''; dol_fiche_head(''); From 1368236d29c060e59235ef88b9c30f2ff7ac2ae5 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 8 Sep 2019 20:15:05 +0200 Subject: [PATCH 037/980] Update card.php --- htdocs/societe/card.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index ab224245de8..2d26747df32 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -2664,6 +2664,16 @@ else { print ''."\n"; } + + if (! empty($conf->adherent->enabled)) + { + $adh = new Adherent($db); + $result=$adh->fetch('','',$object->id); + if (!$result && $object->client == 1) + { + print ''.$langs->trans("NewMember").''; + } + } if ($user->rights->societe->supprimer) { From e37875f70a597e011514b233d5dcaded2a0851be Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 8 Sep 2019 20:16:05 +0200 Subject: [PATCH 038/980] Update card.php --- htdocs/societe/card.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 2d26747df32..ee6ca0288ef 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -47,7 +47,8 @@ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; if (! empty($conf->adherent->enabled)) require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; -$langs->loadLangs(array("companies","commercial","bills","banks","users")); +$langs->loadLangs(array("companies", "commercial", "bills", "banks", "users")); +if (! empty($conf->adherent->enabled)) $langs->load("members"); if (! empty($conf->categorie->enabled)) $langs->load("categories"); if (! empty($conf->incoterm->enabled)) $langs->load("incoterm"); if (! empty($conf->notification->enabled)) $langs->load("mails"); From 2e63e7bc27ffcd53e9c3c89764244613451ed019 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sun, 8 Sep 2019 18:17:51 +0000 Subject: [PATCH 039/980] Fixing style errors. --- htdocs/societe/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index ee6ca0288ef..8c1db93c53b 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -2669,11 +2669,11 @@ else if (! empty($conf->adherent->enabled)) { $adh = new Adherent($db); - $result=$adh->fetch('','',$object->id); + $result=$adh->fetch('', '', $object->id); if (!$result && $object->client == 1) { print ''.$langs->trans("NewMember").''; - } + } } if ($user->rights->societe->supprimer) From 0c68a7b0e6362c2fad4a4fc9995b91e43bdd4873 Mon Sep 17 00:00:00 2001 From: Tim Otte Date: Tue, 10 Sep 2019 09:11:31 +0200 Subject: [PATCH 040/980] Possible solution for the problem "SELECT * is forbidden by SQL rules" --- htdocs/core/class/commondocgenerator.class.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index 28b1dc9d4c1..1b0a9df9a92 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -590,10 +590,15 @@ abstract class CommonDocGenerator $resarray = $this->fill_substitutionarray_with_extrafields($line, $resarray, $extrafields, $array_key, $outputlangs); // Add the product supplier extrafields to the substitutions - $resql = $this->db->query("SELECT * FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields AS ex INNER JOIN " . MAIN_DB_PREFIX . "product_fournisseur_price AS f ON ex.fk_object = f.rowid WHERE f.ref_fourn = " . $line->ref_fourn); + $extralabels=$extrafields->fetch_name_optionals_label("product_fournisseur_price"); + $columns = ""; + foreach ($extralabels as $key => $value) { + $columns .= "$key, "; + } + substr($columns, 0, strlen($columns) - 2); + $resql = $this->db->query("SELECT $columns FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields AS ex INNER JOIN " . MAIN_DB_PREFIX . "product_fournisseur_price AS f ON ex.fk_object = f.rowid WHERE f.ref_fourn = " . $line->ref_fourn); if ($this->db->num_rows($resql) > 0) { $resql = $this->db->fetch_object($resql); - $extralabels=$extrafields->fetch_name_optionals_label("product_fournisseur_price"); foreach ($extralabels as $key => $value) { $resarray['line_product_supplier_'.$key] = $resql->{$key}; } From 8f4b2436e480f8c5fd83cae3b581e84c1bf47b75 Mon Sep 17 00:00:00 2001 From: Tim Otte Date: Tue, 10 Sep 2019 09:13:42 +0200 Subject: [PATCH 041/980] Ooops --- htdocs/core/class/commondocgenerator.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index 1b0a9df9a92..b671653a9b0 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -595,7 +595,7 @@ abstract class CommonDocGenerator foreach ($extralabels as $key => $value) { $columns .= "$key, "; } - substr($columns, 0, strlen($columns) - 2); + $columns = substr($columns, 0, strlen($columns) - 2); $resql = $this->db->query("SELECT $columns FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields AS ex INNER JOIN " . MAIN_DB_PREFIX . "product_fournisseur_price AS f ON ex.fk_object = f.rowid WHERE f.ref_fourn = " . $line->ref_fourn); if ($this->db->num_rows($resql) > 0) { $resql = $this->db->fetch_object($resql); From 1e8663b1c891b2b85ffebd10534309aca68540d1 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 10 Sep 2019 18:48:55 +0000 Subject: [PATCH 042/980] Fixing style errors. --- htdocs/product/class/product.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index ceae785c6e8..6dbb54b1203 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -957,7 +957,7 @@ class Product extends CommonObject $sql.= ", tobatch = " . ((empty($this->status_batch) || $this->status_batch < 0) ? '0' : (int) $this->status_batch); $sql.= ", finished = " . ((! isset($this->finished) || $this->finished < 0) ? "null" : (int) $this->finished); $sql.= ", capacity = " . ($this->capacity!='' ? "'".$this->db->escape($this->capacity)."'" : 'null'); - $sql.= ", capacity_units = " . ($this->capacity_units!='' ? "'".$this->db->escape($this->capacity_units)."'": 'null'); + $sql.= ", capacity_units = " . ($this->capacity_units!='' ? "'".$this->db->escape($this->capacity_units)."'": 'null'); $sql.= ", weight = " . ($this->weight!='' ? "'".$this->db->escape($this->weight)."'" : 'null'); $sql.= ", weight_units = " . ($this->weight_units!='' ? "'".$this->db->escape($this->weight_units)."'": 'null'); $sql.= ", length = " . ($this->length!='' ? "'".$this->db->escape($this->length)."'" : 'null'); From 3fddef0c9e25b7173dbe43b6c4df51ecacc73664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 11 Sep 2019 22:27:09 +0200 Subject: [PATCH 043/980] add socialnetworks dictionary --- htdocs/adherents/card.php | 107 ++++++++---------- htdocs/adherents/class/adherent.class.php | 47 ++++++-- htdocs/admin/dict.php | 13 ++- htdocs/core/class/commonobject.class.php | 29 +++-- htdocs/core/lib/functions.lib.php | 36 +++--- .../core/modules/modSocialNetworks.class.php | 2 +- .../install/mysql/migration/10.0.0-11.0.0.sql | 30 ++++- htdocs/install/mysql/tables/llx_adherent.sql | 1 + htdocs/install/mysql/tables/llx_societe.sql | 9 +- htdocs/install/mysql/tables/llx_socpeople.sql | 5 +- htdocs/install/mysql/tables/llx_user.sql | 9 +- htdocs/societe/class/societe.class.php | 8 +- 12 files changed, 183 insertions(+), 113 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 5836bf48332..01e85616f3d 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -66,7 +66,19 @@ if (! empty($conf->mailmanspip->enabled)) $object = new Adherent($db); $extrafields = new ExtraFields($db); - +$sql = "SELECT rowid, code, label, url, active FROM ".MAIN_DB_PREFIX."c_socialnetworks"; +$socialnetworks = array(); +$resql = $db->query($sql); +if ($resql) { + while ($obj = $db->fetch_object($resql)) { + $socialnetworks[$obj->code] = array( + 'rowid' => $obj->rowid, + 'label' => $obj->label, + 'url' => $obj->url, + 'active' => $obj->active, + ); + } +} // fetch optionals attributes and labels $extralabels=$extrafields->fetch_name_optionals_label($object->table_element); @@ -302,10 +314,14 @@ if (empty($reshook)) $object->phone_perso = trim(GETPOST("phone_perso", 'alpha')); $object->phone_mobile= trim(GETPOST("phone_mobile", 'alpha')); $object->email = preg_replace('/\s+/', '', GETPOST("member_email", 'alpha')); - $object->skype = trim(GETPOST("skype", 'alpha')); - $object->twitter = trim(GETPOST("twitter", 'alpha')); - $object->facebook = trim(GETPOST("facebook", 'alpha')); - $object->linkedin = trim(GETPOST("linkedin", 'alpha')); + $object->socialnetworks = array(); + foreach ($socialnetworks as $key => $value) { + $object->socialnetworks[$key] = trim(GETPOST($key, 'alpha')); + } + //$object->skype = trim(GETPOST("skype", 'alpha')); + //$object->twitter = trim(GETPOST("twitter", 'alpha')); + //$object->facebook = trim(GETPOST("facebook", 'alpha')); + //$object->linkedin = trim(GETPOST("linkedin", 'alpha')); $object->birth = $birthdate; $object->typeid = GETPOST("typeid", 'int'); @@ -448,10 +464,10 @@ if (empty($reshook)) $phone=GETPOST("phone", 'alpha'); $phone_perso=GETPOST("phone_perso", 'alpha'); $phone_mobile=GETPOST("phone_mobile", 'alpha'); - $skype=GETPOST("member_skype", 'alpha'); - $twitter=GETPOST("member_twitter", 'alpha'); - $facebook=GETPOST("member_facebook", 'alpha'); - $linkedin=GETPOST("member_linkedin", 'alpha'); + // $skype=GETPOST("member_skype", 'alpha'); + // $twitter=GETPOST("member_twitter", 'alpha'); + // $facebook=GETPOST("member_facebook", 'alpha'); + // $linkedin=GETPOST("member_linkedin", 'alpha'); $email=preg_replace('/\s+/', '', GETPOST("member_email", 'alpha')); $login=GETPOST("member_login", 'alpha'); $pass=GETPOST("password", 'alpha'); @@ -478,11 +494,18 @@ if (empty($reshook)) $object->phone = $phone; $object->phone_perso = $phone_perso; $object->phone_mobile= $phone_mobile; + $object->socialnetworks = array(); + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (!$value['active']) continue; + $object->socialnetworks[$key] = GETPOST("member_".$key, 'alpha'); + } + } - $object->skype = $skype; - $object->twitter = $twitter; - $object->facebook = $facebook; - $object->linkedin = $linkedin; + // $object->skype = $skype; + // $object->twitter = $twitter; + // $object->facebook = $facebook; + // $object->linkedin = $linkedin; $object->email = $email; $object->login = $login; @@ -1015,29 +1038,12 @@ else // Mobile phone print ''.$langs->trans("PhoneMobile").''; - // Skype - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Skype").''; - } - - // Twitter - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Twitter").''; - } - - // Facebook - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Facebook").''; - } - - // LinkedIn - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("LinkedIn").''; - } + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (!$value['active']) continue; + print ''.$langs->trans($value['label']).''; + } + } // Birthday print "".$langs->trans("Birthday")."\n"; @@ -1284,29 +1290,12 @@ else // Mobile phone print ''.$langs->trans("PhoneMobile").'phone_mobile).'">'; - // Skype - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Skype").'skype).'">'; - } - - // Twitter - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Twitter").'twitter).'">'; - } - - // Facebook - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Facebook").'facebook).'">'; - } - - // LinkedIn - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("LinkedIn").'linkedin).'">'; - } + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (!$value['active']) continue; + print ''.$langs->trans($value['label']).''; + } + } // Birthday print "".$langs->trans("Birthday")."\n"; diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 7085f08be91..ac9701bc862 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -566,10 +566,11 @@ class Adherent extends CommonObject $sql.= ", country = ".($this->country_id>0?$this->db->escape($this->country_id):"null"); $sql.= ", state_id = ".($this->state_id>0?$this->db->escape($this->state_id):"null"); $sql.= ", email = '".$this->db->escape($this->email)."'"; - $sql.= ", skype = '".$this->db->escape($this->skype)."'"; - $sql.= ", twitter = '".$this->db->escape($this->twitter)."'"; - $sql.= ", facebook = '".$this->db->escape($this->facebook)."'"; - $sql.= ", linkedin = '".$this->db->escape($this->linkedin)."'"; + $sql.= ", socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks))."'"; + // $sql.= ", skype = '".$this->db->escape($this->skype)."'"; + // $sql.= ", twitter = '".$this->db->escape($this->twitter)."'"; + // $sql.= ", facebook = '".$this->db->escape($this->facebook)."'"; + // $sql.= ", linkedin = '".$this->db->escape($this->linkedin)."'"; $sql.= ", phone = ".($this->phone?"'".$this->db->escape($this->phone)."'":"null"); $sql.= ", phone_perso = ".($this->phone_perso?"'".$this->db->escape($this->phone_perso)."'":"null"); $sql.= ", phone_mobile = ".($this->phone_mobile?"'".$this->db->escape($this->phone_mobile)."'":"null"); @@ -1227,7 +1228,7 @@ class Adherent extends CommonObject $sql = "SELECT d.rowid, d.ref_ext, d.civility as civility_code, d.gender, d.firstname, d.lastname, d.societe as company, d.fk_soc, d.statut, d.public, d.address, d.zip, d.town, d.note_private,"; $sql.= " d.note_public,"; - $sql.= " d.email, d.skype, d.twitter, d.facebook, d.linkedin, d.phone, d.phone_perso, d.phone_mobile, d.login, d.pass, d.pass_crypted,"; + $sql.= " d.email, d.socialnetworks, d.skype, d.twitter, d.facebook, d.linkedin, d.phone, d.phone_perso, d.phone_mobile, d.login, d.pass, d.pass_crypted,"; $sql.= " d.photo, d.fk_adherent_type, d.morphy, d.entity,"; $sql.= " d.datec as datec,"; $sql.= " d.tms as datem,"; @@ -1306,10 +1307,38 @@ class Adherent extends CommonObject $this->phone_mobile = $obj->phone_mobile; $this->email = $obj->email; - $this->skype = $obj->skype; - $this->twitter = $obj->twitter; - $this->facebook = $obj->facebook; - $this->linkedin = $obj->linkedin; + $arraysocialnetworks = array(); + $updatesocial = false; + if (!empty($obj->skype)) { + $arraysocialnetworks['skype'] = $obj->skype; + $updatesocial = true; + } + if (!empty($obj->twitter)) { + $arraysocialnetworks['twitter'] = $obj->twitter; + $updatesocial = true; + } + if (!empty($obj->facebook)) { + $arraysocialnetworks['facebook'] = $obj->facebook; + $updatesocial = true; + } + if (!empty($obj->linkedin)) { + $arraysocialnetworks['linkedin'] = $obj->linkedin; + $updatesocial = true; + } + $this->socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true)); + if ($updatesocial) { + $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'adherent SET skype=null'; + $sqlupd .= ', twitter=null'; + $sqlupd .= ', facebook=null'; + $sqlupd .= ', linkedin=null'; + $sqlupd .= ', socialnetworks="'.$this->db->escape(json_encode($this->socialnetworks)).'"'; + $sqlupd .= ' WHERE rowid='.$this->id; + $this->db->query($sqlupd); + } + $this->skype = $this->socialnetworks['skype']; + $this->twitter = $this->socialnetworks['twitter']; + $this->facebook = $this->socialnetworks['facebook']; + $this->linkedin = $this->socialnetworks['linkedin']; $this->photo = $obj->photo; $this->statut = $obj->statut; diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index ff4c3cc6a6b..d466c899d01 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -88,7 +88,7 @@ $hookmanager->initHooks(array('admin')); // Put here declaration of dictionaries properties // Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this. -$taborder=array(9,0,4,3,2,0,1,8,19,16,27,0,5,11,0,32,33,34,0,6,0,29,0,7,24,28,17,35,36,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,37,0,25,0); +$taborder=array(9,0,4,3,2,0,1,8,19,16,27,38,0,5,11,0,32,33,34,0,6,0,29,0,7,24,28,17,35,36,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,37,0,25,0); // Name of SQL tables of dictionaries $tabname=array(); @@ -130,6 +130,7 @@ $tabname[34]= MAIN_DB_PREFIX."c_hrm_function"; $tabname[35]= MAIN_DB_PREFIX."c_exp_tax_cat"; $tabname[36]= MAIN_DB_PREFIX."c_exp_tax_range"; $tabname[37]= MAIN_DB_PREFIX."c_units"; +$tabname[38]= MAIN_DB_PREFIX."c_socialnetworks"; // Dictionary labels $tablib=array(); @@ -170,6 +171,7 @@ $tablib[34]= "DictionaryFunction"; $tablib[35]= "DictionaryExpenseTaxCat"; $tablib[36]= "DictionaryExpenseTaxRange"; $tablib[37]= "DictionaryMeasuringUnits"; +$tablib[38]= "DictionarySocialNetworks"; // Requests to extract data $tabsql=array(); @@ -210,6 +212,7 @@ $tabsql[34]= "SELECT rowid, pos, code, label, c_level, active FROM ".MAIN_DB_PRE $tabsql[35]= "SELECT c.rowid, c.label, c.active, c.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_cat c"; $tabsql[36]= "SELECT r.rowid, r.fk_c_exp_tax_cat, r.range_ik, r.active, r.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_range r"; $tabsql[37]= "SELECT r.rowid, r.code, r.label, r.short_label, r.unit_type, r.scale, r.active FROM ".MAIN_DB_PREFIX."c_units r"; +$tabsql[38]= "SELECT rowid, code, label, url, icon, active FROM ".MAIN_DB_PREFIX."c_socialnetworks"; // Criteria to sort dictionaries $tabsqlsort=array(); @@ -250,6 +253,7 @@ $tabsqlsort[34]="code ASC"; $tabsqlsort[35]="c.label ASC"; $tabsqlsort[36]="r.fk_c_exp_tax_cat ASC, r.range_ik ASC"; $tabsqlsort[37]="r.unit_type ASC, r.scale ASC, r.code ASC"; +$tabsqlsort[38]="rowid, code ASC"; // Nom des champs en resultat de select pour affichage du dictionnaire $tabfield=array(); @@ -290,6 +294,7 @@ $tabfield[34]= "code,label"; $tabfield[35]= "label"; $tabfield[36]= "range_ik,fk_c_exp_tax_cat"; $tabfield[37]= "code,label,short_label,unit_type,scale"; +$tabfield[38]= "code,label,url,icon"; // Nom des champs d'edition pour modification d'un enregistrement $tabfieldvalue=array(); @@ -330,6 +335,7 @@ $tabfieldvalue[34]= "code,label"; $tabfieldvalue[35]= "label"; $tabfieldvalue[36]= "range_ik,fk_c_exp_tax_cat"; $tabfieldvalue[37]= "code,label,short_label,unit_type,scale"; +$tabfieldvalue[38]= "code,label,url,icon"; // Nom des champs dans la table pour insertion d'un enregistrement $tabfieldinsert=array(); @@ -371,6 +377,7 @@ $tabfieldinsert[34]= "code,label"; $tabfieldinsert[35]= "label"; $tabfieldinsert[36]= "range_ik,fk_c_exp_tax_cat"; $tabfieldinsert[37]= "code,label,short_label,unit_type,scale"; +$tabfieldinsert[38]= "code,label,url,icon"; // Rowid name of field depending if field is autoincrement on or off.. // Use "" if id field is "rowid" and has autoincrement on @@ -413,6 +420,7 @@ $tabrowid[34]= "rowid"; $tabrowid[35]= ""; $tabrowid[36]= ""; $tabrowid[37]= ""; +$tabrowid[38]= ""; // Condition to show dictionary in setup page $tabcond=array(); @@ -453,6 +461,7 @@ $tabcond[34]= ! empty($conf->hrm->enabled); $tabcond[35]= ! empty($conf->expensereport->enabled); $tabcond[36]= ! empty($conf->expensereport->enabled); $tabcond[37]= ! empty($conf->product->enabled); +$tabcond[38]= ! empty($conf->socialnetworks->enabled); // List of help for fields $tabhelp=array(); @@ -493,6 +502,7 @@ $tabhelp[34] = array('code'=>$langs->trans("EnterAnyCode")); $tabhelp[35] = array(); $tabhelp[36] = array('range_ik'=>$langs->trans('PrevRangeToThisRange')); $tabhelp[37] = array('code'=>$langs->trans("EnterAnyCode")); +$tabhelp[38] = array('code'=>$langs->trans("EnterAnyCode"), 'url' => $langs->trans('UrlSocialNetworksDesc'), 'icon' => $langs->trans('FafaIconSocialNetworksDesc')); // List of check for fields (NOT USED YET) $tabfieldcheck=array(); @@ -533,6 +543,7 @@ $tabfieldcheck[34] = array(); $tabfieldcheck[35] = array(); $tabfieldcheck[36] = array(); $tabfieldcheck[37] = array(); +$tabfieldcheck[38] = array(); // Complete all arrays with entries found into modules complete_dictionary_with_modules($taborder, $tabname, $tablib, $tabsql, $tabsqlsort, $tabfield, $tabfieldvalue, $tabfieldinsert, $tabrowid, $tabcond, $tabhelp, $tabfieldcheck); diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index ebfe7f1abee..d8a4d40d20f 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -680,16 +680,23 @@ abstract class CommonObject $out.='
'; if (! empty($conf->socialnetworks->enabled)) { - if ($this->skype) $out.=dol_print_socialnetworks($this->skype, $this->id, $object->id, 'skype'); - $outdone++; - if ($this->jabberid) $out.=dol_print_socialnetworks($this->jabberid, $this->id, $object->id, 'jabber'); - $outdone++; - if ($this->twitter) $out.=dol_print_socialnetworks($this->twitter, $this->id, $object->id, 'twitter'); - $outdone++; - if ($this->facebook) $out.=dol_print_socialnetworks($this->facebook, $this->id, $object->id, 'facebook'); - $outdone++; - if ($this->linkedin) $out.=dol_print_socialnetworks($this->linkedin, $this->id, $object->id, 'linkedin'); - $outdone++; + if (is_array($this->socialnetworks) && count($this->socialnetworks)>0) { + foreach ($this->socialnetworks as $key => $value) { + $out.=dol_print_socialnetworks($value, $this->id, $object->id, $key); + $outdone++; + } + } else { + if ($this->skype) $out.=dol_print_socialnetworks($this->skype, $this->id, $object->id, 'skype'); + $outdone++; + if ($this->jabberid) $out.=dol_print_socialnetworks($this->jabberid, $this->id, $object->id, 'jabber'); + $outdone++; + if ($this->twitter) $out.=dol_print_socialnetworks($this->twitter, $this->id, $object->id, 'twitter'); + $outdone++; + if ($this->facebook) $out.=dol_print_socialnetworks($this->facebook, $this->id, $object->id, 'facebook'); + $outdone++; + if ($this->linkedin) $out.=dol_print_socialnetworks($this->linkedin, $this->id, $object->id, 'linkedin'); + $outdone++; + } } $out.='
'; @@ -4517,7 +4524,7 @@ abstract class CommonObject $parameters = array('modelspath'=>$modelspath,'modele'=>$modele,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'hidedesc'=>$hidedesc,'hideref'=>$hideref, 'moreparams'=>$moreparams); $reshook = $hookmanager->executeHooks('commonGenerateDocument', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks - + if(empty($reshook)) { dol_syslog("commonGenerateDocument modele=".$modele." outputlangs->defaultlang=".(is_object($outputlangs)?$outputlangs->defaultlang:'null')); diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 03c13a9c230..3563152c80b 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -2199,42 +2199,42 @@ function dol_print_socialnetworks($value, $cid, $socid, $type) { global $conf,$user,$langs; - $newskype=$value; + $htmllink=$value; if (empty($value)) return ' '; if (! empty($type)) { - $newskype ='
'; - $newskype.=img_picto($langs->trans(strtoupper($type)), $type.'.png', '', false, 0, 0, '', 'paddingright'); - $newskype.=$value; + $htmllink ='
'; + $htmllink.=img_picto($langs->trans(strtoupper($type)), $type.'.png', '', false, 0, 0, '', 'paddingright'); + $htmllink.=$value; if ($type == 'skype') { - $newskype.= ' '; - $newskype.=''; - $newskype.=''; - $newskype.=''; - $newskype.=''; - $newskype.=''; + $htmllink.= ' '; + $htmllink.=''; + $htmllink.=''; + $htmllink.=''; + $htmllink.=''; + $htmllink.=''; } if (($cid || $socid) && ! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->create && $type=='skype') { $addlink='AC_SKYPE'; $link=''; if (! empty($conf->global->AGENDA_ADDACTIONFORSKYPE)) $link=''.img_object($langs->trans("AddAction"), "calendar").''; - $newskype.=($link?' '.$link:''); + $htmllink.=($link?' '.$link:''); } - $newskype.='
'; + $htmllink.='
'; } else { $langs->load("errors"); - $newskype.=img_warning($langs->trans("ErrorBadSocialNetworkValue", $value)); + $htmllink.=img_warning($langs->trans("ErrorBadSocialNetworkValue", $value)); } - return $newskype; + return $htmllink; } /** diff --git a/htdocs/core/modules/modSocialNetworks.class.php b/htdocs/core/modules/modSocialNetworks.class.php index d8d8d8fb76e..a3fdd612f04 100644 --- a/htdocs/core/modules/modSocialNetworks.class.php +++ b/htdocs/core/modules/modSocialNetworks.class.php @@ -62,7 +62,7 @@ class modSocialNetworks extends DolibarrModules $this->dirs = array(); // Config pages - $this->config_page_url = array("socialnetworks.php"); + $this->config_page_url = array(/*"socialnetworks.php"*/); // Dependencies $this->hidden = ! empty($conf->global->MODULE_SOCIALNETWORKS_DISABLED); // A condition to hide module diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index cc375e72714..6c07c48770e 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -94,13 +94,13 @@ ALTER TABLE llx_accounting_account MODIFY COLUMN rowid bigint AUTO_INCREMENT; ALTER TABLE llx_supplier_proposaldet ADD COLUMN date_start datetime DEFAULT NULL; ALTER TABLE llx_supplier_proposaldet ADD COLUMN date_end datetime DEFAULT NULL; - + create table llx_c_hrm_public_holiday ( id integer AUTO_INCREMENT PRIMARY KEY, entity integer DEFAULT 0 NOT NULL, -- multi company id, 0 = all - fk_country integer, + fk_country integer, code varchar(62), dayrule varchar(64) DEFAULT '', -- 'easter', 'eastermonday', ... day integer, @@ -163,4 +163,30 @@ INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, m INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('IN-REPUBLICDAY', 0, 117, '', 0, 1, 26, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('IN-GANDI', 0, 117, '', 0, 10, 2, 1); +create table llx_c_socialnetworks +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + code varchar(100), + label varchar(150), + url text, + icon varchar(15), + active tinyint DEFAULT 1 NOT NULL +)ENGINE=innodb; + +ALTER TABLE llx_c_socialnetworks ADD UNIQUE INDEX idx_c_socialnetworks_code (code); + +INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('facebook', 'Facebook', 'https://www.facebook.com/{socialid}', 'fa-facebook', 1); +INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('skype', 'Skype', 'https://www.skype.com/{socialid}', 'fa-skype', 1); +INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('twitter', 'Twitter', 'https://www.twitter.com/{socialid}', 'fa-twitter', 1); +INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('linkedin', 'LinkedIn', 'https://www.linkedin.com/{socialid}', 'fa-linkedin', 1); +INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('instagram', 'Instagram', 'https://www.instagram.com/{socialid}', 'fa-instagram', 1); +INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('snapchat', 'Snapchat', '{socialid}', 'fa-snapchat', 1); +INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('googleplus', 'GooglePlus', 'https://www.googleplus.com/{socialid}', 'fa-googleplus', 1); +INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('youtube', 'Youtube', 'https://www.youtube.com/{socialid}', 'fa-youtube', 1); +INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('whatsapp', 'Whatsapp', '{socialid}', 'fa-whatsapp', 1); + +ALTER TABLE llx_adherent ADD COLUMN socialnetworks text DEFAULT NULL AFTER email; +ALTER TABLE llx_societe ADD COLUMN socialnetworks text DEFAULT NULL AFTER email; +ALTER TABLE llx_socpeople ADD COLUMN socialnetworks text DEFAULT NULL AFTER email; +ALTER TABLE llx_user ADD COLUMN socialnetworks text DEFAULT NULL AFTER personal_email; diff --git a/htdocs/install/mysql/tables/llx_adherent.sql b/htdocs/install/mysql/tables/llx_adherent.sql index 588fb323dae..45c87f25c67 100644 --- a/htdocs/install/mysql/tables/llx_adherent.sql +++ b/htdocs/install/mysql/tables/llx_adherent.sql @@ -48,6 +48,7 @@ create table llx_adherent country integer, email varchar(255), + socialnetworks text DEFAULT NULL, -- json with socialnetworks skype varchar(255), twitter varchar(255), -- facebook varchar(255), -- diff --git a/htdocs/install/mysql/tables/llx_societe.sql b/htdocs/install/mysql/tables/llx_societe.sql index e7a948d67c2..2c4e075a97e 100644 --- a/htdocs/install/mysql/tables/llx_societe.sql +++ b/htdocs/install/mysql/tables/llx_societe.sql @@ -34,7 +34,7 @@ create table llx_societe statut tinyint DEFAULT 0, -- statut parent integer, - status tinyint DEFAULT 1, -- cessation d'activité ( 1 -- en activité, 0 -- cessation d'activité) + status tinyint DEFAULT 1, -- cessation d'activité ( 1 -- en activité, 0 -- cessation d'activité) code_client varchar(24), -- code client code_fournisseur varchar(24), -- code founisseur @@ -50,7 +50,8 @@ create table llx_societe fax varchar(20), -- fax number url varchar(255), -- email varchar(128), -- - + + socialnetworks text DEFAULT NULL, -- json with socialnetworks skype varchar(255), -- twitter varchar(255), -- facebook varchar(255), -- @@ -60,7 +61,7 @@ create table llx_societe googleplus varchar(255), -- youtube varchar(255), -- whatsapp varchar(255), -- - + fk_effectif integer DEFAULT 0, -- fk_typent integer DEFAULT 0, -- fk_forme_juridique integer DEFAULT 0, -- juridical status @@ -111,7 +112,7 @@ create table llx_societe fk_entrepot integer DEFAULT 0, -- if we need a link between third party and warehouse webservices_url varchar(255), -- supplier webservice url webservices_key varchar(128), -- supplier webservice key - + tms timestamp, -- last modification date datec datetime, -- creation date fk_user_creat integer NULL, -- utilisateur qui a cree l'info diff --git a/htdocs/install/mysql/tables/llx_socpeople.sql b/htdocs/install/mysql/tables/llx_socpeople.sql index 4ed401e39da..cb373d015c5 100644 --- a/htdocs/install/mysql/tables/llx_socpeople.sql +++ b/htdocs/install/mysql/tables/llx_socpeople.sql @@ -41,7 +41,8 @@ create table llx_socpeople phone_mobile varchar(30), fax varchar(30), email varchar(255), - + + socialnetworks text DEFAULT NULL, -- json with socialnetworks jabberid varchar(255), skype varchar(255), twitter varchar(255), -- @@ -52,7 +53,7 @@ create table llx_socpeople googleplus varchar(255), -- youtube varchar(255), -- whatsapp varchar(255), -- - + photo varchar(255), no_email smallint NOT NULL DEFAULT 0, -- deprecated. Use table llx_mailing_unsubscribe instead priv smallint NOT NULL DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_user.sql b/htdocs/install/mysql/tables/llx_user.sql index ac29410873a..ac2f60faad2 100644 --- a/htdocs/install/mysql/tables/llx_user.sql +++ b/htdocs/install/mysql/tables/llx_user.sql @@ -24,7 +24,7 @@ create table llx_user ref_ext varchar(50), -- reference into an external system (not used by dolibarr) ref_int varchar(50), -- reference into an internal system (deprecated) - + employee tinyint DEFAULT 1, -- 1 if user is an employee fk_establishment integer DEFAULT 0, @@ -48,14 +48,15 @@ create table llx_user fk_state integer DEFAULT 0, fk_country integer DEFAULT 0, birth date, -- birthday - job varchar(128), + job varchar(128), office_phone varchar(20), office_fax varchar(20), user_mobile varchar(20), personal_mobile varchar(20), email varchar(255), personal_email varchar(255), - + + socialnetworks text DEFAULT NULL, -- json with socialnetworks jabberid varchar(255), skype varchar(255), twitter varchar(255), -- @@ -66,7 +67,7 @@ create table llx_user googleplus varchar(255), -- youtube varchar(255), -- whatsapp varchar(255), -- - + signature text DEFAULT NULL, admin smallint DEFAULT 0, module_comm smallint DEFAULT 1, diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 26ad0c6bed9..89d1308d8af 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1257,7 +1257,9 @@ class Societe extends CommonObject $sql .= ', s.status'; $sql .= ', s.price_level'; $sql .= ', s.tms as date_modification, s.fk_user_creat, s.fk_user_modif'; - $sql .= ', s.phone, s.fax, s.email, s.skype, s.twitter, s.facebook, s.linkedin, s.url, s.zip, s.town, s.note_private, s.note_public, s.model_pdf, s.client, s.fournisseur'; + $sql .= ', s.phone, s.fax, s.email'; + $sql .= ', s.socialnetworks, s.skype, s.twitter, s.facebook, s.linkedin'; + $sql .= ', s.url, s.zip, s.town, s.note_private, s.note_public, s.model_pdf, s.client, s.fournisseur'; $sql .= ', s.siren as idprof1, s.siret as idprof2, s.ape as idprof3, s.idprof4, s.idprof5, s.idprof6'; $sql .= ', s.capital, s.tva_intra'; $sql .= ', s.fk_typent as typent_id'; @@ -1309,7 +1311,7 @@ class Societe extends CommonObject $num=$this->db->num_rows($resql); if ($num > 1) { - $this->error='Fetch found several records. Rename one of tirdparties to avoid duplicate.'; + $this->error='Fetch found several records. Rename one of thirdparties to avoid duplicate.'; dol_syslog($this->error, LOG_ERR); $result = -2; } @@ -1355,6 +1357,8 @@ class Societe extends CommonObject $this->twitter = $obj->twitter; $this->facebook = $obj->facebook; $this->linkedin = $obj->linkedin; + $this->socialnetworks = json_decode($obj->socialnetworks); + $this->url = $obj->url; $this->phone = $obj->phone; $this->fax = $obj->fax; From e0f17cc71c65e0635d2cbd95597ea67bec671e2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 11 Sep 2019 22:47:23 +0200 Subject: [PATCH 044/980] add socialnetworks dictionary --- htdocs/core/lib/functions.lib.php | 4 ++-- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 3563152c80b..b59f66ed596 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3016,7 +3016,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ if (empty($srconly) && in_array($pictowithoutext, array( 'bank', 'close_title', 'delete', 'edit', 'ellipsis-h', 'filter', 'grip', 'grip_title', 'list', 'listlight', 'note', 'off', 'on', 'play', 'playdisabled', 'printer', 'resize', 'note', 'setup', 'sign-out', 'split', 'switch_off', 'switch_on', 'unlink', 'uparrow', '1downarrow', '1uparrow', '1leftarrow', '1rightarrow', - 'jabber','skype','twitter','facebook','linkedin', + 'jabber','skype','twitter','facebook','linkedin','instagram','snapchat','youtube','google-plus-g','whatsapp', 'chevron-left','chevron-right','chevron-down','chevron-top' ) )) { @@ -3133,7 +3133,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ elseif ($pictowithoutext == 'jabber') { $fakey = 'fa-comment-o'; } - elseif (in_array($pictowithoutext, array('skype', 'twitter', 'facebook', 'linkedin'))) { + elseif (in_array($pictowithoutext, array('skype', 'twitter', 'facebook', 'linkedin', 'instagram','snapchat','youtube','google-plus-g','whatsapp'))) { $fakey = 'fa-'.$pictowithoutext; if (empty($conf->global->MAIN_DISABLE_FONT_AWESOME_5)) $fa = 'fab'; } diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 6c07c48770e..3ffbce43eda 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -181,7 +181,7 @@ INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('twitte INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('linkedin', 'LinkedIn', 'https://www.linkedin.com/{socialid}', 'fa-linkedin', 1); INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('instagram', 'Instagram', 'https://www.instagram.com/{socialid}', 'fa-instagram', 1); INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('snapchat', 'Snapchat', '{socialid}', 'fa-snapchat', 1); -INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('googleplus', 'GooglePlus', 'https://www.googleplus.com/{socialid}', 'fa-googleplus', 1); +INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('googleplus', 'GooglePlus', 'https://www.googleplus.com/{socialid}', 'fa-google-plus-g', 1); INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('youtube', 'Youtube', 'https://www.youtube.com/{socialid}', 'fa-youtube', 1); INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('whatsapp', 'Whatsapp', '{socialid}', 'fa-whatsapp', 1); From dc2ea3cef9aeda14b66e533c22d241318263cc53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 11 Sep 2019 23:00:14 +0200 Subject: [PATCH 045/980] add socialnetworks dictionary --- htdocs/adherents/class/adherent.class.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index ac9701bc862..6dbd466b220 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -124,23 +124,32 @@ class Adherent extends CommonObject */ public $email; + /** + * @var array array of socialnetworks + */ + public $socialnetworks; + /** * @var string skype account + * @deprecated */ public $skype; /** * @var string twitter account + * @deprecated */ public $twitter; /** * @var string facebook account + * @deprecated */ public $facebook; /** * @var string linkedin account + * @deprecated */ public $linkedin; @@ -2440,6 +2449,12 @@ class Adherent extends CommonObject $this->twitter = 'twitterpseudo'; $this->facebook = 'facebookpseudo'; $this->linkedin = 'linkedinpseudo'; + $this->socialnetworks = array( + 'skype' => 'skypepseudo', + 'twitter' => 'twitterpseudo', + 'facebook' => 'facebookpseudo', + 'linkedin' => 'linkedinpseudo', + ); $this->phone = '0999999999'; $this->phone_perso = '0999999998'; $this->phone_mobile = '0999999997'; From 3e114768108923d6653466923047136602c52acc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 11 Sep 2019 23:09:20 +0200 Subject: [PATCH 046/980] add socialnetworks dictionary --- .../mysql/tables/llx_c_socialnetworks.key.sql | 19 ++++++++++++++ .../mysql/tables/llx_c_socialnetworks.sql | 26 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 htdocs/install/mysql/tables/llx_c_socialnetworks.key.sql create mode 100644 htdocs/install/mysql/tables/llx_c_socialnetworks.sql diff --git a/htdocs/install/mysql/tables/llx_c_socialnetworks.key.sql b/htdocs/install/mysql/tables/llx_c_socialnetworks.key.sql new file mode 100644 index 00000000000..2b7dcdc9d4e --- /dev/null +++ b/htdocs/install/mysql/tables/llx_c_socialnetworks.key.sql @@ -0,0 +1,19 @@ +-- ======================================================================== +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- ======================================================================== + + +ALTER TABLE llx_c_socialnetworks ADD UNIQUE INDEX idx_c_socialnetworks_code (code); diff --git a/htdocs/install/mysql/tables/llx_c_socialnetworks.sql b/htdocs/install/mysql/tables/llx_c_socialnetworks.sql new file mode 100644 index 00000000000..2460ca653a0 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_c_socialnetworks.sql @@ -0,0 +1,26 @@ +-- ======================================================================== +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- ======================================================================== + +create table llx_c_socialnetworks +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + code varchar(100), + label varchar(150), + url text, + icon varchar(15), + active tinyint DEFAULT 1 NOT NULL +)ENGINE=innodb; From 9f3c54e5a53c4142105e1d4b85ee83d8cc6fac66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 12 Sep 2019 18:04:24 +0200 Subject: [PATCH 047/980] definitions --- htdocs/contact/class/contact.class.php | 15 +++++++++++++++ htdocs/societe/class/societe.class.php | 11 +++++++++++ htdocs/user/class/user.class.php | 26 ++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index ebfafa698b7..e51a3358614 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -98,6 +98,17 @@ class Contact extends CommonObject public $code; public $email; + + /** + * @var array array of socialnetworks + */ + public $socialnetworks; + + /** + * Skype username + * @var string + * @deprecated + */ public $skype; public $photo; public $jabberid; @@ -122,6 +133,10 @@ class Contact extends CommonObject // END MODULEBUILDER PROPERTIES + /** + * Old copy + * @var Contact + */ public $oldcopy; // To contains a clone of this when we need to save old properties of object diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 89d1308d8af..cc01b3700b6 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -197,24 +197,35 @@ class Societe extends CommonObject * @var string */ public $email; + + /** + * @var array array of socialnetworks + */ + public $socialnetworks; + /** * Skype username * @var string + * @deprecated */ public $skype; + /** * Twitter username * @var string + * @deprecated */ public $twitter; /** * Facebook username * @var string + * @deprecated */ public $facebook; /** * LinkedIn username * @var string + * @deprecated */ public $linkedin; /** diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 4d78aa1b892..ad7f8e7ec27 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -72,9 +72,35 @@ class User extends CommonObject public $email; public $personal_email; + + /** + * @var array array of socialnetworks + */ + public $socialnetworks; + + /** + * Skype username + * @var string + * @deprecated + */ public $skype; + /** + * Twitter username + * @var string + * @deprecated + */ public $twitter; + /** + * Facebook username + * @var string + * @deprecated + */ public $facebook; + /** + * Linkedin username + * @var string + * @deprecated + */ public $linkedin; public $job; // job position From 62922884fec8b73de6d7243c6b6092541f72c4d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 12 Sep 2019 18:12:28 +0200 Subject: [PATCH 048/980] specimens --- htdocs/contact/class/contact.class.php | 5 ++++- htdocs/societe/class/societe.class.php | 6 ++++++ htdocs/user/class/user.class.php | 6 ++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index e51a3358614..77743ba26d6 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -1328,7 +1328,10 @@ class Contact extends CommonObject $this->country_code = 'FR'; $this->country = 'France'; $this->email = 'specimen@specimen.com'; - $this->skype = 'tom.hanson'; + $this->skype = 'tom.hanson'; + $this->socialnetworks = array( + 'skype' => 'tom.hanson', + ); $this->phone_pro = '0909090901'; $this->phone_perso = '0909090902'; diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index cc01b3700b6..f2d507059b9 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -3579,6 +3579,12 @@ class Societe extends CommonObject $this->twitter='tomhanson'; $this->facebook='tomhanson'; $this->linkedin='tomhanson'; + $this->socialnetworks = array( + 'skype' => 'tom.hanson', + 'twitter' => 'tomhanson', + 'facebook' => 'tomhanson', + 'linkedin' => 'tomhanson', + ); $this->url='http://www.specimen.com'; $this->phone='0909090901'; diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index ad7f8e7ec27..39d4066b84c 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -2713,6 +2713,12 @@ class User extends CommonObject $this->twitter='twitterpseudo'; $this->facebook='facebookpseudo'; $this->linkedin='linkedinpseudo'; + $this->socialnetworks = array( + 'skype' => 'skypepseudo', + 'twitter' => 'twitterpseudo', + 'facebook' => 'facebookpseudo', + 'linkedin' => 'linkedinpseudo', + ); $this->office_phone='0999999999'; $this->office_fax='0999999998'; $this->user_mobile='0999999997'; From 34f928556d642c9559520e6e0aadb8753c7e81b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 12 Sep 2019 18:32:47 +0200 Subject: [PATCH 049/980] work on user --- htdocs/user/class/user.class.php | 50 +++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 39d4066b84c..20a2fbb6fc2 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -272,7 +272,8 @@ class User extends CommonObject $login=trim($login); // Get user - $sql = "SELECT u.rowid, u.lastname, u.firstname, u.employee, u.gender, u.birth, u.email, u.personal_email, u.job, u.skype, u.twitter, u.facebook, u.linkedin,"; + $sql = "SELECT u.rowid, u.lastname, u.firstname, u.employee, u.gender, u.birth, u.email, u.personal_email, u.job,"; + $sql.= " u.socialnetworks, u.skype, u.twitter, u.facebook, u.linkedin,"; $sql.= " u.signature, u.office_phone, u.office_fax, u.user_mobile, u.personal_mobile,"; $sql.= " u.address, u.zip, u.town, u.fk_state as state_id, u.fk_country as country_id,"; $sql.= " u.admin, u.login, u.note,"; @@ -379,11 +380,39 @@ class User extends CommonObject $this->user_mobile = $obj->user_mobile; $this->personal_mobile = $obj->personal_mobile; $this->email = $obj->email; - $this->personal_email = $obj->personal_email; - $this->skype = $obj->skype; - $this->twitter = $obj->twitter; - $this->facebook = $obj->facebook; - $this->linkedin = $obj->linkedin; + $this->personal_email = $obj->personal_email; + $arraysocialnetworks = array(); + $updatesocial = false; + if (!empty($obj->skype)) { + $arraysocialnetworks['skype'] = $obj->skype; + $updatesocial = true; + } + if (!empty($obj->twitter)) { + $arraysocialnetworks['twitter'] = $obj->twitter; + $updatesocial = true; + } + if (!empty($obj->facebook)) { + $arraysocialnetworks['facebook'] = $obj->facebook; + $updatesocial = true; + } + if (!empty($obj->linkedin)) { + $arraysocialnetworks['linkedin'] = $obj->linkedin; + $updatesocial = true; + } + $this->socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true)); + if ($updatesocial) { + $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'user SET skype=null'; + $sqlupd .= ', twitter=null'; + $sqlupd .= ', facebook=null'; + $sqlupd .= ', linkedin=null'; + $sqlupd .= ', socialnetworks="'.$this->db->escape(json_encode($this->socialnetworks)).'"'; + $sqlupd .= ' WHERE rowid='.$this->id; + $this->db->query($sqlupd); + } + $this->skype = $this->socialnetworks['skype']; + $this->twitter = $this->socialnetworks['twitter']; + $this->facebook = $this->socialnetworks['facebook']; + $this->linkedin = $this->socialnetworks['linkedin']; $this->job = $obj->job; $this->signature = $obj->signature; $this->admin = $obj->admin; @@ -1576,10 +1605,11 @@ class User extends CommonObject $sql.= ", personal_mobile = '".$this->db->escape($this->personal_mobile)."'"; $sql.= ", email = '".$this->db->escape($this->email)."'"; $sql.= ", personal_email = '".$this->db->escape($this->personal_email)."'"; - $sql.= ", skype = '".$this->db->escape($this->skype)."'"; - $sql.= ", twitter = '".$this->db->escape($this->twitter)."'"; - $sql.= ", facebook = '".$this->db->escape($this->facebook)."'"; - $sql.= ", linkedin = '".$this->db->escape($this->linkedin)."'"; + $sql.= ", socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks))."'"; + //$sql.= ", skype = '".$this->db->escape($this->skype)."'"; + //$sql.= ", twitter = '".$this->db->escape($this->twitter)."'"; + //$sql.= ", facebook = '".$this->db->escape($this->facebook)."'"; + //$sql.= ", linkedin = '".$this->db->escape($this->linkedin)."'"; $sql.= ", job = '".$this->db->escape($this->job)."'"; $sql.= ", signature = '".$this->db->escape($this->signature)."'"; $sql.= ", accountancy_code = '".$this->db->escape($this->accountancy_code)."'"; From e4a0de245a313e11974336a2d9b3f894b081822a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 12 Sep 2019 18:41:26 +0200 Subject: [PATCH 050/980] work on user --- htdocs/adherents/class/adherent.class.php | 3 ++- htdocs/user/class/user.class.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 6dbd466b220..eb3e225c4d6 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -1334,7 +1334,8 @@ class Adherent extends CommonObject $arraysocialnetworks['linkedin'] = $obj->linkedin; $updatesocial = true; } - $this->socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true)); + $socialarray = ($obj->socialnetworks==''?array():json_decode($obj->socialnetworks, true)); + $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); if ($updatesocial) { $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'adherent SET skype=null'; $sqlupd .= ', twitter=null'; diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 20a2fbb6fc2..cfb79cfc06f 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -399,7 +399,8 @@ class User extends CommonObject $arraysocialnetworks['linkedin'] = $obj->linkedin; $updatesocial = true; } - $this->socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true)); + $socialarray = ($obj->socialnetworks==''?array():json_decode($obj->socialnetworks, true)); + $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); if ($updatesocial) { $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'user SET skype=null'; $sqlupd .= ', twitter=null'; From fa44af1df8ab4c1d2b1e4e29015fb6384787ee39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 12 Sep 2019 20:03:28 +0200 Subject: [PATCH 051/980] work on user --- htdocs/adherents/card.php | 6 +- htdocs/user/card.php | 191 +++++++++++++++++++++++--------------- 2 files changed, 120 insertions(+), 77 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 01e85616f3d..77c54c5736e 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -66,6 +66,10 @@ if (! empty($conf->mailmanspip->enabled)) $object = new Adherent($db); $extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels=$extrafields->fetch_name_optionals_label($object->table_element); + $sql = "SELECT rowid, code, label, url, active FROM ".MAIN_DB_PREFIX."c_socialnetworks"; $socialnetworks = array(); $resql = $db->query($sql); @@ -79,8 +83,6 @@ if ($resql) { ); } } -// fetch optionals attributes and labels -$extralabels=$extrafields->fetch_name_optionals_label($object->table_element); // Get object canvas (By default, this is not defined, so standard usage of dolibarr) $object->getCanvas($id); diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 13035d1fb0e..ab2d47dbe87 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -100,6 +100,20 @@ $extrafields = new ExtraFields($db); // fetch optionals attributes and labels $extralabels=$extrafields->fetch_name_optionals_label($object->table_element); +$sql = "SELECT rowid, code, label, url, active FROM ".MAIN_DB_PREFIX."c_socialnetworks"; +$socialnetworks = array(); +$resql = $db->query($sql); +if ($resql) { + while ($obj = $db->fetch_object($resql)) { + $socialnetworks[$obj->code] = array( + 'rowid' => $obj->rowid, + 'label' => $obj->label, + 'url' => $obj->url, + 'active' => $obj->active, + ); + } +} + // Initialize technical object to manage hooks. Note that conf->hooks_modules contains array $hookmanager->initHooks(array('usercard','globalcard')); @@ -212,11 +226,17 @@ if (empty($reshook)) { $object->office_fax = GETPOST("office_fax", 'alphanohtml'); $object->user_mobile = GETPOST("user_mobile", 'alphanohtml'); - $object->skype = GETPOST("skype", 'alphanohtml'); - $object->twitter = GETPOST("twitter", 'alphanohtml'); - $object->facebook = GETPOST("facebook", 'alphanohtml'); - $object->linkedin = GETPOST("linkedin", 'alphanohtml'); - + //$object->skype = GETPOST("skype", 'alphanohtml'); + //$object->twitter = GETPOST("twitter", 'alphanohtml'); + //$object->facebook = GETPOST("facebook", 'alphanohtml'); + //$object->linkedin = GETPOST("linkedin", 'alphanohtml'); + $object->socialnetworks = array(); + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (!$value['active']) continue; + $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml'); + } + } $object->email = preg_replace('/\s+/', '', GETPOST("email", 'alpha')); $object->job = GETPOST("job", 'alpha'); $object->signature = GETPOST("signature", 'none'); @@ -365,10 +385,17 @@ if (empty($reshook)) { $object->office_phone = GETPOST("office_phone", 'alphanohtml'); $object->office_fax = GETPOST("office_fax", 'alphanohtml'); $object->user_mobile = GETPOST("user_mobile", 'alphanohtml'); - $object->skype = GETPOST("skype", 'alpha'); - $object->twitter = GETPOST("twitter", 'alpha'); - $object->facebook = GETPOST("facebook", 'alpha'); - $object->linkedin = GETPOST("linkedin", 'alpha'); + //$object->skype = GETPOST("skype", 'alpha'); + //$object->twitter = GETPOST("twitter", 'alpha'); + //$object->facebook = GETPOST("facebook", 'alpha'); + //$object->linkedin = GETPOST("linkedin", 'alpha'); + $object->socialnetworks = array(); + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (!$value['active']) continue; + $object->socialnetworks[$key] = GETPOST($key, 'alpha'); + } + } $object->email = preg_replace('/\s+/', '', GETPOST("email", 'alpha')); $object->job = GETPOST("job", 'alpha'); $object->signature = GETPOST("signature", 'none'); @@ -625,10 +652,10 @@ if (empty($reshook)) { $ldap_phone = $attribute[$conf->global->LDAP_FIELD_PHONE]; $ldap_fax = $attribute[$conf->global->LDAP_FIELD_FAX]; $ldap_mobile = $attribute[$conf->global->LDAP_FIELD_MOBILE]; - $ldap_skype = $attribute[$conf->global->LDAP_FIELD_SKYPE]; - $ldap_twitter = $attribute[$conf->global->LDAP_FIELD_TWITTER]; - $ldap_facebook = $attribute[$conf->global->LDAP_FIELD_FACEBOOK]; - $ldap_linkedin = $attribute[$conf->global->LDAP_FIELD_LINKEDIN]; + $ldap_social['skype'] = $attribute[$conf->global->LDAP_FIELD_SKYPE]; + $ldap_social['twitter'] = $attribute[$conf->global->LDAP_FIELD_TWITTER]; + $ldap_social['facebook'] = $attribute[$conf->global->LDAP_FIELD_FACEBOOK]; + $ldap_social['linkedin'] = $attribute[$conf->global->LDAP_FIELD_LINKEDIN]; $ldap_mail = $attribute[$conf->global->LDAP_FIELD_MAIL]; $ldap_sid = $attribute[$conf->global->LDAP_FIELD_SID]; } @@ -1040,73 +1067,87 @@ if ($action == 'create' || $action == 'adduserldap') } print ''; - // Skype - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Skype").''; - print ''; - if (! empty($ldap_skype)) - { - print ''; - print $ldap_skype; + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (!$value['active']) continue; + print ''.$langs->trans($value['label']).''; + print ''; + if (! empty($ldap_social[$key])) { + print ''; + print $ldap_social[$key]; + } else { + print ''; + } + print ''; } - else - { - print ''; - } - print ''; } + // // Skype + // if (! empty($conf->socialnetworks->enabled)) + // { + // print ''.$langs->trans("Skype").''; + // print ''; + // if (! empty($ldap_skype)) + // { + // print ''; + // print $ldap_skype; + // } + // else + // { + // print ''; + // } + // print ''; + // } - // Twitter - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Twitter").''; - print ''; - if (! empty($ldap_twitter)) - { - print ''; - print $ldap_twitter; - } - else - { - print ''; - } - print ''; - } + // // Twitter + // if (! empty($conf->socialnetworks->enabled)) + // { + // print ''.$langs->trans("Twitter").''; + // print ''; + // if (! empty($ldap_twitter)) + // { + // print ''; + // print $ldap_twitter; + // } + // else + // { + // print ''; + // } + // print ''; + // } - // Facebook - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Facebook").''; - print ''; - if (! empty($ldap_facebook)) - { - print ''; - print $ldap_facebook; - } - else - { - print ''; - } - print ''; - } + // // Facebook + // if (! empty($conf->socialnetworks->enabled)) + // { + // print ''.$langs->trans("Facebook").''; + // print ''; + // if (! empty($ldap_facebook)) + // { + // print ''; + // print $ldap_facebook; + // } + // else + // { + // print ''; + // } + // print ''; + // } - // LinkedIn - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("LinkedIn").''; - print ''; - if (! empty($ldap_linkedin)) - { - print ''; - print $ldap_linkedin; - } - else - { - print ''; - } - print ''; - } + // // LinkedIn + // if (! empty($conf->socialnetworks->enabled)) + // { + // print ''.$langs->trans("LinkedIn").''; + // print ''; + // if (! empty($ldap_linkedin)) + // { + // print ''; + // print $ldap_linkedin; + // } + // else + // { + // print ''; + // } + // print ''; + // } // EMail print 'global->USER_MAIL_REQUIRED)?' class="fieldrequired"':'').'>'.$langs->trans("EMail").''; From cd109d04cdc9076bef5979c95813c411e0140515 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 12 Sep 2019 20:44:24 +0200 Subject: [PATCH 052/980] add function --- htdocs/adherents/card.php | 14 +------------- htdocs/core/lib/functions.lib.php | 25 +++++++++++++++++++++++++ htdocs/user/card.php | 14 +------------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 77c54c5736e..ce8ade06e09 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -70,19 +70,7 @@ $extrafields = new ExtraFields($db); // fetch optionals attributes and labels $extralabels=$extrafields->fetch_name_optionals_label($object->table_element); -$sql = "SELECT rowid, code, label, url, active FROM ".MAIN_DB_PREFIX."c_socialnetworks"; -$socialnetworks = array(); -$resql = $db->query($sql); -if ($resql) { - while ($obj = $db->fetch_object($resql)) { - $socialnetworks[$obj->code] = array( - 'rowid' => $obj->rowid, - 'label' => $obj->label, - 'url' => $obj->url, - 'active' => $obj->active, - ); - } -} +$socialnetworks = getArrayOfSocialNetworks(); // Get object canvas (By default, this is not defined, so standard usage of dolibarr) $object->getCanvas($id); diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index b59f66ed596..a51118b2c32 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -2186,6 +2186,31 @@ function dol_print_email($email, $cid = 0, $socid = 0, $addlink = 0, $max = 64, return $rep; } +/** + * Get array of social network dictionary + * + * @return array Array of Social Networks Dictionary + */ +function getArrayOfSocialNetworks() +{ + global $conf, $db; + $sql = "SELECT rowid, code, label, url, icon, active FROM ".MAIN_DB_PREFIX."c_socialnetworks"; + $socialnetworks = array(); + $resql = $db->query($sql); + if ($resql) { + while ($obj = $db->fetch_object($resql)) { + $socialnetworks[$obj->code] = array( + 'rowid' => $obj->rowid, + 'label' => $obj->label, + 'url' => $obj->url, + 'icon' => $obj->icon, + 'active' => $obj->active, + ); + } + } + return $socialnetworks; +} + /** * Show social network link * diff --git a/htdocs/user/card.php b/htdocs/user/card.php index ab2d47dbe87..e348dfbe273 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -100,19 +100,7 @@ $extrafields = new ExtraFields($db); // fetch optionals attributes and labels $extralabels=$extrafields->fetch_name_optionals_label($object->table_element); -$sql = "SELECT rowid, code, label, url, active FROM ".MAIN_DB_PREFIX."c_socialnetworks"; -$socialnetworks = array(); -$resql = $db->query($sql); -if ($resql) { - while ($obj = $db->fetch_object($resql)) { - $socialnetworks[$obj->code] = array( - 'rowid' => $obj->rowid, - 'label' => $obj->label, - 'url' => $obj->url, - 'active' => $obj->active, - ); - } -} +$socialnetworks = getArrayOfSocialNetworks(); // Initialize technical object to manage hooks. Note that conf->hooks_modules contains array $hookmanager->initHooks(array('usercard','globalcard')); From 6f33874d757c0d3bbd2282e492376463c55400a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 12 Sep 2019 21:13:00 +0200 Subject: [PATCH 053/980] add entity --- htdocs/admin/dict.php | 7 ++++--- htdocs/core/lib/functions.lib.php | 1 + .../install/mysql/migration/10.0.0-11.0.0.sql | 19 ++++++++++--------- htdocs/langs/en_US/admin.lang | 5 +++-- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index d466c899d01..e4af504fcc3 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -11,6 +11,7 @@ * Copyright (C) 2011-2016 Alexandre Spangaro * Copyright (C) 2015 Ferran Marcet * Copyright (C) 2016 Raphaël Doursenaud + * Copyright (C) 2019 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 @@ -212,7 +213,7 @@ $tabsql[34]= "SELECT rowid, pos, code, label, c_level, active FROM ".MAIN_DB_PRE $tabsql[35]= "SELECT c.rowid, c.label, c.active, c.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_cat c"; $tabsql[36]= "SELECT r.rowid, r.fk_c_exp_tax_cat, r.range_ik, r.active, r.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_range r"; $tabsql[37]= "SELECT r.rowid, r.code, r.label, r.short_label, r.unit_type, r.scale, r.active FROM ".MAIN_DB_PREFIX."c_units r"; -$tabsql[38]= "SELECT rowid, code, label, url, icon, active FROM ".MAIN_DB_PREFIX."c_socialnetworks"; +$tabsql[38]= "SELECT rowid, entity, code, label, url, icon, active FROM ".MAIN_DB_PREFIX."c_socialnetworks"; // Criteria to sort dictionaries $tabsqlsort=array(); @@ -294,7 +295,7 @@ $tabfield[34]= "code,label"; $tabfield[35]= "label"; $tabfield[36]= "range_ik,fk_c_exp_tax_cat"; $tabfield[37]= "code,label,short_label,unit_type,scale"; -$tabfield[38]= "code,label,url,icon"; +$tabfield[38]= "code,label,url,icon,entity"; // Nom des champs d'edition pour modification d'un enregistrement $tabfieldvalue=array(); @@ -377,7 +378,7 @@ $tabfieldinsert[34]= "code,label"; $tabfieldinsert[35]= "label"; $tabfieldinsert[36]= "range_ik,fk_c_exp_tax_cat"; $tabfieldinsert[37]= "code,label,short_label,unit_type,scale"; -$tabfieldinsert[38]= "code,label,url,icon"; +$tabfieldinsert[38]= "entity,code,label,url,icon"; // Rowid name of field depending if field is autoincrement on or off.. // Use "" if id field is "rowid" and has autoincrement on diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index a51118b2c32..9bb4c239663 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -2195,6 +2195,7 @@ function getArrayOfSocialNetworks() { global $conf, $db; $sql = "SELECT rowid, code, label, url, icon, active FROM ".MAIN_DB_PREFIX."c_socialnetworks"; + $sql.= " WHERE entity=".$conf->entity; $socialnetworks = array(); $resql = $db->query($sql); if ($resql) { diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 3ffbce43eda..fb884afba66 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -166,6 +166,7 @@ INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, m create table llx_c_socialnetworks ( rowid integer AUTO_INCREMENT PRIMARY KEY, + entity integer DEFAULT 1 NOT NULL, code varchar(100), label varchar(150), url text, @@ -175,15 +176,15 @@ create table llx_c_socialnetworks ALTER TABLE llx_c_socialnetworks ADD UNIQUE INDEX idx_c_socialnetworks_code (code); -INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('facebook', 'Facebook', 'https://www.facebook.com/{socialid}', 'fa-facebook', 1); -INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('skype', 'Skype', 'https://www.skype.com/{socialid}', 'fa-skype', 1); -INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('twitter', 'Twitter', 'https://www.twitter.com/{socialid}', 'fa-twitter', 1); -INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('linkedin', 'LinkedIn', 'https://www.linkedin.com/{socialid}', 'fa-linkedin', 1); -INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('instagram', 'Instagram', 'https://www.instagram.com/{socialid}', 'fa-instagram', 1); -INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('snapchat', 'Snapchat', '{socialid}', 'fa-snapchat', 1); -INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('googleplus', 'GooglePlus', 'https://www.googleplus.com/{socialid}', 'fa-google-plus-g', 1); -INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('youtube', 'Youtube', 'https://www.youtube.com/{socialid}', 'fa-youtube', 1); -INSERT INTO llx_c_socialnetworks (code, label, url, icon, active) VALUES('whatsapp', 'Whatsapp', '{socialid}', 'fa-whatsapp', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'facebook', 'Facebook', 'https://www.facebook.com/{socialid}', 'fa-facebook', 1); +INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'skype', 'Skype', 'https://www.skype.com/{socialid}', 'fa-skype', 1); +INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'twitter', 'Twitter', 'https://www.twitter.com/{socialid}', 'fa-twitter', 1); +INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'linkedin', 'LinkedIn', 'https://www.linkedin.com/{socialid}', 'fa-linkedin', 1); +INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'instagram', 'Instagram', 'https://www.instagram.com/{socialid}', 'fa-instagram', 1); +INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'snapchat', 'Snapchat', '{socialid}', 'fa-snapchat', 1); +INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'googleplus', 'GooglePlus', 'https://www.googleplus.com/{socialid}', 'fa-google-plus-g', 1); +INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'youtube', 'Youtube', 'https://www.youtube.com/{socialid}', 'fa-youtube', 1); +INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'whatsapp', 'Whatsapp', '{socialid}', 'fa-whatsapp', 1); ALTER TABLE llx_adherent ADD COLUMN socialnetworks text DEFAULT NULL AFTER email; ALTER TABLE llx_societe ADD COLUMN socialnetworks text DEFAULT NULL AFTER email; diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index a8f7f9643ce..5fac7433680 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -149,7 +149,7 @@ SystemToolsAreaDesc=This area provides administration functions. Use the menu to Purge=Purge PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in %s directory). Using this feature is not normally necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server. PurgeDeleteLogFile=Delete log files, including %s defined for Syslog module (no risk of losing data) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. PurgeDeleteTemporaryFilesShort=Delete temporary files PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: %s.
This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files. PurgeRunNow=Purge now @@ -476,7 +476,7 @@ TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowled PageUrlForDefaultValues=You must enter the relative path of the page URL. If you include parameters in URL, the default values will be effective if all parameters are set to same value. PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s PageUrlForDefaultValuesList=
Example:
For the page that lists third parties, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/" so use a path like mymodule/mypagelist.php and not custom/mymodule/mypagelist.php.
If you want default value only if url has some parameter, you can use %s -AlsoDefaultValuesAreEffectiveForActionCreate=Also note that overwritting default values for form creation works only for pages that were correctly designed (so with parameter action=create or presend...) +AlsoDefaultValuesAreEffectiveForActionCreate=Also note that overwritting default values for form creation works only for pages that were correctly designed (so with parameter action=create or presend...) EnableDefaultValues=Enable customization of default values EnableOverwriteTranslation=Enable usage of overwritten translation GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation. @@ -964,6 +964,7 @@ DictionaryAccountancyJournal=Accounting journals DictionaryEMailTemplates=Email Templates DictionaryUnits=Units DictionaryMeasuringUnits=Measuring Units +DictionarySocialNetworks=Social Networks DictionaryProspectStatus=Prospect status DictionaryHolidayTypes=Types of leave DictionaryOpportunityStatus=Lead status for project/lead From bed959bb383f51b09a4fa6c832fa77198bd31b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 12 Sep 2019 21:17:52 +0200 Subject: [PATCH 054/980] add entity --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 16 ++++++++-------- .../mysql/tables/llx_c_socialnetworks.sql | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index fb884afba66..03cb7cf80f7 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -177,14 +177,14 @@ create table llx_c_socialnetworks ALTER TABLE llx_c_socialnetworks ADD UNIQUE INDEX idx_c_socialnetworks_code (code); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'facebook', 'Facebook', 'https://www.facebook.com/{socialid}', 'fa-facebook', 1); -INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'skype', 'Skype', 'https://www.skype.com/{socialid}', 'fa-skype', 1); -INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'twitter', 'Twitter', 'https://www.twitter.com/{socialid}', 'fa-twitter', 1); -INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'linkedin', 'LinkedIn', 'https://www.linkedin.com/{socialid}', 'fa-linkedin', 1); -INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'instagram', 'Instagram', 'https://www.instagram.com/{socialid}', 'fa-instagram', 1); -INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'snapchat', 'Snapchat', '{socialid}', 'fa-snapchat', 1); -INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'googleplus', 'GooglePlus', 'https://www.googleplus.com/{socialid}', 'fa-google-plus-g', 1); -INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'youtube', 'Youtube', 'https://www.youtube.com/{socialid}', 'fa-youtube', 1); -INSERT INTO llx_c_socialnetworks (entity,code, label, url, icon, active) VALUES(1, 'whatsapp', 'Whatsapp', '{socialid}', 'fa-whatsapp', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'skype', 'Skype', 'https://www.skype.com/{socialid}', 'fa-skype', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'twitter', 'Twitter', 'https://www.twitter.com/{socialid}', 'fa-twitter', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'linkedin', 'LinkedIn', 'https://www.linkedin.com/{socialid}', 'fa-linkedin', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'instagram', 'Instagram', 'https://www.instagram.com/{socialid}', 'fa-instagram', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'snapchat', 'Snapchat', '{socialid}', 'fa-snapchat', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'googleplus', 'GooglePlus', 'https://www.googleplus.com/{socialid}', 'fa-google-plus-g', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'youtube', 'Youtube', 'https://www.youtube.com/{socialid}', 'fa-youtube', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'whatsapp', 'Whatsapp', '{socialid}', 'fa-whatsapp', 1); ALTER TABLE llx_adherent ADD COLUMN socialnetworks text DEFAULT NULL AFTER email; ALTER TABLE llx_societe ADD COLUMN socialnetworks text DEFAULT NULL AFTER email; diff --git a/htdocs/install/mysql/tables/llx_c_socialnetworks.sql b/htdocs/install/mysql/tables/llx_c_socialnetworks.sql index 2460ca653a0..44741a2704f 100644 --- a/htdocs/install/mysql/tables/llx_c_socialnetworks.sql +++ b/htdocs/install/mysql/tables/llx_c_socialnetworks.sql @@ -18,6 +18,7 @@ create table llx_c_socialnetworks ( rowid integer AUTO_INCREMENT PRIMARY KEY, + entity integer DEFAULT 1 NOT NULL, code varchar(100), label varchar(150), url text, From 230c14e1890a3533604a83a5ac76267ff5a98e0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 12 Sep 2019 22:32:41 +0200 Subject: [PATCH 055/980] add social networks --- .../mysql/data/llx_c_socialnetworks.sql | 55 +++++++++++++++++++ .../install/mysql/migration/10.0.0-11.0.0.sql | 23 ++++++++ 2 files changed, 78 insertions(+) create mode 100644 htdocs/install/mysql/data/llx_c_socialnetworks.sql diff --git a/htdocs/install/mysql/data/llx_c_socialnetworks.sql b/htdocs/install/mysql/data/llx_c_socialnetworks.sql new file mode 100644 index 00000000000..07c993525d8 --- /dev/null +++ b/htdocs/install/mysql/data/llx_c_socialnetworks.sql @@ -0,0 +1,55 @@ +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- + +-- +-- Ne pas placer de commentaire en fin de ligne, ce fichier est parsé lors +-- de l'install et tous les sigles '--' sont supprimés. +-- + +-- socialnetworks + +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'facebook', 'Facebook', 'https://www.facebook.com/{socialid}', 'fa-facebook', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'skype', 'Skype', 'https://www.skype.com/{socialid}', 'fa-skype', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'twitter', 'Twitter', 'https://www.twitter.com/{socialid}', 'fa-twitter', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'linkedin', 'LinkedIn', 'https://www.linkedin.com/{socialid}', 'fa-linkedin', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'instagram', 'Instagram', 'https://www.instagram.com/{socialid}', 'fa-instagram', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'snapchat', 'Snapchat', '{socialid}', 'fa-snapchat', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'googleplus', 'GooglePlus', 'https://www.googleplus.com/{socialid}', 'fa-google-plus-g', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'youtube', 'Youtube', 'https://www.youtube.com/{socialid}', 'fa-youtube', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'whatsapp', 'Whatsapp', '{socialid}', 'fa-whatsapp', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'tumblr', 'Tumblr', 'https://www.tumblr.com/{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'vero', 'Vero', 'https://vero.co/{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'viadeo', 'Viadeo', 'https://fr.viadeo.com/fr/{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'slack', 'Slack', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'xing', 'Xing', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'meetup', 'Meetup', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'pinterest', 'Pinterest', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'flickr', 'Flickr', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, '500px', '500px', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'giphy', 'Giphy', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'gifycat', 'Gificat', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'dailymotion', 'Dailymotion', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'vimeo', 'Vimeo', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'periscope', 'Periscope', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'twitch', 'Twitch', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'discord', 'Discord', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'wikipedia', 'Wikipedia', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'reddit', 'Reddit', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'quora', 'Quora', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'tripadvisor', 'Tripadvisor', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'mastodon', 'Mastodon', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'diaspora', 'Diaspora', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'viber', 'Viber', '{socialid}', '', 0); diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 03cb7cf80f7..15a06c62927 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -185,6 +185,29 @@ INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'googleplus', 'GooglePlus', 'https://www.googleplus.com/{socialid}', 'fa-google-plus-g', 1); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'youtube', 'Youtube', 'https://www.youtube.com/{socialid}', 'fa-youtube', 1); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'whatsapp', 'Whatsapp', '{socialid}', 'fa-whatsapp', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'tumblr', 'Tumblr', 'https://www.tumblr.com/{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'vero', 'Vero', 'https://vero.co/{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'viadeo', 'Viadeo', 'https://fr.viadeo.com/fr/{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'slack', 'Slack', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'xing', 'Xing', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'meetup', 'Meetup', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'pinterest', 'Pinterest', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'flickr', 'Flickr', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, '500px', '500px', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'giphy', 'Giphy', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'gifycat', 'Gificat', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'dailymotion', 'Dailymotion', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'vimeo', 'Vimeo', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'periscope', 'Periscope', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'twitch', 'Twitch', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'discord', 'Discord', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'wikipedia', 'Wikipedia', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'reddit', 'Reddit', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'quora', 'Quora', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'tripadvisor', 'Tripadvisor', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'mastodon', 'Mastodon', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'diaspora', 'Diaspora', '{socialid}', '', 0); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'viber', 'Viber', '{socialid}', '', 0); ALTER TABLE llx_adherent ADD COLUMN socialnetworks text DEFAULT NULL AFTER email; ALTER TABLE llx_societe ADD COLUMN socialnetworks text DEFAULT NULL AFTER email; From 1cd59cc16aa2b41b8a93379f3bd40c8f36016c57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 14 Sep 2019 11:26:31 +0200 Subject: [PATCH 056/980] work on user --- htdocs/adherents/card.php | 6 +- htdocs/contact/card.php | 181 +++++++++++++++---------- htdocs/contact/class/contact.class.php | 130 +++++++++++++----- htdocs/user/card.php | 6 +- 4 files changed, 214 insertions(+), 109 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index ce8ade06e09..1b099a55c10 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -487,7 +487,7 @@ if (empty($reshook)) $object->socialnetworks = array(); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) continue; + if (!$value['active']) break; $object->socialnetworks[$key] = GETPOST("member_".$key, 'alpha'); } } @@ -1030,7 +1030,7 @@ else if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) continue; + if (!$value['active']) break; print ''.$langs->trans($value['label']).''; } } @@ -1282,7 +1282,7 @@ else if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) continue; + if (!$value['active']) break; print ''.$langs->trans($value['label']).''; } } diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 76d0e3911b5..31758db3e15 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -62,6 +62,8 @@ $extrafields = new ExtraFields($db); // fetch optionals attributes and labels $extralabels=$extrafields->fetch_name_optionals_label($object->table_element); +$socialnetworks = getArrayOfSocialNetworks(); + // Get object canvas (By default, this is not defined, so standard usage of dolibarr) $object->getCanvas($id); $objcanvas=null; @@ -186,16 +188,23 @@ if (empty($reshook)) $object->town = GETPOST("town", 'alpha'); $object->country_id = GETPOST("country_id", 'int'); $object->state_id = GETPOST("state_id", 'int'); - $object->skype = GETPOST("skype", 'alpha'); - $object->twitter = GETPOST("twitter", 'alpha'); - $object->facebook = GETPOST("facebook", 'alpha'); - $object->linkedin = GETPOST("linkedin", 'alpha'); + //$object->jabberid = GETPOST("jabberid", 'alpha'); + //$object->skype = GETPOST("skype", 'alpha'); + //$object->twitter = GETPOST("twitter", 'alpha'); + //$object->facebook = GETPOST("facebook", 'alpha'); + //$object->linkedin = GETPOST("linkedin", 'alpha'); + $object->socialnetworks = array(); + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (!$value['active']) break; + $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml'); + } + } $object->email = GETPOST("email", 'alpha'); $object->phone_pro = GETPOST("phone_pro", 'alpha'); $object->phone_perso = GETPOST("phone_perso", 'alpha'); $object->phone_mobile = GETPOST("phone_mobile", 'alpha'); $object->fax = GETPOST("fax", 'alpha'); - $object->jabberid = GETPOST("jabberid", 'alpha'); $object->priv = GETPOST("priv", 'int'); $object->note_public = GETPOST("note_public", 'none'); $object->note_private = GETPOST("note_private", 'none'); @@ -359,15 +368,21 @@ if (empty($reshook)) $object->country_id = GETPOST("country_id", 'int'); $object->email = GETPOST("email", 'alpha'); - $object->skype = GETPOST("skype", 'alpha'); - $object->twitter = GETPOST("twitter", 'alpha'); - $object->facebook = GETPOST("facebook", 'alpha'); - $object->linkedin = GETPOST("linkedin", 'alpha'); + //$object->jabberid = GETPOST("jabberid", 'alpha'); + //$object->skype = GETPOST("skype", 'alpha'); + //$object->twitter = GETPOST("twitter", 'alpha'); + //$object->facebook = GETPOST("facebook", 'alpha'); + //$object->linkedin = GETPOST("linkedin", 'alpha'); + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (!$value['active']) break; + $object->socialnetworks[$key] = GETPOST($key, 'alpha'); + } + } $object->phone_pro = GETPOST("phone_pro", 'alpha'); $object->phone_perso = GETPOST("phone_perso", 'alpha'); $object->phone_mobile = GETPOST("phone_mobile", 'alpha'); $object->fax = GETPOST("fax", 'alpha'); - $object->jabberid = GETPOST("jabberid", 'alpha'); $object->priv = GETPOST("priv", 'int'); $object->note_public = GETPOST("note_public", 'none'); $object->note_private = GETPOST("note_private", 'none'); @@ -676,39 +691,50 @@ else } print ''; - if (! empty($conf->socialnetworks->enabled)) - { - // Jabber - if (! empty($conf->global->SOCIALNETWORKS_JABBER)) - { - print ''; - print 'jabberid).'">'; - } - // Skype - if (! empty($conf->global->SOCIALNETWORKS_SKYPE)) - { - print ''; - print 'skype).'">'; - } - // Twitter - if (! empty($conf->global->SOCIALNETWORKS_TWITTER)) - { - print ''; - print 'twitter).'">'; - } - // Facebook - if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK)) - { - print ''; - print 'facebook).'">'; - } - // LinkedIn - if (! empty($conf->global->SOCIALNETWORKS_LINKEDIN)) - { - print ''; - print 'linkedin).'">'; + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (!$value['active']) break; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; } } + // if (! empty($conf->socialnetworks->enabled)) + // { + // // Jabber + // if (! empty($conf->global->SOCIALNETWORKS_JABBER)) + // { + // print ''; + // print 'jabberid).'">'; + // } + // // Skype + // if (! empty($conf->global->SOCIALNETWORKS_SKYPE)) + // { + // print ''; + // print 'skype).'">'; + // } + // // Twitter + // if (! empty($conf->global->SOCIALNETWORKS_TWITTER)) + // { + // print ''; + // print 'twitter).'">'; + // } + // // Facebook + // if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK)) + // { + // print ''; + // print 'facebook).'">'; + // } + // // LinkedIn + // if (! empty($conf->global->SOCIALNETWORKS_LINKEDIN)) + // { + // print ''; + // print 'linkedin).'">'; + // } + // } // Visibility print ''; @@ -968,39 +994,50 @@ else } print ''; - if (! empty($conf->socialnetworks->enabled)) - { - // Jabber ID - if (! empty($conf->global->SOCIALNETWORKS_JABBER)) - { - print ''; - print 'jabberid).'">'; - } - // Skype - if (! empty($conf->global->SOCIALNETWORKS_SKYPE)) - { - print ''; - print 'skype).'">'; - } - // Twitter - if (! empty($conf->global->SOCIALNETWORKS_TWITTER)) - { - print ''; - print 'twitter).'">'; - } - // Facebook - if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK)) - { - print ''; - print 'facebook).'">'; - } - // LinkedIn - if (! empty($conf->global->SOCIALNETWORKS_LINKEDIN)) - { - print ''; - print 'linkedin).'">'; + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (!$value['active']) break; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; } } + // if (! empty($conf->socialnetworks->enabled)) + // { + // // Jabber ID + // if (! empty($conf->global->SOCIALNETWORKS_JABBER)) + // { + // print ''; + // print 'jabberid).'">'; + // } + // // Skype + // if (! empty($conf->global->SOCIALNETWORKS_SKYPE)) + // { + // print ''; + // print 'skype).'">'; + // } + // // Twitter + // if (! empty($conf->global->SOCIALNETWORKS_TWITTER)) + // { + // print ''; + // print 'twitter).'">'; + // } + // // Facebook + // if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK)) + // { + // print ''; + // print 'facebook).'">'; + // } + // // LinkedIn + // if (! empty($conf->global->SOCIALNETWORKS_LINKEDIN)) + // { + // print ''; + // print 'linkedin).'">'; + // } + // } // Visibility print ''; diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 77743ba26d6..082c178ef12 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -110,8 +110,36 @@ class Contact extends CommonObject * @deprecated */ public $skype; - public $photo; + + /** + * Twitter username + * @var string + * @deprecated + */ + public $twitter; + + /** + * Facebook username + * @var string + * @deprecated + */ + public $facebook; + + /** + * Linkedin username + * @var string + * @deprecated + */ + public $linkedin; + + /** + * Jabber username + * @var string + * @deprecated + */ public $jabberid; + + public $photo; public $phone_pro; public $phone_perso; public $phone_mobile; @@ -357,10 +385,12 @@ class Contact extends CommonObject $sql .= ", poste='".$this->db->escape($this->poste)."'"; $sql .= ", fax='".$this->db->escape($this->fax)."'"; $sql .= ", email='".$this->db->escape($this->email)."'"; - $sql .= ", skype='".$this->db->escape($this->skype)."'"; - $sql .= ", twitter='".$this->db->escape($this->twitter)."'"; - $sql .= ", facebook='".$this->db->escape($this->facebook)."'"; - $sql .= ", linkedin='".$this->db->escape($this->linkedin)."'"; + $sql .= ", socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks))."'"; + //$sql .= ", jabberid = ".(isset($this->jabberid)?"'".$this->db->escape($this->jabberid)."'":"null"); + //$sql .= ", skype='".$this->db->escape($this->skype)."'"; + //$sql .= ", twitter='".$this->db->escape($this->twitter)."'"; + //$sql .= ", facebook='".$this->db->escape($this->facebook)."'"; + //$sql .= ", linkedin='".$this->db->escape($this->linkedin)."'"; $sql .= ", photo='".$this->db->escape($this->photo)."'"; $sql .= ", birthday=".($this->birthday ? "'".$this->db->idate($this->birthday)."'" : "null"); $sql .= ", note_private = ".(isset($this->note_private)?"'".$this->db->escape($this->note_private)."'":"null"); @@ -368,7 +398,6 @@ class Contact extends CommonObject $sql .= ", phone = ".(isset($this->phone_pro)?"'".$this->db->escape($this->phone_pro)."'":"null"); $sql .= ", phone_perso = ".(isset($this->phone_perso)?"'".$this->db->escape($this->phone_perso)."'":"null"); $sql .= ", phone_mobile = ".(isset($this->phone_mobile)?"'".$this->db->escape($this->phone_mobile)."'":"null"); - $sql .= ", jabberid = ".(isset($this->jabberid)?"'".$this->db->escape($this->jabberid)."'":"null"); $sql .= ", priv = '".$this->db->escape($this->priv)."'"; $sql .= ", statut = ".$this->db->escape($this->statut); $sql .= ", fk_user_modif=".($user->id > 0 ? "'".$this->db->escape($user->id)."'":"NULL"); @@ -442,29 +471,34 @@ class Contact extends CommonObject $tmpobj->email = $this->email; $usermustbemodified++; } - if ($tmpobj->skype != $this->skype) + if (!empty(array_diff($tmpobj->socialnetworks, $this->socialnetworks))) { - $tmpobj->skype = $this->skype; + $tmpobj->socialnetworks = $this->socialnetworks; $usermustbemodified++; } - if ($tmpobj->twitter != $this->twitter) - { - $tmpobj->twitter = $this->twitter; - $usermustbemodified++; - } - if ($tmpobj->facebook != $this->facebook) - { - $tmpobj->facebook = $this->facebook; - $usermustbemodified++; - } - if ($tmpobj->linkedin != $this->linkedin) - { - $tmpobj->linkedin = $this->linkedin; - $usermustbemodified++; - } + // if ($tmpobj->skype != $this->skype) + // { + // $tmpobj->skype = $this->skype; + // $usermustbemodified++; + // } + // if ($tmpobj->twitter != $this->twitter) + // { + // $tmpobj->twitter = $this->twitter; + // $usermustbemodified++; + // } + // if ($tmpobj->facebook != $this->facebook) + // { + // $tmpobj->facebook = $this->facebook; + // $usermustbemodified++; + // } + // if ($tmpobj->linkedin != $this->linkedin) + // { + // $tmpobj->linkedin = $this->linkedin; + // $usermustbemodified++; + // } if ($usermustbemodified) { - $result=$tmpobj->update($user, 0, 1, 1, 1); + $result = $tmpobj->update($user, 0, 1, 1, 1); if ($result < 0) { $error++; } } } @@ -716,7 +750,8 @@ class Contact extends CommonObject $sql.= " c.fk_pays as country_id,"; $sql.= " c.fk_departement as state_id,"; $sql.= " c.birthday,"; - $sql.= " c.poste, c.phone, c.phone_perso, c.phone_mobile, c.fax, c.email, c.jabberid, c.skype, c.twitter, c.facebook, c.linkedin,"; + $sql.= " c.poste, c.phone, c.phone_perso, c.phone_mobile, c.fax, c.email, c.jabberid,"; + $sql.= " c.socialnetworks, c.skype, c.twitter, c.facebook, c.linkedin,"; $sql.= " c.photo,"; $sql.= " c.priv, c.note_private, c.note_public, c.default_lang, c.canvas,"; $sql.= " c.import_key,"; @@ -785,11 +820,45 @@ class Contact extends CommonObject $this->phone_mobile = trim($obj->phone_mobile); $this->email = $obj->email; - $this->jabberid = $obj->jabberid; - $this->skype = $obj->skype; - $this->twitter = $obj->twitter; - $this->facebook = $obj->facebook; - $this->linkedin = $obj->linkedin; + $arraysocialnetworks = array(); + $updatesocial = false; + if (!empty($obj->jabberid)) { + $arraysocialnetworks['jabber'] = $obj->jabberid; + $updatesocial = true; + } + if (!empty($obj->skype)) { + $arraysocialnetworks['skype'] = $obj->skype; + $updatesocial = true; + } + if (!empty($obj->twitter)) { + $arraysocialnetworks['twitter'] = $obj->twitter; + $updatesocial = true; + } + if (!empty($obj->facebook)) { + $arraysocialnetworks['facebook'] = $obj->facebook; + $updatesocial = true; + } + if (!empty($obj->linkedin)) { + $arraysocialnetworks['linkedin'] = $obj->linkedin; + $updatesocial = true; + } + $socialarray = ($obj->socialnetworks==''?array():json_decode($obj->socialnetworks, true)); + $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); + if ($updatesocial) { + $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'socpeople SET skype=null'; + $sqlupd .= ', twitter=null'; + $sqlupd .= ', facebook=null'; + $sqlupd .= ', linkedin=null'; + $sqlupd .= ', jabberid=null'; + $sqlupd .= ', socialnetworks="'.$this->db->escape(json_encode($this->socialnetworks)).'"'; + $sqlupd .= ' WHERE rowid='.$this->id; + $this->db->query($sqlupd); + } + $this->jabberid = $this->socialnetworks['jabber']; + $this->skype = $this->socialnetworks['skype']; + $this->twitter = $this->socialnetworks['twitter']; + $this->facebook = $this->socialnetworks['facebook']; + $this->linkedin = $this->socialnetworks['linkedin']; $this->photo = $obj->photo; $this->priv = $obj->priv; $this->mail = $obj->email; @@ -1332,7 +1401,6 @@ class Contact extends CommonObject $this->socialnetworks = array( 'skype' => 'tom.hanson', ); - $this->phone_pro = '0909090901'; $this->phone_perso = '0909090902'; $this->phone_mobile = '0909090903'; diff --git a/htdocs/user/card.php b/htdocs/user/card.php index e348dfbe273..fa297df75eb 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -221,7 +221,7 @@ if (empty($reshook)) { $object->socialnetworks = array(); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) continue; + if (!$value['active']) break; $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml'); } } @@ -380,7 +380,7 @@ if (empty($reshook)) { $object->socialnetworks = array(); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) continue; + if (!$value['active']) break; $object->socialnetworks[$key] = GETPOST($key, 'alpha'); } } @@ -1057,7 +1057,7 @@ if ($action == 'create' || $action == 'adduserldap') if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) continue; + if (!$value['active']) break; print ''.$langs->trans($value['label']).''; print ''; if (! empty($ldap_social[$key])) { From 5731f7402532340c4053d4ca09bdc2b81b8d5bd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 14 Sep 2019 12:00:39 +0200 Subject: [PATCH 057/980] work on user --- htdocs/user/card.php | 170 ++++++++++++++++++++++++------------------- 1 file changed, 97 insertions(+), 73 deletions(-) diff --git a/htdocs/user/card.php b/htdocs/user/card.php index fa297df75eb..6de4271ec83 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -110,7 +110,6 @@ $hookmanager->initHooks(array('usercard','globalcard')); /** * Actions */ - $parameters=array('id' => $id, 'socid' => $socid, 'group' => $group, 'caneditgroup' => $caneditgroup); $reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -221,7 +220,6 @@ if (empty($reshook)) { $object->socialnetworks = array(); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) break; $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml'); } } @@ -380,7 +378,6 @@ if (empty($reshook)) { $object->socialnetworks = array(); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) break; $object->socialnetworks[$key] = GETPOST($key, 'alpha'); } } @@ -1057,16 +1054,24 @@ if ($action == 'create' || $action == 'adduserldap') if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) break; - print ''.$langs->trans($value['label']).''; - print ''; - if (! empty($ldap_social[$key])) { - print ''; - print $ldap_social[$key]; + if ($value['active']) { + print ''.$langs->trans($value['label']).''; + print ''; + if (! empty($ldap_social[$key])) { + print ''; + print $ldap_social[$key]; + } else { + print ''; + } + print ''; } else { - print ''; + // if social network is not active but value exist we do not want to loose it + if (! empty($ldap_social[$key])) { + print ''; + } else { + print ''; + } } - print ''; } } // // Skype @@ -2347,73 +2352,92 @@ else } print ''; - // Skype - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Skype").''; - print ''; - if ($caneditfield && empty($object->ldap_sid)) - { - print ''; + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if ($value['active']) { + print ''.$langs->trans($value['label']).''; + print ''; + if ($caneditfield && empty($object->ldap_sid)) { + print ''; + } else { + print ''; + print $object->socialnetworks[$key]; + } + print ''; + } else { + // if social network is not active but value exist we do not want to loose it + print ''; + } } - else - { - print ''; - print $object->skype; - } - print ''; } - // Twitter - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Twitter").''; - print ''; - if ($caneditfield && empty($object->ldap_sid)) - { - print ''; - } - else - { - print ''; - print $object->twitter; - } - print ''; - } + // // Skype + // if (! empty($conf->socialnetworks->enabled)) + // { + // print ''.$langs->trans("Skype").''; + // print ''; + // if ($caneditfield && empty($object->ldap_sid)) + // { + // print ''; + // } + // else + // { + // print ''; + // print $object->skype; + // } + // print ''; + // } - // Facebook - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("Facebook").''; - print ''; - if ($caneditfield && empty($object->ldap_sid)) - { - print ''; - } - else - { - print ''; - print $object->facebook; - } - print ''; - } + // // Twitter + // if (! empty($conf->socialnetworks->enabled)) + // { + // print ''.$langs->trans("Twitter").''; + // print ''; + // if ($caneditfield && empty($object->ldap_sid)) + // { + // print ''; + // } + // else + // { + // print ''; + // print $object->twitter; + // } + // print ''; + // } - // LinkedIn - if (! empty($conf->socialnetworks->enabled)) - { - print ''.$langs->trans("LinkedIn").''; - print ''; - if ($caneditfield && empty($object->ldap_sid)) - { - print ''; - } - else - { - print ''; - print $object->linkedin; - } - print ''; - } + // // Facebook + // if (! empty($conf->socialnetworks->enabled)) + // { + // print ''.$langs->trans("Facebook").''; + // print ''; + // if ($caneditfield && empty($object->ldap_sid)) + // { + // print ''; + // } + // else + // { + // print ''; + // print $object->facebook; + // } + // print ''; + // } + + // // LinkedIn + // if (! empty($conf->socialnetworks->enabled)) + // { + // print ''.$langs->trans("LinkedIn").''; + // print ''; + // if ($caneditfield && empty($object->ldap_sid)) + // { + // print ''; + // } + // else + // { + // print ''; + // print $object->linkedin; + // } + // print ''; + // } // EMail print "".'global->USER_MAIL_REQUIRED)?' class="fieldrequired"':'').'>'.$langs->trans("EMail").''; From 79bd426363c858be2722ac31cd9044bd6254a3c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 14 Sep 2019 12:52:55 +0200 Subject: [PATCH 058/980] work on user --- htdocs/contact/card.php | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 31758db3e15..83143901148 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -196,7 +196,6 @@ if (empty($reshook)) $object->socialnetworks = array(); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) break; $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml'); } } @@ -375,7 +374,6 @@ if (empty($reshook)) //$object->linkedin = GETPOST("linkedin", 'alpha'); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) break; $object->socialnetworks[$key] = GETPOST($key, 'alpha'); } } @@ -693,13 +691,16 @@ else if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) break; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + if ($value['active']) { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + } elseif (!empty($object->socialnetworks[$key])) { + print ''; + } } } // if (! empty($conf->socialnetworks->enabled)) @@ -996,13 +997,16 @@ else if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) break; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + if ($value['active']) { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + } elseif (!empty($object->socialnetworks[$key])) { + print ''; + } } } // if (! empty($conf->socialnetworks->enabled)) From af63ac40514e6422c1251b823adbe437152767d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 14 Sep 2019 13:31:26 +0200 Subject: [PATCH 059/980] work on contact --- htdocs/adherents/card.php | 1 - htdocs/contact/card.php | 10 +++++++--- htdocs/contact/class/contact.class.php | 4 ++-- test/phpunit/ContactTest.php | 1 + 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 1b099a55c10..cbc7e5774e9 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -487,7 +487,6 @@ if (empty($reshook)) $object->socialnetworks = array(); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - if (!$value['active']) break; $object->socialnetworks[$key] = GETPOST("member_".$key, 'alpha'); } } diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 83143901148..d122ae509a7 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -196,7 +196,9 @@ if (empty($reshook)) $object->socialnetworks = array(); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml'); + if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml')!='') { + $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml'); + } } } $object->email = GETPOST("email", 'alpha'); @@ -374,7 +376,9 @@ if (empty($reshook)) //$object->linkedin = GETPOST("linkedin", 'alpha'); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - $object->socialnetworks[$key] = GETPOST($key, 'alpha'); + if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml')!='') { + $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml'); + } } } $object->phone_pro = GETPOST("phone_pro", 'alpha'); @@ -383,7 +387,7 @@ if (empty($reshook)) $object->fax = GETPOST("fax", 'alpha'); $object->priv = GETPOST("priv", 'int'); $object->note_public = GETPOST("note_public", 'none'); - $object->note_private = GETPOST("note_private", 'none'); + $object->note_private = GETPOST("note_private", 'none'); // Fill array 'array_options' with data from add form $ret = $extrafields->setOptionalsFromPost($extralabels, $object); diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 082c178ef12..2170927d2d7 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -750,8 +750,8 @@ class Contact extends CommonObject $sql.= " c.fk_pays as country_id,"; $sql.= " c.fk_departement as state_id,"; $sql.= " c.birthday,"; - $sql.= " c.poste, c.phone, c.phone_perso, c.phone_mobile, c.fax, c.email, c.jabberid,"; - $sql.= " c.socialnetworks, c.skype, c.twitter, c.facebook, c.linkedin,"; + $sql.= " c.poste, c.phone, c.phone_perso, c.phone_mobile, c.fax, c.email,"; + $sql.= " c.socialnetworks, c.jabberid, c.skype, c.twitter, c.facebook, c.linkedin,"; $sql.= " c.photo,"; $sql.= " c.priv, c.note_private, c.note_public, c.default_lang, c.canvas,"; $sql.= " c.import_key,"; diff --git a/test/phpunit/ContactTest.php b/test/phpunit/ContactTest.php index c0ed8d7843f..726b674220a 100755 --- a/test/phpunit/ContactTest.php +++ b/test/phpunit/ContactTest.php @@ -208,6 +208,7 @@ class ContactTest extends PHPUnit\Framework\TestCase $localobject->fax='New fax'; $localobject->email='newemail@newemail.com'; $localobject->jabberid='New im id'; + $localobject->socialnetworks['jabber']='New im id'; $localobject->default_lang='es_ES'; $result=$localobject->update($localobject->id, $user); From ccaa4cc1f31e73f17157c2c68841b23545b3a161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 14 Sep 2019 16:35:18 +0200 Subject: [PATCH 060/980] work on contact --- htdocs/adherents/card.php | 8 ++++++-- test/phpunit/ContactTest.php | 5 ++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index cbc7e5774e9..885c3ae2a20 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -306,7 +306,9 @@ if (empty($reshook)) $object->email = preg_replace('/\s+/', '', GETPOST("member_email", 'alpha')); $object->socialnetworks = array(); foreach ($socialnetworks as $key => $value) { - $object->socialnetworks[$key] = trim(GETPOST($key, 'alpha')); + if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml')!='') { + $object->socialnetworks[$key] = trim(GETPOST($key, 'alphanohtml')); + } } //$object->skype = trim(GETPOST("skype", 'alpha')); //$object->twitter = trim(GETPOST("twitter", 'alpha')); @@ -487,7 +489,9 @@ if (empty($reshook)) $object->socialnetworks = array(); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { - $object->socialnetworks[$key] = GETPOST("member_".$key, 'alpha'); + if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml')!='') { + $object->socialnetworks[$key] = GETPOST("member_".$key, 'alphanohtml'); + } } } diff --git a/test/phpunit/ContactTest.php b/test/phpunit/ContactTest.php index 726b674220a..cf9ddb07fd0 100755 --- a/test/phpunit/ContactTest.php +++ b/test/phpunit/ContactTest.php @@ -207,7 +207,6 @@ class ContactTest extends PHPUnit\Framework\TestCase $localobject->phone_mobile='New tel mobile'; $localobject->fax='New fax'; $localobject->email='newemail@newemail.com'; - $localobject->jabberid='New im id'; $localobject->socialnetworks['jabber']='New im id'; $localobject->default_lang='es_ES'; @@ -258,8 +257,8 @@ class ContactTest extends PHPUnit\Framework\TestCase $this->assertEquals($localobject->fax, $newobject->fax); print __METHOD__." old=".$localobject->email." new=".$newobject->email."\n"; $this->assertEquals($localobject->email, $newobject->email); - print __METHOD__." old=".$localobject->jabberid." new=".$newobject->jabberid."\n"; - $this->assertEquals($localobject->jabberid, $newobject->jabberid); + print __METHOD__." old=".$localobject->socialnetworks['jabber']." new=".$newobject->socialnetworks['jabber']."\n"; + $this->assertEquals($localobject->socialnetworks['jabber'], $newobject->socialnetworks['jabber']); print __METHOD__." old=".$localobject->default_lang." new=".$newobject->default_lang."\n"; $this->assertEquals($localobject->default_lang, $newobject->default_lang); From b673c88fab0493c4a236c013309866c82529946c Mon Sep 17 00:00:00 2001 From: Tim Otte Date: Wed, 25 Sep 2019 10:25:00 +0200 Subject: [PATCH 061/980] Fixed sql error --- htdocs/core/class/commondocgenerator.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index b671653a9b0..cca7f4da2a9 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -596,7 +596,7 @@ abstract class CommonDocGenerator $columns .= "$key, "; } $columns = substr($columns, 0, strlen($columns) - 2); - $resql = $this->db->query("SELECT $columns FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields AS ex INNER JOIN " . MAIN_DB_PREFIX . "product_fournisseur_price AS f ON ex.fk_object = f.rowid WHERE f.ref_fourn = " . $line->ref_fourn); + $resql = $this->db->query("SELECT $columns FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields AS ex INNER JOIN " . MAIN_DB_PREFIX . "product_fournisseur_price AS f ON ex.fk_object = f.rowid WHERE f.ref_fourn = '" . $line->ref_fourn . "'"); if ($this->db->num_rows($resql) > 0) { $resql = $this->db->fetch_object($resql); foreach ($extralabels as $key => $value) { From 10f7bd34947faa227b4a63caea5fa3f480216f89 Mon Sep 17 00:00:00 2001 From: Tim Otte Date: Fri, 27 Sep 2019 15:42:57 +0200 Subject: [PATCH 062/980] Restricted query of ExtraFields for supplier orders --- .../core/class/commondocgenerator.class.php | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index cca7f4da2a9..29f740593b6 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -587,21 +587,25 @@ abstract class CommonDocGenerator $extralabels = $extrafields->fetch_name_optionals_label($extrafieldkey, true); $line->fetch_optionals(); - $resarray = $this->fill_substitutionarray_with_extrafields($line, $resarray, $extrafields, $array_key, $outputlangs); + $resarray = $this->fill_substitutionarray_with_extrafields($line, $resarray, $extrafields, $array_key, $outputlangs); - // Add the product supplier extrafields to the substitutions - $extralabels=$extrafields->fetch_name_optionals_label("product_fournisseur_price"); - $columns = ""; - foreach ($extralabels as $key => $value) { - $columns .= "$key, "; - } - $columns = substr($columns, 0, strlen($columns) - 2); - $resql = $this->db->query("SELECT $columns FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields AS ex INNER JOIN " . MAIN_DB_PREFIX . "product_fournisseur_price AS f ON ex.fk_object = f.rowid WHERE f.ref_fourn = '" . $line->ref_fourn . "'"); - if ($this->db->num_rows($resql) > 0) { - $resql = $this->db->fetch_object($resql); + // Check if the current line belongs to a supplier order + if (get_class($line) == 'CommandeFournisseurLigne') { + // Add the product supplier extrafields to the substitutions + $extralabels=$extrafields->fetch_name_optionals_label("product_fournisseur_price"); + $columns = ""; foreach ($extralabels as $key => $value) { - $resarray['line_product_supplier_'.$key] = $resql->{$key}; + $columns .= "$key, "; } + $columns = substr($columns, 0, strlen($columns) - 2); + $resql = $this->db->query("SELECT $columns FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields AS ex INNER JOIN " . MAIN_DB_PREFIX . "product_fournisseur_price AS f ON ex.fk_object = f.rowid WHERE f.ref_fourn = '" . $line->ref_fourn . "'"); + if ($this->db->num_rows($resql) > 0) { + $resql = $this->db->fetch_object($resql); + foreach ($extralabels as $key => $value) { + $resarray['line_product_supplier_'.$key] = $resql->{$key}; + } + } + } // Load product data optional fields to the line -> enables to use "line_options_{extrafield}" From a8e73533b9ffb5658a1475a33fb0ad1fa2882945 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Fri, 27 Sep 2019 13:43:11 +0000 Subject: [PATCH 063/980] Fixing style errors. --- htdocs/core/class/commondocgenerator.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index 29f740593b6..d158d9756dd 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -605,7 +605,6 @@ abstract class CommonDocGenerator $resarray['line_product_supplier_'.$key] = $resql->{$key}; } } - } // Load product data optional fields to the line -> enables to use "line_options_{extrafield}" From 6c8dc75c960d7e459d52faa8a7d031e441e81d89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 29 Sep 2019 11:20:23 +0200 Subject: [PATCH 064/980] socialnetworks for thirdparties --- htdocs/contact/card.php | 2 +- htdocs/societe/card.php | 201 ++++++++++++++++--------- htdocs/societe/class/societe.class.php | 48 +++++- 3 files changed, 169 insertions(+), 82 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index d122ae509a7..9689a2be18e 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -697,7 +697,7 @@ else foreach ($socialnetworks as $key => $value) { if ($value['active']) { print ''; - print ''; + print ''; print ''; print ''; print ''; diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index ab224245de8..cdc1af37d4e 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -69,6 +69,8 @@ $extrafields = new ExtraFields($db); // fetch optionals attributes and labels $extralabels=$extrafields->fetch_name_optionals_label($object->table_element); +$socialnetworks = getArrayOfSocialNetworks(); + // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('thirdpartycard','globalcard')); @@ -146,7 +148,7 @@ if (empty($reshook)) $object->client = $object->client | $soc_origin->client; $object->fournisseur = $object->fournisseur | $soc_origin->fournisseur; $listofproperties=array( - 'address', 'zip', 'town', 'state_id', 'country_id', 'phone', 'phone_pro', 'fax', 'email', 'skype', 'twitter', 'facebook', 'linkedin', 'url', 'barcode', + 'address', 'zip', 'town', 'state_id', 'country_id', 'phone', 'phone_pro', 'fax', 'email', 'skype', 'twitter', 'facebook', 'linkedin', 'socialnetworks', 'url', 'barcode', 'idprof1', 'idprof2', 'idprof3', 'idprof4', 'idprof5', 'idprof6', 'tva_intra', 'effectif_id', 'forme_juridique', 'remise_percent', 'remise_supplier_percent', 'mode_reglement_supplier_id', 'cond_reglement_supplier_id', 'name_bis', 'stcomm_id', 'outstanding_limit', 'price_level', 'parent', 'default_lang', 'ref', 'ref_ext', 'import_key', 'fk_incoterms', 'fk_multicurrency', @@ -405,11 +407,19 @@ if (empty($reshook)) $object->town = GETPOST('town', 'alpha'); $object->country_id = GETPOST('country_id', 'int'); $object->state_id = GETPOST('state_id', 'int'); - $object->skype = GETPOST('skype', 'alpha'); - $object->twitter = GETPOST('twitter', 'alpha'); - $object->facebook = GETPOST('facebook', 'alpha'); - $object->linkedin = GETPOST('linkedin', 'alpha'); - $object->phone = GETPOST('phone', 'alpha'); + //$object->skype = GETPOST('skype', 'alpha'); + //$object->twitter = GETPOST('twitter', 'alpha'); + //$object->facebook = GETPOST('facebook', 'alpha'); + //$object->linkedin = GETPOST('linkedin', 'alpha'); + $object->socialnetworks = array(); + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml')!='') { + $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml'); + } + } + } + $object->phone = GETPOST('phone', 'alpha'); $object->fax = GETPOST('fax', 'alpha'); $object->email = trim(GETPOST('email', 'custom', 0, FILTER_SANITIZE_EMAIL)); $object->url = trim(GETPOST('url', 'custom', 0, FILTER_SANITIZE_URL)); @@ -971,10 +981,18 @@ else $object->zip = GETPOST('zipcode', 'alpha'); $object->town = GETPOST('town', 'alpha'); $object->state_id = GETPOST('state_id', 'int'); - $object->skype = GETPOST('skype', 'alpha'); - $object->twitter = GETPOST('twitter', 'alpha'); - $object->facebook = GETPOST('facebook', 'alpha'); - $object->linkedin = GETPOST('linkedin', 'alpha'); + //$object->skype = GETPOST('skype', 'alpha'); + //$object->twitter = GETPOST('twitter', 'alpha'); + //$object->facebook = GETPOST('facebook', 'alpha'); + //$object->linkedin = GETPOST('linkedin', 'alpha'); + $object->socialnetworks = array(); + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml')!='') { + $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml'); + } + } + } $object->phone = GETPOST('phone', 'alpha'); $object->fax = GETPOST('fax', 'alpha'); $object->email = GETPOST('email', 'custom', 0, FILTER_SANITIZE_EMAIL); @@ -1295,42 +1313,57 @@ else print ''.$form->editfieldkey('Web', 'url', '', $object, 0).''; print ''; - if (! empty($conf->socialnetworks->enabled)) - { - // Skype - if (! empty($conf->global->SOCIALNETWORKS_SKYPE)) - { - print ''.$form->editfieldkey('Skype', 'skype', '', $object, 0).''; - print ''; - print 'skype).'">'; - print ''; - } - // Twitter - if (! empty($conf->global->SOCIALNETWORKS_TWITTER)) - { - print ''.$form->editfieldkey('Twitter', 'twitter', '', $object, 0).''; - print ''; - print 'twitter).'">'; - print ''; - } - // Facebook - if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK)) - { - print ''.$form->editfieldkey('Facebook', 'facebook', '', $object, 0).''; - print ''; - print 'facebook).'">'; - print ''; - } - // LinkedIn - if (! empty($conf->global->SOCIALNETWORKS_LINKEDIN)) - { - print ''.$form->editfieldkey('LinkedIn', 'linkedin', '', $object, 0).''; - print ''; - print 'linkedin).'">'; - print ''; + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if ($value['active']) { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + } elseif (!empty($object->socialnetworks[$key])) { + print ''; + } } } + // if (! empty($conf->socialnetworks->enabled)) + // { + // // Skype + // if (! empty($conf->global->SOCIALNETWORKS_SKYPE)) + // { + // print ''.$form->editfieldkey('Skype', 'skype', '', $object, 0).''; + // print ''; + // print 'skype).'">'; + // print ''; + // } + // // Twitter + // if (! empty($conf->global->SOCIALNETWORKS_TWITTER)) + // { + // print ''.$form->editfieldkey('Twitter', 'twitter', '', $object, 0).''; + // print ''; + // print 'twitter).'">'; + // print ''; + // } + // // Facebook + // if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK)) + // { + // print ''.$form->editfieldkey('Facebook', 'facebook', '', $object, 0).''; + // print ''; + // print 'facebook).'">'; + // print ''; + // } + // // LinkedIn + // if (! empty($conf->global->SOCIALNETWORKS_LINKEDIN)) + // { + // print ''.$form->editfieldkey('LinkedIn', 'linkedin', '', $object, 0).''; + // print ''; + // print 'linkedin).'">'; + // print ''; + // } + // } + // Phone / Fax print ''.$form->editfieldkey('Phone', 'phone', '', $object, 0).''; print ''; @@ -1609,10 +1642,18 @@ else $object->town = GETPOST('town', 'alpha'); $object->country_id = GETPOST('country_id')?GETPOST('country_id', 'int'):$mysoc->country_id; $object->state_id = GETPOST('state_id', 'int'); - $object->skype = GETPOST('skype', 'alpha'); - $object->twitter = GETPOST('twitter', 'alpha'); - $object->facebook = GETPOST('facebook', 'alpha'); - $object->linkedin = GETPOST('linkedin', 'alpha'); + //$object->skype = GETPOST('skype', 'alpha'); + //$object->twitter = GETPOST('twitter', 'alpha'); + //$object->facebook = GETPOST('facebook', 'alpha'); + //$object->linkedin = GETPOST('linkedin', 'alpha'); + $object->socialnetworks = array(); + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml')!='') { + $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml'); + } + } + } $object->phone = GETPOST('phone', 'alpha'); $object->fax = GETPOST('fax', 'alpha'); $object->email = GETPOST('email', 'custom', 0, FILTER_SANITIZE_EMAIL); @@ -1918,33 +1959,47 @@ else print ''.$form->editfieldkey('Web', 'url', '', $object, 0).''; print ''; - if (! empty($conf->socialnetworks->enabled)) - { - // Skype - if (! empty($conf->global->SOCIALNETWORKS_SKYPE)) - { - print ''.$form->editfieldkey('Skype', 'skype', '', $object, 0).''; - print ''; - } - // Twitter - if (! empty($conf->global->SOCIALNETWORKS_TWITTER)) - { - print ''.$form->editfieldkey('Twitter', 'twitter', '', $object, 0).''; - print ''; - } - // Facebook - if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK)) - { - print ''.$form->editfieldkey('Facebook', 'facebook', '', $object, 0).''; - print ''; - } - // LinkedIn - if (! empty($conf->global->SOCIALNETWORKS_LINKEDIN)) - { - print ''.$form->editfieldkey('LinkedIn', 'linkedin', '', $object, 0).''; - print ''; + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if ($value['active']) { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + } elseif (!empty($object->socialnetworks[$key])) { + print ''; + } } - } + } + // if (! empty($conf->socialnetworks->enabled)) + // { + // // Skype + // if (! empty($conf->global->SOCIALNETWORKS_SKYPE)) + // { + // print ''.$form->editfieldkey('Skype', 'skype', '', $object, 0).''; + // print ''; + // } + // // Twitter + // if (! empty($conf->global->SOCIALNETWORKS_TWITTER)) + // { + // print ''.$form->editfieldkey('Twitter', 'twitter', '', $object, 0).''; + // print ''; + // } + // // Facebook + // if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK)) + // { + // print ''.$form->editfieldkey('Facebook', 'facebook', '', $object, 0).''; + // print ''; + // } + // // LinkedIn + // if (! empty($conf->global->SOCIALNETWORKS_LINKEDIN)) + // { + // print ''.$form->editfieldkey('LinkedIn', 'linkedin', '', $object, 0).''; + // print ''; + // } + // } // Phone / Fax print ''.$form->editfieldkey('Phone', 'phone', '', $object, 0).''; diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index ef2f5f66868..3c79e6ff61a 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -15,6 +15,7 @@ * Copyright (C) 2017 Rui Strecht * Copyright (C) 2018 Philippe Grand * Copyright (C) 2019 Josep Lluís Amador + * Copyright (C) 2019 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 @@ -1013,7 +1014,8 @@ class Societe extends CommonObject $sql .= ",phone = ".(! empty($this->phone)?"'".$this->db->escape($this->phone)."'":"null"); $sql .= ",fax = ".(! empty($this->fax)?"'".$this->db->escape($this->fax)."'":"null"); - $sql .= ",email = ".(! empty($this->email)?"'".$this->db->escape($this->email)."'":"null"); + $sql .= ",email = ".(! empty($this->email)?"'".$this->db->escape($this->email)."'":"null"); + $sql .= ", socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks))."'"; $sql .= ",skype = ".(! empty($this->skype)?"'".$this->db->escape($this->skype)."'":"null"); $sql .= ",twitter = ".(! empty($this->twitter)?"'".$this->db->escape($this->twitter)."'":"null"); $sql .= ",facebook = ".(! empty($this->facebook)?"'".$this->db->escape($this->facebook)."'":"null"); @@ -1363,12 +1365,41 @@ class Societe extends CommonObject $this->stcomm_id = $obj->fk_stcomm; // id statut commercial $this->statut_commercial = $libelle; // libelle statut commercial - $this->email = $obj->email; - $this->skype = $obj->skype; - $this->twitter = $obj->twitter; - $this->facebook = $obj->facebook; - $this->linkedin = $obj->linkedin; - $this->socialnetworks = json_decode($obj->socialnetworks); + $this->email = $obj->email; + $arraysocialnetworks = array(); + $updatesocial = false; + if (!empty($obj->skype)) { + $arraysocialnetworks['skype'] = $obj->skype; + $updatesocial = true; + } + if (!empty($obj->twitter)) { + $arraysocialnetworks['twitter'] = $obj->twitter; + $updatesocial = true; + } + if (!empty($obj->facebook)) { + $arraysocialnetworks['facebook'] = $obj->facebook; + $updatesocial = true; + } + if (!empty($obj->linkedin)) { + $arraysocialnetworks['linkedin'] = $obj->linkedin; + $updatesocial = true; + } + $socialarray = ($obj->socialnetworks==''?array():json_decode($obj->socialnetworks, true)); + $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); + if ($updatesocial) { + $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'societe SET skype=null'; + $sqlupd .= ', twitter=null'; + $sqlupd .= ', facebook=null'; + $sqlupd .= ', linkedin=null'; + $sqlupd .= ', socialnetworks="'.$this->db->escape(json_encode($this->socialnetworks)).'"'; + $sqlupd .= ' WHERE rowid='.$this->id; + $this->db->query($sqlupd); + } + + $this->skype = $this->socialnetworks['skype']; + $this->twitter = $this->socialnetworks['twitter']; + $this->facebook = $this->socialnetworks['facebook']; + $this->linkedin = $this->socialnetworks['linkedin']; $this->url = $obj->url; $this->phone = $obj->phone; @@ -3410,7 +3441,8 @@ class Societe extends CommonObject $this->skype=$member->skype; $this->twitter=$member->twitter; $this->facebook=$member->facebook; - $this->linkedin=$member->linkedin; + $this->linkedin=$member->linkedin; + $this->socialnetworks = $member->socialnetworks; $this->client = 1; // A member is a customer by default $this->code_client = ($customercode?$customercode:-1); From 05f3d86921a3b87c882f3cbd2a30cc4caf4cc797 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 29 Sep 2019 11:48:53 +0200 Subject: [PATCH 065/980] fix? --- htdocs/societe/class/societe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 3c79e6ff61a..0d44ced2ff0 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1384,7 +1384,7 @@ class Societe extends CommonObject $arraysocialnetworks['linkedin'] = $obj->linkedin; $updatesocial = true; } - $socialarray = ($obj->socialnetworks==''?array():json_decode($obj->socialnetworks, true)); + $socialarray = (empty($obj->socialnetworks)?array():json_decode($obj->socialnetworks, true)); $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); if ($updatesocial) { $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'societe SET skype=null'; From d0b06a1eab372dba798fe559f2166c8d8ff8e274 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 29 Sep 2019 15:39:59 +0200 Subject: [PATCH 066/980] Update llx_facture.sql --- htdocs/install/mysql/tables/llx_facture.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/tables/llx_facture.sql b/htdocs/install/mysql/tables/llx_facture.sql index 3c678699a7e..aa714c06500 100644 --- a/htdocs/install/mysql/tables/llx_facture.sql +++ b/htdocs/install/mysql/tables/llx_facture.sql @@ -41,7 +41,7 @@ create table llx_facture date_pointoftax date DEFAULT NULL, -- date point of tax (for GB) date_valid date, -- date validation tms timestamp, -- date creation/modification - date_cloture datetime, -- date de cloture + date_closing datetime, -- date de cloture paye smallint DEFAULT 0 NOT NULL, amount double(24,8) DEFAULT 0 NOT NULL, remise_percent real DEFAULT 0, -- remise relative @@ -63,7 +63,7 @@ create table llx_facture fk_user_author integer, -- user making creation fk_user_modif integer, -- user making last change fk_user_valid integer, -- user validating - fk_user_cloture integer, -- user closing + fk_user_closing integer, -- user closing module_source varchar(32), -- name of module when invoice generated by a dedicated module (POS, ...) pos_source varchar(32), -- name of POS station when invoice is generated by a POS module From f132f2f947c77b709d757629a3841e7cb4c0f16b Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 29 Sep 2019 15:40:26 +0200 Subject: [PATCH 067/980] Update 10.0.0-11.0.0.sql --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index d888602030c..ea959cd7a74 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -80,8 +80,8 @@ ALTER TABLE llx_extrafields ADD COLUMN printable boolean DEFAULT FALSE; ALTER TABLE llx_facture ADD COLUMN retained_warranty real DEFAULT NULL after situation_final; ALTER TABLE llx_facture ADD COLUMN retained_warranty_date_limit date DEFAULT NULL after retained_warranty; ALTER TABLE llx_facture ADD COLUMN retained_warranty_fk_cond_reglement integer DEFAULT NULL after retained_warranty_date_limit; -ALTER TABLE llx_facture ADD COLUMN date_cloture datetime DEFAULT NULL after date_valid; -ALTER TABLE llx_facture ADD COLUMN fk_user_cloture integer DEFAULT NULL after fk_user_valid; +ALTER TABLE llx_facture ADD COLUMN date_cosing datetime DEFAULT NULL after date_valid; +ALTER TABLE llx_facture ADD COLUMN fk_user_closing integer DEFAULT NULL after fk_user_valid; ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1 NOT NULL; From 5a096972c0e28875cd17a29f1d577d83543020d2 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 29 Sep 2019 15:42:39 +0200 Subject: [PATCH 068/980] Update list.php --- htdocs/compta/facture/list.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 54f0fdb6d08..caba275dc33 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -180,7 +180,7 @@ $arrayfields=array( 'rtp'=>array('label'=>"Rest", 'checked'=>0), 'f.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), 'f.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500), - 'f.date_cloture'=>array('label'=>"DateClosing", 'checked'=>0, 'position'=>500), + 'f.date_closing'=>array('label'=>"DateClosing", 'checked'=>0, 'position'=>500), 'f.fk_statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000), ); @@ -382,7 +382,7 @@ $sql.= ' f.rowid as id, f.ref, f.ref_client, f.type, f.note_private, f.note_publ $sql.= ' f.localtax1 as total_localtax1, f.localtax2 as total_localtax2,'; $sql.= ' f.datef as df, f.date_lim_reglement as datelimite,'; $sql.= ' f.paye as paye, f.fk_statut,'; -$sql.= ' f.datec as date_creation, f.tms as date_update, f.date_cloture as date_cloture,'; +$sql.= ' f.datec as date_creation, f.tms as date_update, f.date_closing as date_closing,'; if($conf->global->INVOICE_USE_SITUATION && $conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY) { $sql.= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final,f.situation_cycle_ref,f.situation_counter,'; @@ -496,7 +496,7 @@ if (! $sall) $sql.= ' f.localtax1, f.localtax2,'; $sql.= ' f.datef, f.date_lim_reglement,'; $sql.= ' f.paye, f.fk_statut,'; - $sql.= ' f.datec, f.tms, f.date_cloture,'; + $sql.= ' f.datec, f.tms, f.date_closing,'; $sql.= ' s.rowid, s.nom, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,'; $sql.= ' typent.code,'; $sql.= ' state.code_departement, state.nom,'; @@ -865,7 +865,7 @@ if ($resql) print ''; print ''; } - if (! empty($arrayfields['f.date_cloture']['checked'])) + if (! empty($arrayfields['f.date_closing']['checked'])) { print ''; print ''; @@ -937,7 +937,7 @@ if ($resql) print $hookmanager->resPrint; if (! empty($arrayfields['f.datec']['checked'])) print_liste_field_titre($arrayfields['f.datec']['label'], $_SERVER["PHP_SELF"], "f.datec", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); if (! empty($arrayfields['f.tms']['checked'])) print_liste_field_titre($arrayfields['f.tms']['label'], $_SERVER["PHP_SELF"], "f.tms", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); - if (! empty($arrayfields['f.date_cloture']['checked'])) print_liste_field_titre($arrayfields['f.date_cloture']['label'], $_SERVER["PHP_SELF"], "f.date_cloture", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); + if (! empty($arrayfields['f.date_closing']['checked'])) print_liste_field_titre($arrayfields['f.date_closing']['label'], $_SERVER["PHP_SELF"], "f.date_closing", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); if (! empty($arrayfields['f.fk_statut']['checked'])) print_liste_field_titre($arrayfields['f.fk_statut']['label'], $_SERVER["PHP_SELF"], "f.fk_statut,f.paye,f.type,dynamount_payed", "", $param, 'class="right"', $sortfield, $sortorder); print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); print "\n"; @@ -1268,11 +1268,11 @@ if ($resql) print ''; if (! $i) $totalarray['nbfield']++; } - // Date cloture - if (! empty($arrayfields['f.date_cloture']['checked'])) + // Date closing + if (! empty($arrayfields['f.date_closing']['checked'])) { print ''; - print dol_print_date($db->jdate($obj->date_cloture), 'dayhour', 'tzuser'); + print dol_print_date($db->jdate($obj->date_closing), 'dayhour', 'tzuser'); print ''; if (! $i) $totalarray['nbfield']++; } From 2e8b99606ef36a5ef6d4b8137f69eb4c771fee7a Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 29 Sep 2019 15:45:41 +0200 Subject: [PATCH 069/980] Update facture.class.php --- htdocs/compta/facture/class/facture.class.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 73323235448..823f7cf7e50 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2146,8 +2146,8 @@ class Facture extends CommonInvoice if (! $close_code) $sql.= ', paye=1'; if ($close_code) $sql.= ", close_code='".$this->db->escape($close_code)."'"; if ($close_note) $sql.= ", close_note='".$this->db->escape($close_note)."'"; - $sql.= ', fk_user_cloture = '.$user->id; - $sql.= ", date_cloture = '".$this->db->idate($now)."'"; + $sql.= ', fk_user_closing = '.$user->id; + $sql.= ", date_closing = '".$this->db->idate($now)."'"; $sql.= ' WHERE rowid = '.$this->id; $resql = $this->db->query($sql); @@ -2200,7 +2200,7 @@ class Facture extends CommonInvoice $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture'; $sql.= ' SET paye=0, fk_statut='.self::STATUS_VALIDATED.', close_code=null, close_note=null'; - $sql.= ' date_cloture as datecloture,'; + $sql.= ' date_closing as dateclosing,'; $sql.= ' fk_user_author, fk_user_valid, fk_user_cloture'; $sql.= ' WHERE rowid = '.$this->id; @@ -3527,8 +3527,8 @@ class Facture extends CommonInvoice public function info($id) { $sql = 'SELECT c.rowid, datec, date_valid as datev, tms as datem,'; - $sql.= ' date_cloture as datecloture,'; - $sql.= ' fk_user_author, fk_user_valid, fk_user_cloture'; + $sql.= ' date_closing as dateclosing,'; + $sql.= ' fk_user_author, fk_user_valid, fk_user_closing'; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as c'; $sql.= ' WHERE c.rowid = '.$id; @@ -3551,17 +3551,17 @@ class Facture extends CommonInvoice $vuser->fetch($obj->fk_user_valid); $this->user_validation = $vuser; } - if ($obj->fk_user_cloture) + if ($obj->fk_user_closing) { $cluser = new User($this->db); - $cluser->fetch($obj->fk_user_cloture); - $this->user_cloture = $cluser; + $cluser->fetch($obj->fk_user_closing); + $this->user_closing = $cluser; } $this->date_creation = $this->db->jdate($obj->datec); $this->date_modification = $this->db->jdate($obj->datem); $this->date_validation = $this->db->jdate($obj->datev); - $this->date_cloture = $this->db->jdate($obj->datecloture); + $this->date_closing = $this->db->jdate($obj->dateclosing); } $this->db->free($result); } From 4177c72ae0768ff2bcafff65949b089279e9dda0 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 29 Sep 2019 15:46:28 +0200 Subject: [PATCH 070/980] Update facture.class.php --- 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 823f7cf7e50..9fd49351586 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2201,7 +2201,7 @@ class Facture extends CommonInvoice $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture'; $sql.= ' SET paye=0, fk_statut='.self::STATUS_VALIDATED.', close_code=null, close_note=null'; $sql.= ' date_closing as dateclosing,'; - $sql.= ' fk_user_author, fk_user_valid, fk_user_cloture'; + $sql.= ' fk_user_author, fk_user_valid, fk_user_closing'; $sql.= ' WHERE rowid = '.$this->id; dol_syslog(get_class($this)."::set_unpaid", LOG_DEBUG); From cedad3dc269e10b26880374a17faf7fadeff2d94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 29 Sep 2019 11:56:53 +0200 Subject: [PATCH 071/980] fix? fix? fix --- htdocs/societe/class/societe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 0d44ced2ff0..6a15de6e97a 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1384,7 +1384,7 @@ class Societe extends CommonObject $arraysocialnetworks['linkedin'] = $obj->linkedin; $updatesocial = true; } - $socialarray = (empty($obj->socialnetworks)?array():json_decode($obj->socialnetworks, true)); + $socialarray = ((is_null($obj->socialnetworks) || $obj->socialnetworks=='')?array():json_decode($obj->socialnetworks, true)); $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); if ($updatesocial) { $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'societe SET skype=null'; From 4bac865205c0c9b33e745e68ad3291850fd3f699 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 29 Sep 2019 18:40:36 +0200 Subject: [PATCH 072/980] test --- htdocs/societe/class/societe.class.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 6a15de6e97a..0c02ea4dcbd 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1385,7 +1385,11 @@ class Societe extends CommonObject $updatesocial = true; } $socialarray = ((is_null($obj->socialnetworks) || $obj->socialnetworks=='')?array():json_decode($obj->socialnetworks, true)); - $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); + if (is_array($socialarray)) { + $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); + } else { + $this->socialnetworks = $arraysocialnetworks; + } if ($updatesocial) { $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'societe SET skype=null'; $sqlupd .= ', twitter=null'; From 1ef3a676441be253e372c7400971bc598700fa44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 29 Sep 2019 19:26:25 +0200 Subject: [PATCH 073/980] test --- htdocs/societe/class/societe.class.php | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 0c02ea4dcbd..20b27c9be41 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1385,11 +1385,7 @@ class Societe extends CommonObject $updatesocial = true; } $socialarray = ((is_null($obj->socialnetworks) || $obj->socialnetworks=='')?array():json_decode($obj->socialnetworks, true)); - if (is_array($socialarray)) { - $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); - } else { - $this->socialnetworks = $arraysocialnetworks; - } + $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); if ($updatesocial) { $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'societe SET skype=null'; $sqlupd .= ', twitter=null'; @@ -3611,10 +3607,10 @@ class Societe extends CommonObject $this->country_id=1; $this->country_code='FR'; $this->email='specimen@specimen.com'; - $this->skype='tom.hanson'; - $this->twitter='tomhanson'; - $this->facebook='tomhanson'; - $this->linkedin='tomhanson'; + // $this->skype='tom.hanson'; + // $this->twitter='tomhanson'; + // $this->facebook='tomhanson'; + // $this->linkedin='tomhanson'; $this->socialnetworks = array( 'skype' => 'tom.hanson', 'twitter' => 'tomhanson', From 1a12c93dc7d9e61d973695edf85c73a80f61f428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 29 Sep 2019 20:06:30 +0200 Subject: [PATCH 074/980] test --- htdocs/societe/class/societe.class.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 20b27c9be41..a8fe31362bc 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1016,10 +1016,10 @@ class Societe extends CommonObject $sql .= ",fax = ".(! empty($this->fax)?"'".$this->db->escape($this->fax)."'":"null"); $sql .= ",email = ".(! empty($this->email)?"'".$this->db->escape($this->email)."'":"null"); $sql .= ", socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks))."'"; - $sql .= ",skype = ".(! empty($this->skype)?"'".$this->db->escape($this->skype)."'":"null"); - $sql .= ",twitter = ".(! empty($this->twitter)?"'".$this->db->escape($this->twitter)."'":"null"); - $sql .= ",facebook = ".(! empty($this->facebook)?"'".$this->db->escape($this->facebook)."'":"null"); - $sql .= ",linkedin = ".(! empty($this->linkedin)?"'".$this->db->escape($this->linkedin)."'":"null"); + //$sql .= ",skype = ".(! empty($this->skype)?"'".$this->db->escape($this->skype)."'":"null"); + //$sql .= ",twitter = ".(! empty($this->twitter)?"'".$this->db->escape($this->twitter)."'":"null"); + //$sql .= ",facebook = ".(! empty($this->facebook)?"'".$this->db->escape($this->facebook)."'":"null"); + //$sql .= ",linkedin = ".(! empty($this->linkedin)?"'".$this->db->escape($this->linkedin)."'":"null"); $sql .= ",url = ".(! empty($this->url)?"'".$this->db->escape($this->url)."'":"null"); $sql .= ",parent = " . ($this->parent > 0 ? $this->parent : "null"); @@ -3607,10 +3607,10 @@ class Societe extends CommonObject $this->country_id=1; $this->country_code='FR'; $this->email='specimen@specimen.com'; - // $this->skype='tom.hanson'; - // $this->twitter='tomhanson'; - // $this->facebook='tomhanson'; - // $this->linkedin='tomhanson'; + $this->skype='tom.hanson'; + $this->twitter='tomhanson'; + $this->facebook='tomhanson'; + $this->linkedin='tomhanson'; $this->socialnetworks = array( 'skype' => 'tom.hanson', 'twitter' => 'tomhanson', From 0735bb58601f0f0889aaaccc5bd520501c81f948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 29 Sep 2019 20:21:05 +0200 Subject: [PATCH 075/980] test --- htdocs/societe/class/societe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index a8fe31362bc..976ff422104 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1384,7 +1384,7 @@ class Societe extends CommonObject $arraysocialnetworks['linkedin'] = $obj->linkedin; $updatesocial = true; } - $socialarray = ((is_null($obj->socialnetworks) || $obj->socialnetworks=='')?array():json_decode($obj->socialnetworks, true)); + $socialarray = ((is_null($obj->socialnetworks) || $obj->socialnetworks=='')?array():(array)json_decode($obj->socialnetworks, true)); $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); if ($updatesocial) { $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'societe SET skype=null'; From 21db14b22a14bc4a8011778a166a42cc95670233 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sun, 29 Sep 2019 18:21:26 +0000 Subject: [PATCH 076/980] Fixing style errors. --- htdocs/societe/class/societe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 976ff422104..58114a37cfa 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1384,7 +1384,7 @@ class Societe extends CommonObject $arraysocialnetworks['linkedin'] = $obj->linkedin; $updatesocial = true; } - $socialarray = ((is_null($obj->socialnetworks) || $obj->socialnetworks=='')?array():(array)json_decode($obj->socialnetworks, true)); + $socialarray = ((is_null($obj->socialnetworks) || $obj->socialnetworks=='')?array():(array) json_decode($obj->socialnetworks, true)); $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); if ($updatesocial) { $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'societe SET skype=null'; From c7120e9e31fd29b6fa8dec949c3dfaa652f0aa49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 29 Sep 2019 20:36:18 +0200 Subject: [PATCH 077/980] test --- htdocs/societe/class/societe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 58114a37cfa..1e764edbdb6 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1384,7 +1384,7 @@ class Societe extends CommonObject $arraysocialnetworks['linkedin'] = $obj->linkedin; $updatesocial = true; } - $socialarray = ((is_null($obj->socialnetworks) || $obj->socialnetworks=='')?array():(array) json_decode($obj->socialnetworks, true)); + $socialarray = (array) json_decode($obj->socialnetworks, true); $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); if ($updatesocial) { $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'societe SET skype=null'; From 564e22009dfa12d6ec998b69a2ab3fc7e07f7299 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 30 Sep 2019 18:22:37 +0200 Subject: [PATCH 078/980] Update facture.class.php --- 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 9fd49351586..7b17929e616 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2199,7 +2199,7 @@ class Facture extends CommonInvoice $this->db->begin(); $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture'; - $sql.= ' SET paye=0, fk_statut='.self::STATUS_VALIDATED.', close_code=null, close_note=null'; + $sql.= ' SET paye=0, fk_statut='.self::STATUS_VALIDATED.', close_code=null, close_note=null,'; $sql.= ' date_closing as dateclosing,'; $sql.= ' fk_user_author, fk_user_valid, fk_user_closing'; $sql.= ' WHERE rowid = '.$this->id; From 2da5a506a90e52ed647e4545f5755ee139f1fdbb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 30 Sep 2019 18:25:03 +0200 Subject: [PATCH 079/980] Update facture.class.php --- htdocs/compta/facture/class/facture.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 7b17929e616..281a04019db 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2200,8 +2200,8 @@ class Facture extends CommonInvoice $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture'; $sql.= ' SET paye=0, fk_statut='.self::STATUS_VALIDATED.', close_code=null, close_note=null,'; - $sql.= ' date_closing as dateclosing,'; - $sql.= ' fk_user_author, fk_user_valid, fk_user_closing'; + $sql.= ' date_closing=null,'; + $sql.= ' fk_user_closing=null'; $sql.= ' WHERE rowid = '.$this->id; dol_syslog(get_class($this)."::set_unpaid", LOG_DEBUG); From f32f528bc211a21526228437bf1aef9f4f759644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 30 Sep 2019 19:36:57 +0200 Subject: [PATCH 080/980] fix merge --- htdocs/core/lib/functions.lib.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 811ac2e22f1..e042d93ad36 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3160,13 +3160,8 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ elseif ($pictowithouttext == 'jabber') { $fakey = 'fa-comment-o'; } -<<<<<<< HEAD - elseif (in_array($pictowithoutext, array('skype', 'twitter', 'facebook', 'linkedin', 'instagram','snapchat','youtube','google-plus-g','whatsapp'))) { - $fakey = 'fa-'.$pictowithoutext; -======= - elseif (in_array($pictowithouttext, array('skype', 'twitter', 'facebook', 'linkedin'))) { + elseif (in_array($pictowithouttext, array('skype', 'twitter', 'facebook', 'linkedin', 'instagram','snapchat','youtube','google-plus-g','whatsapp'))) { $fakey = 'fa-'.$pictowithouttext; ->>>>>>> upstream/develop if (empty($conf->global->MAIN_DISABLE_FONT_AWESOME_5)) $fa = 'fab'; } // Img for type of views From b01bd979b544c929483c61bd29e9250fae5f193c Mon Sep 17 00:00:00 2001 From: ATM john Date: Mon, 30 Sep 2019 21:10:16 +0200 Subject: [PATCH 081/980] Unlock title button feature --- htdocs/core/lib/functions.lib.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 287623c6c55..e860938398a 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -8262,7 +8262,7 @@ function dolGetButtonTitle($label, $helpText = '', $iconClass = 'fa fa-file', $u $class = 'btnTitle'; // hidden conf keep during button transition TODO: remove this block - if (empty($conf->global->MAIN_USE_NEW_TITLE_BUTTON)) { + if (!empty($conf->global->MAIN_USE_OLD_TITLE_BUTTON)) { $class = 'butActionNew'; } if (! empty($params['morecss'])) $class.=' '.$params['morecss']; @@ -8280,7 +8280,7 @@ function dolGetButtonTitle($label, $helpText = '', $iconClass = 'fa fa-file', $u $attr['class'] .= ' refused'; // hidden conf keep during button transition TODO: remove this block - if(empty($conf->global->MAIN_USE_NEW_TITLE_BUTTON)){ + if(!empty($conf->global->MAIN_USE_OLD_TITLE_BUTTON)){ $attr['class'] = 'butActionNewRefused'; } @@ -8342,7 +8342,7 @@ function dolGetButtonTitle($label, $helpText = '', $iconClass = 'fa fa-file', $u $button.= ''; // hidden conf keep during button transition TODO: remove this block - if(empty($conf->global->MAIN_USE_NEW_TITLE_BUTTON)){ + if(!empty($conf->global->MAIN_USE_OLD_TITLE_BUTTON)){ $button='<'.$tag.' '.$compiledAttributes.' >'.$label.''; $button.= ''; $button.= ''; From be051e0f9d39a2aadd2a5262db9d75e8b7ddf963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 1 Oct 2019 00:10:33 +0200 Subject: [PATCH 082/980] work on socpeople list --- htdocs/contact/list.php | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index b0db8b0affb..8dc0fdc91b8 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -70,6 +70,7 @@ $search_phone_mobile=GETPOST("search_phone_mobile", 'alpha'); $search_fax=GETPOST("search_fax", 'alpha'); $search_email=GETPOST("search_email", 'alpha'); $search_no_email=GETPOST("search_no_email", 'int'); +$search_jabberid=GETPOST("search_jabberid", 'alpha'); $search_skype=GETPOST("search_skype", 'alpha'); $search_twitter=GETPOST("search_twitter", 'alpha'); $search_facebook=GETPOST("search_facebook", 'alpha'); @@ -135,6 +136,8 @@ $object = new Contact($db); $hookmanager->initHooks(array('contactlist')); $extrafields = new ExtraFields($db); +$socialnetworks = getArrayOfSocialNetworks(); + // fetch optionals attributes and labels $extralabels = $extrafields->fetch_name_optionals_label('contact'); $search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); @@ -230,6 +233,7 @@ if (empty($reshook)) $search_fax=""; $search_email=""; $search_no_email=-1; + $search_jabberid=""; $search_skype=""; $search_twitter=""; $search_facebook=""; @@ -267,7 +271,8 @@ $contactstatic=new Contact($db); $title = (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("Contacts") : $langs->trans("ContactsAddresses")); $sql = "SELECT s.rowid as socid, s.nom as name,"; -$sql.= " p.rowid, p.lastname as lastname, p.statut, p.firstname, p.zip, p.town, p.poste, p.email, p.no_email, p.skype,"; +$sql.= " p.rowid, p.lastname as lastname, p.statut, p.firstname, p.zip, p.town, p.poste, p.email, p.no_email,"; +$sql.= " p.socialnetworks, p.skype, p.facebook,"; $sql.= " p.phone as phone_pro, p.phone_mobile, p.phone_perso, p.fax, p.fk_pays, p.priv, p.datec as date_creation, p.tms as date_update,"; $sql.= " co.code as country_code"; // Add fields from extrafields @@ -327,6 +332,7 @@ if (strlen($search_phone_perso)) $sql.= natural_search('p.phone_perso', $sear if (strlen($search_phone_pro)) $sql.= natural_search('p.phone', $search_phone_pro); if (strlen($search_phone_mobile)) $sql.= natural_search('p.phone_mobile', $search_phone_mobile); if (strlen($search_fax)) $sql.= natural_search('p.fax', $search_fax); +if (strlen($search_jabberid)) $sql.= natural_search('p.jabberid', $search_jabberid); if (strlen($search_skype)) $sql.= natural_search('p.skype', $search_skype); if (strlen($search_twitter)) $sql.= natural_search('p.twitter', $search_twitter); if (strlen($search_facebook)) $sql.= natural_search('p.facebook', $search_facebook); @@ -766,7 +772,7 @@ while ($i < min($num, $limit)) $obj = $db->fetch_object($result); print ''; - + $arraysocialnetworks = (array) json_decode($obj->socialnetworks, true); $contactstatic->lastname=$obj->lastname; $contactstatic->firstname=''; $contactstatic->id=$obj->rowid; @@ -778,6 +784,7 @@ while ($i < min($num, $limit)) $contactstatic->phone_mobile=$obj->phone_mobile; $contactstatic->zip=$obj->zip; $contactstatic->town=$obj->town; + $contactstatic->socialnetworks = $arraysocialnetworks; // ID if (! empty($arrayfields['p.rowid']['checked'])) @@ -879,31 +886,31 @@ while ($i < min($num, $limit)) // Skype if (! empty($arrayfields['p.skype']['checked'])) { - if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($obj->skype, $obj->rowid, $obj->socid, 'skype').''; } + if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($arraysocialnetworks['skype'], $obj->rowid, $obj->socid, 'skype').''; } if (! $i) $totalarray['nbfield']++; } // Jabber if (! empty($arrayfields['p.jabberid']['checked'])) { - if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($obj->jabberid, $obj->rowid, $obj->socid, 'jabberid').''; } + if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($arraysocialnetworks['jabber'], $obj->rowid, $obj->socid, 'jabberid').''; } if (! $i) $totalarray['nbfield']++; } // Twitter if (! empty($arrayfields['p.twitter']['checked'])) { - if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($obj->twitter, $obj->rowid, $obj->socid, 'twitter').''; } + if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($arraysocialnetworks['twitter'], $obj->rowid, $obj->socid, 'twitter').''; } if (! $i) $totalarray['nbfield']++; } // Facebook if (! empty($arrayfields['p.facebook']['checked'])) { - if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($obj->facebook, $obj->rowid, $obj->socid, 'facebook').''; } + if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($arraysocialnetworks['facebook'], $obj->rowid, $obj->socid, 'facebook').''; } if (! $i) $totalarray['nbfield']++; } // LinkedIn if (! empty($arrayfields['p.linkedin']['checked'])) { - if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($obj->linkedin, $obj->rowid, $obj->socid, 'linkedin').''; } + if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($arraysocialnetworks['linkedin'], $obj->rowid, $obj->socid, 'linkedin').''; } if (! $i) $totalarray['nbfield']++; } // Company From 420d9722805e96e46766931a6299534305594a85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 1 Oct 2019 00:35:08 +0200 Subject: [PATCH 083/980] work on socpeople list --- htdocs/contact/list.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 8dc0fdc91b8..ed588e26adc 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -272,7 +272,8 @@ $title = (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans(" $sql = "SELECT s.rowid as socid, s.nom as name,"; $sql.= " p.rowid, p.lastname as lastname, p.statut, p.firstname, p.zip, p.town, p.poste, p.email, p.no_email,"; -$sql.= " p.socialnetworks, p.skype, p.facebook,"; +// socialnetworks->>'$.facebook' as facebook +$sql.= " p.socialnetworks,"; $sql.= " p.phone as phone_pro, p.phone_mobile, p.phone_perso, p.fax, p.fk_pays, p.priv, p.datec as date_creation, p.tms as date_update,"; $sql.= " co.code as country_code"; // Add fields from extrafields @@ -332,11 +333,11 @@ if (strlen($search_phone_perso)) $sql.= natural_search('p.phone_perso', $sear if (strlen($search_phone_pro)) $sql.= natural_search('p.phone', $search_phone_pro); if (strlen($search_phone_mobile)) $sql.= natural_search('p.phone_mobile', $search_phone_mobile); if (strlen($search_fax)) $sql.= natural_search('p.fax', $search_fax); -if (strlen($search_jabberid)) $sql.= natural_search('p.jabberid', $search_jabberid); -if (strlen($search_skype)) $sql.= natural_search('p.skype', $search_skype); -if (strlen($search_twitter)) $sql.= natural_search('p.twitter', $search_twitter); -if (strlen($search_facebook)) $sql.= natural_search('p.facebook', $search_facebook); -if (strlen($search_linkedin)) $sql.= natural_search('p.linkedin', $search_linkedin); +if (strlen($search_jabberid)) $sql.= natural_search("p.socialnetworks->>'$.jabber'", $search_jabberid); +if (strlen($search_skype)) $sql.= natural_search("p.socialnetworks->>'$.skype'", $search_skype); +if (strlen($search_twitter)) $sql.= natural_search("p.socialnetworks->>'$.twitter'", $search_twitter); +if (strlen($search_facebook)) $sql.= natural_search("p.socialnetworks->>'$.facebook'", $search_facebook); +if (strlen($search_linkedin)) $sql.= natural_search("p.socialnetworks->>'$.linkedin'", $search_linkedin); if (strlen($search_email)) $sql.= natural_search('p.email', $search_email); if (strlen($search_zip)) $sql.= natural_search("p.zip", $search_zip); if (strlen($search_town)) $sql.= natural_search("p.town", $search_town); @@ -653,7 +654,7 @@ if (! empty($arrayfields['p.facebook']['checked'])) print ''; print ''; } -if (! empty($arrayfields['p.linkedin']['checked'])) +if (! empty($arrayfields['p.lp.facebookinkedin']['checked'])) { print ''; print ''; From 0c9956ab96216e67ba8382b6c2e5369e0fe74a82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 1 Oct 2019 00:37:10 +0200 Subject: [PATCH 084/980] work on socpeople list --- htdocs/contact/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index ed588e26adc..c60a7ced7e4 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -654,7 +654,7 @@ if (! empty($arrayfields['p.facebook']['checked'])) print ''; print ''; } -if (! empty($arrayfields['p.lp.facebookinkedin']['checked'])) +if (! empty($arrayfields['p.linkedin']['checked'])) { print ''; print ''; From 9755d15f5235071a4f4d101e9d77a87a5b427ab8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 1 Oct 2019 17:51:44 +0200 Subject: [PATCH 085/980] work on migration script --- .../install/mysql/migration/10.0.0-11.0.0.sql | 2 +- .../mysql/tables/llx_c_socialnetworks.sql | 2 +- htdocs/install/upgrade2.php | 70 +++++++++++++++++++ 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index a7aeaf4b6ea..4f0cd4d39a9 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -203,7 +203,7 @@ create table llx_c_socialnetworks code varchar(100), label varchar(150), url text, - icon varchar(15), + icon varchar(20), active tinyint DEFAULT 1 NOT NULL )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_c_socialnetworks.sql b/htdocs/install/mysql/tables/llx_c_socialnetworks.sql index 44741a2704f..b2d0b44c371 100644 --- a/htdocs/install/mysql/tables/llx_c_socialnetworks.sql +++ b/htdocs/install/mysql/tables/llx_c_socialnetworks.sql @@ -22,6 +22,6 @@ create table llx_c_socialnetworks code varchar(100), label varchar(150), url text, - icon varchar(15), + icon varchar(20), active tinyint DEFAULT 1 NOT NULL )ENGINE=innodb; diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 24d73da5485..c2b12b23d43 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -448,6 +448,16 @@ if (! GETPOST('action', 'aZ09') || preg_match('/upgrade/i', GETPOST('action', 'a { migrate_user_photospath(); } + + // Scripts for 11.0 + $afterversionarray=explode('.', '10.0.9'); + $beforeversionarray=explode('.', '11.0.9'); + if (versioncompare($versiontoarray, $afterversionarray) >= 0 && versioncompare($versiontoarray, $beforeversionarray) <= 0) { + migrate_users_socialnetworks(); + migrate_members_socialnetworks(); + migrate_contacts_socialnetworks(); + migrate_thirdparties_socialnetworks(); + } } // Code executed only if migration is LAST ONE. Must always be done. @@ -4925,3 +4935,63 @@ On les corrige: update llx_facture set paye=1, fk_statut=2 where close_code is null and rowid in (...) */ + +/** + * Migrate users fields facebook and co to socialnetworks + * + * @return void + */ +function migrate_users_socialnetworks() +{ + global $db, $langs; + + print ''; + + print ''.$langs->trans('MigrationUsersSocialNetworks')."
\n"; + print ''; +} + +/** + * Migrate members fields facebook and co to socialnetworks + * + * @return void + */ +function migrate_members_socialnetworks() +{ + global $db, $langs; + + print ''; + + print ''.$langs->trans('MigrationMembersSocialNetworks')."
\n"; + print ''; +} + +/** + * Migrate contacts fields facebook and co to socialnetworks + * + * @return void + */ +function migrate_contacts_socialnetworks() +{ + global $db, $langs; + + print ''; + + print ''.$langs->trans('MigrationContactsSocialNetworks')."
\n"; + print ''; +} + +/** + * Migrate thirdpartie fields facebook and co to socialnetworks + * + * @return void + */ +function migrate_thirdparties_socialnetworks() +{ + global $db, $langs; + + print ''; + + print ''.$langs->trans('MigrationThirdpartiesSocialNetworks')."
\n"; + print ''; +} From 5821caa7fcfa34fa256b0933e242e0466bfed0b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 1 Oct 2019 18:02:39 +0200 Subject: [PATCH 086/980] work on migration script --- htdocs/langs/en_US/install.lang | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/langs/en_US/install.lang b/htdocs/langs/en_US/install.lang index 3ef3532a08e..cfd95d879b7 100644 --- a/htdocs/langs/en_US/install.lang +++ b/htdocs/langs/en_US/install.lang @@ -205,6 +205,10 @@ MigrationRemiseExceptEntity=Update entity field value of llx_societe_remise_exce MigrationUserRightsEntity=Update entity field value of llx_user_rights MigrationUserGroupRightsEntity=Update entity field value of llx_usergroup_rights MigrationUserPhotoPath=Migration of photo paths for users +MigrationUsersSocialNetworks=Migration of users fields social networks +MigrationMembersSocialNetworks=Migration of members fields social networks +MigrationContactsSocialNetworks=Migration of contacts fields social networks +MigrationThirdpartiesSocialNetworks=Migration of thirdparties fields social networks MigrationReloadModule=Reload module %s MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm ShowNotAvailableOptions=Show unavailable options From 2ac908ffcf6632d77f2d002b3dd8e9b7a49e9e4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 1 Oct 2019 19:59:49 +0200 Subject: [PATCH 087/980] work on migration script --- htdocs/install/upgrade2.php | 17 ++++++++- htdocs/user/class/user.class.php | 64 +++----------------------------- 2 files changed, 20 insertions(+), 61 deletions(-) diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index c2b12b23d43..26646937656 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -4944,9 +4944,21 @@ and rowid in (...) function migrate_users_socialnetworks() { global $db, $langs; + // jabberid,skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp print ''; - + $sql = 'UPDATE '.MAIN_DB_PREFIX.'user SET socialnetworks=JSON_OBJECT('; + $sql.= '"skype", skype,'; + $sql.= '"twitter", twitter,'; + $sql.= '"facebook", facebook,'; + $sql.= '"linkedin", linkedin,'; + $sql.= '"instagram", instagram,'; + $sql.= '"snapchat", snapchat,'; + $sql.= '"googleplus", googleplus,'; + $sql.= '"youtube", youtube,'; + $sql.= '"whatsapp", whatsapp)'; + //print $sql; + $db->query($sql); print ''.$langs->trans('MigrationUsersSocialNetworks')."
\n"; print ''; } @@ -4982,13 +4994,14 @@ function migrate_contacts_socialnetworks() } /** - * Migrate thirdpartie fields facebook and co to socialnetworks + * Migrate thirdparties fields facebook and co to socialnetworks * * @return void */ function migrate_thirdparties_socialnetworks() { global $db, $langs; + // skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp print ''; diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 34a820564b5..fed147e0e98 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -275,7 +275,7 @@ class User extends CommonObject // Get user $sql = "SELECT u.rowid, u.lastname, u.firstname, u.employee, u.gender, u.birth, u.email, u.personal_email, u.job,"; - $sql.= " u.socialnetworks, u.skype, u.twitter, u.facebook, u.linkedin,"; + $sql.= " u.socialnetworks,"; $sql.= " u.signature, u.office_phone, u.office_fax, u.user_mobile, u.personal_mobile,"; $sql.= " u.address, u.zip, u.town, u.fk_state as state_id, u.fk_country as country_id,"; $sql.= " u.admin, u.login, u.note,"; @@ -383,39 +383,7 @@ class User extends CommonObject $this->personal_mobile = $obj->personal_mobile; $this->email = $obj->email; $this->personal_email = $obj->personal_email; - $arraysocialnetworks = array(); - $updatesocial = false; - if (!empty($obj->skype)) { - $arraysocialnetworks['skype'] = $obj->skype; - $updatesocial = true; - } - if (!empty($obj->twitter)) { - $arraysocialnetworks['twitter'] = $obj->twitter; - $updatesocial = true; - } - if (!empty($obj->facebook)) { - $arraysocialnetworks['facebook'] = $obj->facebook; - $updatesocial = true; - } - if (!empty($obj->linkedin)) { - $arraysocialnetworks['linkedin'] = $obj->linkedin; - $updatesocial = true; - } - $socialarray = ($obj->socialnetworks==''?array():json_decode($obj->socialnetworks, true)); - $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); - if ($updatesocial) { - $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'user SET skype=null'; - $sqlupd .= ', twitter=null'; - $sqlupd .= ', facebook=null'; - $sqlupd .= ', linkedin=null'; - $sqlupd .= ', socialnetworks="'.$this->db->escape(json_encode($this->socialnetworks)).'"'; - $sqlupd .= ' WHERE rowid='.$this->id; - $this->db->query($sqlupd); - } - $this->skype = $this->socialnetworks['skype']; - $this->twitter = $this->socialnetworks['twitter']; - $this->facebook = $this->socialnetworks['facebook']; - $this->linkedin = $this->socialnetworks['linkedin']; + $this->socialnetworks = (array) json_decode($obj->socialnetworks, true); $this->job = $obj->job; $this->signature = $obj->signature; $this->admin = $obj->admin; @@ -1334,10 +1302,7 @@ class User extends CommonObject $this->firstname = $contact->firstname; $this->gender = $contact->gender; $this->email = $contact->email; - $this->skype = $contact->skype; - $this->twitter = $contact->twitter; - $this->facebook = $contact->facebook; - $this->linkedin = $contact->linkedin; + $this->socialnetworks = $contact->socialnetworks; $this->office_phone = $contact->phone_pro; $this->office_fax = $contact->fax; $this->user_mobile = $contact->phone_mobile; @@ -1554,11 +1519,6 @@ class User extends CommonObject $this->email = trim($this->email); $this->personal_email = trim($this->personal_email); - $this->skype = trim($this->skype); - $this->twitter = trim($this->twitter); - $this->facebook = trim($this->facebook); - $this->linkedin = trim($this->linkedin); - $this->job = trim($this->job); $this->signature = trim($this->signature); $this->note = trim($this->note); @@ -1611,10 +1571,6 @@ class User extends CommonObject $sql.= ", email = '".$this->db->escape($this->email)."'"; $sql.= ", personal_email = '".$this->db->escape($this->personal_email)."'"; $sql.= ", socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks))."'"; - //$sql.= ", skype = '".$this->db->escape($this->skype)."'"; - //$sql.= ", twitter = '".$this->db->escape($this->twitter)."'"; - //$sql.= ", facebook = '".$this->db->escape($this->facebook)."'"; - //$sql.= ", linkedin = '".$this->db->escape($this->linkedin)."'"; $sql.= ", job = '".$this->db->escape($this->job)."'"; $sql.= ", signature = '".$this->db->escape($this->signature)."'"; $sql.= ", accountancy_code = '".$this->db->escape($this->accountancy_code)."'"; @@ -1703,10 +1659,7 @@ class User extends CommonObject $adh->email=$this->email; - $adh->skype=$this->skype; - $adh->twitter=$this->twitter; - $adh->facebook=$this->facebook; - $adh->linkedin=$this->linkedin; + $adh->socialnetworks=$this->socialnetworks; $adh->phone=$this->office_phone; $adh->phone_mobile=$this->user_mobile; @@ -1756,10 +1709,7 @@ class User extends CommonObject $tmpobj->email=$this->email; - $tmpobj->skype=$this->skype; - $tmpobj->twitter=$this->twitter; - $tmpobj->facebook=$this->facebook; - $tmpobj->linkedin=$this->linkedin; + $tmpobj->socialnetworks=$this->socialnetworks; $tmpobj->phone_pro=$this->office_phone; $tmpobj->phone_mobile=$this->user_mobile; @@ -2758,10 +2708,6 @@ class User extends CommonObject $this->note='This is a note'; $this->email='email@specimen.com'; $this->personal_email='personalemail@specimen.com'; - $this->skype='skypepseudo'; - $this->twitter='twitterpseudo'; - $this->facebook='facebookpseudo'; - $this->linkedin='linkedinpseudo'; $this->socialnetworks = array( 'skype' => 'skypepseudo', 'twitter' => 'twitterpseudo', From 010b2723b68cc245d98c5332922758214ce6cd03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 1 Oct 2019 20:14:06 +0200 Subject: [PATCH 088/980] work on migration script --- htdocs/adherents/class/adherent.class.php | 54 ++---------------- htdocs/contact/class/contact.class.php | 47 +--------------- htdocs/install/upgrade2.php | 68 +++++++++++++++++------ htdocs/societe/class/societe.class.php | 58 +------------------ 4 files changed, 60 insertions(+), 167 deletions(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index eb07cddd4d7..5063af6c960 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -576,10 +576,6 @@ class Adherent extends CommonObject $sql.= ", state_id = ".($this->state_id>0?$this->db->escape($this->state_id):"null"); $sql.= ", email = '".$this->db->escape($this->email)."'"; $sql.= ", socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks))."'"; - // $sql.= ", skype = '".$this->db->escape($this->skype)."'"; - // $sql.= ", twitter = '".$this->db->escape($this->twitter)."'"; - // $sql.= ", facebook = '".$this->db->escape($this->facebook)."'"; - // $sql.= ", linkedin = '".$this->db->escape($this->linkedin)."'"; $sql.= ", phone = ".($this->phone?"'".$this->db->escape($this->phone)."'":"null"); $sql.= ", phone_perso = ".($this->phone_perso?"'".$this->db->escape($this->phone_perso)."'":"null"); $sql.= ", phone_mobile = ".($this->phone_mobile?"'".$this->db->escape($this->phone_mobile)."'":"null"); @@ -703,10 +699,7 @@ class Adherent extends CommonObject $luser->state_id=$this->state_id; $luser->email=$this->email; - $luser->skype=$this->skype; - $luser->twitter=$this->twitter; - $luser->facebook=$this->facebook; - $luser->linkedin=$this->linkedin; + $luser->socialnetworks=$this->socialnetworks; $luser->office_phone=$this->phone; $luser->user_mobile=$this->phone_mobile; @@ -745,10 +738,7 @@ class Adherent extends CommonObject $lthirdparty->zip=$this->zip; $lthirdparty->town=$this->town; $lthirdparty->email=$this->email; - $lthirdparty->skype=$this->skype; - $lthirdparty->twitter=$this->twitter; - $lthirdparty->facebook=$this->facebook; - $lthirdparty->linkedin=$this->linkedin; + $lthirdparty->socialnetworks=$this->socialnetworks; $lthirdparty->phone=$this->phone; $lthirdparty->state_id=$this->state_id; $lthirdparty->country_id=$this->country_id; @@ -1237,7 +1227,7 @@ class Adherent extends CommonObject $sql = "SELECT d.rowid, d.ref_ext, d.civility as civility_code, d.gender, d.firstname, d.lastname, d.societe as company, d.fk_soc, d.statut, d.public, d.address, d.zip, d.town, d.note_private,"; $sql.= " d.note_public,"; - $sql.= " d.email, d.socialnetworks, d.skype, d.twitter, d.facebook, d.linkedin, d.phone, d.phone_perso, d.phone_mobile, d.login, d.pass, d.pass_crypted,"; + $sql.= " d.email, d.socialnetworks, d.phone, d.phone_perso, d.phone_mobile, d.login, d.pass, d.pass_crypted,"; $sql.= " d.photo, d.fk_adherent_type, d.morphy, d.entity,"; $sql.= " d.datec as datec,"; $sql.= " d.tms as datem,"; @@ -1316,39 +1306,7 @@ class Adherent extends CommonObject $this->phone_mobile = $obj->phone_mobile; $this->email = $obj->email; - $arraysocialnetworks = array(); - $updatesocial = false; - if (!empty($obj->skype)) { - $arraysocialnetworks['skype'] = $obj->skype; - $updatesocial = true; - } - if (!empty($obj->twitter)) { - $arraysocialnetworks['twitter'] = $obj->twitter; - $updatesocial = true; - } - if (!empty($obj->facebook)) { - $arraysocialnetworks['facebook'] = $obj->facebook; - $updatesocial = true; - } - if (!empty($obj->linkedin)) { - $arraysocialnetworks['linkedin'] = $obj->linkedin; - $updatesocial = true; - } - $socialarray = ($obj->socialnetworks==''?array():json_decode($obj->socialnetworks, true)); - $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); - if ($updatesocial) { - $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'adherent SET skype=null'; - $sqlupd .= ', twitter=null'; - $sqlupd .= ', facebook=null'; - $sqlupd .= ', linkedin=null'; - $sqlupd .= ', socialnetworks="'.$this->db->escape(json_encode($this->socialnetworks)).'"'; - $sqlupd .= ' WHERE rowid='.$this->id; - $this->db->query($sqlupd); - } - $this->skype = $this->socialnetworks['skype']; - $this->twitter = $this->socialnetworks['twitter']; - $this->facebook = $this->socialnetworks['facebook']; - $this->linkedin = $this->socialnetworks['linkedin']; + $this->socialnetworks = (array) json_decode($obj->socialnetworks, true); $this->photo = $obj->photo; $this->statut = $obj->statut; @@ -2444,10 +2402,6 @@ class Adherent extends CommonObject $this->country = 'France'; $this->morphy = 'mor'; $this->email = 'specimen@specimen.com'; - $this->skype = 'skypepseudo'; - $this->twitter = 'twitterpseudo'; - $this->facebook = 'facebookpseudo'; - $this->linkedin = 'linkedinpseudo'; $this->socialnetworks = array( 'skype' => 'skypepseudo', 'twitter' => 'twitterpseudo', diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index a3e026c37f5..1f6fc8f34ae 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -386,11 +386,6 @@ class Contact extends CommonObject $sql .= ", fax='".$this->db->escape($this->fax)."'"; $sql .= ", email='".$this->db->escape($this->email)."'"; $sql .= ", socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks))."'"; - //$sql .= ", jabberid = ".(isset($this->jabberid)?"'".$this->db->escape($this->jabberid)."'":"null"); - //$sql .= ", skype='".$this->db->escape($this->skype)."'"; - //$sql .= ", twitter='".$this->db->escape($this->twitter)."'"; - //$sql .= ", facebook='".$this->db->escape($this->facebook)."'"; - //$sql .= ", linkedin='".$this->db->escape($this->linkedin)."'"; $sql .= ", photo='".$this->db->escape($this->photo)."'"; $sql .= ", birthday=".($this->birthday ? "'".$this->db->idate($this->birthday)."'" : "null"); $sql .= ", note_private = ".(isset($this->note_private)?"'".$this->db->escape($this->note_private)."'":"null"); @@ -751,7 +746,7 @@ class Contact extends CommonObject $sql.= " c.fk_departement as state_id,"; $sql.= " c.birthday,"; $sql.= " c.poste, c.phone, c.phone_perso, c.phone_mobile, c.fax, c.email,"; - $sql.= " c.socialnetworks, c.jabberid, c.skype, c.twitter, c.facebook, c.linkedin,"; + $sql.= " c.socialnetworks,"; $sql.= " c.photo,"; $sql.= " c.priv, c.note_private, c.note_public, c.default_lang, c.canvas,"; $sql.= " c.import_key,"; @@ -820,45 +815,7 @@ class Contact extends CommonObject $this->phone_mobile = trim($obj->phone_mobile); $this->email = $obj->email; - $arraysocialnetworks = array(); - $updatesocial = false; - if (!empty($obj->jabberid)) { - $arraysocialnetworks['jabber'] = $obj->jabberid; - $updatesocial = true; - } - if (!empty($obj->skype)) { - $arraysocialnetworks['skype'] = $obj->skype; - $updatesocial = true; - } - if (!empty($obj->twitter)) { - $arraysocialnetworks['twitter'] = $obj->twitter; - $updatesocial = true; - } - if (!empty($obj->facebook)) { - $arraysocialnetworks['facebook'] = $obj->facebook; - $updatesocial = true; - } - if (!empty($obj->linkedin)) { - $arraysocialnetworks['linkedin'] = $obj->linkedin; - $updatesocial = true; - } - $socialarray = ($obj->socialnetworks==''?array():json_decode($obj->socialnetworks, true)); - $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); - if ($updatesocial) { - $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'socpeople SET skype=null'; - $sqlupd .= ', twitter=null'; - $sqlupd .= ', facebook=null'; - $sqlupd .= ', linkedin=null'; - $sqlupd .= ', jabberid=null'; - $sqlupd .= ', socialnetworks="'.$this->db->escape(json_encode($this->socialnetworks)).'"'; - $sqlupd .= ' WHERE rowid='.$this->id; - $this->db->query($sqlupd); - } - $this->jabberid = $this->socialnetworks['jabber']; - $this->skype = $this->socialnetworks['skype']; - $this->twitter = $this->socialnetworks['twitter']; - $this->facebook = $this->socialnetworks['facebook']; - $this->linkedin = $this->socialnetworks['linkedin']; + $this->socialnetworks = (array) json_decode($obj->socialnetworks, true); $this->photo = $obj->photo; $this->priv = $obj->priv; $this->mail = $obj->email; diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 26646937656..3a6d76e30ef 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -4944,21 +4944,21 @@ and rowid in (...) function migrate_users_socialnetworks() { global $db, $langs; - // jabberid,skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp + // skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp print ''; - $sql = 'UPDATE '.MAIN_DB_PREFIX.'user SET socialnetworks=JSON_OBJECT('; - $sql.= '"skype", skype,'; - $sql.= '"twitter", twitter,'; - $sql.= '"facebook", facebook,'; - $sql.= '"linkedin", linkedin,'; - $sql.= '"instagram", instagram,'; - $sql.= '"snapchat", snapchat,'; - $sql.= '"googleplus", googleplus,'; - $sql.= '"youtube", youtube,'; - $sql.= '"whatsapp", whatsapp)'; - //print $sql; - $db->query($sql); + $sql = 'UPDATE '.MAIN_DB_PREFIX.'user SET socialnetworks=JSON_OBJECT('; + $sql.= '"skype", skype,'; + $sql.= '"twitter", twitter,'; + $sql.= '"facebook", facebook,'; + $sql.= '"linkedin", linkedin,'; + $sql.= '"instagram", instagram,'; + $sql.= '"snapchat", snapchat,'; + $sql.= '"googleplus", googleplus,'; + $sql.= '"youtube", youtube,'; + $sql.= '"whatsapp", whatsapp)'; + //print $sql; + $db->query($sql); print ''.$langs->trans('MigrationUsersSocialNetworks')."
\n"; print ''; } @@ -4973,7 +4973,18 @@ function migrate_members_socialnetworks() global $db, $langs; print ''; - + $sql = 'UPDATE '.MAIN_DB_PREFIX.'adherent SET socialnetworks=JSON_OBJECT('; + $sql.= '"skype", skype,'; + $sql.= '"twitter", twitter,'; + $sql.= '"facebook", facebook,'; + $sql.= '"linkedin", linkedin,'; + $sql.= '"instagram", instagram,'; + $sql.= '"snapchat", snapchat,'; + $sql.= '"googleplus", googleplus,'; + $sql.= '"youtube", youtube,'; + $sql.= '"whatsapp", whatsapp)'; + //print $sql; + $db->query($sql); print ''.$langs->trans('MigrationMembersSocialNetworks')."
\n"; print ''; } @@ -4986,9 +4997,21 @@ function migrate_members_socialnetworks() function migrate_contacts_socialnetworks() { global $db, $langs; - + // jabberid,skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp print ''; - + $sql = 'UPDATE '.MAIN_DB_PREFIX.'socpeople SET socialnetworks=JSON_OBJECT('; + $sql.= '"jabber", jabberid,'; + $sql.= '"skype", skype,'; + $sql.= '"twitter", twitter,'; + $sql.= '"facebook", facebook,'; + $sql.= '"linkedin", linkedin,'; + $sql.= '"instagram", instagram,'; + $sql.= '"snapchat", snapchat,'; + $sql.= '"googleplus", googleplus,'; + $sql.= '"youtube", youtube,'; + $sql.= '"whatsapp", whatsapp)'; + //print $sql; + $db->query($sql); print ''.$langs->trans('MigrationContactsSocialNetworks')."
\n"; print ''; } @@ -5004,7 +5027,18 @@ function migrate_thirdparties_socialnetworks() // skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp print ''; - + $sql = 'UPDATE '.MAIN_DB_PREFIX.'societe SET socialnetworks=JSON_OBJECT('; + $sql.= '"skype", skype,'; + $sql.= '"twitter", twitter,'; + $sql.= '"facebook", facebook,'; + $sql.= '"linkedin", linkedin,'; + $sql.= '"instagram", instagram,'; + $sql.= '"snapchat", snapchat,'; + $sql.= '"googleplus", googleplus,'; + $sql.= '"youtube", youtube,'; + $sql.= '"whatsapp", whatsapp)'; + //print $sql; + $db->query($sql); print ''.$langs->trans('MigrationThirdpartiesSocialNetworks')."
\n"; print ''; } diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 5b173707b74..32e7fc468f8 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -871,10 +871,6 @@ class Societe extends CommonObject $this->fax = preg_replace("/\s/", "", $this->fax); $this->fax = preg_replace("/\./", "", $this->fax); $this->email = trim($this->email); - $this->skype = trim($this->skype); - $this->twitter = trim($this->twitter); - $this->facebook = trim($this->facebook); - $this->linkedin = trim($this->linkedin); $this->url = $this->url?clean_url($this->url, 0):''; $this->note_private = trim($this->note_private); $this->note_public = trim($this->note_public); @@ -1016,10 +1012,6 @@ class Societe extends CommonObject $sql .= ",fax = ".(! empty($this->fax)?"'".$this->db->escape($this->fax)."'":"null"); $sql .= ",email = ".(! empty($this->email)?"'".$this->db->escape($this->email)."'":"null"); $sql .= ", socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks))."'"; - //$sql .= ",skype = ".(! empty($this->skype)?"'".$this->db->escape($this->skype)."'":"null"); - //$sql .= ",twitter = ".(! empty($this->twitter)?"'".$this->db->escape($this->twitter)."'":"null"); - //$sql .= ",facebook = ".(! empty($this->facebook)?"'".$this->db->escape($this->facebook)."'":"null"); - //$sql .= ",linkedin = ".(! empty($this->linkedin)?"'".$this->db->escape($this->linkedin)."'":"null"); $sql .= ",url = ".(! empty($this->url)?"'".$this->db->escape($this->url)."'":"null"); $sql .= ",parent = " . ($this->parent > 0 ? $this->parent : "null"); @@ -1160,10 +1152,7 @@ class Societe extends CommonObject $lmember->zip=$this->zip; $lmember->town=$this->town; $lmember->email=$this->email; - $lmember->skype=$this->skype; - $lmember->twitter=$this->twitter; - $lmember->facebook=$this->facebook; - $lmember->linkedin=$this->linkedin; + $lmember->socialnetworks=$this->socialnetworks; $lmember->phone=$this->phone; $lmember->state_id=$this->state_id; $lmember->country_id=$this->country_id; @@ -1271,7 +1260,7 @@ class Societe extends CommonObject $sql .= ', s.price_level'; $sql .= ', s.tms as date_modification, s.fk_user_creat, s.fk_user_modif'; $sql .= ', s.phone, s.fax, s.email'; - $sql .= ', s.socialnetworks, s.skype, s.twitter, s.facebook, s.linkedin'; + $sql .= ', s.socialnetworks'; $sql .= ', s.url, s.zip, s.town, s.note_private, s.note_public, s.model_pdf, s.client, s.fournisseur'; $sql .= ', s.siren as idprof1, s.siret as idprof2, s.ape as idprof3, s.idprof4, s.idprof5, s.idprof6'; $sql .= ', s.capital, s.tva_intra'; @@ -1366,40 +1355,7 @@ class Societe extends CommonObject $this->statut_commercial = $libelle; // libelle statut commercial $this->email = $obj->email; - $arraysocialnetworks = array(); - $updatesocial = false; - if (!empty($obj->skype)) { - $arraysocialnetworks['skype'] = $obj->skype; - $updatesocial = true; - } - if (!empty($obj->twitter)) { - $arraysocialnetworks['twitter'] = $obj->twitter; - $updatesocial = true; - } - if (!empty($obj->facebook)) { - $arraysocialnetworks['facebook'] = $obj->facebook; - $updatesocial = true; - } - if (!empty($obj->linkedin)) { - $arraysocialnetworks['linkedin'] = $obj->linkedin; - $updatesocial = true; - } - $socialarray = (array) json_decode($obj->socialnetworks, true); - $this->socialnetworks = array_merge($arraysocialnetworks, $socialarray); - if ($updatesocial) { - $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'societe SET skype=null'; - $sqlupd .= ', twitter=null'; - $sqlupd .= ', facebook=null'; - $sqlupd .= ', linkedin=null'; - $sqlupd .= ', socialnetworks="'.$this->db->escape(json_encode($this->socialnetworks)).'"'; - $sqlupd .= ' WHERE rowid='.$this->id; - $this->db->query($sqlupd); - } - - $this->skype = $this->socialnetworks['skype']; - $this->twitter = $this->socialnetworks['twitter']; - $this->facebook = $this->socialnetworks['facebook']; - $this->linkedin = $this->socialnetworks['linkedin']; + $this->socialnetworks = (array) json_decode($obj->socialnetworks, true); $this->url = $obj->url; $this->phone = $obj->phone; @@ -3438,10 +3394,6 @@ class Societe extends CommonObject $this->country_id=$member->country_id; $this->phone=$member->phone; // Prof phone $this->email=$member->email; - $this->skype=$member->skype; - $this->twitter=$member->twitter; - $this->facebook=$member->facebook; - $this->linkedin=$member->linkedin; $this->socialnetworks = $member->socialnetworks; $this->client = 1; // A member is a customer by default @@ -3607,10 +3559,6 @@ class Societe extends CommonObject $this->country_id=1; $this->country_code='FR'; $this->email='specimen@specimen.com'; - $this->skype='tom.hanson'; - $this->twitter='tomhanson'; - $this->facebook='tomhanson'; - $this->linkedin='tomhanson'; $this->socialnetworks = array( 'skype' => 'tom.hanson', 'twitter' => 'tomhanson', From 872a1f42eb31ea12801489ce0dc3ef561464da52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 1 Oct 2019 20:51:49 +0200 Subject: [PATCH 089/980] list contacts with all fields --- htdocs/contact/list.php | 143 ++++++++++++++++------------------------ 1 file changed, 58 insertions(+), 85 deletions(-) diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index c60a7ced7e4..8056b5c076c 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -40,6 +40,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array("companies", "suppliers", "categories")); +$socialnetworks = getArrayOfSocialNetworks(); + $action=GETPOST('action', 'alpha'); $massaction=GETPOST('massaction', 'alpha'); $show_files=GETPOST('show_files', 'int'); @@ -70,11 +72,13 @@ $search_phone_mobile=GETPOST("search_phone_mobile", 'alpha'); $search_fax=GETPOST("search_fax", 'alpha'); $search_email=GETPOST("search_email", 'alpha'); $search_no_email=GETPOST("search_no_email", 'int'); -$search_jabberid=GETPOST("search_jabberid", 'alpha'); -$search_skype=GETPOST("search_skype", 'alpha'); -$search_twitter=GETPOST("search_twitter", 'alpha'); -$search_facebook=GETPOST("search_facebook", 'alpha'); -$search_linkedin=GETPOST("search_linkedin", 'alpha'); +if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if ($value['active']) { + $search_{$key} = GETPOST("search_".$key, 'alpha'); + } + } +} $search_priv=GETPOST("search_priv", 'alpha'); $search_categ=GETPOST("search_categ", 'int'); $search_categ_thirdparty=GETPOST("search_categ_thirdparty", 'int'); @@ -136,8 +140,6 @@ $object = new Contact($db); $hookmanager->initHooks(array('contactlist')); $extrafields = new ExtraFields($db); -$socialnetworks = getArrayOfSocialNetworks(); - // fetch optionals attributes and labels $extralabels = $extrafields->fetch_name_optionals_label('contact'); $search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); @@ -168,11 +170,6 @@ $arrayfields=array( 'p.fax'=>array('label'=>"Fax", 'checked'=>0), 'p.email'=>array('label'=>"EMail", 'checked'=>1), 'p.no_email'=>array('label'=>"No_Email", 'checked'=>0, 'enabled'=>(! empty($conf->mailing->enabled))), - 'p.skype'=>array('label'=>"Skype", 'checked'=>1, 'enabled'=>(! empty($conf->socialnetworks->enabled))), - 'p.jabberid'=>array('label'=>"Jabber", 'checked'=>1, 'enabled'=>(! empty($conf->socialnetworks->enabled))), - 'p.twitter'=>array('label'=>"Twitter", 'checked'=>1, 'enabled'=>(! empty($conf->socialnetworks->enabled))), - 'p.facebook'=>array('label'=>"Facebook", 'checked'=>1, 'enabled'=>(! empty($conf->socialnetworks->enabled))), - 'p.linkedin'=>array('label'=>"LinkedIn", 'checked'=>1, 'enabled'=>(! empty($conf->socialnetworks->enabled))), 'p.thirdparty'=>array('label'=>"ThirdParty", 'checked'=>1, 'enabled'=>empty($conf->global->SOCIETE_DISABLE_CONTACTS)), 'p.priv'=>array('label'=>"ContactVisibility", 'checked'=>1, 'position'=>200), 'p.datec'=>array('label'=>"DateCreationShort", 'checked'=>0, 'position'=>500), @@ -180,6 +177,16 @@ $arrayfields=array( 'p.statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000), 'p.import_key'=>array('label'=>"ImportId", 'checked'=>0, 'position'=>1100), ); +if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if ($value['active']) { + $arrayfields['p.'.$key] = array( + 'label' => $value['label'], + 'checked' => 0, + ); + } + } +} // Extra fields if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) { @@ -233,11 +240,13 @@ if (empty($reshook)) $search_fax=""; $search_email=""; $search_no_email=-1; - $search_jabberid=""; - $search_skype=""; - $search_twitter=""; - $search_facebook=""; - $search_linkedin=""; + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if ($value['active']) { + $search_{$key} = ""; + } + } + } $search_priv=""; $search_status=-1; $search_categ=''; @@ -333,11 +342,13 @@ if (strlen($search_phone_perso)) $sql.= natural_search('p.phone_perso', $sear if (strlen($search_phone_pro)) $sql.= natural_search('p.phone', $search_phone_pro); if (strlen($search_phone_mobile)) $sql.= natural_search('p.phone_mobile', $search_phone_mobile); if (strlen($search_fax)) $sql.= natural_search('p.fax', $search_fax); -if (strlen($search_jabberid)) $sql.= natural_search("p.socialnetworks->>'$.jabber'", $search_jabberid); -if (strlen($search_skype)) $sql.= natural_search("p.socialnetworks->>'$.skype'", $search_skype); -if (strlen($search_twitter)) $sql.= natural_search("p.socialnetworks->>'$.twitter'", $search_twitter); -if (strlen($search_facebook)) $sql.= natural_search("p.socialnetworks->>'$.facebook'", $search_facebook); -if (strlen($search_linkedin)) $sql.= natural_search("p.socialnetworks->>'$.linkedin'", $search_linkedin); +if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if ($value['active'] && strlen($search_{$key})) { + $sql.= natural_search("p.socialnetworks->>'$.".$key."'", $search_{$key}); + } + } +} if (strlen($search_email)) $sql.= natural_search('p.email', $search_email); if (strlen($search_zip)) $sql.= natural_search("p.zip", $search_zip); if (strlen($search_town)) $sql.= natural_search("p.town", $search_town); @@ -630,35 +641,17 @@ if (! empty($arrayfields['p.no_email']['checked'])) print $form->selectarray('search_no_email', array('-1'=>'', '0'=>$langs->trans('No'), '1'=>$langs->trans('Yes')), $search_no_email); print ''; } -if (! empty($arrayfields['p.skype']['checked'])) -{ - print ''; - print ''; - print ''; -} -if (! empty($arrayfields['p.jabberid']['checked'])) -{ - print ''; - print ''; - print ''; -} -if (! empty($arrayfields['p.twitter']['checked'])) -{ - print ''; - print ''; - print ''; -} -if (! empty($arrayfields['p.facebook']['checked'])) -{ - print ''; - print ''; - print ''; -} -if (! empty($arrayfields['p.linkedin']['checked'])) -{ - print ''; - print ''; - print ''; +if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if ($value['active']) { + if (! empty($arrayfields['p.'.$key]['checked'])) + { + print ''; + print ''; + print ''; + } + } + } } if (! empty($arrayfields['p.thirdparty']['checked'])) { @@ -732,11 +725,13 @@ if (! empty($arrayfields['p.phone_mobile']['checked'])) print_liste_field if (! empty($arrayfields['p.fax']['checked'])) print_liste_field_titre($arrayfields['p.fax']['label'], $_SERVER["PHP_SELF"], "p.fax", $begin, $param, '', $sortfield, $sortorder); if (! empty($arrayfields['p.email']['checked'])) print_liste_field_titre($arrayfields['p.email']['label'], $_SERVER["PHP_SELF"], "p.email", $begin, $param, '', $sortfield, $sortorder); if (! empty($arrayfields['p.no_email']['checked'])) print_liste_field_titre($arrayfields['p.no_email']['label'], $_SERVER["PHP_SELF"], "p.no_email", $begin, $param, '', $sortfield, $sortorder, 'center '); -if (! empty($arrayfields['p.skype']['checked'])) print_liste_field_titre($arrayfields['p.skype']['label'], $_SERVER["PHP_SELF"], "p.skype", $begin, $param, '', $sortfield, $sortorder); -if (! empty($arrayfields['p.jabberid']['checked'])) print_liste_field_titre($arrayfields['p.jabberid']['label'], $_SERVER["PHP_SELF"], "p.jabberid", $begin, $param, '', $sortfield, $sortorder); -if (! empty($arrayfields['p.twitter']['checked'])) print_liste_field_titre($arrayfields['p.twitter']['label'], $_SERVER["PHP_SELF"], "p.twitter", $begin, $param, '', $sortfield, $sortorder); -if (! empty($arrayfields['p.facebook']['checked'])) print_liste_field_titre($arrayfields['p.facebook']['label'], $_SERVER["PHP_SELF"], "p.facebook", $begin, $param, '', $sortfield, $sortorder); -if (! empty($arrayfields['p.linkedin']['checked'])) print_liste_field_titre($arrayfields['p.linkedin']['label'], $_SERVER["PHP_SELF"], "p.linkedin", $begin, $param, '', $sortfield, $sortorder); +if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if ($value['active'] && ! empty($arrayfields['p.'.$key]['checked'])) { + print_liste_field_titre($arrayfields['p.'.$key]['label'], $_SERVER["PHP_SELF"], "p.".$key, $begin, $param, '', $sortfield, $sortorder); + } + } +} if (! empty($arrayfields['p.thirdparty']['checked'])) print_liste_field_titre($arrayfields['p.thirdparty']['label'], $_SERVER["PHP_SELF"], "s.nom", $begin, $param, '', $sortfield, $sortorder); if (! empty($arrayfields['p.priv']['checked'])) print_liste_field_titre($arrayfields['p.priv']['label'], $_SERVER["PHP_SELF"], "p.priv", $begin, $param, '', $sortfield, $sortorder, 'center '); // Extra fields @@ -884,36 +879,14 @@ while ($i < min($num, $limit)) print ''.yn($obj->no_email).''; if (! $i) $totalarray['nbfield']++; } - // Skype - if (! empty($arrayfields['p.skype']['checked'])) - { - if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($arraysocialnetworks['skype'], $obj->rowid, $obj->socid, 'skype').''; } - if (! $i) $totalarray['nbfield']++; + if (! empty($conf->socialnetworks->enabled)) { + foreach ($socialnetworks as $key => $value) { + if ($value['active'] && ! empty($arrayfields['p.'.$key]['checked'])) { + print ''.dol_print_socialnetworks($arraysocialnetworks[$key], $obj->rowid, $obj->socid, $key).''; + if (! $i) $totalarray['nbfield']++; + } + } } - // Jabber - if (! empty($arrayfields['p.jabberid']['checked'])) - { - if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($arraysocialnetworks['jabber'], $obj->rowid, $obj->socid, 'jabberid').''; } - if (! $i) $totalarray['nbfield']++; - } - // Twitter - if (! empty($arrayfields['p.twitter']['checked'])) - { - if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($arraysocialnetworks['twitter'], $obj->rowid, $obj->socid, 'twitter').''; } - if (! $i) $totalarray['nbfield']++; - } - // Facebook - if (! empty($arrayfields['p.facebook']['checked'])) - { - if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($arraysocialnetworks['facebook'], $obj->rowid, $obj->socid, 'facebook').''; } - if (! $i) $totalarray['nbfield']++; - } - // LinkedIn - if (! empty($arrayfields['p.linkedin']['checked'])) - { - if (! empty($conf->socialnetworks->enabled)) { print ''.dol_print_socialnetworks($arraysocialnetworks['linkedin'], $obj->rowid, $obj->socid, 'linkedin').''; } - if (! $i) $totalarray['nbfield']++; - } // Company if (! empty($arrayfields['p.thirdparty']['checked'])) { From 26c34198bf88dc880f1bd9157c48f1aaf282d517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 1 Oct 2019 21:38:16 +0200 Subject: [PATCH 090/980] show contact --- htdocs/core/lib/company.lib.php | 47 ++++++++++++++++----------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 698a8dfa67a..97a241ba7c7 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -873,6 +873,8 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') $search_address = GETPOST("search_address", 'alpha'); $search_poste = GETPOST("search_poste", 'alpha'); + $socialnetworks = getArrayOfSocialNetworks(); + $searchAddressPhoneDBFields = array( //Address 't.address', @@ -889,18 +891,13 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') //E-mail 't.email', - - //Social media - "t.skype", - "t.jabberid", - "t.twitter", - "t.facebook", - "t.linkedin", - "t.whatsapp", - "t.youtube", - "t.snapchat", - "t.instagram" ); + //Social media + foreach ($socialnetworks as $key => $value) { + if ($value['active']) { + $searchAddressPhoneDBFields['t.'.$key] = "t.socialnetworks->>'$.".$key."'"; + } + } if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="t.lastname"; @@ -916,19 +913,19 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') $extralabels=$extrafields->fetch_name_optionals_label($contactstatic->table_element); $contactstatic->fields=array( - 'name' =>array('type'=>'varchar(128)', 'label'=>'Name', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1), - 'poste' =>array('type'=>'varchar(128)', 'label'=>'PostOfFunction', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>20), - 'address' =>array('type'=>'varchar(128)', 'label'=>'Address', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>30), - 'statut' =>array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'default'=>0, 'index'=>1, 'position'=>40, 'arrayofkeyval'=>array(0=>$contactstatic->LibStatut(0, 1), 1=>$contactstatic->LibStatut(1, 1))), + 'name' =>array('type'=>'varchar(128)', 'label'=>'Name', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1), + 'poste' =>array('type'=>'varchar(128)', 'label'=>'PostOfFunction', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>20), + 'address' =>array('type'=>'varchar(128)', 'label'=>'Address', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>30), + 'statut' =>array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'default'=>0, 'index'=>1, 'position'=>40, 'arrayofkeyval'=>array(0=>$contactstatic->LibStatut(0, 1), 1=>$contactstatic->LibStatut(1, 1))), ); // Definition of fields for list $arrayfields=array( - 't.rowid'=>array('label'=>"TechnicalID", 'checked'=>($conf->global->MAIN_SHOW_TECHNICAL_ID?1:0), 'enabled'=>($conf->global->MAIN_SHOW_TECHNICAL_ID?1:0), 'position'=>1), - 't.name'=>array('label'=>"Name", 'checked'=>1, 'position'=>10), - 't.poste'=>array('label'=>"PostOrFunction", 'checked'=>1, 'position'=>20), - 't.address'=>array('label'=>(empty($conf->dol_optimize_smallscreen) ? $langs->trans("Address").' / '.$langs->trans("Phone").' / '.$langs->trans("Email") : $langs->trans("Address")), 'checked'=>1, 'position'=>30), - 't.statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>40, 'class'=>'center'), + 't.rowid'=>array('label'=>"TechnicalID", 'checked'=>($conf->global->MAIN_SHOW_TECHNICAL_ID?1:0), 'enabled'=>($conf->global->MAIN_SHOW_TECHNICAL_ID?1:0), 'position'=>1), + 't.name'=>array('label'=>"Name", 'checked'=>1, 'position'=>10), + 't.poste'=>array('label'=>"PostOrFunction", 'checked'=>1, 'position'=>20), + 't.address'=>array('label'=>(empty($conf->dol_optimize_smallscreen) ? $langs->trans("Address").' / '.$langs->trans("Phone").' / '.$langs->trans("Email") : $langs->trans("Address")), 'checked'=>1, 'position'=>30), + 't.statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>40, 'class'=>'center'), ); // Extra fields if (is_array($extrafields->attributes[$contactstatic->table_element]['label']) && count($extrafields->attributes[$contactstatic->table_element]['label'])) @@ -1012,7 +1009,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') $extrafieldsobjectkey=$contactstatic->table_element; include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; - $sql = "SELECT t.rowid, t.lastname, t.firstname, t.fk_pays as country_id, t.civility, t.poste, t.phone as phone_pro, t.phone_mobile, t.phone_perso, t.fax, t.email, t.skype, t.statut, t.photo,"; + $sql = "SELECT t.rowid, t.lastname, t.firstname, t.fk_pays as country_id, t.civility, t.poste, t.phone as phone_pro, t.phone_mobile, t.phone_perso, t.fax, t.email, t.socialnetworks, t.statut, t.photo,"; $sql .= " t.civility as civility_id, t.address, t.zip, t.town"; $sql .= " FROM ".MAIN_DB_PREFIX."socpeople as t"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople_extrafields as ef on (t.rowid = ef.fk_object)"; @@ -1020,7 +1017,9 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') if ($search_status!='' && $search_status != '-1') $sql .= " AND t.statut = ".$db->escape($search_status); if ($search_name) $sql .= natural_search(array('t.lastname', 't.firstname'), $search_name); if ($search_poste) $sql .= natural_search('t.poste', $search_poste); - if ($search_address) $sql .= natural_search($searchAddressPhoneDBFields, $search_address); + if ($search_address) { + $sql .= natural_search($searchAddressPhoneDBFields, $search_address); + } // Add where from extra fields $extrafieldsobjectkey=$contactstatic->table_element; include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; @@ -1047,7 +1046,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') print ''; if (in_array($key, array('t.statut'))){ print $form->selectarray('search_status', array('-1'=>'','0'=>$contactstatic->LibStatut(0, 1),'1'=>$contactstatic->LibStatut(1, 1)), $search_status); - }else{ + } else { $fieldName = substr($key, 2); print sprintf('', $fieldName, dol_escape_htmltag($search[$key])); } @@ -1116,7 +1115,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') $contactstatic->phone_perso = $obj->phone_perso; $contactstatic->email = $obj->email; $contactstatic->web = $obj->web; - $contactstatic->skype = $obj->skype; + $contactstatic->socialnetworks = $obj->socialnetworks; $contactstatic->photo = $obj->photo; $country_code = getCountry($obj->country_id, 2); From cc03a0a63f6675d803c94773a94bd2dfe893b8f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 2 Oct 2019 20:53:47 +0200 Subject: [PATCH 091/980] new migration script for user --- htdocs/install/upgrade2.php | 113 +++++++++++++++++++++++++++++++----- 1 file changed, 97 insertions(+), 16 deletions(-) diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 9bf8becd75e..cfefcc62ec5 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -4944,21 +4944,84 @@ and rowid in (...) function migrate_users_socialnetworks() { global $db, $langs; - // skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp - + // skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp + $error = 0; + $db->begin(); print ''; - $sql = 'UPDATE '.MAIN_DB_PREFIX.'user SET socialnetworks=JSON_OBJECT('; - $sql.= '"skype", skype,'; - $sql.= '"twitter", twitter,'; - $sql.= '"facebook", facebook,'; - $sql.= '"linkedin", linkedin,'; - $sql.= '"instagram", instagram,'; - $sql.= '"snapchat", snapchat,'; - $sql.= '"googleplus", googleplus,'; - $sql.= '"youtube", youtube,'; - $sql.= '"whatsapp", whatsapp)'; + $sql = 'SELECT rowid, socialnetworks'; + $sql .= ', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.'user WHERE '; + $sql .= ' skype IS NOT NULL OR skype !=""'; + $sql .= ' OR twitter IS NOT NULL OR twitter !=""'; + $sql .= ' OR facebook IS NOT NULL OR facebook!=""'; + $sql .= ' OR linkedin IS NOT NULL OR linkedin!=""'; + $sql .= ' OR instagram IS NOT NULL OR instagram!=""'; + $sql .= ' OR snapchat IS NOT NULL OR snapchat!=""'; + $sql .= ' OR googleplus IS NOT NULL OR googleplus!=""'; + $sql .= ' OR youtube IS NOT NULL OR youtube!=""'; + $sql .= ' OR whatsapp IS NOT NULL OR whatsapp!=""'; //print $sql; - $db->query($sql); + $resql = $db->query($sql); + if ($resql) { + while ($obj = $db->fetch_object($resql)) { + $arraysocialnetworks = array(); + if (!empty($obj->skype)) { + $arraysocialnetworks['skype'] = $obj->skype; + } + if (!empty($obj->twitter)) { + $arraysocialnetworks['twitter'] = $obj->twitter; + } + if (!empty($obj->facebook)) { + $arraysocialnetworks['facebook'] = $obj->facebook; + } + if (!empty($obj->linkedin)) { + $arraysocialnetworks['linkedin'] = $obj->linkedin; + } + if (!empty($obj->instagram)) { + $arraysocialnetworks['instagram'] = $obj->instagram; + } + if (!empty($obj->snapchat)) { + $arraysocialnetworks['snapchat'] = $obj->snapchat; + } + if (!empty($obj->googleplus)) { + $arraysocialnetworks['googleplus'] = $obj->googleplus; + } + if (!empty($obj->youtube)) { + $arraysocialnetworks['youtube'] = $obj->youtube; + } + if (!empty($obj->whatsapp)) { + $arraysocialnetworks['whatsapp'] = $obj->whatsapp; + } + if ($obj->socialnetworks=='' || is_null($obj->socialnetworks)) { + $obj->socialnetworks = '[]'; + } + $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true)); + $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'user SET socialnetworks="'.$db->escape(json_encode($socialnetworks, true)).'"'; + $sqlupd.= ', skype=null'; + $sqlupd.= ', twitter=null'; + $sqlupd.= ', facebook=null'; + $sqlupd.= ', linkedin=null'; + $sqlupd.= ', instagram=null'; + $sqlupd.= ', snapchat=null'; + $sqlupd.= ', googleplus=null'; + $sqlupd.= ', youtube=null'; + $sqlupd.= ', whatsapp=null'; + $sqlupd.= ' WHERE rowid='.$obj->rowid; + //print $sqlupd."
"; + $resqlupd = $db->query($sqlupd); + if (! $resqlupd) { + dol_print_error($db); + $error++; + } + } + } else { + $error++; + } + if (! $error) { + $db->commit(); + } else { + dol_print_error($db); + $db->rollback(); + } print ''.$langs->trans('MigrationUsersSocialNetworks')."
\n"; print ''; } @@ -4984,7 +5047,13 @@ function migrate_members_socialnetworks() $sql.= '"youtube", youtube,'; $sql.= '"whatsapp", whatsapp)'; //print $sql; - $db->query($sql); + $resql = $db->query($sql); + if ($resql) { + $db->commit(); + } else { + dol_print_error($db); + $db->rollback(); + } print ''.$langs->trans('MigrationMembersSocialNetworks')."
\n"; print ''; } @@ -5011,7 +5080,13 @@ function migrate_contacts_socialnetworks() $sql.= '"youtube", youtube,'; $sql.= '"whatsapp", whatsapp)'; //print $sql; - $db->query($sql); + $resql = $db->query($sql); + if ($resql) { + $db->commit(); + } else { + dol_print_error($db); + $db->rollback(); + } print ''.$langs->trans('MigrationContactsSocialNetworks')."
\n"; print ''; } @@ -5038,7 +5113,13 @@ function migrate_thirdparties_socialnetworks() $sql.= '"youtube", youtube,'; $sql.= '"whatsapp", whatsapp)'; //print $sql; - $db->query($sql); + $resql = $db->query($sql); + if ($resql) { + $db->commit(); + } else { + dol_print_error($db); + $db->rollback(); + } print ''.$langs->trans('MigrationThirdpartiesSocialNetworks')."
\n"; print ''; } From b96911e9b758e45dcfd8c7fa50f4a21c32eb5436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 2 Oct 2019 21:05:19 +0200 Subject: [PATCH 092/980] new migration script for members --- htdocs/install/upgrade2.php | 187 ++++++++++++++++++++++++------------ 1 file changed, 123 insertions(+), 64 deletions(-) diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index cfefcc62ec5..57df60658a7 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -4944,8 +4944,8 @@ and rowid in (...) function migrate_users_socialnetworks() { global $db, $langs; - // skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp - $error = 0; + // skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp + $error = 0; $db->begin(); print ''; $sql = 'SELECT rowid, socialnetworks'; @@ -4963,59 +4963,59 @@ function migrate_users_socialnetworks() $resql = $db->query($sql); if ($resql) { while ($obj = $db->fetch_object($resql)) { - $arraysocialnetworks = array(); - if (!empty($obj->skype)) { - $arraysocialnetworks['skype'] = $obj->skype; - } - if (!empty($obj->twitter)) { - $arraysocialnetworks['twitter'] = $obj->twitter; - } - if (!empty($obj->facebook)) { - $arraysocialnetworks['facebook'] = $obj->facebook; - } - if (!empty($obj->linkedin)) { - $arraysocialnetworks['linkedin'] = $obj->linkedin; - } - if (!empty($obj->instagram)) { - $arraysocialnetworks['instagram'] = $obj->instagram; - } - if (!empty($obj->snapchat)) { - $arraysocialnetworks['snapchat'] = $obj->snapchat; - } - if (!empty($obj->googleplus)) { - $arraysocialnetworks['googleplus'] = $obj->googleplus; - } - if (!empty($obj->youtube)) { - $arraysocialnetworks['youtube'] = $obj->youtube; - } - if (!empty($obj->whatsapp)) { - $arraysocialnetworks['whatsapp'] = $obj->whatsapp; - } - if ($obj->socialnetworks=='' || is_null($obj->socialnetworks)) { - $obj->socialnetworks = '[]'; - } - $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true)); - $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'user SET socialnetworks="'.$db->escape(json_encode($socialnetworks, true)).'"'; - $sqlupd.= ', skype=null'; - $sqlupd.= ', twitter=null'; - $sqlupd.= ', facebook=null'; - $sqlupd.= ', linkedin=null'; - $sqlupd.= ', instagram=null'; - $sqlupd.= ', snapchat=null'; - $sqlupd.= ', googleplus=null'; - $sqlupd.= ', youtube=null'; - $sqlupd.= ', whatsapp=null'; - $sqlupd.= ' WHERE rowid='.$obj->rowid; - //print $sqlupd."
"; - $resqlupd = $db->query($sqlupd); - if (! $resqlupd) { - dol_print_error($db); - $error++; - } - } + $arraysocialnetworks = array(); + if (!empty($obj->skype)) { + $arraysocialnetworks['skype'] = $obj->skype; + } + if (!empty($obj->twitter)) { + $arraysocialnetworks['twitter'] = $obj->twitter; + } + if (!empty($obj->facebook)) { + $arraysocialnetworks['facebook'] = $obj->facebook; + } + if (!empty($obj->linkedin)) { + $arraysocialnetworks['linkedin'] = $obj->linkedin; + } + if (!empty($obj->instagram)) { + $arraysocialnetworks['instagram'] = $obj->instagram; + } + if (!empty($obj->snapchat)) { + $arraysocialnetworks['snapchat'] = $obj->snapchat; + } + if (!empty($obj->googleplus)) { + $arraysocialnetworks['googleplus'] = $obj->googleplus; + } + if (!empty($obj->youtube)) { + $arraysocialnetworks['youtube'] = $obj->youtube; + } + if (!empty($obj->whatsapp)) { + $arraysocialnetworks['whatsapp'] = $obj->whatsapp; + } + if ($obj->socialnetworks == '' || is_null($obj->socialnetworks)) { + $obj->socialnetworks = '[]'; + } + $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true)); + $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'user SET socialnetworks="'.$db->escape(json_encode($socialnetworks, true)).'"'; + $sqlupd.= ', skype=null'; + $sqlupd.= ', twitter=null'; + $sqlupd.= ', facebook=null'; + $sqlupd.= ', linkedin=null'; + $sqlupd.= ', instagram=null'; + $sqlupd.= ', snapchat=null'; + $sqlupd.= ', googleplus=null'; + $sqlupd.= ', youtube=null'; + $sqlupd.= ', whatsapp=null'; + $sqlupd.= ' WHERE rowid='.$obj->rowid; + //print $sqlupd."
"; + $resqlupd = $db->query($sqlupd); + if (! $resqlupd) { + dol_print_error($db); + $error++; + } + } } else { - $error++; - } + $error++; + } if (! $error) { $db->commit(); } else { @@ -5036,19 +5036,78 @@ function migrate_members_socialnetworks() global $db, $langs; print ''; - $sql = 'UPDATE '.MAIN_DB_PREFIX.'adherent SET socialnetworks=JSON_OBJECT('; - $sql.= '"skype", skype,'; - $sql.= '"twitter", twitter,'; - $sql.= '"facebook", facebook,'; - $sql.= '"linkedin", linkedin,'; - $sql.= '"instagram", instagram,'; - $sql.= '"snapchat", snapchat,'; - $sql.= '"googleplus", googleplus,'; - $sql.= '"youtube", youtube,'; - $sql.= '"whatsapp", whatsapp)'; + $error = 0; + $db->begin(); + print ''; + $sql = 'SELECT rowid, socialnetworks'; + $sql .= ', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.'adherent WHERE '; + $sql .= ' skype IS NOT NULL OR skype !=""'; + $sql .= ' OR twitter IS NOT NULL OR twitter !=""'; + $sql .= ' OR facebook IS NOT NULL OR facebook!=""'; + $sql .= ' OR linkedin IS NOT NULL OR linkedin!=""'; + $sql .= ' OR instagram IS NOT NULL OR instagram!=""'; + $sql .= ' OR snapchat IS NOT NULL OR snapchat!=""'; + $sql .= ' OR googleplus IS NOT NULL OR googleplus!=""'; + $sql .= ' OR youtube IS NOT NULL OR youtube!=""'; + $sql .= ' OR whatsapp IS NOT NULL OR whatsapp!=""'; //print $sql; $resql = $db->query($sql); if ($resql) { + while ($obj = $db->fetch_object($resql)) { + $arraysocialnetworks = array(); + if (!empty($obj->skype)) { + $arraysocialnetworks['skype'] = $obj->skype; + } + if (!empty($obj->twitter)) { + $arraysocialnetworks['twitter'] = $obj->twitter; + } + if (!empty($obj->facebook)) { + $arraysocialnetworks['facebook'] = $obj->facebook; + } + if (!empty($obj->linkedin)) { + $arraysocialnetworks['linkedin'] = $obj->linkedin; + } + if (!empty($obj->instagram)) { + $arraysocialnetworks['instagram'] = $obj->instagram; + } + if (!empty($obj->snapchat)) { + $arraysocialnetworks['snapchat'] = $obj->snapchat; + } + if (!empty($obj->googleplus)) { + $arraysocialnetworks['googleplus'] = $obj->googleplus; + } + if (!empty($obj->youtube)) { + $arraysocialnetworks['youtube'] = $obj->youtube; + } + if (!empty($obj->whatsapp)) { + $arraysocialnetworks['whatsapp'] = $obj->whatsapp; + } + if ($obj->socialnetworks == '' || is_null($obj->socialnetworks)) { + $obj->socialnetworks = '[]'; + } + $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true)); + $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'adherent SET socialnetworks="'.$db->escape(json_encode($socialnetworks, true)).'"'; + $sqlupd.= ', skype=null'; + $sqlupd.= ', twitter=null'; + $sqlupd.= ', facebook=null'; + $sqlupd.= ', linkedin=null'; + $sqlupd.= ', instagram=null'; + $sqlupd.= ', snapchat=null'; + $sqlupd.= ', googleplus=null'; + $sqlupd.= ', youtube=null'; + $sqlupd.= ', whatsapp=null'; + $sqlupd.= ' WHERE rowid='.$obj->rowid; + //print $sqlupd."
"; + $resqlupd = $db->query($sqlupd); + if (! $resqlupd) { + dol_print_error($db); + $error++; + } + } + } else { + $error++; + } + if (! $error) { $db->commit(); } else { dol_print_error($db); From 634fc5727ca7f61c5f7f9fa0a0bfa0086b1f3697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 2 Oct 2019 21:08:41 +0200 Subject: [PATCH 093/980] new migration script for contacts --- htdocs/install/upgrade2.php | 84 ++++++++++++++++++++++++++++++++----- 1 file changed, 73 insertions(+), 11 deletions(-) diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 57df60658a7..b1f491c6d88 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -5126,21 +5126,83 @@ function migrate_contacts_socialnetworks() { global $db, $langs; // jabberid,skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp + $error = 0; + $db->begin(); print ''; - $sql = 'UPDATE '.MAIN_DB_PREFIX.'socpeople SET socialnetworks=JSON_OBJECT('; - $sql.= '"jabber", jabberid,'; - $sql.= '"skype", skype,'; - $sql.= '"twitter", twitter,'; - $sql.= '"facebook", facebook,'; - $sql.= '"linkedin", linkedin,'; - $sql.= '"instagram", instagram,'; - $sql.= '"snapchat", snapchat,'; - $sql.= '"googleplus", googleplus,'; - $sql.= '"youtube", youtube,'; - $sql.= '"whatsapp", whatsapp)'; + $sql = 'SELECT rowid, socialnetworks'; + $sql .= ', jabberid, skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.'socpeople WHERE '; + $sql .= ' jabberid IS NOT NULL OR jabberid !=""'; + $sql .= ' OR skype IS NOT NULL OR skype !=""'; + $sql .= ' OR twitter IS NOT NULL OR twitter !=""'; + $sql .= ' OR facebook IS NOT NULL OR facebook!=""'; + $sql .= ' OR linkedin IS NOT NULL OR linkedin!=""'; + $sql .= ' OR instagram IS NOT NULL OR instagram!=""'; + $sql .= ' OR snapchat IS NOT NULL OR snapchat!=""'; + $sql .= ' OR googleplus IS NOT NULL OR googleplus!=""'; + $sql .= ' OR youtube IS NOT NULL OR youtube!=""'; + $sql .= ' OR whatsapp IS NOT NULL OR whatsapp!=""'; //print $sql; $resql = $db->query($sql); if ($resql) { + while ($obj = $db->fetch_object($resql)) { + $arraysocialnetworks = array(); + if (!empty($obj->jabberid)) { + $arraysocialnetworks['jabber'] = $obj->jabberid; + } + if (!empty($obj->skype)) { + $arraysocialnetworks['skype'] = $obj->skype; + } + if (!empty($obj->twitter)) { + $arraysocialnetworks['twitter'] = $obj->twitter; + } + if (!empty($obj->facebook)) { + $arraysocialnetworks['facebook'] = $obj->facebook; + } + if (!empty($obj->linkedin)) { + $arraysocialnetworks['linkedin'] = $obj->linkedin; + } + if (!empty($obj->instagram)) { + $arraysocialnetworks['instagram'] = $obj->instagram; + } + if (!empty($obj->snapchat)) { + $arraysocialnetworks['snapchat'] = $obj->snapchat; + } + if (!empty($obj->googleplus)) { + $arraysocialnetworks['googleplus'] = $obj->googleplus; + } + if (!empty($obj->youtube)) { + $arraysocialnetworks['youtube'] = $obj->youtube; + } + if (!empty($obj->whatsapp)) { + $arraysocialnetworks['whatsapp'] = $obj->whatsapp; + } + if ($obj->socialnetworks == '' || is_null($obj->socialnetworks)) { + $obj->socialnetworks = '[]'; + } + $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true)); + $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'socpeople SET socialnetworks="'.$db->escape(json_encode($socialnetworks, true)).'"'; + $sqlupd.= ', jabberid=null'; + $sqlupd.= ', skype=null'; + $sqlupd.= ', twitter=null'; + $sqlupd.= ', facebook=null'; + $sqlupd.= ', linkedin=null'; + $sqlupd.= ', instagram=null'; + $sqlupd.= ', snapchat=null'; + $sqlupd.= ', googleplus=null'; + $sqlupd.= ', youtube=null'; + $sqlupd.= ', whatsapp=null'; + $sqlupd.= ' WHERE rowid='.$obj->rowid; + //print $sqlupd."
"; + $resqlupd = $db->query($sqlupd); + if (! $resqlupd) { + dol_print_error($db); + $error++; + } + } + } else { + $error++; + } + if (! $error) { $db->commit(); } else { dol_print_error($db); From fe4629cd87779ff0b83063912b82123701320e96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 2 Oct 2019 21:11:21 +0200 Subject: [PATCH 094/980] new migration script for thirdparties --- htdocs/install/upgrade2.php | 79 +++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 11 deletions(-) diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index b1f491c6d88..85a0e19ea4d 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -5221,21 +5221,78 @@ function migrate_thirdparties_socialnetworks() { global $db, $langs; // skype,twitter,facebook,linkedin,instagram,snapchat,googleplus,youtube,whatsapp - + $error = 0; + $db->begin(); print ''; - $sql = 'UPDATE '.MAIN_DB_PREFIX.'societe SET socialnetworks=JSON_OBJECT('; - $sql.= '"skype", skype,'; - $sql.= '"twitter", twitter,'; - $sql.= '"facebook", facebook,'; - $sql.= '"linkedin", linkedin,'; - $sql.= '"instagram", instagram,'; - $sql.= '"snapchat", snapchat,'; - $sql.= '"googleplus", googleplus,'; - $sql.= '"youtube", youtube,'; - $sql.= '"whatsapp", whatsapp)'; + $sql = 'SELECT rowid, socialnetworks'; + $sql .= ', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.'societe WHERE '; + $sql .= ' OR skype IS NOT NULL OR skype !=""'; + $sql .= ' OR twitter IS NOT NULL OR twitter !=""'; + $sql .= ' OR facebook IS NOT NULL OR facebook!=""'; + $sql .= ' OR linkedin IS NOT NULL OR linkedin!=""'; + $sql .= ' OR instagram IS NOT NULL OR instagram!=""'; + $sql .= ' OR snapchat IS NOT NULL OR snapchat!=""'; + $sql .= ' OR googleplus IS NOT NULL OR googleplus!=""'; + $sql .= ' OR youtube IS NOT NULL OR youtube!=""'; + $sql .= ' OR whatsapp IS NOT NULL OR whatsapp!=""'; //print $sql; $resql = $db->query($sql); if ($resql) { + while ($obj = $db->fetch_object($resql)) { + $arraysocialnetworks = array(); + if (!empty($obj->skype)) { + $arraysocialnetworks['skype'] = $obj->skype; + } + if (!empty($obj->twitter)) { + $arraysocialnetworks['twitter'] = $obj->twitter; + } + if (!empty($obj->facebook)) { + $arraysocialnetworks['facebook'] = $obj->facebook; + } + if (!empty($obj->linkedin)) { + $arraysocialnetworks['linkedin'] = $obj->linkedin; + } + if (!empty($obj->instagram)) { + $arraysocialnetworks['instagram'] = $obj->instagram; + } + if (!empty($obj->snapchat)) { + $arraysocialnetworks['snapchat'] = $obj->snapchat; + } + if (!empty($obj->googleplus)) { + $arraysocialnetworks['googleplus'] = $obj->googleplus; + } + if (!empty($obj->youtube)) { + $arraysocialnetworks['youtube'] = $obj->youtube; + } + if (!empty($obj->whatsapp)) { + $arraysocialnetworks['whatsapp'] = $obj->whatsapp; + } + if ($obj->socialnetworks == '' || is_null($obj->socialnetworks)) { + $obj->socialnetworks = '[]'; + } + $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true)); + $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'societe SET socialnetworks="'.$db->escape(json_encode($socialnetworks, true)).'"'; + $sqlupd.= ', skype=null'; + $sqlupd.= ', twitter=null'; + $sqlupd.= ', facebook=null'; + $sqlupd.= ', linkedin=null'; + $sqlupd.= ', instagram=null'; + $sqlupd.= ', snapchat=null'; + $sqlupd.= ', googleplus=null'; + $sqlupd.= ', youtube=null'; + $sqlupd.= ', whatsapp=null'; + $sqlupd.= ' WHERE rowid='.$obj->rowid; + //print $sqlupd."
"; + $resqlupd = $db->query($sqlupd); + if (! $resqlupd) { + dol_print_error($db); + $error++; + } + } + } else { + $error++; + } + if (! $error) { $db->commit(); } else { dol_print_error($db); From 91761e8185fcbafcb92d9ab5c4cb70796ef40009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 2 Oct 2019 21:16:33 +0200 Subject: [PATCH 095/980] fix migration script for thirdparties --- htdocs/install/upgrade2.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 85a0e19ea4d..8d8a2433de8 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -5041,8 +5041,8 @@ function migrate_members_socialnetworks() print ''; $sql = 'SELECT rowid, socialnetworks'; $sql .= ', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.'adherent WHERE '; - $sql .= ' skype IS NOT NULL OR skype !=""'; - $sql .= ' OR twitter IS NOT NULL OR twitter !=""'; + $sql .= ' skype IS NOT NULL OR skype!=""'; + $sql .= ' OR twitter IS NOT NULL OR twitter!=""'; $sql .= ' OR facebook IS NOT NULL OR facebook!=""'; $sql .= ' OR linkedin IS NOT NULL OR linkedin!=""'; $sql .= ' OR instagram IS NOT NULL OR instagram!=""'; @@ -5131,9 +5131,9 @@ function migrate_contacts_socialnetworks() print ''; $sql = 'SELECT rowid, socialnetworks'; $sql .= ', jabberid, skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.'socpeople WHERE '; - $sql .= ' jabberid IS NOT NULL OR jabberid !=""'; - $sql .= ' OR skype IS NOT NULL OR skype !=""'; - $sql .= ' OR twitter IS NOT NULL OR twitter !=""'; + $sql .= ' jabberid IS NOT NULL OR jabberid!=""'; + $sql .= ' OR skype IS NOT NULL OR skype!=""'; + $sql .= ' OR twitter IS NOT NULL OR twitter!=""'; $sql .= ' OR facebook IS NOT NULL OR facebook!=""'; $sql .= ' OR linkedin IS NOT NULL OR linkedin!=""'; $sql .= ' OR instagram IS NOT NULL OR instagram!=""'; @@ -5226,8 +5226,8 @@ function migrate_thirdparties_socialnetworks() print ''; $sql = 'SELECT rowid, socialnetworks'; $sql .= ', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.'societe WHERE '; - $sql .= ' OR skype IS NOT NULL OR skype !=""'; - $sql .= ' OR twitter IS NOT NULL OR twitter !=""'; + $sql .= ' skype IS NOT NULL OR skype!=""'; + $sql .= ' OR twitter IS NOT NULL OR twitter!=""'; $sql .= ' OR facebook IS NOT NULL OR facebook!=""'; $sql .= ' OR linkedin IS NOT NULL OR linkedin!=""'; $sql .= ' OR instagram IS NOT NULL OR instagram!=""'; From feaa5e2bd021cddd3ff513ecbd70cf6a1184e895 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 2 Oct 2019 22:15:24 +0200 Subject: [PATCH 096/980] json query path --- htdocs/contact/list.php | 2 +- htdocs/core/lib/company.lib.php | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 42c2e7cf0ad..be4cf227df0 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -345,7 +345,7 @@ if (strlen($search_fax)) $sql.= natural_search('p.fax', $search_fax); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { if ($value['active'] && strlen($search_{$key})) { - $sql.= natural_search("p.socialnetworks->>'$.".$key."'", $search_{$key}); + $sql.= natural_search("p.socialnetworks->'$.".$key."'", $search_{$key}); } } } diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 490f2f99adf..01775909a5d 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -895,7 +895,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') //Social media foreach ($socialnetworks as $key => $value) { if ($value['active']) { - $searchAddressPhoneDBFields['t.'.$key] = "t.socialnetworks->>'$.".$key."'"; + $searchAddressPhoneDBFields['t.'.$key] = "t.socialnetworks->'$.".$key."'"; } } @@ -948,7 +948,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') { $queryName = 'search_'.substr($key, 2); if (GETPOST($queryName, 'alpha')){ - $search[$key]=GETPOST($queryName, 'alpha'); + $search[substr($key, 2)]=GETPOST($queryName, 'alpha'); } } $search_array_options=$extrafields->getOptionalsFromPost($contactstatic->table_element, '', 'search_'); @@ -1047,8 +1047,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') if (in_array($key, array('statut'))){ print $form->selectarray('search_status', array('-1'=>'','0'=>$contactstatic->LibStatut(0, 1),'1'=>$contactstatic->LibStatut(1, 1)), $search_status); } else { - $fieldName = substr($key, 2); - print sprintf('', $fieldName, dol_escape_htmltag($search[$key])); + print ''; } print ''; } From e443538f717982fe7e8b5e9c174dbc5339a35113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 3 Oct 2019 17:23:50 +0200 Subject: [PATCH 097/980] wip --- htdocs/fourn/class/fournisseur.facture.class.php | 2 +- htdocs/holiday/class/holiday.class.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 19a65abdfd9..a3f967092f5 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -2205,7 +2205,7 @@ class FactureFournisseur extends CommonInvoice $response->label=$langs->trans("SupplierBillsToPay"); $response->labelShort=$langs->trans("StatusToPay"); - $response->url=DOL_URL_ROOT.'/fourn/facture/list.php?search_status=1&mainmenu=billing&leftmenu=suppliers_bills'; + $response->url=DOL_URL_ROOT.'/fourn/facture/list.php?search_status=1&mainmenu=billing&leftmenu=suppliers_bills'; $response->img=img_object($langs->trans("Bills"), "bill"); $facturestatic = new FactureFournisseur($this->db); diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 756cc7cd5d2..37de6440e60 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -2232,7 +2232,7 @@ class Holiday extends CommonObject $response->warning_delay=$conf->holiday->approve->warning_delay/60/60/24; $response->label=$langs->trans("HolidaysToApprove"); $response->labelShort=$langs->trans("ToApprove"); - $response->url=DOL_URL_ROOT.'/holiday/list.php?search_statut=2&mainmenu=hrm&leftmenu=holiday'; + $response->url=DOL_URL_ROOT.'/holiday/list.php?search_statut=2&mainmenu=hrm&leftmenu=holiday'; $response->img=img_object('', "holiday"); while ($obj=$this->db->fetch_object($resql)) From 55410a55ef0f83f294783275fb6d12350746b592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 4 Oct 2019 00:45:57 +0200 Subject: [PATCH 098/980] Update list.php --- htdocs/expensereport/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index 0014cb7999c..699276ed683 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -272,7 +272,7 @@ $sql = "SELECT d.rowid, d.ref, d.fk_user_author, d.total_ht, d.total_tva, d.tota $sql.= " d.date_debut, d.date_fin, d.date_create, d.tms as date_modif, d.date_valid, d.date_approve, d.note_private, d.note_public,"; $sql.= " u.rowid as id_user, u.firstname, u.lastname, u.login, u.email, u.statut, u.photo"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +foreach ($extralabels as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect',$parameters); // Note that $action and $object may have been modified by hook From 37f6aa3395316006f239a1dceec8ebc718960552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 6 Oct 2019 15:52:33 +0200 Subject: [PATCH 099/980] Update list.php --- htdocs/expensereport/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index 699276ed683..db36aacf542 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -272,7 +272,7 @@ $sql = "SELECT d.rowid, d.ref, d.fk_user_author, d.total_ht, d.total_tva, d.tota $sql.= " d.date_debut, d.date_fin, d.date_create, d.tms as date_modif, d.date_valid, d.date_approve, d.note_private, d.note_public,"; $sql.= " u.rowid as id_user, u.firstname, u.lastname, u.login, u.email, u.statut, u.photo"; // Add fields from extrafields -foreach ($extralabels as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +foreach ($extrafields->attributes['expensereport']['type'] as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect',$parameters); // Note that $action and $object may have been modified by hook From 8c024b3786eb34537fd7c662063fd9dd3dee4419 Mon Sep 17 00:00:00 2001 From: atm-lena Date: Mon, 7 Oct 2019 11:26:10 +0200 Subject: [PATCH 100/980] FIX : missing "$this->id" in "fetch" function --- htdocs/core/class/link.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/class/link.class.php b/htdocs/core/class/link.class.php index 8413725ab11..db2c1009a3f 100644 --- a/htdocs/core/class/link.class.php +++ b/htdocs/core/class/link.class.php @@ -334,6 +334,7 @@ class Link extends CommonObject if($this->db->num_rows($resql) > 0) { $obj = $this->db->fetch_object($resql); + $this->id = $obj->rowid; $this->entity = $obj->entity; $this->datea = $this->db->jdate($obj->datea); $this->url = $obj->url; From 12d243b8d4b8f3bed17d96a9bdd69c23547eaf4c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 7 Oct 2019 13:13:46 +0200 Subject: [PATCH 101/980] FIX #12040 --- htdocs/core/modules/modProduct.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/modules/modProduct.class.php b/htdocs/core/modules/modProduct.class.php index 13e9816008e..001c7759c67 100644 --- a/htdocs/core/modules/modProduct.class.php +++ b/htdocs/core/modules/modProduct.class.php @@ -552,6 +552,7 @@ class modProduct extends DolibarrModules ) ); + if (! is_array($this->import_convertvalue_array[$r])) $this->import_convertvalue_array[$r] = array(); $this->import_convertvalue_array[$r] = array_merge($this->import_convertvalue_array[$r], array( 'p.fk_unit' => array( 'rule' => 'fetchidfromcodeorlabel', From 839929f7648c1150dcb0603aa5de3e27b9338231 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 7 Oct 2019 14:16:47 +0200 Subject: [PATCH 102/980] FIX #12026 --- htdocs/user/class/user.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index d89e1308612..8e0a9d956cb 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -1293,8 +1293,8 @@ class User extends CommonObject $this->db->begin(); - // Cree et positionne $this->id - $result=$this->create($user); + // Create user and set $this->id. Trigger is disabled because executed later. + $result=$this->create($user, 1); if ($result > 0) { $sql = "UPDATE ".MAIN_DB_PREFIX."user"; From 2aee62ea28726d0247147fd3e145a936222cfdb5 Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Mon, 7 Oct 2019 17:32:52 +0200 Subject: [PATCH 103/980] FIX: $from and $sendto variables are unescaped in the sending error message This causes addresses like Tom not to be shown in the message. --- htdocs/core/actions_sendmails.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/actions_sendmails.inc.php b/htdocs/core/actions_sendmails.inc.php index 17f1a70d555..088c30aaf31 100644 --- a/htdocs/core/actions_sendmails.inc.php +++ b/htdocs/core/actions_sendmails.inc.php @@ -460,7 +460,7 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO $mesg='
'; if ($mailfile->error) { - $mesg.=$langs->trans('ErrorFailedToSendMail',$from,$sendto); + $mesg.=$langs->transnoentities('ErrorFailedToSendMail',dol_escape_htmltag($from),dol_escape_htmltag($sendto)); $mesg.='
'.$mailfile->error; } else From 2ba8506608a61c031a681f1183dc459a06dce994 Mon Sep 17 00:00:00 2001 From: Laurent De Coninck Date: Mon, 7 Oct 2019 17:53:23 +0200 Subject: [PATCH 104/980] validate the 0 as min value consecutive; meaning not take that rule into account --- htdocs/admin/security.php | 2 +- .../generate/modGeneratePassPerso.class.php | 29 ++++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/htdocs/admin/security.php b/htdocs/admin/security.php index c4c8026e076..7fa5bb3c28f 100644 --- a/htdocs/admin/security.php +++ b/htdocs/admin/security.php @@ -174,7 +174,7 @@ if ($action == 'maj_pattern') $explodePattern = explode(';', $pattern); $patternInError = false; - if($explodePattern[0] < 1 || $explodePattern[4] < 1){ + if($explodePattern[0] < 1){ $patternInError = true; } diff --git a/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php b/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php index bccb1353087..f8c02cc95f8 100644 --- a/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php +++ b/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php @@ -187,31 +187,32 @@ class modGeneratePassPerso extends ModeleGenPassword $spe = str_split($this->Spe); if (count(array_intersect($password_a, $maj)) < $this->NbMaj) { - return 0; + return false; } if (count(array_intersect($password_a, $num)) < $this->NbNum) { - return 0; + return false; } if (count(array_intersect($password_a, $spe)) < $this->NbSpe) { - return 0; + return false; } if (!$this->consecutiveInterationSameCharacter($password)) { - return 0; + return false; } - return 1; + return true; } /** - * consecutive iterations of the same character + * check the consecutive iterations of the same character. Return false if the number doesn't match the maximum consecutive value allowed. * * @param string $password Password to check - * @return int 0 if KO, >0 if OK + * + * @return bool */ - public function consecutiveInterationSameCharacter($password) + private function consecutiveInterationSameCharacter($password) { $last = ""; $count = 0; @@ -220,14 +221,16 @@ class modGeneratePassPerso extends ModeleGenPassword if($c != $last) { $last = $c; $count = 0; - } else { - $count++; + + continue; } - if ($count >= $this->NbRepeat) { - return 0; + $count++; + if ($count > $this->NbRepeat) { + return false; } } - return 1; + + return true; } } From da5890e584d10cc99f1b61394f534f862f9f12c2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 7 Oct 2019 20:32:51 +0200 Subject: [PATCH 105/980] Update adherent.class.php --- htdocs/adherents/class/adherent.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 28667cb047f..631ad61684c 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -581,7 +581,7 @@ class Adherent extends CommonObject $sql.= ", fk_adherent_type = ".$this->db->escape($this->typeid); $sql.= ", morphy = '".$this->db->escape($this->morphy)."'"; $sql.= ", birth = ".($this->birth?"'".$this->db->idate($this->birth)."'":"null"); - if ($this->socid) $sql.= ", fk_soc = '".$this->db->escape($this->socid)."'"; // Must be modified only when creating from a thirdpart + if ($this->socid) $sql.= ", fk_soc = '".$this->db->escape($this->socid)."'"; // Must be modified only when creating from a third-party if ($this->datefin) $sql.= ", datefin = '".$this->db->idate($this->datefin)."'"; // Must be modified only when deleting a subscription if ($this->datevalid) $sql.= ", datevalid = '".$this->db->idate($this->datevalid)."'"; // Must be modified only when validating a member $sql.= ", fk_user_mod = ".($user->id>0?$user->id:'null'); // Can be null because member can be create by a guest From eba3d96293a3820782655eff1ba0cbba5aede01a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 7 Oct 2019 20:36:48 +0200 Subject: [PATCH 106/980] Update card.php NEW Add option MEMBER_CAN_CONVERT_CUSTOMERS_TO_MEMBERS --- htdocs/societe/card.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 8c1db93c53b..5be134286e5 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -2668,12 +2668,12 @@ else if (! empty($conf->adherent->enabled)) { - $adh = new Adherent($db); - $result=$adh->fetch('', '', $object->id); - if (!$result && $object->client == 1) - { - print ''.$langs->trans("NewMember").''; - } + $adh = new Adherent($db); + $result=$adh->fetch('', '', $object->id); + if ($result == 0 && ($object->client == 1 || $object->client == 3) && ! empty($conf->global->MEMBER_CAN_CONVERT_CUSTOMERS_TO_MEMBERS)) + { + print ''.$langs->trans("NewMember").''; + } } if ($user->rights->societe->supprimer) From bb72efefc5fcf0f3b9bea6af698941a3a961a14b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 7 Oct 2019 20:52:27 +0200 Subject: [PATCH 107/980] Fix phpcs --- htdocs/core/modules/import/import_xlsx.modules.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php index a4615579f34..59f5ce8aa7b 100644 --- a/htdocs/core/modules/import/import_xlsx.modules.php +++ b/htdocs/core/modules/import/import_xlsx.modules.php @@ -669,7 +669,7 @@ class ImportXlsx extends ModeleImports $errorforthistable++; $error++; } - } + } // If test is just a static regex elseif (! preg_match('/'.$objimport->array_import_regex[0][$val].'/i', $newval)) { //if ($key == 19) print "xxx".$newval."zzz".$objimport->array_import_regex[0][$val]."
"; From 091df082fc023c3ddd301ae1f59e64c96eee3be4 Mon Sep 17 00:00:00 2001 From: Laurent De Coninck Date: Tue, 8 Oct 2019 08:11:29 +0200 Subject: [PATCH 108/980] fix the access of the bank account of one user There are 3 ways to access this tab : 1. If the module holiday is enabled 2. If the module holidays is enabled 3. If the module expense report is enabled More over that, the application checks if the user can access the bank account of the selected user. The application does that twice (logical ^^), first to know if the tab has to be displayed or not. Second time, when you arrive on the page /user/bank.php to know if you have access (eg. if you type the url directly). In this second check, the check of the expense report module was missing (added by this PR). This caused the following issue: the tab was visible but when the user clicked on itn, he received an error as he cannot access the page. --- htdocs/user/bank.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/user/bank.php b/htdocs/user/bank.php index 196819f1a4a..2e2091034f9 100644 --- a/htdocs/user/bank.php +++ b/htdocs/user/bank.php @@ -54,6 +54,7 @@ $ok=false; if ($user->id == $id) $ok=true; // A user can always read its own card if (! empty($user->rights->salaries->read)) $ok=true; if (! empty($user->rights->hrm->read)) $ok=true; +if (! empty($user->rights->expensereport->lire) && ($user->id == $object->id || $user->rights->expensereport->readall)) $ok=true; if (! $ok) { accessforbidden(); From c8fb1e852ca234ab18818784bf56cbfe8cab0a8c Mon Sep 17 00:00:00 2001 From: Laurent De Coninck Date: Tue, 8 Oct 2019 08:51:09 +0200 Subject: [PATCH 109/980] export some other fields on the expense reports When the user requests the export of the expense reports, some fields were missing such as the bank account information of the user. This PR adds the support of all those fields on the expense report export. Now when you export the expense report you have : * The bank name * The bank code * The IBAN * The BIC * The owner * The owner address --- htdocs/core/modules/modExpenseReport.class.php | 16 ++++++++++++---- htdocs/exports/export.php | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/modExpenseReport.class.php b/htdocs/core/modules/modExpenseReport.class.php index 15474d154b9..5b116aa8d93 100644 --- a/htdocs/core/modules/modExpenseReport.class.php +++ b/htdocs/core/modules/modExpenseReport.class.php @@ -184,18 +184,25 @@ class modExpenseReport extends DolibarrModules 'd.rowid'=>"TripId",'d.ref'=>'Ref','d.date_debut'=>'DateStart','d.date_fin'=>'DateEnd','d.date_create'=>'DateCreation','d.date_approve'=>'DateApprove', 'd.total_ht'=>"TotalHT",'d.total_tva'=>'TotalVAT','d.total_ttc'=>'TotalTTC','d.note_private'=>'NotePrivate','d.note_public'=>'NotePublic', 'u.lastname'=>'Lastname','u.firstname'=>'Firstname','u.login'=>"Login",'ed.rowid'=>'LineId','tf.code'=>'Type','ed.date'=>'Date','ed.tva_tx'=>'VATRate', - 'ed.total_ht'=>'TotalHT','ed.total_tva'=>'TotalVAT','ed.total_ttc'=>'TotalTTC','ed.comments'=>'Comment','p.rowid'=>'ProjectId','p.ref'=>'Ref' + 'ed.total_ht'=>'TotalHT','ed.total_tva'=>'TotalVAT','ed.total_ttc'=>'TotalTTC','ed.comments'=>'Comment','p.rowid'=>'ProjectId','p.ref'=>'Ref', + 'user_rib.iban_prefix' => 'IBAN', 'user_rib.bic' => 'BIC', 'user_rib.code_banque' => 'BankCode', 'user_rib.bank' => 'BankName', 'user_rib.proprio' => 'BankAccountOwner', + 'user_rib.owner_address' => 'BankAccountOwnerAddress' ); $this->export_TypeFields_array[$r]=array( 'd.rowid'=>"Numeric",'d.ref'=>'Text','d.date_debut'=>'Date','d.date_fin'=>'Date','d.date_create'=>'Date','d.date_approve'=>'Date', 'd.total_ht'=>"Numeric",'d.total_tva'=>'Numeric','d.total_ttc'=>'Numeric','d.note_private'=>'Text','d.note_public'=>'Text', 'u.lastname'=>'Text','u.firstname'=>'Text','u.login'=>"Text",'ed.rowid'=>'Numeric','tf.code'=>'Code','ed.date'=>'Date','ed.tva_tx'=>'Numeric', - 'ed.total_ht'=>'Numeric','ed.total_tva'=>'Numeric','ed.total_ttc'=>'Numeric','ed.comments'=>'Text','p.rowid'=>'Numeric','p.ref'=>'Text' + 'ed.total_ht'=>'Numeric','ed.total_tva'=>'Numeric','ed.total_ttc'=>'Numeric','ed.comments'=>'Text','p.rowid'=>'Numeric','p.ref'=>'Text', + 'user_rib.iban_prefix' => 'Text', 'user_rib.bic' => 'Text', 'user_rib.code_banque' => 'Text', 'user_rib.bank' => 'Text', 'user_rib.proprio' => 'Text', + 'user_rib.owner_address' => 'Text' ); $this->export_entities_array[$r]=array( 'u.lastname'=>'user','u.firstname'=>'user','u.login'=>'user','ed.rowid'=>'expensereport_line','ed.date'=>'expensereport_line', 'ed.tva_tx'=>'expensereport_line','ed.total_ht'=>'expensereport_line','ed.total_tva'=>'expensereport_line','ed.total_ttc'=>'expensereport_line', - 'ed.comments'=>'expensereport_line','tf.code'=>'expensereport_line','p.project_ref'=>'expensereport_line','p.rowid'=>'project','p.ref'=>'project' + 'ed.comments'=>'expensereport_line','tf.code'=>'expensereport_line','p.project_ref'=>'expensereport_line','p.rowid'=>'project','p.ref'=>'project', + 'user_rib.iban_prefix' => 'user', 'user_rib.bic' => 'user', 'user_rib.code_banque' => 'user', 'user_rib.bank' => 'user', 'user_rib.proprio' => 'user', + 'user_rib.owner_address' => 'user' + ); $this->export_alias_array[$r]=array('d.rowid'=>"idtrip",'d.type'=>"type",'d.note_private'=>'note_private','d.note_public'=>'note_public','u.lastname'=>'name','u.firstname'=>'firstname','u.login'=>'login'); $this->export_dependencies_array[$r]=array('expensereport_line'=>'ed.rowid','type_fees'=>'tf.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them @@ -205,7 +212,8 @@ class modExpenseReport extends DolibarrModules $this->export_sql_start[$r]='SELECT DISTINCT '; $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'expensereport as d'; - $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'expensereport_extrafields as extra on d.rowid = extra.fk_object,'; + $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'expensereport_extrafields as extra on d.rowid = extra.fk_object'; + $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user_rib as user_rib ON user_rib.fk_user = d.fk_user_author,'; $this->export_sql_end[$r] .=' '.MAIN_DB_PREFIX.'user as u,'; $this->export_sql_end[$r] .=' '.MAIN_DB_PREFIX.'expensereport_det as ed LEFT JOIN '.MAIN_DB_PREFIX.'c_type_fees as tf ON ed.fk_c_type_fees = tf.id'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'projet as p ON ed.fk_projet = p.rowid'; diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php index dada022deec..58feffd3e46 100644 --- a/htdocs/exports/export.php +++ b/htdocs/exports/export.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/export/modules_export.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; // Load translation files required by the page -$langs->loadlangs(array('exports', 'other', 'users', 'companies', 'projects')); +$langs->loadlangs(array('exports', 'other', 'users', 'companies', 'projects', 'BankAccounts')); // Everybody should be able to go on this page //if (! $user->admin) From 760783b98b442bbe9d5563ba0bf69ea6e741f30d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 13:14:51 +0200 Subject: [PATCH 110/980] FIX #11942 --- htdocs/categories/class/categorie.class.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index b9a92f85d5e..9075e170137 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -842,11 +842,14 @@ class Categorie extends CommonObject if ($type=="contact") { $subcol_name="fk_socpeople"; } + + $idoftype = array_search($type, self::$MAP_ID_TO_CODE); + $sql = "SELECT s.rowid"; $sql.= " FROM ".MAIN_DB_PREFIX."categorie as s"; $sql.= " , ".MAIN_DB_PREFIX."categorie_".$sub_type." as sub "; $sql.= ' WHERE s.entity IN ('.getEntity('category').')'; - $sql.= ' AND s.type='.array_search($type, self::$MAP_ID_TO_CODE); + $sql.= ' AND s.type='.$idoftype; $sql.= ' AND s.rowid = sub.fk_categorie'; $sql.= ' AND sub.'.$subcol_name.' = '.$id; @@ -865,7 +868,7 @@ class Categorie extends CommonObject } } - $sql.= $this->db->plimit($limit + 1, $offset); + if ($limit) $sql.= $this->db->plimit($limit + 1, $offset); $result = $this->db->query($sql); if ($result) From 7377c30bfe23e577fc50b877f22ddaba8775c1a3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 13:17:13 +0200 Subject: [PATCH 111/980] Fix limit --- htdocs/categories/class/categorie.class.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index 9075e170137..f31e8f9b048 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -868,7 +868,15 @@ class Categorie extends CommonObject } } - if ($limit) $sql.= $this->db->plimit($limit + 1, $offset); + if ($limit) { + if ($page < 0) + { + $page = 0; + } + $offset = $limit * $page; + + $sql.= $this->db->plimit($limit + 1, $offset); + } $result = $this->db->query($sql); if ($result) From bd867f5e805e5d9b8b348f1d14582da8464913f5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 15:16:23 +0200 Subject: [PATCH 112/980] Update ccountry.class.php --- htdocs/core/class/ccountry.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php index 71df0784fba..d6d33df553e 100644 --- a/htdocs/core/class/ccountry.class.php +++ b/htdocs/core/class/ccountry.class.php @@ -30,7 +30,7 @@ /** * Class to manage dictionary Countries (used by imports) */ -class Ccountry// extends CommonObject +class Ccountry // extends CommonObject { /** * @var DoliDB Database handler. From c724eef85c900b6b3288b5a839b9d2c24b968cda Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 15:16:56 +0200 Subject: [PATCH 113/980] Update ccountry.class.php --- htdocs/core/class/ccountry.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php index d6d33df553e..575a3b7ed71 100644 --- a/htdocs/core/class/ccountry.class.php +++ b/htdocs/core/class/ccountry.class.php @@ -30,7 +30,7 @@ /** * Class to manage dictionary Countries (used by imports) */ -class Ccountry // extends CommonObject +class Ccountry // extends CommonObject { /** * @var DoliDB Database handler. From 55a2ee55592f50477cc539d734ff0eb3d59c8757 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 15:19:01 +0200 Subject: [PATCH 114/980] Update export.php --- htdocs/exports/export.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php index 58feffd3e46..3bada876d2f 100644 --- a/htdocs/exports/export.php +++ b/htdocs/exports/export.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/export/modules_export.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; // Load translation files required by the page -$langs->loadlangs(array('exports', 'other', 'users', 'companies', 'projects', 'BankAccounts')); +$langs->loadlangs(array('exports', 'other', 'users', 'companies', 'projects', 'banks')); // Everybody should be able to go on this page //if (! $user->admin) From 7e841350db1f5fc74d01a2235a5001760bd94a53 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 8 Oct 2019 13:24:41 +0000 Subject: [PATCH 115/980] Fixing style errors. --- htdocs/core/class/ccountry.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php index 1f59c0a51d1..44445e7d5de 100644 --- a/htdocs/core/class/ccountry.class.php +++ b/htdocs/core/class/ccountry.class.php @@ -344,7 +344,7 @@ class Ccountry // extends CommonObject * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking * @return string String with URL */ - function getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1) + function getNomUrl($withpicto = 0, $option = '', $notooltip = 0, $morecss = '', $save_lastsearch_value = -1) { global $langs; return $langs->trans($this->label); From 368b34c5c2f074f221b001964c9baffbf1dc3006 Mon Sep 17 00:00:00 2001 From: fuhraih <55843623+fuhraih@users.noreply.github.com> Date: Tue, 8 Oct 2019 15:34:35 +0200 Subject: [PATCH 116/980] FIX #11835 FIX #11835 edit Bank Statements in second Page and so on not working --- htdocs/compta/bank/releve.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index cca8f6ea9ef..51609acfa7b 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -263,7 +263,8 @@ if (empty($numref)) print_barre_liste('', $page, $_SERVER["PHP_SELF"], "&account=".$object->id, $sortfield, $sortorder, '', $numrows, $totalnboflines, ''); - print ''; + if ($page==0) print ''; + else print ''; print ''; print ''; print ''; @@ -335,7 +336,7 @@ if (empty($numref)) print ''; if ($user->rights->banque->consolidate && $action != 'editbankreceipt') { - print 'numr.'">'.img_edit().''; + print 'numr.'">'.img_edit().''; } print ''; From ef91e0bff3c4df18170adf96a0dc06398d38f21a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 15:35:36 +0200 Subject: [PATCH 117/980] Trans --- htdocs/langs/en_US/boxes.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/boxes.lang b/htdocs/langs/en_US/boxes.lang index 84815016b7d..b7f7037c94d 100644 --- a/htdocs/langs/en_US/boxes.lang +++ b/htdocs/langs/en_US/boxes.lang @@ -88,7 +88,7 @@ ChooseBoxToAdd=Add widget to your dashboard BoxAdded=Widget was added in your dashboard BoxTitleUserBirthdaysOfMonth=Birthdays of this month (users) BoxLastManualEntries=Last manual entries in accountancy -BoxTitleLastManualEntries=%s last manual entries +BoxTitleLastManualEntries=%s latest manual entries NoRecordedManualEntries=No manual entries record in accountancy BoxSuspenseAccount=Count accountancy operation with suspense account BoxTitleSuspenseAccount=Number of unallocated lines From 37795b19554d8355351bc936158f52b2e787a049 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 15:40:07 +0200 Subject: [PATCH 118/980] Trans --- htdocs/langs/en_US/ticket.lang | 2 +- htdocs/ticket/agenda.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/langs/en_US/ticket.lang b/htdocs/langs/en_US/ticket.lang index 4bc40e19555..14f06f8831f 100644 --- a/htdocs/langs/en_US/ticket.lang +++ b/htdocs/langs/en_US/ticket.lang @@ -139,7 +139,7 @@ TicketViewNonClosedOnly=View only open tickets TicketStatByStatus=Tickets by status OrderByDateAsc=Sort by ascending date OrderByDateDesc=Sort by descending date -MessagingViewType=Show as messaging list +ShowAsConversation=Show as conversation list MessageListViewType=Show as table list # diff --git a/htdocs/ticket/agenda.php b/htdocs/ticket/agenda.php index c20fbe20a7e..9ee8363dc46 100644 --- a/htdocs/ticket/agenda.php +++ b/htdocs/ticket/agenda.php @@ -235,7 +235,7 @@ if (!empty($object->id)) $morehtmlright = ''; $messagingUrl = DOL_URL_ROOT.'/ticket/messaging.php?track_id=' . $object->track_id; - $morehtmlright .= dolGetButtonTitle($langs->trans('MessagingViewType'), '', 'fa fa-comments imgforviewmode', $messagingUrl, '', 1); + $morehtmlright .= dolGetButtonTitle($langs->trans('ShowAsConversation'), '', 'fa fa-comments imgforviewmode', $messagingUrl, '', 1); // Show link to add a message (if read and not closed) $btnstatus = $object->fk_statut < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage"; From eb203413280dcd0faf495a3062db322d72be1f63 Mon Sep 17 00:00:00 2001 From: fuhraih <55843623+fuhraih@users.noreply.github.com> Date: Tue, 8 Oct 2019 15:42:59 +0200 Subject: [PATCH 119/980] Update companies.lang --- htdocs/langs/en_US/companies.lang | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang index a4ab22d47c5..31b0634f579 100644 --- a/htdocs/langs/en_US/companies.lang +++ b/htdocs/langs/en_US/companies.lang @@ -438,5 +438,6 @@ PaymentTypeCustomer=Payment Type - Customer PaymentTermsCustomer=Payment Terms - Customer PaymentTypeSupplier=Payment Type - Vendor PaymentTermsSupplier=Payment Term - Vendor +PaymentTypeBoth=Payment Type - Customer and Vendor MulticurrencyUsed=Use Multicurrency -MulticurrencyCurrency=Currency \ No newline at end of file +MulticurrencyCurrency=Currency From 328abc4048667ea195233c0114d5df93944ab448 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 15:43:44 +0200 Subject: [PATCH 120/980] Clean code --- htdocs/langs/en_US/zapier.lang | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/htdocs/langs/en_US/zapier.lang b/htdocs/langs/en_US/zapier.lang index 2699f54b721..03278aa1c71 100644 --- a/htdocs/langs/en_US/zapier.lang +++ b/htdocs/langs/en_US/zapier.lang @@ -26,28 +26,10 @@ ModuleZapierForDolibarrDesc = ZapierForDolibarr description # Admin page # ZapierForDolibarrSetup = ZapierForDolibarr setup -Settings = Settings -ZapierForDolibarrSetupPage = ZapierForDolibarr setup page -ZAPIERFORDOLIBARR_MYPARAM1 = My param 1 -ZAPIERFORDOLIBARR_MYPARAM1Tooltip = My param 1 tooltip -ZAPIERFORDOLIBARR_MYPARAM2=My param 2 -ZAPIERFORDOLIBARR_MYPARAM2Tooltip=My param 2 tooltip - # # About page # About = About ZapierForDolibarrAbout = About ZapierForDolibarr -ZapierForDolibarrAboutPage = ZapierForDolibarr about page - -# -# Sample page -# -MyPageName = My page name - -# -# Sample widget -# -MyWidget = My widget -MyWidgetDescription = My widget description +ZapierForDolibarrAboutPage = ZapierForDolibarr about page \ No newline at end of file From b13d5aafb38251aa605f86a0ee4ca7b6cf617b71 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 15:45:37 +0200 Subject: [PATCH 121/980] Trans --- htdocs/langs/en_US/zapier.lang | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/htdocs/langs/en_US/zapier.lang b/htdocs/langs/en_US/zapier.lang index 03278aa1c71..07eb8460efa 100644 --- a/htdocs/langs/en_US/zapier.lang +++ b/htdocs/langs/en_US/zapier.lang @@ -18,18 +18,11 @@ # # Module label 'ModuleZapierForDolibarrName' -ModuleZapierForDolibarrName = ZapierForDolibarr +ModuleZapierForDolibarrName = Zapier for Dolibarr # Module description 'ModuleZapierForDolibarrDesc' -ModuleZapierForDolibarrDesc = ZapierForDolibarr description +ModuleZapierForDolibarrDesc = Zapier for Dolibarr module # # Admin page # -ZapierForDolibarrSetup = ZapierForDolibarr setup - -# -# About page -# -About = About -ZapierForDolibarrAbout = About ZapierForDolibarr -ZapierForDolibarrAboutPage = ZapierForDolibarr about page \ No newline at end of file +ZapierForDolibarrSetup = Setup of Zapier for Dolibarr \ No newline at end of file From d6bf0fa483d107f64e0891aa38197feec5a4f29c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 15:47:47 +0200 Subject: [PATCH 122/980] Update releve.php --- htdocs/compta/bank/releve.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index 51609acfa7b..02ba62097c2 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -263,12 +263,12 @@ if (empty($numref)) print_barre_liste('', $page, $_SERVER["PHP_SELF"], "&account=".$object->id, $sortfield, $sortorder, '', $numrows, $totalnboflines, ''); - if ($page==0) print ''; - else print ''; + print ''; print ''; print ''; print ''; print ''; + print ''; print ''; print ''; From 8aee2fa534f313043c1d8d23d48e829878cb7206 Mon Sep 17 00:00:00 2001 From: fuhraih <55843623+fuhraih@users.noreply.github.com> Date: Tue, 8 Oct 2019 15:48:18 +0200 Subject: [PATCH 123/980] Update dict.php --- htdocs/admin/dict.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index d739205124e..31ade656480 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -1510,6 +1510,10 @@ if ($id) $key=$langs->trans("PaymentType".strtoupper($obj->code)); $valuetoshow=($obj->code && $key != "PaymentType".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]}); } + elseif ($fieldlist[$field]=='type' && $tabname[$id]==MAIN_DB_PREFIX.'c_paiement') { + $payment_type_list = array(0=>$langs->trans('PaymentTypeCustomer'), 1=>$langs->trans('PaymentTypeSupplier'), 2=>$langs->trans('PaymentTypeBoth')); + $valuetoshow = $payment_type_list[$valuetoshow]; + } elseif ($fieldlist[$field]=='label' && $tabname[$id]==MAIN_DB_PREFIX.'c_input_reason') { $key=$langs->trans("DemandReasonType".strtoupper($obj->code)); $valuetoshow=($obj->code && $key != "DemandReasonType".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]}); @@ -1876,6 +1880,13 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '') print $type.''; print ''; } + elseif ($fieldlist[$field] == 'type' && $tabname == MAIN_DB_PREFIX.'c_paiement') + { + print ''; + } elseif ($fieldlist[$field] == 'recuperableonly' || $fieldlist[$field] == 'type_cdr' || $fieldlist[$field] == 'deductible' || $fieldlist[$field] == 'category_type') { if ($fieldlist[$field] == 'type_cdr') print ''; From 552a9498be8bd3538ce54e761dd004b3123c025d Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 8 Oct 2019 16:11:50 +0200 Subject: [PATCH 125/980] Update llx_product.sql --- htdocs/install/mysql/tables/llx_product.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/tables/llx_product.sql b/htdocs/install/mysql/tables/llx_product.sql index 1603ee52eff..f828c770089 100755 --- a/htdocs/install/mysql/tables/llx_product.sql +++ b/htdocs/install/mysql/tables/llx_product.sql @@ -69,8 +69,8 @@ create table llx_product accountancy_code_sell_export varchar(32), -- Selling accountancy code for vat export accountancy_code_buy varchar(32), -- Buying accountancy code partnumber varchar(32), -- Part/Serial number. TODO To use it into screen if not a duplicate of barcode. - capacity float DEFAULT NULL, - capacity_units tinyint DEFAULT NULL, + net_measure float DEFAULT NULL, + net_measure_units tinyint DEFAULT NULL, weight float DEFAULT NULL, weight_units tinyint DEFAULT NULL, length float DEFAULT NULL, From e2d76f6f2485b09f485fdbb3546a6320c748848b Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 8 Oct 2019 16:13:59 +0200 Subject: [PATCH 126/980] Update product.class.php --- htdocs/product/class/product.class.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 6dbb54b1203..155fccd354f 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -257,8 +257,8 @@ class Product extends CommonObject public $url; //! Unites de mesure - public $capacity; - public $capacity_units; + public $net_measure; + public $net_measure_units; public $weight; public $weight_units; public $length; @@ -808,8 +808,8 @@ class Product extends CommonObject $this->label = trim($this->label); $this->description = trim($this->description); $this->note = (isset($this->note) ? trim($this->note) : null); - $this->capacity = price2num($this->capacity); - $this->capacity_units = trim($this->capacity_units); + $this->net_measure = price2num($this->net_measure); + $this->net_measure_units = trim($this-net_measure_units); $this->weight = price2num($this->weight); $this->weight_units = trim($this->weight_units); $this->length = price2num($this->length); @@ -956,8 +956,8 @@ class Product extends CommonObject $sql.= ", tobuy = " . (int) $this->status_buy; $sql.= ", tobatch = " . ((empty($this->status_batch) || $this->status_batch < 0) ? '0' : (int) $this->status_batch); $sql.= ", finished = " . ((! isset($this->finished) || $this->finished < 0) ? "null" : (int) $this->finished); - $sql.= ", capacity = " . ($this->capacity!='' ? "'".$this->db->escape($this->capacity)."'" : 'null'); - $sql.= ", capacity_units = " . ($this->capacity_units!='' ? "'".$this->db->escape($this->capacity_units)."'": 'null'); + $sql.= ", net_measure = " . ($this->net_measure!='' ? "'".$this->db->escape($this->net_measure)."'" : 'null'); + $sql.= ", net_measure_units = " . ($this->net_measure_units!='' ? "'".$this->db->escape($this->net_measure_units)."'": 'null'); $sql.= ", weight = " . ($this->weight!='' ? "'".$this->db->escape($this->weight)."'" : 'null'); $sql.= ", weight_units = " . ($this->weight_units!='' ? "'".$this->db->escape($this->weight_units)."'": 'null'); $sql.= ", length = " . ($this->length!='' ? "'".$this->db->escape($this->length)."'" : 'null'); @@ -2114,8 +2114,8 @@ class Product extends CommonObject $this->duration_value = substr($obj->duration, 0, dol_strlen($obj->duration)-1); $this->duration_unit = substr($obj->duration, -1); $this->canvas = $obj->canvas; - $this->capacity = $obj->capacity; - $this->capacity_units = $obj->capacity_units; + $this->net_measure = $obj->net_measure; + $this->net_measure_units = $obj->net_measure_units; $this->weight = $obj->weight; $this->weight_units = $obj->weight_units; $this->length = $obj->length; From 10c29887d662b8774b3b6b8e9caf47d5c8a30f69 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 8 Oct 2019 16:15:12 +0200 Subject: [PATCH 127/980] Update product.class.php --- htdocs/product/class/product.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 155fccd354f..dffaef1d9e7 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -809,7 +809,7 @@ class Product extends CommonObject $this->description = trim($this->description); $this->note = (isset($this->note) ? trim($this->note) : null); $this->net_measure = price2num($this->net_measure); - $this->net_measure_units = trim($this-net_measure_units); + $this->net_measure_units = trim($this->net_measure_units); $this->weight = price2num($this->weight); $this->weight_units = trim($this->weight_units); $this->length = price2num($this->length); @@ -2050,7 +2050,7 @@ class Product extends CommonObject $sql = "SELECT rowid, ref, ref_ext, label, description, url, note as note_private, customcode, fk_country, price, price_ttc,"; $sql.= " price_min, price_min_ttc, price_base_type, cost_price, default_vat_code, tva_tx, recuperableonly as tva_npr, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, tosell,"; - $sql.= " tobuy, fk_product_type, duration, fk_default_warehouse, seuil_stock_alerte, canvas, capacity, capacity_units, weight, weight_units,"; + $sql.= " tobuy, fk_product_type, duration, fk_default_warehouse, seuil_stock_alerte, canvas, net_measure, net_measure_units, weight, weight_units,"; $sql.= " length, length_units, width, width_units, height, height_units,"; $sql.= " surface, surface_units, volume, volume_units, barcode, fk_barcode_type, finished,"; $sql.= " accountancy_code_buy, accountancy_code_sell, accountancy_code_sell_intra, accountancy_code_sell_export, stock, pmp,"; From 17198d59c210b6cce801d236a4ba0e8b0d0a15e6 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 8 Oct 2019 16:17:31 +0200 Subject: [PATCH 128/980] Update 10.0.0-11.0.0.sql --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index cc375e72714..67132713ed7 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -163,4 +163,5 @@ INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, m INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('IN-REPUBLICDAY', 0, 117, '', 0, 1, 26, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('IN-GANDI', 0, 117, '', 0, 10, 2, 1); - +ALTER TABLE llx_product ADD COLUMN net_measure float; +ALTER TABLE llx_product ADD COLUMN net_measure_units tinyint; From ab2d21a550c30227692c567b8dc9d7be759bc0df Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 16:31:40 +0200 Subject: [PATCH 129/980] Enable new top dashboard by default --- htdocs/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/index.php b/htdocs/index.php index 7279eebe80f..c1c6d4a1f63 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -656,7 +656,7 @@ if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) { foreach ($dashboardgroup as $groupKey => $groupElement) { $boards = array(); - if (!empty($conf->global->MAIN_DISPLAY_NEW_OPENED_DASH_BOARD) || !empty($conf->global->MAIN_FEATURES_LEVEL)) { + if (empty($conf->global->MAIN_DISABLE_NEW_OPENED_DASH_BOARD)) { foreach ($groupElement['stats'] as $infoKey) { if (!empty($valid_dashboardlines[$infoKey])) { $boards[] = $valid_dashboardlines[$infoKey]; From f55a4d77e45347866805c095662cbefe04a3f658 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 16:41:03 +0200 Subject: [PATCH 130/980] css --- htdocs/admin/modules.php | 1 + htdocs/core/lib/functions.lib.php | 2 +- htdocs/theme/eldy/global.inc.php | 3 +++ htdocs/theme/md/style.css.php | 3 +++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 08cacec2541..92b6a236c73 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -460,6 +460,7 @@ asort($orders); $nbofactivatedmodules=count($conf->modules); $moreinfo=$langs->trans("TotalNumberOfActivatedModules", ($nbofactivatedmodules-1), count($modules)); if ($nbofactivatedmodules <= 1) $moreinfo .= ' '.img_warning($langs->trans("YouMustEnableOneModule")); + print load_fiche_titre($langs->trans("ModulesSetup"), $moreinfo, 'title_setup'); // Start to show page diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 589ec69b12a..c61fd983638 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -4126,7 +4126,7 @@ function load_fiche_titre($titre, $morehtmlright = '', $picto = 'generic', $pict } if (dol_strlen($morehtmlright)) { - $return.= ''; + $return.= ''; } $return.= '
'; + $select_list = array(0=>$langs->trans('PaymentTypeCustomer'), 1=>$langs->trans('PaymentTypeSupplier'), 2=>$langs->trans('PaymentTypeBoth')); + print $form->selectarray($fieldlist[$field], $select_list, (! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'2')); + print ''; else print ''; From 5970ea5b7976952da52108eb63306eb74bd7da31 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 15:48:29 +0200 Subject: [PATCH 124/980] Update releve.php --- htdocs/compta/bank/releve.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index 02ba62097c2..ae01b761b1b 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -336,7 +336,7 @@ if (empty($numref)) print ''; if ($user->rights->banque->consolidate && $action != 'editbankreceipt') { - print 'numr.'">'.img_edit().''; + print 'numr.'">'.img_edit().''; } print ''.$morehtmlright.''.$morehtmlright.'
'."\n"; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 7dcac4d68ba..dbbed3bc274 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -447,6 +447,9 @@ textarea.centpercent { .wordwrap { word-wrap: break-word; } +.wordbreakimp { + word-break: break-word; +} .wordbreak { word-break: break-all; } diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index a17a33bd898..5960142dfc9 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -647,6 +647,9 @@ textarea.centpercent { .wordwrap { word-wrap: break-word; } +.wordbreakimp { + word-break: break-word; +} .wordbreak { word-break: break-all; } From 6bfcecf207da53ebcf33a739dedc23e34aa41d75 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 16:49:10 +0200 Subject: [PATCH 131/980] Fight against colspan --- htdocs/admin/modules.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 92b6a236c73..787f3ded291 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -871,21 +871,23 @@ if ($mode == 'marketplace') dol_fiche_head($head, $mode, '', -1); // Marketplace - print "\n"; - print "\n"; - //print ''; - print ''; + print '
'; + print '
'.$langs->trans("Logo").''.$langs->trans("WebSiteDesc").'
'."\n"; + print ''."\n"; + print ''; + print ''; print ''; print ''; print ''."\n"; $url='https://www.dolistore.com'; - print ''; + print ''; print ''; print ''; print ''; print "
'.$form->textwithpicto($langs->trans("Provider"), $langs->trans("WebSiteDesc")).''.$langs->trans("URL").'
'.$langs->trans("DoliStoreDesc").''.$url.'
\n"; + print '
'; dol_fiche_end(); From fbb44192e0425412453a042fdc81b1896d8236e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 8 Oct 2019 18:40:39 +0200 Subject: [PATCH 132/980] fix travis --- htdocs/projet/tasks/list.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php index 0b0a598167b..00ef201aa9f 100644 --- a/htdocs/projet/tasks/list.php +++ b/htdocs/projet/tasks/list.php @@ -328,6 +328,7 @@ if (! empty($arrayfields['t.tobill']['checked']) || ! empty($arrayfields['t.bill // 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 : ''); + } } $sql.= $db->order($sortfield, $sortorder); From ae62d3d60ab2399a969c6b16e8d5b805e1bf82ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 8 Oct 2019 18:43:22 +0200 Subject: [PATCH 133/980] Update list.php --- htdocs/contrat/list.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/contrat/list.php b/htdocs/contrat/list.php index 5d8a9f8521a..fc110d4a396 100644 --- a/htdocs/contrat/list.php +++ b/htdocs/contrat/list.php @@ -267,6 +267,7 @@ $sql.= " state.code_departement, state.nom"; // 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 : ''); +} // Add where from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListGroupBy', $parameters); // Note that $action and $object may have been modified by hook From 8921a103c1bc921f35c442b6027a33cc92f80af9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 19:25:54 +0200 Subject: [PATCH 134/980] Trans --- htdocs/langs/en_US/margins.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/margins.lang b/htdocs/langs/en_US/margins.lang index d4545b8e75f..d52a387cfd2 100644 --- a/htdocs/langs/en_US/margins.lang +++ b/htdocs/langs/en_US/margins.lang @@ -36,7 +36,7 @@ CostPrice=Cost price UnitCharges=Unit charges Charges=Charges AgentContactType=Commercial agent contact type -AgentContactTypeDetails=Define what contact type (linked on invoices) will be used for margin report per sale representative +AgentContactTypeDetails=Define what contact type (linked on invoices) will be used for margin report per sale representative. Note that reading statistics on a contact is not reliable since in most cases the contact may not be defined explicitely on the invoices. rateMustBeNumeric=Rate must be a numeric value markRateShouldBeLesserThan100=Mark rate should be lower than 100 ShowMarginInfos=Show margin infos From 6de31f2c54035343f06e59891ce30214e0b71bf2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 19:35:50 +0200 Subject: [PATCH 135/980] Better translation --- htdocs/langs/en_US/margins.lang | 1 + htdocs/margin/agentMargins.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/margins.lang b/htdocs/langs/en_US/margins.lang index d52a387cfd2..2caa93fd94b 100644 --- a/htdocs/langs/en_US/margins.lang +++ b/htdocs/langs/en_US/margins.lang @@ -16,6 +16,7 @@ MarginDetails=Margin details ProductMargins=Product margins CustomerMargins=Customer margins SalesRepresentativeMargins=Sales representative margins +ContactOfInvoice=Contact of invoice UserMargins=User margins ProductService=Product or Service AllProducts=All products and services diff --git a/htdocs/margin/agentMargins.php b/htdocs/margin/agentMargins.php index 0885f12af67..b4e323a54c0 100644 --- a/htdocs/margin/agentMargins.php +++ b/htdocs/margin/agentMargins.php @@ -109,7 +109,7 @@ dol_fiche_head($head, 'agentMargins', $titre, 0, $picto); print ''; -print ''; +print ''; print ''; From a8fbefed8c3298549ffe97035ac0db4faada4d73 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 19:42:40 +0200 Subject: [PATCH 136/980] Update 10.0.0-11.0.0.sql --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 134d8c3190e..733e850d831 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -93,7 +93,7 @@ ALTER TABLE llx_extrafields ADD COLUMN printable boolean DEFAULT FALSE; ALTER TABLE llx_facture ADD COLUMN retained_warranty real DEFAULT NULL after situation_final; ALTER TABLE llx_facture ADD COLUMN retained_warranty_date_limit date DEFAULT NULL after retained_warranty; ALTER TABLE llx_facture ADD COLUMN retained_warranty_fk_cond_reglement integer DEFAULT NULL after retained_warranty_date_limit; -ALTER TABLE llx_facture ADD COLUMN date_cosing datetime DEFAULT NULL after date_valid; +ALTER TABLE llx_facture ADD COLUMN date_closing datetime DEFAULT NULL after date_valid; ALTER TABLE llx_facture ADD COLUMN fk_user_closing integer DEFAULT NULL after fk_user_valid; ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1 NOT NULL; From f83cc0bcfd37ef9fce1eeaf1c9cdb05417935250 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 21:02:59 +0200 Subject: [PATCH 137/980] Picto of user umage larger --- htdocs/langs/en_US/margins.lang | 2 +- htdocs/theme/eldy/global.inc.php | 4 ++-- htdocs/theme/md/style.css.php | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/langs/en_US/margins.lang b/htdocs/langs/en_US/margins.lang index d4545b8e75f..1d90f389e9b 100644 --- a/htdocs/langs/en_US/margins.lang +++ b/htdocs/langs/en_US/margins.lang @@ -36,7 +36,7 @@ CostPrice=Cost price UnitCharges=Unit charges Charges=Charges AgentContactType=Commercial agent contact type -AgentContactTypeDetails=Define what contact type (linked on invoices) will be used for margin report per sale representative +AgentContactTypeDetails=Define what contact type (linked on invoices) will be used for margin report per sale representative. Note that reading statistics on a sale representative as a contact is not reliable since in most cases the contact may not be defined explicitely on the invoices. rateMustBeNumeric=Rate must be a numeric value markRateShouldBeLesserThan100=Mark rate should be lower than 100 ShowMarginInfos=Show margin infos diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index dbbed3bc274..262796fe080 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -2064,8 +2064,8 @@ img.login, img.printer, img.entity { } img.userphoto { /* size for user photo in lists */ border-radius: 9px; - width: 18px; - height: 18px; + width: 1.5em; + height: 1.5em; background-size: contain; vertical-align: middle; } diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 5960142dfc9..7d08340c8e2 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2182,15 +2182,15 @@ img.login, img.printer, img.entity { } img.userphoto { /* size for user photo in lists */ border-radius: 9px; - width: 18px; - height: 18px; + width: 1.5em; + height: 1.5em; background-size: contain; vertical-align: middle; } img.userphotosmall { /* size for user photo in lists */ border-radius: 6px; - width: 12px; - height: 12px; + width: 1em; + height: 1em; background-size: contain; vertical-align: middle; } From 1c105718b9d679f2aef25c04b272dfc8df1fe946 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 8 Oct 2019 21:06:09 +0200 Subject: [PATCH 138/980] Update demo --- .../adherent/1/photos/person5.jpeg | Bin 0 -> 1079627 bytes .../1/photos/thumbs/person5_mini.jpeg | Bin 0 -> 2103 bytes .../1/photos/thumbs/person5_small.jpeg | Bin 0 -> 5036 bytes .../adherent/2/photos/pierrecurie.jpg | Bin 0 -> 5960 bytes .../2/photos/thumbs/pierrecurie_mini.jpg | Bin 0 -> 1940 bytes .../2/photos/thumbs/pierrecurie_small.jpg | Bin 0 -> 4886 bytes .../adherent/3/photos/person9.jpeg | Bin 0 -> 1088931 bytes .../3/photos/thumbs/person9_mini.jpeg | Bin 0 -> 2055 bytes .../3/photos/thumbs/person9_small.jpeg | Bin 0 -> 4897 bytes .../adherent/4/photos/person2.jpeg | Bin 0 -> 1190209 bytes .../4/photos/thumbs/person2_mini.jpeg | Bin 0 -> 1986 bytes .../4/photos/thumbs/person2_small.jpeg | Bin 0 -> 4501 bytes dev/initdemo/mysqldump_dolibarr_10.0.0.sql | 162 +++++++++--------- 13 files changed, 83 insertions(+), 79 deletions(-) create mode 100644 dev/initdemo/documents_demo/adherent/1/photos/person5.jpeg create mode 100644 dev/initdemo/documents_demo/adherent/1/photos/thumbs/person5_mini.jpeg create mode 100644 dev/initdemo/documents_demo/adherent/1/photos/thumbs/person5_small.jpeg create mode 100644 dev/initdemo/documents_demo/adherent/2/photos/pierrecurie.jpg create mode 100644 dev/initdemo/documents_demo/adherent/2/photos/thumbs/pierrecurie_mini.jpg create mode 100644 dev/initdemo/documents_demo/adherent/2/photos/thumbs/pierrecurie_small.jpg create mode 100644 dev/initdemo/documents_demo/adherent/3/photos/person9.jpeg create mode 100644 dev/initdemo/documents_demo/adherent/3/photos/thumbs/person9_mini.jpeg create mode 100644 dev/initdemo/documents_demo/adherent/3/photos/thumbs/person9_small.jpeg create mode 100644 dev/initdemo/documents_demo/adherent/4/photos/person2.jpeg create mode 100644 dev/initdemo/documents_demo/adherent/4/photos/thumbs/person2_mini.jpeg create mode 100644 dev/initdemo/documents_demo/adherent/4/photos/thumbs/person2_small.jpeg diff --git a/dev/initdemo/documents_demo/adherent/1/photos/person5.jpeg b/dev/initdemo/documents_demo/adherent/1/photos/person5.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..3d541f760b8938a5fdb3eaffde228bc9b2265e4b GIT binary patch literal 1079627 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 |3I_XWFZilAi`qVB?B3>O@KE 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�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%0A_^g4>aNg^z!@JDlH(xa4 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

t+1 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

tJs@Ku@*9Q+ir2D#BT2qc)uCchDqE)AIy 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

=mh2V>3fguB&pG!BAVaJ){nqbZ@{{TyL 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

{6pyXL(U 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ν4JL^SLkg5YW3mA+xV; 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

|6?9oS?>0%l~*0~XF0K!3>Y`wRD9>Hh#! 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

    sAznrpPRb@M zL^GKY3V&R2dB}jzRSy2mqTX?j3SMC3hSoA6gJ$eMA|z`0(+P}AO&2>joH52JOpPYb zA}5O$H3$AE&iLK}L9*wjwBojAJ*LTwUKkBHPM4^tTS)eBh+FcCL{tVY@;KLyi)*!r zK{$aD{-$#ST5uFJ6xqeT^Jb*$Eq!xC>I6`Yi*D|gGx-foBX})}Ol$iOp z&<8)*U|EL=jJPPE2a(I?OnlLXIA$=W6k83p*FDq4Y<{T46eY`v;&0B1Gcq+;g__8! zOd==89FTdUQ@9F}SRC)!JB@Hqli#u@L<%&L=O*fjp~+4sD`^}XIhdyXmecDYg!n^= z&ULs4+*oi-OlfHROfVWFUr?c~}57`Ky5N_`H zvwzzt$Bp5JRh0$-!@TCiWL=9q5Xi&}?$&hA(_b|JXk5wKZ zZ6Au+gA76}b;ekr}C$mCJ!1YiSSy9}9y@-(3Y+ZJ^$z zG~;1Ivx|Fl{vv<<&I`C^XCbGV0wuSA?P7)qDrDAI`bW}_rTPd2$A*5Vubh|G?RQu? zX=97b74;uey$0wxV|{hW7(8dnTPmcG$s``k$EqS13p6}rp zfHJpJzNj0?RH&trZ$%H4z2dhxsGxV1-OWd{JkW&WebL!pMGOmcbX%q9XYhc~-Skc7 zn-@)grM+4Ct@aTDMh$dP8MxBwKUv9dAKQ61eN;wMEpCGYT?31@QIdZdU+ohz5!lKOpwJ0GRmZQI2N@D|q%ZcFJ{K?Fh~ zc8+(>M2CGA)9Rv&cVs0H408P~j`q)C9@2nATv@mgKEc~a;)idy+HFKd=wYioad@+x z9F}N93X=gFhrzoTJEmle2_T3=ijZn#BHf6@A^KwwF*%Ve++`p!!fsu_s@uR|jsQhk zTyt9y2oS_+2?nH@c%*XUhb12G-G^xblt2RuPEJct5lk94;<2^z~OEr!lB z7U__7FOaVybe>M5JCQ^ohNKs%sFgzlC(ef@w2OVW;UT6y&W+8rDi~qMYJ(^j7$OE zB$ktyL7wc4$*6ND{Dj|ny(KSWndpQVp3mOD0;zyv{6<`6)>J{^2YJI8H7h6bThK#Z zom%u;`#7RLC`KS1J+MMO@e{?XGZWNTqTU3N6ig&%I#alkCQJ@MWZb?K8%A-w`RIJZ zt(-uH>c;rFF8Tj1@Y*v14gxGlWSZwx(Ddq_l3?s#`F?yC+HOJ^I0G41Ry?|7quN4b0R-0Na$88ZM)Qzn&f)(6A-X8% z!eVK~2%MZR^dF-?Q}wX8ecusq^?y~hJCJUPFrbrmry1tHyJ$>tyE~8{UxRd8V-W`Q z^ZjB+WOi*ZRZlqI-yb&za(Ts zUG~IhE_u?obxi!9B^W%agf8+z6O{WPK&YlTbp(voQk{Q{Hx%sb5L-pL1mk zk@j|ONF)~}j3uxYZ0C~O{b&1qrq&2(TuU%zc0PmZcAI~zgb`PUd0|=LztldiAEy5R zPmUKG%^@;hFOMNz_5Fuo(HM)ycSD#ACWbHxebc)fw-hECNKPo2NKR$>_>OT* zt(<$2f*6{@BE*9(g{OqM{ajBL$e3y%1}0!hGiix&b0R!W3fvo}5i-sLS5bINU#5t; zaP6KAr^Lra7yR2000p8hcU#J;4UhbdMj`Rlx?Gmf#9-WjzUZM2XUhU5z#UPGX|vfx zH(P&s%L3A?&1|5KC?eVz*a(9Gi1ZDrh4zuo7q0F=iHx$51Y{ zY~ph_5090NR?F^eqKV`t`8N$F4_*<)3_c+g{{YHO5nyHkonJgh^;-?D&Nz4CgHg_s zEJhMJ;?AMjpQ(Z)A-duj5M>u}N=S_1P;4TCJ;-Cun$PvbAP&!K95FeVe9WuOuv<-# z5E2LeAPg@Rv4F$k-QP8x0TK_R@o1+|7&g*9(nS5HGBab(b+KDrq#`JHoWKnAohZy{ zpE62@Eu2Te3uy0#G8uy2Xr0ld=J$M7#vv3?h)z5v{JCbMa_4u0`r}kV{{R~qce046 zXrEtvk#GQFnC_CsS+}}qm=?BEYWQU6_wFwg@nlpm#a1+$F5*Q*G6r(F zg}PWsiQL@+NA-Lz=Eg`u(_*%}VE{jqY41zbeP`a<#QQjL&T?T*9of`-4ZI+4!x8a# zr#B)fd@NoX*8%vqmVmnkB5<=pcaYh~;@*P> zGvg-bJl(QGV;y%{t1<6msyoob6T=~2L`%ze^17|fq;mUv!csL1e=NZTh{%EXsG{9z z8A-cL)?9O}lth?X5xb~o93B!hq8tAJ<0C9zDa)*bV=6-lAQlX8zu#mch(yfXDQuyM z!-|U44XFEjpct@|jz7L!VTkP>BM1S(0rC_bG0!Fge9Aq_{{UCh-Pin%NQI6A3e0w{ z6=N`Bia4dX{3SePJVt1JEM_hEVVy>fczm2(*K73WX$I(maE7e83UnG|zy2TkfA;Z3 z7A!EFo%vG2+x=A8j=1MS^T2Apun6Pc0M1$Y=jOJMNS(qmGs~UzUr`^3h+iBj*?*$! z5_x?A5o(1ujLlH=xx$^B5_cW#(- zTRm=O?pj^+MzksPyuW|~m(Bi>oS55rrcn^opL_3u@aOwN7ysD!bb}~)7 zpK^$NeAOr(j-d`H+>P*2b6c-vLkJha5bJcm?Fd`9QGLK|Yh4+b!7Ys?>@bE zFpx$pYpVtI-(LsR?V#B1#?9jJ#76PK$fVZNEx`$xn9d;3h}up7igPSx!fgygWgIcI zqL^nemuZ)aE?_Y<21*T?i}3-)OSFU1Q=Sq5$~V~2FZy*GrGz%7J3Qv`8i4hIlx zmCrQ~+=0Q_$g}eKWw3~d0E1;Zna@0qpp1#0Z5Z1afM84DW=Evzhl6I&!Mt{#l=V5> z*48r&CuVkT1%LKz_|F=eQ|ZC`all~oG{TeD9>{OSy9k4DLxFE^-0@#swlP5j63EJR z<1RVi%)ZQ9ue|i3koNoL3t8DE^WkwT|(iJG2Z0EdYiXVT1q#Ei7hM%V)KO&Jth+;$z}@ z0VX@n1zqR>H6KkBTOdZ@5XV`JecjGEg&am5po$iV#3B-5`oOmaP{2%kO|H|#VwAKJ zzeTivwjh)y9O};Kh{HH$5@Rd&Q5~ru!#(5w0Ev?}Ifv9XACpHB-5{L$)@FmR6|#qD zBG6}k`KiQrMOMpV3{V(iA}#7&>c9WQ08tPC0RjXA1q25M1p)*G0{{yF0ucZM5+N}` zQ3MkrVR15nk?MsfkKdQiaUgCDK5}f6IRZ08iW1Dp|-1l&(k! z5Ax>)8#-sKkV%;`VrnW#xuuu})lUj3+S4H_sjP)4a(sK)A_o3u{e>yy2ZpdHM8vJs zR!XsUYCygi;}_2gj~9ipjuf%M&8Z(ogrwOLxKe}^fz3r&sYje82ufwik^)Im-D{Y< zX&JOXk2tr4QZwe?6Byr=Ul?SVH}}QiiW06-!U}M3?QKVla1%3-cO6Z&LY18&1xpB#K#HxAdtBQWgEG zBUs>`t&?dV=+8#&E6av!l#|J!lDR-N>L@~$k!MnB*3mgCT*47DluS1g7N!9c5()GQ z%4@LB8fMN>G#XrbZJKZQOHl%?L61$a%|er6WF<2aM|0E^lI(Y7K@(GJ zg&}0EH|9o=S18nxg(^zD$WcBijo;dP76XH8+0te$A-glAl`$E;DOWf%{?DJY?NWnP zEfbS2czo5fO;T1GR6)KV4_d9~?)nbfUm^`*F2{@Xa_&LInzF&jjed38()P!Go~&I(S7gv*<~ zkv^iKQff-&9@QrUF(KI_7JxqzfR)%SNGN>*pR!JOhYYt>F5$RavwnRe+1CDT(lvm> z*^K+3FpNIt{{Rp>{{Vs4?!)**8}eYsuD^GA{JuZJ$MfIr`F?x-_xz<@@ZFT8B=?*6 zeb*xmU?{CJ<&p)sjuvz3)ub!}xs`%}a?hC-Yj?m@t(gf6LQ}k&UZhLm%cbvxSqNm~ zMG2!zmn0lrjiFPPsav#vthI38jnI|^>1dcF%S6zSUUK+kptE3V;`T*P`eBr{SWpom zDc{Tpy(*b@4~xUB?vaQ=;$f#U-Y`_Vb0(j5ozYQUDZ8mNfHbK%Gi&1oNgNp!F*teC zoF7K|n`NbhaN&<+WM4l$BBfw2&kvJf6oLRb;o|VQbhRW{wg%&};H2V}0>ohe9ICF{V#rx9=QD`ULE&)9pE|(wiujKB66Ylo6Q~TJIUelZ z75G`omiGxPscJv2THce;Qxz#vkd=DXu3Ao_%iVNz#~M10&0|!YJL7gXrBLDIZ6|#r zLBO)f>Xz#bH)oJ;;2~6@N&f)L<5M0$onRFms!B#_qI9$!6fpxRn=Wkam1#?)E@z{j zgp%~kKx*WuVNfh{hV+TqW`!s#Wto`8QuwK;W{lxWlG{S%mlFb%h0Q>-O-g-mH4h${ zGm|hM<)H~HEr?2uH4)6hhRm(+w<34^7S@hwm`Rqu7lj#W+6oXFX3w@JTIm+-%|y-M zIw>t{#{D8jKh+d%2}IP7UV@c((eY@eN{zc)EY&Rqy{T#}Pj*p#oJ&a# z``M~-&BDTY-Yb@=s0tVkELrK8o)wNnB=vzz^r>kflxalHj7SC-EmkXHx>RUeTDl1# zE7q7yxw}l+K_;Y4O*0e|ifKtAk~+Xd{m$RBEp-Djg)MB6jphdf5H2%#Ou5qk00p#U z4W%sg!u{AlRI(J6b0*)ghWFAyi*!DD>knXYxjM6Z<4k|#y!-zEFS1{ z-`wUCFJjquL=M=f%$RejYp?|3k!Vtsq<|WuHFD+lo#+IIqzlqNdIZ5WZq)@kd$o!N z%`H=wQuAjU0ZAT=S&QLSppF|j#>2p|ZuoPhfj;2}JsREJVucG4+R(*_S{0>_PaNQH zJs?U1pcYE0PpZY-X%$OQ3(X44q0zPOjw>8(36@IA*0oJ9*h?pO!a29Q7^Grud42l) zqRefX(?Jfy7Ice_uO5t7lY{>N#u-Wjs!6_KKEEy%&8NXG!1{BVv1rTH$OdpEuXL1=qA(o}=}>2#MI;fY#8znC~^ zT6LjL4}>8S%20h!SrSfRNmKeYtr@Rpgm9)u3fioSQ zME(_XEapnVEcsBqF@V3b=C5bl1(kumTvRuMntZIb1FMAzU}L@ErOrb^K@IZB$#Q+AH+V4`fb z3-H;YQw*uwB;~7(a`tKJmZz~&#DngJlRia$!Q^dfht0e>MtYl&8j6?i?C!Bvi zk&oVgL|Vs*^T7MKqpi=DdwSX zbW|%i{{SsBNxBKeR;WTJPwlNWQ&MXVqw1#V*6^Z=idj|E9)X!B<&F&-y_TTE zw>2SEdrTQW+VvcIKvvf_VHoby!q0bM$mf(Lasvud;G8Kqe* zEaQ<$?T8#*;J1A_KvJ%tW(8cZ1wM`2CwGgpwj%=!?0;4eulS9hko1muHta()<9AcP zGlNIVDAS?y{$c8WjAF;yL8W87Mm2+CCnYN>o$c~?nwi|;nJ?>Zys3JV8jmonom$Nk92(bSsgRtUHVlLSGIbZ~OFu zGtie0;^Gn}rHX%+zFxw$MxA1(-OTk?J1J2%3%_GUWeJ$7tgad8AyVBZ8ix5*xz?O#wU$VSYZ&v&|KvM}b zY*ey>2OIGcn|8IdC6b-0RV8y1RZ_}xDFE=3$+^Uxl61MVBuz?A%67Goy_srA{{Zdh zql}Z!Khy=o_Ruc zv-nM(Qt)2GHg&)C&}lM((xs4b4GyQ69qy4aD&$Is5HNR&R?Ls}5GBk?fXvGrQq@i@ z;wzOgJ6_E1y_S0!0~M;tNMPnSL($18LS|AMdqJof%EedpOAIX=iAV~XZ(Zp}*OU^X zR1*gp%Z0GLX$ji zYMQklN7zd{3$mQF3EQM>(w4yjt~GXpp#cGb2zM$l$B2_{Z>ZMrCSk`*)B=*A0dkOP z0{y1O9ZF9-yMu@?i@}(Z5;Heppd(Cy%Ft0UBJIeZ)HNR%sPQGNLj?}&J)jZq_jkc5 zXTYT7{;=to@PrG?Nw89o$(&u)M8_kA+Jk#VGS-Px-sn&zGv5jT{#?L2e%4T(;*%=J z)&{n*P-3Nb7Q!(}CqH+>C@!!+(^ndMw2sL}jV+Px7VwTFOysmVPlb#+q|_DbBp-Mp z1#d6)ZmS*il-sz%LT09FRmjV2MJj)Bie=TV?91LT7c8q5JuR#W;)NDA1(XJ0g(;4y zAipRI3gI{$BNC%-8iEVz2@uK&!v$JrzRLd795}WHJz9oOO1v_Qr1Kv`0H&A0NLIdc z8b_kyRw_ZU9USovmw<0#%0j(GVmZ)qI@&OyN3&2Yp{F=fN>&aNlP=*&4aS6$IL2wt zJr2}`?8;JrOytcx>Z!1SKV+Rd zWZQIhiSX8Ab%2`qE$}Sa%#6rq8ZIN44xoY1@lJY+ikM$4X$)>$RE*l6|%4g2n zB#sTI?A@hjd$TDw-fY}X=`2x!$imE`HqDZ8x@oBjNhsb;+yzx9Y?cKj0HrfIRT9j- zu3Y_|s&-Gbwop^LUBBTz(Ak!)_RiHYOvhu`TF`Aus7%Q%>17o9d3aKxbf{;_2mCS@ zB&EuffRjqc8f8qDZc=Unyd&^iK|4mxGO4>HDm$foPt+j49qt)KIYVstW_(spQO-g4<371_6-7Zp4iVa-v#0wFP;VE>~ zv;`-M%Kn_Ni~&BnPYRn<9NHK?wLhNUe_!GE{n-9rBlBbY3&pHdo?o5jhnYJl(YIVoLx02tI=%a(JxLpY2wEOxaSI+ zv=9QjNJ%a%$(D+pAtOE`;|59qy{bV9%H3kJm8^4BH8se^+bc96tp;NzV@pHsWst|y zD7{O)vk|!2(v-5da*&JG%4}K4eDs8+OAZP`!%&%1DXZ2zU0I+fex+HBDrQKsMvOH5 z;!ylz*F?09+R&9H4U#apa}}myYDq~ItkvAuGeQ=~NfN?ULWOrLUB3RdI?IM-om1Gr3L1 zIC3#UfVGlUWL$xAFza{;l5=D0UpwYGv=&pKk{2alEfs%4waH1xSb1rdhW1j|^JwCf zim|OAl3zRg14Wymv;k5CFeyF6!;wmCX?DN#mmcU%QeRS=d>R1(a);@fE)IcXF0g3Y z>6w(hwp6hxWAyDZlxR41!$LRm=SnqtJ)%mHF%MuVpD2(kq)D>p{(jJEc2-@K+v>*#7p!l zR|>?$?HekODU#H8XAEdC3Lf{OXtRIi&vKOw0*ZRT3-qZ0g-oR+a#Oo1#(2 zBSj24<73hjDr+WdIwz$iLSiwcVJgIAq_NfzwHZ^Aq`FiUS|%hOz*D+bGeY=;ZxEwD zVo)_9CFkt3G$?YUwnT8M6EPUAid2_PS#f&`BOY$>sYKB=Vx-v$Ov9!hR?weC zGGPHA3GT5*(dV1-{#MDbE6GDAH&h(j$ zWvF{Z_{7QEA$08mT%D_CT17iVi8DgK4KSLNNnOOi(^1VfgFaNI*;ZW0oiQybVN|IJ zUN%*qJY#wGHqyCDK_7_OcBO9RJN}@lQzfhW59*4xnF5v2W=lfO;F|?1RKyj~yuo^P zv?R-#jiO5UNZ|ZV$uOVwk``SA3r$Y~px6=XyICg!B83TaKyC@3Zd5&!ntF@8E@sQT z2)d_iweNR06wDW_r`b~$W-kE~M4$-bnf{ni#Zx_LW$Z}+L!}Lwql+7bOQy;hhzU}h zdr8Nz$o4=Dnl*t0E!rX~#md`=5^oc5!I$ZLkB6=T&eF_0UE?w>{ z`kVtpTl=i8;yJ~y&Eo$6eZKpCTtDWm{{SJ=@4_t!O+`~&setUJ!P~Q$zEGn<-FB*& zuSrW-No+B8&J6kcLD?kBmW7mxe-klkB9x^eCAdx0-C=~K&MY@UYFxsH?J0OA44d+T zv?y(RQc$FT-iAjadn%epv%5BNF;XTW1$Ij2Oa@@c(gqjh1v1sWoSxM3pg<}Bl7}6q z&o6u&m0MQ8@Ud`NswCkEs#~V#jSJ#7V8gyQr3tEN43(scA4|fLhU1tD)R(2#X0~`* z5knzKWUJb)o2Xp$suB_sxynjP)O&urxi-Yw@z|s_xVu(oio$zd)M#@~1HY^kg2~X~ z0-O23>&gHHim!3QZAUoWD5qqfVudI?g#n_S&|j}e-K-=ovZRr5T2cbQUTIKb-Vns} zYh&jaQAEI|$o7Z6;_=1;6N6P#*s~FI^t^J`9scI;ykW!V2y#{z>pDvN-QC~>%#^HD z`>CmzU7ZRlmiEX65e}7v^gks(!UY^dnX^F@Iu+WKU2>05ZQ%iPc5@?WN@=P=0d)TW zMS{omLY18qD53{y266DTVIHAyQU>Ji#Xy{3iE`!z`$T(T54NiMlF_HvN0 zt(kLXB&lRtZpyH6G+^OdRJ6>Nv|ni0fTm=(^~9x`ncaq*p(?7d7g9+8DJr)LhQ0B- zoS#ZUy#kfNJ3mCATujhHrfkU@Ucd^s`yS8@97Q~7l4d^5v<}bWC2*?MrqJk}Qse>z zncx2aP}q?*x01phouWWyOOiBWX!O9(+0vGg1(%FM; z5+}C|y}c6F`<4Fy))*1ZpdGBHM${An=E=UtJxKu~dZr|_xvE!h4NN9%vSiIRDKzes z4{wgH#K$J!hr%SylA$3>K&yVIm8R)N$ujxmGlZc?+O`d+{XQ_Qj&LE;z_AFJJ1XKq z8NlAjktb+wHB6RJHko6CcB)iRp_``Tlpn#WQt5Y;v*`olEFbj{JwuEnJfy8n!!R;Q zxTRWOK9HH|sS~BRmp)QusZ!6aBWOwONiD#m3r^FsrBfMH&Xy91=2XGy0#cqCjBiOV z36i9&?9)MB$vnCUGRrG=Yb7Ke)Uqs1fQqKnoQmaAv&l+NytE31NmE=Y>it7BoY`J5 z@=v3j8)%S8+|CEpnJwFj+(P3QivG@6WBlEfYNKeEgQb+ZcByGSg&>KH&y*@p6wRJ! zdD}TtH>#z|HCbWsV08u-rIj?_d~Q!bRGaU_bER37llDc;H)~L9*-E;2y+x|>_{vUb%DZlWszun;-=fmzS zS|%il_KCK@)Rco@PDmtFOUCDA*weI4UkNOP$(KlHtd7bvIl`B=Zs%>7Q7XBz@5ut;4a zh^;81N|Y^7bOeN_TDzd4dXqA0RK&|Bgb!q#)c)uQlO-nyrs}x%iTOfNxI$1YW~>YU z08b5%N7gK|&88m+!wmBtOb5rOpL7F{y_zaUBL07S!ANS2)5zPQ@5&V=Y2r5ta>SzS zKT&S{AR%DzuyDWxs>v&;DXCv47(68)q+-hyvVb^+3q_5FV84uC9Q~gUoLIMWgVXnn z`nC~uKO%7X-~7j@pZ6#B_eW-+t5g)&YMedMP*V?OKsrvAHyRck;>iuEdv&%4SS;e3 zS^e1BDN>BV=Oxm7+AAP7Ma5q7Rq%jC&NZb(EFMh&Z52%zZ!NwEKdDEFv1LKpCC^OR zcvLY)AI_Ikqu!T_S5DCT7lGi&d zh*uO-wQQ@|W~|zLnU$a`08}hSg@Z#&`$!>p0Xj;r)Q54Q5k#5aWKNg`NC}#`Yn^-U z{U2;y!l}F-K|KUASi6=nQg5pdW?ky1lK4PD4_PQ zc$@fT?9)_0B@+mjP#@|_QBzhkN$!o-*|INZT9oLWeceemRJEs21Gj`7@_!T>nTkjM z0CI-SL)IT0;O)O>P87<(I_2#NNn%o=n|IpKiM6!UOXA%vK9vocPAV64k$6n)om-?& z19*g$0=H0lQ!uqjQx^F|-I`>nhzgYR-9PZtP?q$_X98|&8o`$(N!oT)B(+_w-f2hl zmtWrQ7-Aw3~J&gF>^`5+=O4gNC*CPZJI-I=mTEWu(%r z+NKW5U|gr;Jqg1wqyqtXBZww;b|t2~>oUK0kf zyHQm{Rb1IAIag|<3G5PX@;uN+Xx=9RjE#7#^EMm18AGP+>cMRKW16dNF3}UWTP!I zhowN3Ep^cTtmT8~$IEamND&?ll%mV|^*mUNXXEuvt==E3b7;-NEzB!vQrDqT!Y&YaSb zYvTq`RS5*x799o_8fyefltiJUIdj@k#FOre)#D5js+jPHSA<*^?}BdDv5Ovb_vM^Z zGq9y4B<7E3okSFj(5ZpDD^93AE^`tED*`T=&Ge%Od5730hStX=WsxT|7Xi zz85%y>Ete2)EwecYo`Ydh{4}jtsAwhN!zAbaaK}xcAQa^$}A%EL8bBi`TY^^@qE4>&*xL7gcJ*xsAzV1 z4)!UCR|o&_X+95`!G9Qlc3^-6in+NVia2F@id?k|jc*_SZH+9J*FPK#u|oC4O!cIO zv2q>e)$6b4K*9n1cjQ$_{r;SWe%@Td1tcW}%td95>u(Sot(|=HDeoe{8)9nXc4w95 zDh?x!!k5}UbYBaOkSDcz1E=V}PQZ{;^Kp8Iv8$%zF+N9DWu_cf!K6emSZkB42 zpbJ`p{PXDigldOK-n^5vH(%%T9Cg}5<&e~>x3^k*wW6TdcqP}H4YMqnG#$An$B1Zw zh-WHgl;5}hkYyx$UWFio00NT&IFW?}^Bc5=sPyq|#At%iQ=EX9cE1_o6kj#2XDeeN2HH$^!EB&C+r_ zwO_4uCV0Fi#+E}yjHDq}u|BfTrDHPIZgmlmW)7A#egywxm%RtW;mz#IF~JGQs>==E0D=h$Cdf8V4({unH8(CbZ|tQ3{)CEYA8nvC?m?Yyxb z+3SWAfyJ3}8E3zc=In7zV~_fyxcpuvVNu%e_pO~mjk{7E`E50jdo^<^788_8G*kL2 z#bW`rU8IKQ3eVWwh+WKlTwR#4P>awR#D1H*8B&VcsuK{OHzY+PU?li%!9ahQEK`m)?l^xYM5?pb1naJG3;QmI-&X|U* zuP0jJAcX}wQI14UaSa+6l`4QO0-D;9SKm9o|Ma#u^UePlQcR<&Rt8;L2uM zQ*=L;T|05*Us-I8?xT9SN56KMvOhMu)V}&-BL7-ZwAr1u{!Jjunupckx7M*MPXeRh z^_1?LRj-DPkh-{q%T7aI`2P(rLbl2fVetU-ujV9qv$bD71y-#>7ZELUuTvir!1^nQUw;kp`2NqrzehP$^kDr1d^NRvgM#q0FRJHn7PuESS$f7sp`@0WTd`kG2a zOlrGrhg|xBbbWO#u3Uq57Z@?AhwHr*$}fj?8D0b3eEklH6_qrrFLX2~3~(XIjSD2H zy->0Kx1HGuG8B*$!q6tJwSaiQA-d>a9oyQZpF%Vg>5xseKjCrl`FB11209|Cx=X^X z>`_bE$F;@OonC2W@B9wLosCXxWiwQ_!HR@^*5f4-o1 z{Sgi)CYcj)okwuwmzxNOC7F@P$O{|rGcziq-@AD3YF7CHck`8ZKjy2&?@cj_d|(XW z>|t?YPW&%3cvASyKP2zi{}}Si|2(-C)0(`R6iDv}Qh;xJy~em;FwpaY6S95DC(6tE zO*aR|-)O((S&Bs-u5L!vLafbNI-O8siU_6)X(Qg>f1@@ISUx?MycbGW9WO(uf=HFU z_8Bm)_7Jt8*|zK2X|_CRqvD2v-wI13lHb1_fH|8C#`UuXo2x77l&Hj2o$LljjI>$C zYEhtSk6cx9Wh}}yS;VKli4C0@%&^eF(g8&v2XcMKSe`%FvSgbiLs`n6E{VD9MC&>K z8kJpFhCfTqYEk4|Ii(~_SguKGQN8<2P%0)hvMUz5hN2v5^{#;PRuUDBF1Vzk<3G%}if_EF`%!~bMhAfXJ$%_2`wEsUjm_cOC85ER%Q5rMlO z@#N8POJ(G6oWwEoCw+A(mC9UjX7op%!)l0aoaEWD79w3bS18k@Y7hJJ4An0LYw4$N zG@|=zJioiyPJ~O=*cXc%)N+d`i|CzopZ1kMRwiCRUsOib2nK@s0r9^^#B`>HRhrNc z>7?@ge{Y%bYVi)9_C5v53}@ql)n)irzl^=llNw5Y2?Z@*;h!)OnR>9p=)%i$Q`x zrB?yI#=h^U4zA$jw;=QJ*4#CGNfomZ$$Z z1`ur@T0;`|xs{)@IUh-uiA547EK+AyJ{;m5ZMd#Y5_%SGq$&nP`YVicNw;$8Jg;v! znoMf5^yv2dR=$2xn@Ui!85K(1Qd{6Q>i{D}cjjSw*XdxpVDT=$>r(Y2R%Gy^Oa$?G zW_gzZ+Vb<}bLkCfkCpr{f&`C!D#>9}Mn=eiLY>0hkiFnk9kdRRYPMeiU%RCZ;;kW8 z@L#m@Xn3*{-I-mf_XhHlJQdOd)!!9AuvA{Vmi9KUkUpD_;x9)$5t}TQyHw(@njaiu zm@I2Dd79Khll8Lq(REBVhu>k4&b^jyP9zkHSaCx9B<-o_|1s1&w(;XtGtWa6Mc`Rv zBh|QshWVZw@|~N{FiOq?#z27mgp78^^+%O`#HYVe&5{~{xo+IN!=Iks`iW-|s4!bc zXb`!vH@Su*hbc%E$|bxIvNSJBk3DL;OwlP_R6tG9WyNs$Gs4DH+%USR(R-aS1T*lo zl5I94*+9Ga<3Abjug!L|k z!Wx@4+u{TeD{Cz{3Dn9yFW6Xzc<#QxoiN-UBWo z{fdJokci0Et;*D^9bjUSr2y^nFn*^B^wS4aMq6*$5fAm`D8Wils;G-*D2dq@SfV-n9=~2zY3O#hTO@O!bZF$Nl-p+$(>|L z14aAK3vIeG!K!ihmgGNQf0m!oFN&~W=6E)JWYNw2B4{VO&E?>a%g zKKKT=6xMB1Stt-;B4%ICf!JCrc%*pv)0IJ4txlQcY$$cvz@PvRbs7(wzMIt1i|On| z{WNT>oo(`Tn01<^rgv28Ns&ZT{06tA9+e~T=vgm`Y}*9i1!i5ncHNuD%PE7HaPN5&~z;L+B=z=YFisg zaF3K5{3;|hC3L!P*ykWa=_vil(`D=4Fuje%N2AH859{IpsUlDDfoJ?oIJi|mj$LR; zdg|>Ko)a_Dq%z)m%a*f?r|G}vK4*pR8g={H#GzL;6sw0?JEi%SV~$?E?f;@ZvYPP& zuR!9Zhx%!aYTml-D3n(_V8A25ywMnRxT_4;`RhhLB>vX4T-4{WBD-C~vn*#RJWLmd z+Zhjw!g6;&(Zr^o7@p_STCh$$;f;ci$%cQvdTh#XjmI*1J<%~!kY+>V4RM3^%1CdS z0%A@f!4QV)-h}*>;PuU?3SaXsJ!gJY%D&eeDNS8M*dARk;tn#qw>%%jYV*|d<(c1I zm>XYBu$=?wT5_q1gJ%S$;xQ0obf2$coy7Ob%2kBrm-ojiR4lK0Lave+0EMd>Mrnm6 zm*kwQdQrJT{9Mbq)w&8|y-{4_#xY>3^_?cOkNUBO$v7S+1ps+Zz^U|-`pBf2k8rbv za~YHkH(r+A!+$#EFL@tjnBPfxSeq7)YNet=TYJV=~SvHeV(<`JrLy=;tx? zyXg-veXWPtmXbnc96ZrsrbVJU2qk6c14L&)2ct}(Jd|HX_KktU_t!JOZm(@uc`W54 z=Hz|M)=}rzkC`uCw6~T9fyl>^;-<+XBWmyXCnfzh8o1X3&+=9#8-J z6AP|>{p`lah?jYDF|mZdmZpszPcyH$RAX%qyx=yWDK4G+EI?KV2O-sm-=LtHw-}T@ z;lh~3!;*F1ALWPiY+`AB=$TL4QJ~eL%!d_s;Ae3rgyhpBHvbQtpXL&n3g~|=5YZuC1D3zEFVaRR^zoI%` z1eu!uj{%PL`*@5yN7!dgAMP3ou#Z56MJG&u!hX0tYNJ6N2-LcQR5*hA=r$iahsBo# zEzF`4JFCcxobCd-epXkVaVUd9(shzsR7cP*Q^NtGM?jgb8IxqG`XR1|%wjZm^i8H~%cI{CxK4tAM;0~zo zi|sX93>40puj2g8zkQTAiJHT-3E7|)XitJ{6c;rT<%_XJ6`rQ3R4kbqUn=hE1VY`< zwuv8`3J5lp`N5 zcc|Wi8tG2Hd9b_d%@b1VrM;kb3dC% zzDy{DMjxRa>c+pGxFQ~spXzC~)K}#(oqh`I`Yk&8F{y0n0Ma(u*DQ`2!1Q!dq{hn9 zf-d)Y4h;$>U9`G$87`JoKZ2TJ^^wMFr^t|EX&SL`c?8TxA#exm{ zPqDZ{w(xW)a7?kcLL~@R9A`%x<+-HKi{Q!Vy&1`KPrKDLb&Hg@Pcf1n51hO#>i#en ztr7>oRx_3C!Y#TTE+AR$D~<8EQB6Ig0wvN!;a3d7VC1)S{*ds;#NM(@iOhwbq?r7Z zXDh-|4%rUTHG9+@Ls#pd4>PSFFW;8wc$t><`O3LIycW4RsQmkR%>Ni}9`s(D8U>c$ z`3n=aOH?1%^4~5E^|s5D<9rDh1AN_!{2#+Sv20q{QS?(YZXaZA z1=BQWwPU)=Da2{Yy|BScLw>MWo|Ss~kob*)NhR7HcFVCpvg)aKB1`nV2_rouY$YjG z$_RV9bzEhD!;~1$_Y%6wg7``#dTl(}brY{8E?Z;PeOIJ40n95-&*74v+2DEefbPHb z*}Q&dZp|yZa<7MmR=#}xk;zZ>R!0Gk8&}^X)|dQ(c?N(OA~+Ff{Nnd&Q{dpDM;#Tz zY-PUpgo?Cf(!9kwzdOBVHDz1&P?*bc_BK~Ua3D7`&)Sjw%Cir3?n7#kI0Q|2>UcO6fN^trLpR7v9b;B>a3xcT48@2 z6|7YK$AUzdqt<)QdA5SgE&CoL%$rT#XS3`+PZwL^SHzkm$=Vhgu|HRlqVMx4=2&Rvv~iz1l8D^<4TQiHeiAiwz%UJHZm?ZR zAlz_M-ktsO*)@1JL!5+6a~a{CcdE#*OZ)U{h&3|!7PLuxH7#4;iq0xco^qr4>ih zn5LD1Wa{ZPUyH{IpHfR$0z&XWPX$EHq;GCKvO$1htNa-dZQYJeBs{W^ zYHt&78CNzNXvA1mU~veRi2}m6VepyLVYd02tl@bcp^p@iybJ4(5uYzesy*Kw&cg*> zNFWZVA(GK>s8!oGIYs9m-AyhmgWnNi{x? z{#oH|mpc!$sUVWeIV)??5;9htA|kXho>w0Q4ge{0S=Lhv688u`67N5mEqgL5mja1T zZ!5)+2&pD zth;=+_{7-3%7?yy_B#Cw{V!U$`!+K=cff9oYsN!+qQIBJ94i-lx#Tc=7`48Xfxfwp zzsa5T8M*#eK6le0I|-V~(u0S~f{eR@ zwNw=Wxb>Ee6jo&xR*x6ScKIFTWT`^hJ;uS_->`|#oNz@ytd+zL9k>XvukkGY{$m6l zM%A;a)mt;8`YE~z4CkKZ{^#$?c?Xcl{5?ssDRrA=%EFCUCm9#a8^z^OCt121gcj`n zT!LY)Elu;)PPwpbrL}XC7R!D7PyWSzY+~}E{O3lCbsrx%0$8>(VKdr#X3#reF)oK- zaCT>%E?C2dl>c`BrxLNp@O@qxSkL6r&_-n9ybSZ2DpZW_kXPw+p+W^}eow9be!?c@ zAFYy3MK4h!3wLTcZ{sm(Rpz&fR-6wp$exg2qk?X~)XU40FyC^Tg9=R<(Was@?t?Rb zQa&e%tIX!AHCfb1xxH~?R7`M~MKP*kuKK?NrPcX`+)lcqK@H&vHDtxMm@>R{^LmOk^0NU0-o zx%ry=S#LW4I2$wh(_yIWpOLRFGo{{s>M2}=QgY{?FgtHm>F0{hxDeaYD@{nXQNr z>&U5YaF%H^4Qj0>#5dT*3mHd%~ zp6N_33tR1b%iF1hKZgA}B?)E!zA*Zi?{fW^k4;xLl{qEsAAEOz`-AdlgA-!am{XdW ze>P+`yjdN)KlZ{nBvHd5MB&Vzhh7yquIn;!G6hi88;_d7uQsX^)J87n1(usY*WBHwkF&-Dcpi! zx)$BPrPR^Xu!w{-ZKKnaP~q$^cs{m5RIx!M1R$IOvY{ zmk_F8xkYFs7G7W)RD;IGCdGi&W7m7H0GHxw{}>aUooAEEPZ9&S<5x^sn?%M_bzdD9 z>%NzHZ=Uyqy#3b2{fHxWU_aglYye@H;b>B|>Jma332uvrB_!bVv9n3@D1>Rq%+L$K zTrcK0AHq~oJK)aB>^J{CYXodOg+e=31_w^W>Dk%UXx5`(wyYuaf7zm<+Shy5R4L8m zMpq?PzWD;VcI&*} zw!~Q@mm{c;R327*FTj0_Twso1qs85LD!jJAE*}p0JOR0q8}zq1VBS=$Jwtyp{C^BZ z4wFE34x0f~BeNG>(5SS^+dR}}keJ5{MX_Tqc+Rklf6B+aik1`fVEHnE75-?!If54K zAb6XyR76D@{=VnS@drk-JkR|)(SZ{s7n21$Up1Pq)S6>PrmTlg4Xx$a>^_NngYk({ zU)>x(Q)8&4*nh=d31BN@&0cit|Ni%S!(cwdNuu7?-;t?PJ16F+jbd*%Z?Wi!^78`O zQ#6{##_cb=ycntEu1drMA5*BOMCXY>VPAWE->QBy-dKgVCHw7Gk{DPvk6BXOSg=lm zSt{w$*R`-YD8k2Sp%d)r)Z<6qx|{4t>hwPOxcT{SSFMu zFad=rjk5ieLg-O7p5FRm833I_{dHtc=A2NXxcA)Z;7ziwU7D+m-R1M~L}nH_3MTLq zUlW5HZF8p8+2MT72w+=ar5)gMj$GRLD z?iB`+51TX#A$lQi&gh#;S}TB4Y{sWp;~NnpTtrJ@@sl{*q^=}=uce1VM0(-(&_!~I7*v@P`4(jL1KMRqv?~`RX z#yzfXsqtvhlJ=*n2fo4T40d;MbtB@EUccS$oaMXc@i1xA2eQ1Nh-nOaZiyHHY7C=j z?3_8;Py{7_GZJOH1F@Pj0ks9lSl#8Yxz3sw)H$$_<;7p><}h>~-ZyZ-qxiZIRtVfy zquocY-VZ!)+T%*AU>|)5nbJI*CFwghyEV&OoW#daIT}TJF}f12_(Xzj*hU3LnS?HX zF1s9uf>9KP8uLRJh_D<|a|K^F2s$kOzH{Q60Kod4MwQQw;p6`f~!U z;(3PPP`xP6i5MOa_mI_?HTh;XE}7tMHp8ebb{f^^Ies)K*dp0`^`#&;$nVA9wvHtCwIwMmq)&FV$$uuY zD6i%fq~a`YxZ3&$WOCQFs&z%_M8UvyMeqw}E-E9-J;IO%I+Lj|^sPn}PmP(^ zoU6QBsDev<=j^F}xU4_5f?ZTMmFS6v0w?WUJwMms6C6lC@0M~bZ;DZOjEOAzCvpjt zP-VZKqXa3fnq6(id?Q95Zlb{46h-RqEbzEfe&08AYGakZmZ4$wqdc<_&)6&2FOF~# z=4wXPu*T~bZ5owjSlBJ~KK&DA5XtmSzG%At?Pti)MF1H|jBDSi{otErCb9+qPJ3WT z<_z!K4{zYg7<*lJkd16DuDe4d0Km2iPG(TtsCYsk*+0d8Jfre~;M@>FhOW^+>29kB zCC)!}|LXl-VO85kcyry}m6YL60DX1f?=pG`09Q2N@KpaX)9oPCiV6xXGe!2v+KX(cxCO_-klABTAHrGRdJq$Y^{#3?(x%=BUww3F59ks9)gMX+A5h7 zUsAEjr0aeCmNb)Y6DRR|#DlI?NGf(Z_BcP{6}PyLmF}=$<>8O_K1azW-{b1b7vbP| zt)IWw;OC_CGyX0V{XE3p1Th@3QBCKdN%>O_K<^NnR9V>0voW_w-)Yn$;vr1PZn@?e z!n3;d`Q*c4sG;O{8(t!euF(3ZE%^?xOPvSoiNKN(kuL%Vd0TUJb*rk8?U%9#<53R=d3$U;Y}-E~4?) z)?=pSpVNwOj3BPY|K;FcN;}3AE@*oqotY`2z*=a0G1wb$e_o@-m)i&;-7EpxfiyYMxLfsZ#dEdtrtNtCRKz%f0t#RGb^b4O$qFM0!0XLuU- zaO~Re2S8781E@PO&IAOf8ZL0CGffD8IMnc=I>@ao_5NDW+a@?&FA6UUmoCZ=Bh;;F}s63=(k zGU^ns5jI&MkGg?lr|SzR1qQY?jjKhYw#V)WfKUx)MlSozu}WsmJ9mvT4nenHUk6&{ zDp46JW;c5L;6X*W<*U_aO@LuXczKVQ}RbslFa>v=u*y#3?!NaxKJBc_b=25o5- zpOl3SRy4vNvK~!h`DogqQZAa@cQx^5Nvfq&4dp^MsjLm)?=tZ_L>#BXnIe__ZaCT<{@mI1iF5-lntHw?B>OQJV z+*V6)Qcs*f^(hL@vkY8uylREL_~mb5{37J9N1c=S_wIOgvBiJY%6SG?X!((+Nm4E^ z*n3CchT*-b#BAZdG|@HHMsxl5q$gOg-KTXZqI<$X8c?+M%C6h(&EM+tjJk$??$AN( z%WG>pzwR^trxr1YsDV0Igo7Dv59C1}6(l-Y%I&)u)t^eJe;w86NJfD5{EAUFyGXOv zQ9OQ{KdAD*#G79KV8-s@l|!Po>N#t&~lHwJFPZ?mG_S8kCp&K~nYmN%4A zODqaNBkB<(hj_qyr0};xULlRhbscPJMYC&_eLuJX{abt);=d8ud+ZL#LlplGh-p~^ z@f0S~R|fd`b4qzXpQb@~=T^#+werg3SM01)q-%tF{~glA)ehuPz{R+!9a9#@Vr=?D zy6yCX&w};znn9>u2~0Y1t@Tjsq?N_QcKM z_HWd$!G&atgD$yjj+h}_2i)p}@cDY95X?|8Hs%tqUWI5TJ4aYVTXfcr)%=>sFxakx zY5U&sZ&RIzEues)*IzjqgrrtO+4J1<#R0>TXZ1Y?gCZF>XJc41OpD`sK2XP5_9 zsn?mmCDr|pXgd^)TpUKLyTe0gz1=B!_~ zLvm8GjnZ(jpgU{G5`ksCY&Pyv^Eru>`Jf-+ZRpf${6-gFDv(%=;kMR0@DO)$)R=oE zji5k}yXR%h_Ok+PhdMxC&@{d#ya$~wH6;YI<`6 zwIz|K8zP)h3)RnwmAlW8A`eyr#yqNg)1;#9>j!IaW^X(3;lwxH=U#M$w3b9zvCI*I zvNd_H^YRY#F!4FOu&w5V%OdC8ck{1Kx!xAyt(tfMoabW43=8^{FQ~?`t^1Q2Qmt-@ zU`P;FBcEJaw6_&`a=?hsC7@R)SHsV`171M7P?LA;hXime5&l#Zx*}nP(LM1{_~~p6 zZ#ul-yvM|V3`RgcOj(W=M=^5^MP;L!S>-K4DW(OmjAwCk3cj)q^KyZ3s1-x3Y*3>QQoW4(ctPrp@h@?F z%xs~dIx0w#>8ikK7~Qz9HeAP!E8zWcw`|@Y^~>G#Kjye3|KDm8C1I0As(i-Pkse=Fw+L3>Ki-V0{O+CVPWsj>~eFYZB*0!OGU0Cx%%T*SR? zC8Yg}VKSVSfXReQcgcc6@K$(hTpBZ4UeVm0{lcK>NOfG03@hba93NH@5cLnb+wk0YX z2mS~t)M;!cg^>*$6mTs%A*cr_b$ruh*$00@f64#YImn1rKQGsKaZuv;4LbWs0@LG3 zLRPvb0ej}j^!C5qFPb>l&dZqYtArfMh7@a9wK!dB+sS_}R!3<0TTV7x=_G-DmUEn^ z6@C<42$kahEn|udRo3+_Iu>Y5PtpDTW`*h>}Dv03i=QnlKbh^Aj=r{)( z<;;3_gP9VyzCvKv1biJmRgll3rOu$-#f@o$Iks_urauWCy;Lf>$`9V#ZCB~{m^9Lz za(2kWaak0eVT(0)(bs}HgMM5hre^g@?Hr}ve{zLTs(nu+X4Y5KAty_p=L=%??UB@o zwCNvzDm83I#mhgnAY-or?I1mgSVn^dbS|)B1!?z%nY=G?-1uk7Cg@yU;rz@>EA{!gwdoy+RuzIWtLF1#Q_gZ)n# zFjq;T$$}{ zwx0jZ@*_Uir0(O}zR`&B!vibAG7x@%Myid$hw5m_BXuxrM2cU?l2hdr@3%imG0a03 z3HhZUwqk#XC^60_5DfRh(}h&@=xfzqp^{0#XXmI%NElS&Y65w!nEt9&y14y4p7e zt_lxEn19OGDGXO+F)JWo0pH;=5UQOXi`ECETw&s`HmQp9hZU>gRHZAa3#&CnfdlA+ z37d)GAVjV@!;jPO_>L#Jr|IO3)4g+R;&1ET^wk!>Emm2WRTracH-8W~cCisdz?v^F zP!U(FP+FVQw}#x7zKU!()rB?7$!uEh|idy36`5XO|DYzI{f#_yzO!Fv7xQ z7BQO(^%h%bU|;k5*LeGxK)YNOGTC^u<_kpPgcU_D;pbQC?a%Lh+~8^RNE37o7ZGwb z?~Vpd{0@kZkW}|@{KA*CXw6^&y2Z4*A?C*N&soms4Mdx(_u7g^b=%XHuc|1Z0adC# znTJ(Q-7{VpEE`?phAKH?dlHyxX$q{-p@^WWT{f6_Oh6j9Y$n}%(ZK02=C9YyKAEwg zJ}lBrI8f&Or?xsUY+d$G?Vp1U7i8MNxsR8T!2dBU{2c5bX6`r7QXU(aXPYwm`FANf zZKUex{$$qYuGQMr`@PrJ$we5m#Tus$_U5D`$UTabP^Sf}KZSm3_@G3sb{SzTem$O} zfT@^Popynp7KYmog#b^zAV=~sJs}yhXdI?z(lk_w5E+6BG2mZVlIJwMNh?f=(^ zsn~e24JcZQwm(lG`QMCr)OqnBJ-VWw828oMlWnu4wWk*6F`N4h91MAJ5I> zpQDHT-L(sKKLkMEGS3R+OL#2w z7B=e7U$C%&5lC!z%T>zf2YtS9D2-MsZDSn!quA8!}YrgzR9SupWkcw`XK| zUXe5wTek`lVXViYt_wdO6=@|un7pR>n#|Uhnym5aeC^;$k9&K=J-q<(ebATGK%aea zdtmNvsfo}dm&%w-uPz9~r1i~KxSnF6iOy}{mU&)-gn#0YtvC7z?7YDW?%7E$v+^Ie z_lhZ<7SIIrYKtW6JZM%1+fPFcNm$eyuK3>dpncV37M^^dpKz z&Mu^0<)d0oewOJUi(zuWZ((y0vpk@v-IHfu` zt=z4dSUtT1ry8|cD3K>+3tIyidE(MFBl7r}-@9H*Bgz&k%u|r;50u%TkS0&!gdVx7 z0?DgV30x9xA$iaGa@-`aA$gM10qc)33DMq3Rp*3iu!NoSR0H~^wHs(0BVyo0VM+{^ zkKF}#6AWj&qy9KgIXog>`8M+>W?uEZzQ=#w+3PrjxvAvkLUR=K5zxdXCrNU0&Cl#5 zr^cb!U*o_CLZV74=tlQ!fLoLwr%r?3x?|({*?p{pfDp`f48!n`XloBKa~6i_a{g|E z<^`e28*=O1ffLyR|H@{|hWo?)nDeivb5ifs<_{@ziA|Of-#W!)PiN*hH49W6iSKgo z4w6B`=#So*PlNl~m+#@+kLy0?1^>K6{&)4kC+q()9ChOBRC2XGwtP-^Es?-XFHj`w z9r6<`3^Aky*aSc6kUGl4HK_4m;XEv@Bm?oOFIfc`_8At}J%@l$Hm4B_?Fz0u`WG}N z5KAhdVGYkNLL6yNboIlMts5sQ|{TF zM{VfvxEvqCTY4zu*F{l57PWDf)a2U=mC@?ID-mz+q!*Ad)j`5 z{+VT25S}TUZis3H6vSow9N1J;f^jfH?Nhv-?-6dV&GRyVD?4DYIcAOq^~H_$L=8Cn zcZcKEsIGj@rSP;USMRPFks&Qjx?Et)g)+M}_OOY&dZBi}^JAv`b-wJ)GgxHmOK*28 zc#mYJy~$TE2Cd^_doQ~yRmoTCOWV`=eQiAI&ca(-Le?PB{p*xzr2ANL$;@3dOfhfF z<*XI9>%}9$pP%)s$8M6#ewWpN$3%K^^LAHiDwp~Be7F|!nVsA)J&rdIA~NL}Z??)6 zzbjKljo66^J%e3I^eFo}h%h{D8;(}YeZ_^zle4?eX~p8m2*<W5XB%g8oW) zG?Bu);uD3ssL*kwa`CJBntxsT;xW7VFTJjX3Wu3FcQX+dr(@E)z? zekRjpU%#-8l~z6I?HfklqG+8!U%Iy}> z`W<}V>sm_ApIoI1YW*L*fnkyik5nXiEh1^(QHL`2+mHc@N7UFZ$ob{j8Xy+*i`%J# zr6Y$jWklr777k3uWXuXh+l?%98YD3b(2TZto!;{k`t}JR?3$0%a-3KpvZ6gn5f9Mn zdc;J5I%LpcM2}K~iORhK)$IQa(e743KM6`So$`ccqTEW+>J*^B=DE6FtX=iTpBwr86k#~n}Rbqk#Y0Xf6SD11} z>HQ!eZgHM#9Cv->*dd=Zyz!^4J~+aqa>h*yP1`%RSSBj$5@`pLifI{AXkv-;@~djZ z>4T)&*!Diuo7m&`3*!&L%G3)VjUS3RV{f34KL4pS!mB<%6V#kW{gADNn?mh}JNeRv0hP^nQ*ni^eWf>0H({)x4_+CvLmJD-JPr_afo zUzQ&~pO=5X&P)6I=65Ym*nuWllH=2u0^BsMA;~njcQ;cx?V_y3O*H zHFP!^VN0v@FXXIk8&W6PKO3ENXjsu0zlSgPtfD|=8&(*KVs^)OvcpOig!kb+xk$sT%9RP~ym)BqW*Z~!kT5$DSVmmQzmTdBq2E%Ia##i@F-YV zqjk{#DbHT`7Kb&0P;tV4+3&B9`yeet`05w0_0yBT=1)7$3(IR6&qai9Rz^BtL68hg zAWVd<6AYt1h)w1tMwr^N*0VypbZ@C{1zjB;cb~IW)v+npI`4DIQ3x2gT~9+VUuU!W zTNU_PdhUR+MB^6SXJtqSrD{AQ0kBI^sRet>t`kN~b4KK9JgU;bUm5a4F%l@-0oh}l zBk+#O8*zi~N(=kn)kh*aU5F1ji#&b0{VjE|?PB|8CET5zq+#jD?qS)RT2n%!d7d&Ok)ZuspeCfd6c)s{;yo0EZKQB=0P~<0FP`t#ciGYnDvSW83-+H83 zp0k_v__k&D+@6(5OtsY~DL0Y}5H)5%;(@$JM0pYpGPtb9JzT3-YN39i zUTZ;m(nvbBZyiMJ&=LSkx2O4W*>sj>CyPSW^5GxA5Oh@#Q~nR*c6CcgL{0}^WQrv7 z&&PH8mzgq1;nx)mUa*!*Ga22Oxs>q#NhHL1Lk-0_!L2w_X%naK*}xYbuO#95UsAop z{MQJ~h7viM#cnVv+dz{tuj^&~lJ8Ymh|Q=i4s#bV9`)uy&uEiE;QYHg}R_5bGmdOnrsjI7kCBf!Rp@%3`8yY;zm;hC94TC@nYg zc)U4j6aj_(NqjYvj zK?9`in5W*8UB)`mb;F|ar^jeQl}nzI@Ni%iIgYCdjXqfHgz7 zEL)h8v&!Y8GpIf#Hsn$DcZd)9HrW7;Vb6l`(Q3&)P}AgzzO7*e$Wb!b3$Ete)r(-U zh|DXQfZ+bs?;E9)g6JzuE9(WQr)~{cq)b@4tIj=Wy|MTULDh5Jyw6px)ZG4yLv6`f zvjJG4m#)>oU>WrghJFh)$pRym+f9Xo+x*CP%;@(uR@OgwQytFcZt*?T+kN}}C+q8{ zmj76Khj(w@IqVIL)`w*^!NnpkVz@_^MwE-v>1eZy8OGr|KvF9(k|l#3yTAzF=#Bg zak&0?<|6))OyZBUXGmICJk!5&wO{u(#W?cr{TA;xqkxn5D)?JXqF&$oXI1s@OLJNV z7(9L939e09gl$rW2I#ftY9c)-nAkKKOpG3T>pFOu#+}Ti z0u@PQ^gw(R{h%(h#h;|6L~CHS;3>kiaV0E!C-5j12k@N;7&acBftN8%+`jjkFtD1g zrH?dJ@y1+yp{+PxXf{Ky;c?}4p`BYa3ddUq&`s@;z;U8-&xi0i$30?^K}Pr+a5;(v z;L=d8U-KRS^=u$Km3MCH#T&F4c(NUQeUC8Ygi_X2F`Ub9&#+{551WoebN!kt1<{Ex zS3GX@xiOYP(qBh_sVbIpG&osEY=pxc2o||T=a`(5U&At_5LT{2{X8ZmfaU68^7Ujc ziy=Tw+YiC`>Di>y$hG|mAl<`>n*{c$Tbh`j4;JpyaVjnIb%G>L{B2AeAWrc3^SV8< z2-6Xi&Dk<-`6q}oS+kF@t{FFBwW-w;iAty;h%H;ZQHd{*?tp#A3M^?ZgiC7Ej{B4& zj?lbwch5w-V(P@)?jL~;U2T2wbvgT~B@AT>?9D#SD{g;vGL*XX>W`cOGQpkqT6KU!nBu#o$c-I26-?Te5i~ zPSbi0jQ;f;eGF0Pa5S|I$!_$kj7;3G_keyksqF3$6HdqvmUNF4bS~ES) zJF@dIGT2CG9&My%gs!3^6mNw>DJ7O&iSDSJp*%D13El|{mLa%Yca9>NwP;zv2V0=Z zf^0&(FVXK^lDV>!V8dd<@40{Xhq;#g?fbS^GxVI<@6C8Vct+*H@+E@9+2CJnjeE|W z28RqqCyY3|f@==eOu=~t)0n4U25}x^$v{b{2^}nVsXgTi%#t^!@S9aPn%y)~+@mA4 z8kTo>8S{1Y-H(oB3=8N+kD-&jNxpeOCjNJcPD^^P<>VNuE1gGd^ODHf8|<&>GcyT5 z41a(Hw~L@^#p_SRE(q1a$31ZrYR*oG??vACcBNwX#$um`G?_=Uvmq;aFliB!)3!qH^k;U zEeTn7RTPh)CW=teFTtVYEy9IM#oxi@f%C(X#6(O-WRuP%1VWz8OmBa9`AMa9%-Oo{ zgl(R2sN8$hxdz>vr4-rJe-y;A6uMV~Z7~=NCWyu{e<IYs8~O^%>aa^8mQH66Z>8A zuZiqO;87K#;HbE5Xko5Fsf?8VDr3yyEik4nl`?lLLk;yCimYJzPQ7$av%&Y!|%#}DN60B;PY z<(vwIfYP`}LE!3@OgDCgePW$&)|-#Y>R(k5reFyK_fs)eBzMebE|bBxvSH6y1-hU7 z`j0|j_h%+kZm|F&XYUc;Sez&+6U_2Ji4(1+K&GdDNLP*9Z2QC-VOBCBzEBeDu9nt# z>*LU%U5vi&o5M#bR`?8?TNIld7p!NkHheOap4uJR0a8|X%ztf!DsTse(R`#RjHK#g zVtqb+JM`oB1W&!-Gq8tI)bc_QjM%s1)C`p3^QUJ? zDH+^ZQXaqX-mGDNHYYb@AVN90_P49F{$4Us^x59=t0%@ZKP(?DDa)6I`8y5nL7YCl zOW|4ms)!>+cI6;q{C^yG3%lzP)yVZ7P3$^RY=tXwa#yXZHA+(A5i%_6k);3eRmI$- z87KESo^(&1794kSN0z+*m#?>#*Ii9KHt!EQP+&2^8@@R{p0fAJj0*RlRfJSR%9ih2 zZ`2}`@$@;CmHL>#KzYeOiMAv)GnBz{@P$RbXX)40&u>(`RLcFID5`C z=N+qal>Tkb;3ZWB4nO^mct$gmyyE8)szb^vcmj>V4Yj^&2%8w48unjG0s5fH%v; zaWQX;wf7wwj2`a4#Sm=Xm1oAMP26F9$|fQ5OixwxOCvg4<~2F%CPF1Gd~b!r5;aG1 zb6-Bdkg{o-guYBNdU*j>!1Ym?()N1b!Dd&KNFpfJEJDO9LrLse3&e4of)Lr-f@kaY z#Ye@>Z6ST8T-H}b`_UAl-PaS)jV^tFudr^Q|rC_B1%rN#5-*G zcxDZcNRx^W9X}pCAj7ZZ+eN}3b=9^qsQ*>{R(y|zS~>RDJJsJVD7~RohN2ke=oL;_7>G0Yqz5lw zy{YKqIMCtgPeQq&%~y~SHsT*HI>eH-`v|zLcO>L%WtV&gc)=<=ke<&$h39YK-!FPOV~83)&t22=vqqVG{2 z2svEdxoedj>93#S_(=lal&@c$r%Bz+D1Mt#-|3NItbQ?1P3#ecy(c4MxDsAw34Ace zj>%f=_98C^iJ)D<#(qIOd2-?k%IX9OcUfXcCE>X@P!>s-rJNW6pI+w+KrENTS9jkb3qdQ-U<{Z zbx)i>4gg%YeFbtw9^WtZ;Z9roV0D(ewX=w6uud4(&wEx zi^Iq}4enD1( zF-u44aDds|jbAqNGF;yn!X8t-HZ$h6_qc-Js1?7zr(hmk`4a!Z9#8AI62&M4b4Xz5 z+O(I>+3alCAb=GCnZtI+!h5%FY+U=i#V9kthn@+Dk=o{EZ(u+k9ubF=egy*_24k>I?Qz!t(!vM4JR;Iddo1wV^4kIQN?@fIW=8|* z)%8gC0R2wN-Cre<9>HL?IQzz*qAHZH^zuVjw%n+ssVvZ8(Da89CKpd-CgV_CQ)_1^ z<(0LU4zP{wr~>#Z$lanc*K@8jJeVK@itVH-;~_#xm3EpcJYnVB5a)`!PPz4`Ao|LC z3~ON6{$wfcbcWyK`QM^}_J{Oqg3WWRE_1445{Zjf*FZX{w2)5DQ7OY<10(3`&c_4o9(9mUA|G-C zyuItn-Cd}D!6taDHGjA+-Mt2>%N0w+3*H>i%6n%xBs7Ry(-h4W03sm=YYMRTR$Cmp8BzNKfFBp z8Qz<+CTyd0PI_fQ1kqR$TAWwzq z;QxMU@Nx)rsYh&p#yrs=U7lo{QC1lMY>4AM4b)a7lD_5mIhL(WG&0k<`hL66!isu1 zmN7VvTvqf7JBTw>F!Kp|A}MeuDAWE&*2wuqnm4zG2k>Yk#Y(H!PT^Vo7KI7ps@j3x z_B>po1G0?9wMbsCI_Q+7+*=0Q;SVOY=dm!y&?;%y*{1&}Y8F_$)58-}mM@h>GJ~Vw z^tQ#E*d2?|O|!(9uX7!qj(OG1(JeLBEg$((sb1ZmCdTFs%sY2sk|Mcm>lxiMuuF_} zype*`!v?LV=IWhwHatvxuJJO}udc8djOOr8Q{sipuJiggeiUdrR8rM3u+sv zEI)T~Q1~*xh`F=6;ORtq#=5Xk|Lyy`e#`H4JWQ$G4cc>1+pDzBfaHGeaaqcPfZ%qv zFXk=Mwt1Q9`|}<~Cmz=q&!gI|a?KO2`*O5i#CZf}EmlyS80}n@W^p8QM#te4 zo3M=8jTa5ydIEixxLkFS21T4OnheudPw=dnqUqg5o96=kr>An;8}Tw}h+!tcFf?4c zEQaqidcJpK*Z*acX_k^uUtzlDszIZ{tc^mfgj->+af<=gge)J^;HTBk<&!Zfl4h20 zEsjwFZj)HTZ;bh9waxjYsdV2g6er6V8(dIVrB&o0ZP?4t)Et#~PVX)hD2@O-T?p?7 zRWCgEk452ncE(y;`{f*j%^jdwvS1zGyhO`0O3LVX(@xAA(E{L#m@G=4&6{wUD%VL0 zE;09(&LCZP0$^`uePk5n6qB2Jp1a3TB$I}DXHu2X^~%xHUL8gg(z{UcAH|&Jkk*9f zk!2G+kPi&2D!!#*Zqs~|Thwta&4IS009|`4lu1u0*H|n1gZ!x2w3Nq;SJ*{s|9-uC zW~{jIz8)hy@+SpfR05yqPG%nqiknu8!>98|8LELN> zFKI{+?1@7pPiQwt*kxiq+&qQ)vyWreMdZ_pPVgkl>9N^2KMq%dfyH7I4J062AT%!Z zM`g}6ycm6MY@JGjn=+Y&!m=*Q5vRyY1>2%?%_wCm58rnuT!cfdAfis2*Q?lT@Jit-ODHQ@O1 z&-n^|4O`tB#Dk@QZZeVH58iMpJ9k5K#8h7^fC55{yEkavOpU|0uZ0NgaM9NesL#yH z@N8ant=+i)iz~K0B&sVrf53YWyg+?o>%oF%3~y&SIt-39K8x!3VRemKef6!!&SQ3I5lh%Jn@)46x;3G z%*ORti0xIC-8h5ULsNY%-eg_yi4X9TaARqk@S=pk$ux&%71-SVneh<~(Fg2ntsxJ3 zYUd#GTLDBnH=fZd#wGL%qzmm?e?DhiYH)vn7_^sAvAU9f7ux6`FFuGWmf+|Z; zlnEC~!BdcFJ}ORLGYC-(dra|9*wmp%Kbj~Wv00y*WQKoqDc>kwNU`?zJ|Ep>+rUMZ z*rQkbKz6YMC~I)JJ97DA+=vmqh8d7m%v=e5Nc?2F5STXpT!cbZ>pXQ_R~TR^gzo}- zI3R@v@FkWE!ltI_&D(k)B8(Z3Ib+)~^3A={l}S$$!o>cz@b>@)zhE{v;5(kYO%i%r z50fnQ$(D7QG-1dasC+V4w2$Nx*%IYypw}g%`pb8Ucpf5D)=-MyMh;) z_Hv<(EG9ra^(dbl1w(cgL*wz$okJ-pmxd2 zjWcpS!=*y0ikq6M?2?=`i4_aWLTQf>)_H*}ZbfPvHd}k`)=4?7LNLudRkt^X&gsS+ zvjNwZoub%^DlvV8`f)8eAJDbArm9$oXK4FF?x(Xk1qNP`b<{sKq5EN{HJdE7bBsTX zU9=<}6f%d(JX`)Z7A(kD{ah^h_to)N)6a8SL;b^Q8NGJpADzWkx@A^v;Z-$ z03*utoKvv!0Fl8^&l;PSN{21viKO7{u1h`@jyodv^xdX&rnv&Z0{Vzh4vez;~ER+h}y5Z8@=kvUQ-t^{O z_41R1-cy^S)`!Rc=z4Re<#tD;F0nTkR4DbUZ@VkMR^J^FyIn~$1>=~NLc^`i_IM5y+Sjf-($rL8E)00Ey3sef+F+_Rxo$x_oYemCZx<&<#>Qu{DAV&yTQhUJ zs-}^H4S;iUPu=CI+(@ZmM}*)PN#W=Rg>sVk)q4yE;~1PuGSa+@J~GP5e~70*cJe&M zzOi_bZZ8{q;Nt)Q1ZKwfILs$;UH`ttXmM!cdUptPIR1ID^WJSE*27q0;4YE%p*U1X z;CHo&Axq&g9aZuyn&O<)xteRPw@J^(M=rDyYnRbXaX+8HD*! zAQuwsJwjFDO3bz#OI1lOuFAYhWQ94?Tx&dd`VkjTe1Ez-n< zqVjhJM@W)T{4D-Br20W!$~lRK%m-4{CR%tC$2HHJ7Y{%M#~I1Ce8ReOSvP-V^-w2w zU}ljm%OW?0L+j-)O3PhDXpGHMl=V%*u_vaqBqH(x=j$@5cToBz08yU(*eeL;-jAN9 z6kExO#`$K)9!Y0aCH2^Y(1^jNiLL8IBj*MPx8ND?U|S>Bh=y(TzxU6Jr))`)fH{1JVRGa^(_8B;gSWr?bHbz1in)a>w^D3)B&L^mJ7|9G z2r?xivB12{VE_}J3rSDcJ;Lg7dQT=D_sch<%Q1wcmCY%s=lR zAtM?m6YA=7`d*Ha88}dgcxDIQJ0gwv|4M%TG)vOU+q-BM zozQr+X@ag4I54=LWP-w3{6|ribT82zJLZAT7@c&^Som9xM>OjG*kPOjycqO%=5GBK%FdjRgTwb$mS!$r z4bkk6i7w;()+!hGAhQksn`Z>A`dyfsi!b0iy#E-fsC=+VP==n#yNK9e@r}fxH z*8YzH5KaT_(}!;D-MbY9F#AMIa(E#qY)3&t!5rp+rEEC8dvD-o@ic$25=c{&{w=Tk z`vbB;1dNtuJ6wy(lU_iK!Q4#T+pE#NNY1rQmZ)iAVR$^pQA#1&nTRwcO;Cj|AE&Zh zS2}Z7-Vn;1C=37(B>B~`z2rk@rUXTQ(rG|b2w2LJ>tvthDi*(hYf^Jfe+FzWBTalu zb%0sjc&Wg=WW%=X33v2`$6RuZMcksacQ;j+LrRf@BIj&IfkcbrHD$u4@M-jg3p@|D z`i=dry_vzKfL{@Ybe^GLUu+ZaK+|lVz;%5f(AHYtr$1F(Tfoo+$ufu#ub@G|sCINKJFQtYSy15fSd$3ImS7ByQp`xSytX`7mU=T)E>B#{J;R3R=pbzS z8|or%fEW~~qFn(CF63Q8^F;OUD=uub4F59HU5ZU_jFR)nO*VfV#O4clR(%(l9iyCw z!(m!ihsL~=psWL4`mmgc4d82B8&EnZ#E49%FpSgv*-dMQ_j@`A>JNN>AiBZGF~%|K z;C$lyK9O`~G`3h~BmA~rk|gmXm#v)Rq3p)rSt(-#9u1v2bc|Ba)WdI^k4->TH^a$LBmlB=Hk5@Ql{n=`=qs*nXEMhYq8>|q> zAKWHSm#A86P4*%L$MXpj59g8^`jXb^*697?;6Z-D%0O_wD`d&i#1LsAZsDI_TsFY+ zB2nm4CKQonI0{r%4Ka$RLewB|0Fd14O;kg&0ei(yg!%W%0(+lAs1`K}7vusUGd@ti z7~Z9tr4G%t`p1hZY5Ij!u0I#H{UT31K%1&W9+#PctHNajOi}8iJi~>-LI|kcY>SC$ z2h9tw@0?V7@V!;Kf~-csPWso7*%byfvMSCv*@&OhhEH34Ak+A%LD*M&Bb@q;<5$fE zq-*uRbhGF9Zg4}tKCxn+jz41AQ5i#+R19&{f;EE|IO_P=Ksi2wl@(GjtU-k=49CT* zC&7|_v&mmBfQG517-AukBuLa|`^D|O?!7Z%G%xL4=gGL5a~`FWGRuq3yA|RXUY7I zS^W_=ZRviz^{uk+&hzxfWV00^tBvE>Qm~MH+@zh(VKhK1Xygw(GGlvP|0cfc@h>;} zq4i%+r{C>v?QSs#Z5Ol2zRHOj@MziCu5(D2N}|R(EEH;}AF~L)c!XT@a@e&Zga)aL z@K2;|hs+;GK44<`+IUM-%C1YW>H98HZ;1P;MXIN9fwJvJ{)z{mvL7C(kR*Iy%IW@V zHx)(pkH6pX3(yG|PmJvScG<@N8QJ*a&2UOWf+dbGDt4jehy z%er!t>n+u1IMIWyo}RT+rJ%9DZFG;yM>Vn*>LHXk6K9o?NC$GBLX@m%w?g&4OFTS& zVD)2MRYH>%!|KlGK@Tr2x1GvyH@=SZWQ{JWueiZp9H8okR+)=7IxOY(v&bU67P0zt z@X+v59f-tvdR)TxJ#ukXrNplyu^H|;uO^hpK?$&sp~1pbmI)e-C?pV#<2Erp8ANZS z<)$`42*{OGqusMX>mpG%CksxvCj0#F5R{_q{cU3cg4>trS%qu>)nf!?v1QC0$t3g3 zO|!}7`kYDmP)fUhBc74SP?L;%WzxAP|Jq%g*1f-eK;+#6_l%Kv^KpH7*7J<0i2h_y zjD%-KpQmBZGLJ#t=~uHbGaQVQsd48cu3J@x(SGR$nHG2@AsMRBGWbnqe*HKr zWm0o9a7N0uI1|zE1WToEqA@?3HRLuz6=%1|bfdjJwpP&Ej)i`k;_Jn~y3RXnfZG{) z+Z@Ur0HEk~7pYucVBAk{s~rBo$XCQ)J^Q0G5&AaPO*=k%u?BQYH0tx5%rKN?wOO*U zSgdjOj?o;#Rg_}S1k?D&QcBisrHUHBY%7=D@~<2eY0KteF4m1`e_T0EwPhOp@ugZ> z3ZZAvzV1JY*3Hams0I8Xn@S-XP<=m<{{3}DftJeY3fICmD&ln{s?QKjkZ`FasM_lrKluHh&F>gAG3TRbie zB*jTKu2#OfLMh)1VJr5GQ1@OB?2Ukw(yK<4RZ?iaO?miy^;URkYh&sM3W0(|`#ZAb zU3{(afabj~6p!G6t%mZ$P{hq7TB~T&s`x&vZh{1(E>Z#$xiFrY-CB(%GWKJHqR-47$(597v?#e>Oa7jf@r>1o=Ws)q z!7`#hTF*TPHW!k_V4p$Gwt1VFi`TaA-CcOsjZa2T);zcx&Dv1)of#ERt^|YoH4X$0 zBCZV%k&;l5V{%glHDk=t6KNeC6gSC{j!vnu3eevyI}keY7A|FCv2wP3%pUwvS(HO= zj~Qm2=`d_r;Vl=sI>R6D56#8-jA@}+BYbY~4HJRN{+DV$Sa=g*$W^k(_#u!W5{5Nc z$hSo1vUTV#M&6@pZ1QJe>sgg|17x#heqH8*qniht13tYI5kV1YN~v!5i)Vsfl{UI$Yhpp;Gu)NJ7u$@rI>jdDuOdKv&~+ zr;a=@G8Z#r4$DDnj?Z$XFUndCBqcGrJ_&dwUhnpv134WdNt53ao`|O7(|z#Gcu8jd zZ=coAhe-<5A8+2BnPz=@>*2QhS27Dv7|`OSBB?Fox>4q7Fd)9kL;)$SyI(B8&DQal z(*7v!Uz6gZ9&%9F^Hl~=`C+!HW63wYkYo_tjp8;`5`D$=NbM=VJwbA{j-;SVV~0-| zeM2|adK=SoxQB!qD(F$^mmcSN@-Zp9up9U(D!%-1cZprr9{psQKRdcx`Z)d97J)XJ zWv@PrSmq$|#?Ekd0Am?~*87o4Oi|XRCGbrOg+d{tTMODf$$_~Cj7ZI~zgHsUo?Ps` zekSVo1Nemx%kiDdXG{&pZI_c26=_8SAbCa3-Wq(2{$4?FObgh6CTrRz(`*t=&oKO; zmf_OIBiE(M^+Sl<#nXYv8;|A5i7N4H?s_tj)d=n1iCIv27o$STEg^kY8D{IxRv#gv zxQ-TXDdF=9H>4pWYrG_dgZs?i{;_?>)GR5O6>SO#&a)9E%VD^~DS4{@f%*972G2!2 zkBc9xTE$F}(@f#-zE~Ff^ZzK=C=6qqz7u$uc|V*_HGn82r?JBuP%@)doTsrp8i2lu zvR{>9sD5Dl?X|4tpwM*zo&)F`S$x_V-@O^DrPbLiGg*@MQt5( zeVPJ{Z{TBqUvKo!7+-mjqEVBsG+!t$W2iGhv)r+I5BbV|C6#lxPFy%f^T){(UOQp3 zCORCxVRV`7p!E6OI4T;(&Fzl-i?G(Hmi7_%UmM4?Kh+*Nz;F~q@{#Ol!G8stxuxz@ z7a*%`w!)og@C3$eEQXpY0P*ok$+;R!)1qvuf4DRba>ZlUUB>U82sD969wW}BhA<-t zW(YVE6V44Cr~i-QdE3N)6o>7I$Ny2Nx|$AACkw%_&LsIIP*#jfyO~xy|E!#p$7&h! zpEV*;9xqFKg_h?UV6N`~ig};uPZUUhfs@d0Z`Czue4Y zy{@+}lq7h&_{O>x#>F^*=nu{tw=`G20K3~yk)6aIWg$yU6_=E|a3BY4zm}H%0Q|hG z49UV~ONf63bfF;^UW;X25ke9)vliR*i~Vz%`=qXNJx_OQPVqSXf9tl&mNeR9eflUI zd9W8-m4!Yw=1kIO2+p#u^VMnGxj~nFDvF`>UAlAkhK|NuoSnk8YDpNNiyp(PL#A>z z09PCrh5Ch%)whF}lyA1{i$}slMQcMD>tSP|sj+Jq2t`;5E%^PaA ze5D5&z4!h*&xt7itGB0f(ED6YW$~6StM^RJM?+)98?!9-?5(a9X@wB}qxjQoQ)r-- z#pqg00^uKSI02ASVZAF%;Rg$S)hAS|$E9VT&t5z$!5iU!B7wj^xPs#|#|ODDz7KF` zJl*N*_pSGOJ@jy*EXfb|&Xk^w4D8O6bTc)IgAH!Qn{)sRyNsbE^?Ibx=KuI`M_Uj!NAf;oG5>;?hk<}#MeCV;4`Q5Kkzsoj?X7HfNzXHQsbI( zv%~Qr^Z6c9H$GMaTqfbo(K?*ZENnN>`k-Df#XHYLE_J`9-L@42%2Gx@`w2dY{04&R zGro`f1Zr!#R%{X{9tNg_1i*cF@Rhr|Kl?v~#L>Bw!PF3q5}M4OmF_|>z76sqRoc!U z_56;wJ#hDQv9GGXful;b42j4p@w7AK9$~qq%Xa0^Rlz!u@HYHZ%&( z@lDIS5KpZ5!1vN0^1rxYyVuhZhn3MG$E#bF}eI*kinh}(cxk@|RPYDZWQYS5(vK6RMu_&qT z1dmACbTWoqOG>-3ahM?V&*T^Ooh$p`<=}wlLA32@LPT)dcPpN<)$?%-g&A!yr?him84W_tYw-IwFWMZ~Y4!&KhVjY!q7UW;*7wSLxJl4xQ3b;qk#|;&` z0;$W0yGR?RIt%i`+J5tQJi=7^~^WL>qK+kH&xlkLB!0+0&*1wk~Lw;>DMOD9hOTTYr0wrA#c`| z1uo&#>vg)E-egiG7)4d>sZ?y=fNpg=Z6%b*Es`xpNjN zxi{(b-2teKIl(l^@r0zqGgIVaITlFVjHA`NN6#6KW5YG9cBjNl0oQ*AoVfp5lMKH- zEH-s;#FjMHj}&(Mp=YlKJTwS2tGF6~1Xg@{>c7^g=Nr-4XA$c}wRt#|G5hsmfZBfj zoW9PF@(N~Dy1UA;K=+_+o#WZmn*eZdHj(yu(MJ~T?%P_XzAj?TjauZ}msklUkj2`{ zt(!qfIE!M=0Pq+Y1Vk@<$KRwBVTUWX8^Gdzr|wR0;4&NaTakn#w!0=8u?FadWgDA0A`ADkKQV2S zYWn7TfvoaB|BSq~hM}r+hBnc5K3V;bA|%64{aIYXiQFarDlfRc z4f|T-2`@{ShQkn1R&3G1?DVOrk|KdfeyM{F>M5HX^%kc@lN9QZ(nIV&3h%pnY;@KG zCejwxt=E#i(8x}xI|RwAF}(Yn_#+0|M$&1fZ6*DF3#|7++sI>b5 zY?;ZnaDa=Azzqamy;Ny~3Q%;uM^)kHM(_uV=raw&U;Mkr|CM66chW4TRaWNnVT^fZ zbt+Z;x1C?tjY3|av3#e`m^UPMYHbpKGN9z3@Gs-NCc6G*NkXOiCVGM8Y+Fg^5gXbR z{9nXm1O2gUem4fO*8NR_OiFnl3FgukKbD5|OrB0ta$1by49w(h7iybnVH=K{_{}YZ z2rXO^jfk$G~&1iE~~b|&H4O>)i88?ZC**v*ZCS(U0((9d0O3e>Ba z4oVPlGzChhMK!y%AQxbi+(Dl0x_wqsr0aMyxm@q+IQi9+H;mF5hS z6t&vRjG-5}vIbQ%&C~eYfV^)?s!BFE&nsXvodUXa;-Z5D*#r%iL-3rD*~=Dw9C!oql4j#gN|^N6+6jnDu>c=^o#u1PY)^&)*bfNtK2uUaga?H@ zS+9y+IISzCW_bM3Vx+B9`P7qJI(smQnarfQd!iuW%ZRHaY~!x@w!w!m^m#Yyh`z+@+>iW*?}hY z=+R}u1WUrqG+#)-&44&U{3ek7sjZgrt-ix#S-_8uv$SIWIJ<$@1%^࡭Mw$fic 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%0Db)b0Nk;Beb!PV(-eSpufMDt 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%0Du1W}Z6GQQys^V6H2Io5&O z`OVp$^Zu!V6?tIOQOQ0yhvbogSKg_1SJ*uN08BiitNnXA$l|7bf4f2zJ-y4=3ln`0 zknkW!r2bHP^t$<>jfhcJjIptWOk>A6o8!o%UdhwZf1bE=XQDE-6Pmp{$M$+~ZE0DY zP)w#Zu}HC3IQ`~37j;LsLpjbNV4BhbDdp)TD9|jtit&nHPyFyHA&6XfV*3sM0OJMm znjs5bU43#QFT8ATiU?rMax$Qfe&D(3)yH#0lX>i4QZO_N;6&81nqTvn{{Zvw@hJip zdr-@~T&a5G-wZ;SBE%wbKlms0bHEU8Jq@Ohx36_G@~L2szL;T?|$g z7zQT*JsKl|r&$)aJ(7_WqOFADP_UI#5=um|_y)FvgV4Sq^j3NVtLkZ_iogaOB{S+z ze^}x*`~U@7^gEK4GwEKxhN*W&y+8MEX^0)&763#h#}VH~?IS-;@UD6~j?`tNWfH=P z5&>X^I5ew>kiO9XS7f5oJ}|)s#4>ayt^*E%UP53c3UU$QqN*p``X2Niy&;155D-%c zLrj$yjjs_F5X4dusM0~WK|oqC@VW&i$YBFaeU)M=uYrV&0qUUw(yp#F0fj?JbhYM6 zdbmI`HQ-1~8BoHm1aI|O?Q)7DKgO!9oGBGSP^_XT1UQcrG6{&m0-^K~c9T#x2}V4$ zQ^p{(5Wx@>Gx~1`J|9!OZ>a1*3L@YoR3eI`h}Fis(o{}76vJPzngHcNsE6&LqX3*} zym$3Th_vyrsC6KwP|Wx2MfmtzX+j|c;Ncbq6QO$l01So*!chSOCL%tm*g;4tGJ6aB zf;>kkLIegjO4>D`j-LPkG^jz)GzKa}1`t*o5GWyJ7*V)GFE_-6o`gsd9>OI`%Bq8D z7A}xUq3ONYQ5BV{W2!I;K&42cRQUbO){}6;XmhQx&oo9AVx#a0d;R{G#B>w!)7mWj z<2bwK0#;QQrHZ^7;i~Ak1(@j-bnbu(-;@Lt+z8CC7}x^~&lHlWHkKe2F>Hto(0oyW z(lWI1BIV7D_q5ujXq5ue$SyIVIq?WMsYewYLkRPxmjDTgObW4jXP|y49~eX_gir*M zg{4MDUm+5$P*_Xo<>xOr05w1tb56u~x%(FRVD=5Xir=2`=i~;}K@iy;pfA0vAHOGp zh*cr&&-c}8b=lD?Rk#^=ru1*-=zb-CVRG>qzo)Sr^u8l~J^_0I#~pZ3_S49UjnIf{ zzOMxIa`q>b1Tv}9B&Jpz;u3eoRlOMh0D{4D*c`w;7Zyguw(W!tQ@?qXC#}MDWiO=P zZ#G`Og0V5d$xB(4{{XZ~l@&h~&G>Ll^}S6%inP9t4*RG5f5uthAz&3fuhJYnemwCK zrWgrW-v0o@o8RY$py+;Yr%{pT&Mj;yJrFQO{9NBk{{Ynph4>=CmnUHV06lZSz_ksd zip9D2PHmoh_c{X~R?0mu+K~|1lCRW{W=R86OXt9?oQ{kUCffQg5)&X*)q_Ypi z3LY>mJwXxybvQpVl6BUkL+@O(^u@&oNq`s=3AabTZV_b@AZLL`gB&jzG)4$miY@EjQ4}gT~j0L)SkdsxAWA>xAP&+-3X6o!9Ll^R8Q}p!a)-_moXcu zH@qJLjFD4C2lGA8{{Uim3ZM^KRk(9Ef6dEBQHx>;rQqw8Li^1tmL=lBMgnm5;C^?( z?5F@6*}31(<{}mK0X^g{tx4Z<=GUyGO9C!y(H!^j_rd_xRTk(1iA_DCeY5HzVogx$ zyxTiJmEL#{%{%dT_(f@uPL^Ov&{9=)oBF)V`{d;!{97tB))01XTIHg|=B^m%)2sM@ zo&hn-O&|UmeenfDWX2BIj3v7ZqS=cLUSLI#RTB?ti5Hjs?P+XXHX z{C^Lz{a9TsB|Xv-0#5LH^_O$U99lzBZj!C;iG50K~PpWbR;NlAxBKEB>~Bb&VCY zRFuxC3NmOg>&qepi+5bnFMIa=YX9W1T`dRVYHLkZ6FXDx2+vN zVuDEtJB+k6Wxy7Jv{i7gHSuK>4m%KmQNz@yAAs#DF-`#Jv)LW!9^&ewMBw{RMK4cW z5d%G32*cM9g#qWuo&*Cy5UB-VUp58 zII6;`NMqJ!sxf?x3J4nmR1N!L(zvfP3RMWs-q8@KHE{9K6i}>TK!GX;RlqwGC<1|C zfdLH3@Y{-&!bUg_jZab1`aS?Ep-TG+%37oT7?;El10pR&92BbYGku;=1g0eg;q^)% z)vFl`0UGI`iv$AaSqKX>T{MQN3|co)Z102%LlguD5UFM1bRH?t)F2f)Bbo!h$BCpk zdn;)>bq!ZpL@N_ggn~5|s-IV(sJu*44L-oEAfHwsli`^ zQP-m=@)uKO8?qHbhzWz1eJa-s#6c*b5U56(D)r{{(dQiEDKrj*j+%%} z@QY$GsSH;^M1mtI34{Rzkr|>?LYe^VL5!O$QNvj7+wYC?Yj^gHGub9MKI6g)n&}e5rL1N}+fB{7R0BZT515p1 z)0E>(?p-=@SIDh*HTN7@nZS3lc)CmmADf7e@cewSs4*?Idqd;WDL*fX6cIUfTtE10 zeTk+T{!M0FnP?Ft`m+x+nXlz>!_d-MQ!)9-v$C~T`pIQY(gz2fus&(T(k8cp$(JUPIk!N{6K1dzHk})fS?}d(5xGyjSwA^MArzC-MDKOeWFrK%y(% zsbTni9{&JVd2^3LkqWXYWVd{7rOo|z?Z0NuFQzMXdQDoyo(DysryF3<&Q8bi) zBt;9n-SnY~5qfnuH&^RDalU8QMfEPZ?*9OAI$t0~2m>HEN1;N0$(;oDZt`6iPGtGQ zPY_57Y5*%K2nQ;%74_6SixG$hH2^agTJ(033Z^VluqBNSv*|r}34<7_j zj4H%%(ur0bwv8T}F{EAuPRn8hGmb6zHyVQMoUV-Pd<3qh)@1sMU?I>MJUHu7Fd%&o zXs`(T0P$T5z%{f)#{*p81rFd1AXG3HctyFe5p-lH^>gz+n8gyX3<*(q-Q{2F?!oY^ zP^t<*qLgduV}pE5I~|li2{1OcAXya?03=|hyf7(opYkM_3I$MLf}?fUtP{bLtYL^R z;w_k!tyrOzH&&a@dU&H4M6UW;6wyQvQPD3W!8CNEsHgDl@i!yz3K=L{_-Q1b z1wcrP0$?^+8&$p7K0pwF%6kZfW&sQ`_`#GV?_vS=j{$A;EDfeO87@`A1<` z=+KZcD@u&SK^0FF7*9w`TyUE4TQCCw+BB!Dh=8q5fJG$7w)_WNzcuBELIYL`ls%tI zq48=U5TH{~?k_EvDiuWx+P|99RCLaLcfjVrfb#^cXrKVYEl~(o1X%Dg6pEeXf}TOD zA4mZ067MLL{`jp8(O*jGSupN8&kFD$rV*tgNfTXb#(3~b5CX5EU58O4HnRA$bQl83 zp<;`B+E?2Fa2Tp%KnMd71^w_vS5%=7!*rMYpTv$u$PipA1V;Y=MA>$#$w9-~>WA>m z3$@Tdp&pkZ?B9O2ZF7+%Z}fder`|OpUJi&8dtYh{np!L7A@!VEb5Bk0{{Scm{TiEn zCTafwY5fctpV5Iq9sdC0bNs#{UuvH;^&ft>vIY;5fx1v?U8~nk)Ed`MHA6xn4DO;R zb9w%vbb(!r?fjvz*L%Ji(Ilj*Nkj{{V}E!AuH8v()?T@2dEi zqydi{zQg|jv$^C{yj=Qetjox@`>_PaK@c&O%EPilggU+m7t$nRt8x2oNBGDD_d|+% zLZhuYYG;*I2y_GPoWu100QcgC$~@4FI~aetJp~C)#2HHtQcGEtd;)IS?eGAqQQ?5X7EvNOCc=0!gJQOp87$dJ#Lr$-Z4|^qN00fYf4uMlzNqfs zwCx4BD0?3mwV@KSs-NKJ?aaPNTWInqFShZ^gZ}`06))t9<6=!9O%MBE5hr$|5+*I< z`STAd2?5A4J+%0UyU4tr2$#@Z!@0GtT+h;YYqmNe%=cqr7&1-Q!je0xF=c-~=84N# zEHxcli$1~tUsHsq$T2CVyMnLW3B!dq$-*+N7qdD1sEK z+RTEiXZ-fbCyf;mN;;(uu^L(2&!v@rs~ zjBUTzzPxdi>PA2=@LLab)9j%13RquV_lF~1_(d`^tR*d@yE^+MzFw0GH;mtjA4B)P zW)5gUZTgIdYk$0GArhu-v;J(>dZqHR5>@~WNt`NXavq-*q&lU`C55CD_g9sb?z+S$ zMI(1V+=%<Zb-ErS_cu{hnlW&LhaL?wyEEx*`x7+2QY@Y)7W%K2i|{(TxS7zTOS4 zm-1Gt{the7df!KjRH~>3I0^{*9lLr6-3y|t2L7c@eJB(u?G4DHmTezKtSiJHVnt%j zLYUCvMS2GM_4tHuRP;0uuNVc8x7rPF1k#$tB8XI%T2`zdPt-AQL&8H*f`i1;un^h| zsfJ#(+{)`?Z?h7>Tnq^*JMaz*j{bp!2@?=10se!JxL0jR6*LXsWyZ`ZZmdQgDjH8q z5bBkK4#@BfD0ou$iZul9MM^770J@4J0d&hRpx9pcc4*8pB_7Kkj)Iy%A!db8=$T+o zboQPaGFJprlmswYbzpodLR5of$_uf?G{hTRj^u46L6Lweiy8)264jb}tXrP9YUZ>653+ zMgIWD(cueeh>RGFAitBp9~EAwp%C=aIGGlIkr5InN8-dkMiIZ@5Q;S^W<*AYI=E*5 z*>4ZkMr#Enq+D3~$SqM(Xi%b%!iac)Ce&#awV_m)n@1DTBA5e$g1U*C2q)c$l#uwL zK#;|1j5Rdj+|ELCC$CW|Tj!(#3U$UqAtQbxlEG7=NF_BP6bcDpPymGkrWgvV85B6A zU~^vya#)`u&@0fPk%LEqgtY(=A8I4sz@rCqY$u>(_VVu+hOY<|m90fws-0&ga2LdB zDPaIq!?p&cVtX!ej*mleq~5W5Z-`EU-6~N5IAWG?s5CmHp5v%Ul^U+;n!E?qT zvQdGtw1v<%%Blo8RvZFTLB7v&O9sJJ6bRe^Dh(HaYShwa#fTwvc~W1|F<0tZE)7;8 zQj4epGG^gOH3k+Y3DT3(<6cBY7PwOZFnAZ336%p#A^wVKxtln|Q))KXy;`M*rSzTv zfKp`plx_zzBkdHWQwEDA!d8Q(7%fjJ6LP9C37Uiw{2Hf#MG>K9=u(|2X9z>e0E>i* zLaV2U9bu;F!U6=<1O4Hq$2Ef}VQ?)hB*1=rQ=oZ}1QoBNXw!6<(x((^ z-0krk%A%gqn#(t1`&ynV5&%d0a6}w)^WUkWv(%J8skHBK<_7qc7|MG^8M*DT{{Xq? zeuD$K@`LVi{{W@%6^>yYTt>b7w0}+U6_lEE1SsaEui3bdj6o?ESiL@P;fB{#04lZ1 zKT}AI&%xo*Fv$x9S1XOr{{YHj2d9rTh$#GgNC!)$htkj_jWZFD*`2j;;3fbdj5Q-LCzaD@K=7TS49 zRVpFK8j5RF?BZgD@k`08rusYU{{W}b)gg_-vs@%{dmZo~V&dZIG500OdE#lG=~Lb~ z-TwfxiZ{lqV93^lY~CUMo|Y}cr8>Y;;V1Y10Io-V{RNshXZHT{7N{9knv0;{d!xJV z_)t?_9`a*{W}n+L%?1ozB05NJPiG1FJ^S>*8Zb8>Tar1rHsnYl2pGKB*TAGx@c{v&DFD9De+K+=l?&CwHH2)N@h7!X*x(;3P z;Aoc#u^ZyviXr&C!^E_RC8W|8ftgsXy6%B7dcMSWb|10O;3WS>ezvmcxc;&CP@5lP z*nLKSp$M`D^oP}{)j)+5F6La3pwp!zEdY~sKwa@0b@6K(8;k&&4qdIaTwWVJj{?J=sGWC&Bd;r!$M zP$BSs*$}&yvSmrSwWK8lZ_cEb8+?MF*^HTcDQofGqLn$V_94oZ*B)ufZ+ZZ*Fdt7n zYwMaSfKje@Yt6l`HND)DWriuAU}_;02Q6axqe-H zd*-qp5z!NW7g0X`S9KR#ZpIlShIlg!OcN0lp0tQ8h9~P%;Bj=#%}Gt5aV2xmSgxxt z6AlO{^QM>kYvx)cIL6|*jK(`aD^s$b9fTqkmUB9XgV!d~+QnkwahBS6XFk~(j#T4p zif=y>X#2Ah51*I6^PM=0bvF_jvaPHzje--He!uIq5XYv<@-FuCA&e+21qU>E{&!T} zc`#cn0QYS974mVuapSg`E(_NK?rJjtm55}yZ}G!6ri4OnmtZjGNi<>-W?|b`wt*(c zrI5`{Fz3Qpc+zx@nz^Nfiu7FAte3!!otlB7u{SsL2o*LEz9H9n9LBPR`kb823`)Vk zM;W`a)dd%Q%ri-t5P|!>^a?c5$oKMJ?^cJB!q{R-Xz}xC`v*c|FH6DOY%%PBtzn=m zdm*2b`4)II%Fb~evP(-&j53D5>cl(}zYI6H$E8uTM5Qj416d7LU<2;#Huz`)K*zG~OAMr2%<8G5{aLkB>0eUN)oWMGZ}( zKeaX<2~dM#c0roL+d2raGVYGe&D})8d?S7c&(758zE9$0MjgRJG9EbazC64d;`c(Qd?o=(~qvg2$t+fbqIB0z0pIeaKI8 zEUTTZ%Fua}i%Z+z^}OO;-ixWnnQyl;i9}6Q4WAbp_;)aO-M#Sf0|}++!@;>KWEF~8 z-nm@md*4^%2W(@KSheYpTNl1_7hLalS@gVjNI*klbf}hYb+LQfey0w5lOyv>0$`$V$YK2J6p9(3 zU2zh7i31pfW>QTSQP zKDEc?>~K;ZUQ0SC^^XJHUYOvUoc5DhFj7T{O1DzXu7fM{u`s(?SNW6T3);t$2*r&l zT|Fz}$Mr#LW6R`jC4+Ld#IySe?0#;Z=RS|)_&zL_Mf?_GM%mCa;sF=^UfNp5zb~J^ zZHtjq49cYt#z*7lHa2kCM+gl3&SNnb2eb1}r6BR_H(oB;wPK{+faFC&z-E6(7tKi@ z9M{LFQn%re&(F)73-X;dKK#4qqKPq*duw|#_bl&ZE7RHyFZ{vfd!ZxyR-T`=P>e1%HxR$mY=3gdTv+?iT{WHKT} zs5?N|;<+1XK;nvUWoIWK8EvubY7(?Qz^##6WFxI=3k~-P{)D8z$h+(pJ_$aE9xD19 zb3D(xgQV!SXWVBJM99iw5WBc|AWy>`8B=a<4uvzUWh$-xEx)B$?n}@1_-?%a)CYD} zpIJe=2f1H>A*SV^=y^?r^azm5GvKb7uhi}w9=&w(f{;khVi~GPz9dodYr`DEO9dhA z0qrkhRT`J;Y;3RsfMh;S$OciKr~i4O1pQ|CUk*fpU@54JAK;a;xpCMpC=m-s<3)YE zr$v>A2=XX~6Z@CBsX}z~A8?0MB%u(Pw;{Z!;yD*<3o1p?EKr#1F~%^DbR$}+ZYLEW zcV22}8!k&UM~WBzeJEO0GuCLaTY6KE>uFOq!oKhMGu|@ySf8lsLR5Cm>p;)Hsbk4D z4wA(Z!EeRhYoHnHWrZ&$`SfJ8L|+vXF6mAwbmX@is?l8=wY(4mVFR*0<%XIQN5(}F z#n%rqV^kmq`WiVuq^lG2jBWe59(VacDHNM??%z4G#SC{NeKsD;$(AFOz%~ z*X`m}wI$+>GjfCHznglu%gU#I+1jWsxFqz>4x?)rQ_=7wKuA^wPj=9u+@{tjJx^`f z{Eo$OX;j%OVau3Zc%Q19z~g1?774kJDHrSm=aS@)+!T7;qgmsl$kMvpTI^F(++wCS zx4Xr(QYjc)dK?oIXZTGkyyRahYIIUlBUrgVMFlTs#2iYWX|w(50bwN|sFkr%>{Dg?^(5|e;Zc5> zXPlx17Bjwpl7`=uamF8tc68Z-)X%lp8p{uJwNtT>Tj{>XfjQ!}N)BW$Yp`~Fc*hR; zR%VEg3UBD6X|&fe3Oqd$wQ)BnGVEiQwMq)##fjLPoAqAetK+GxOd2=CAQD<84qv7B znf~tJN+H7NwIOSRVX;7wlGiqQ?Jt?X*u4~=!4{*j<&o6~^q9z2fMvOpD`$YfpSGyQ zu**7)F~;FhKOcVkHUldc6!(a0Z=4=15;SzU_+-lvbGkA?AO2_=^jiOH2%gXqVvo5v zV)*WnVpZ103`X$Y_v)5&{{a@Z1yb#qBTo<6@2$s-*l>(2rUpOj8qE`9upXHBHso9$ zDSD?fSFmo^*mVB5;Zc76*(6|2D`cL@8>^eIl3BSw!r%*TcQTe%eb2Z4#-AJZuJSqG3IUS0- ztF!6TceY9!^7hnMj{f~z;LAv1kNg`tdtZH>?33;X5_&%WH^gO&ocm8enPWZlto%g@ z1hLFn*-dS_m=D!>5$ZPa@8-euG#`a~aqB<8KKl^y=@vtX58C`&P|fcBA6sw$`J zQ-j}+`U!<#yoJlDj^$C{))rSWv>@3ba)}(a>5VF9ba=^GfBZ)K0qC+l8|<*AwoUv- z+yruo?iA!=R{9?R3Vm!ylrQ;SBDz+uBOi!mG6{WK`R(|a!@65>sek@@O}kAzEeU`c zP;agI1AE&d0o+haV;D3D3SGYv*|jo}~rGAiGplxc&m(^SA!SLBmI8^QHKe8|ChQZv|PE z3FOfBnA?<(Mc&#nnO%RJxbkpbH7Y-h%{D?1 z#_i_(LEwm3c;8Hj$?NyddYNN5(%MFNw#atRX$76!`1Jh1_iLY&QL znL}K4;&G2_3ieu=JFZzhz0dfBQO-jYgCt%~yMUI$(|9QTH_HA* zx|RDD=UY)E0a%I^1-?8y80*ER$CP=|N=6wMHGuVc#pda{9ibzwk{OD~b}|S;MpvhoYRKhNhj@((B?# z&>i){sV!!Z0Nj&r(E`P2a=OvodhjuC84m)l!MqxU5?_QN&%2=DC71OK;SURP=v2#| zf~aU!$!5N%E&#QP4~7*{y=TJe1=35}jBXWRn?uNu9W+jfby5{p(FR=NPPWHg(io|K zuMMww6QfuDJRI67XUg~61!S-DM|%k(3{m{?j9x6REa{$R3)1iFUvt$hLXQ|ilB7u6<+`@jpuK@ zbrD@OQc@YYb@A51qmHytfhFL!2{omAmV_{kBDF?o2dMl9K+hGJ2;4sWKKdpyuMzCp zmU5fs8M^c1ADnQ@(tzA+aC9ks>uY{FdhNQP(sr=nPGpq#-3Q})f?e-1#~K%v!RmkB zXzn*)0%VH|kjnNS98(kZxo4dnPRv=RkM+ztmE&r-yrU9B&lS_choY9(-uO-Jiz`;a z!G(9i!uN7qbQqWV0^u$O;pWZz6t9UfXKEzm=W+UYw0`GN#JXGltH00s3|gORcNJ}# zXa*y)(;vy~3ij*UMg+s<3{1l=&1QbkvK^PP@j#zO^?i?!&NFnM2p3!}(TUR$uc4$1 z_4(6s4xLOkKrEc++JA>%`uDxB%ZvGJB4@uzf2#eAvlC#mHoz#e>3sKF!dwgJ-&=;Q zf2wI_UERvIQJDRm3)Ahg7E!l&+`M#}-H+Z*Uzrp17c)(z>ZO^!)}pdl=$ort$qIb4 z(i#hFk;;f25strwvX==~IF9qFX5US1+oiKaTW`0WUaaxF-(E~jN(we@=^8uK+We?8 zBFui<>`-}O>x*ju$@S0l_mxk70X-bJ!*lj&5tmH|RRH)FrFSOlgCuQskRq>g?eeeg z2B91mv5aOt?!(+rg$N@599czM_gK(lk0D}%TFh~~;Ocwh{KK;w40QBf-Lv4u)iV&g ziJGc6OAc=O&q1pMzUu`FWT(===^~v&ZNyf2KJz=~{tsX$iLyTE`xyDJiT=gF(9#*+ zu46EEdiR#8o{t98*dPA;LSZr-rK}_kMUSS`>Dxdj0jMyDGxta6RaA^*!sS2^yMM%g zfS~|AK4(tdYbd*El88bsrnj_Aj(Ij2mu1mWs942nbR;>Y4CT3cTotNtmFI$lUlNVo zeJ^!i&b48^0B%ipbqIbS5~j_+Rw&ZMxaU5ov5@P>xm7a1pW|1gf*8Gxw0-NolXZIH zK7jbUxENlMN`{%4Yp@YYG%W5*ehx>bL_HhloJ=<= zJOh7Q?X2@q`T5L~QA!!_hqVBJmu$DRuyfuZ=%zVB_M@|zn>pNr09v{lu0H_h=BNr5 zDG^|9OX|{PL}y2d+ve26^U3n|6ky#V@+XSHG7h9< z$a^v+ysrE%Hm3A zrWTpgt8l*)5Dd_a$4fete`iq&db>4G&!9!#AOj}$_O7fS8bc%-fDq}DTdFdrQJSp4Pa5XNnJ1f zgF+bjvF7UE6j%IiTX?c{f2h_|hC$hGCyr8pQN*xeLuC5i?q@g4>s7K+W&FASHQIjJa&>r{F&a!t%E+)>|KU3ffY2-x-nkSKqzI4Zdzwv@!9R zwlJ9d4{+~Un0&Za-J{s`i+kG}E|sCuO(h{x>%FhxUAw|*dv+FmZ~H#!&0I;(`}uY0 z&((c6X!Iw>uPy17{flXVM2Dg^0sRFj1?7e?aWi7dlQ)9_8-8P`*QJFl`gB6%2d(1nU8(u{tXisD3ng9am-WSxTmvA6IIv|alSYB zn=^AU-u(RJ?Es;BrpGl^?1L|V?By4^v|6ZG49ggYTRh#n%iB#-B7%&g4)%?vTjjky z&n;G>W6EC-)@Q*0;z4)Fg1W6a6}=4weY!u@4x8@pMbC*9p1G=ZbcSxVmPcoCP54f* z-qC&<$~-G$;dB|4-23C%zeLx@nM_yTC4aw*!ucZ=o&Y6c>9t3%RZZ!UAvPlD~=q;XH2;OnD*eHMqWJZ<{cP0+5^AaldFxTusW7+j<@$U3eAxiXZ05~$x78LFGuIBBPc4Q3^c4Il9Tx_H_St`iD5SR<@ zz}Nm_%WfUKUvWT|969tK#nn>3&VM4?g7qFnrDbm@naD7@>AX-iwG&~>a|4xEGN3Fo zMab7<$O}kOH@+8k>^#50+`RU|whi{#sc3FV0%`P$>!g-=4b6W@iYc-@UA|Zx+!2+` zt&J2IfE+P&66=c5k8Hl0Wg8na-KD!V&uq@j)3wP+ zb4yGr6L18|L3MT&BZJV$UurF7O^oK6tTh`q(iQ0{kU%AG8zRrUO{l1wOW0U~fwKLe zWUg)#(q1gUM|mipD++6!9?v5dS;2atNm433sM}73I0M5awA6-#P{HdRlZ7~Yh~l=m zZ<)YsGQu~;T-XP|mebx5J*)49FZbde73m_1@Wj9=KfqpqUibjRfeh;;_^esSBtVgW z-Y5A=v19SHn}}xCKQu;h2v{stc$l(%@NWe0%6842(ae?e{SEjSWRh0qgbbdB0aDTu z$3zCWd|!2$)IP-17qz8IfP=_G+AO4_ZPpT4)`!zZ+(uM<;%DV6b2W0hDyOOE>^p8j zjK6;6>5JY>C%Vk+g$_J32Zy-H4TfA+4l;%7KY*^nm{g3dG7%ZemK8K{g&O!6PFyVC znEi@QDAyw5ZXzY&soli2@K;?-p@35%*aBPbt*|gB`1!WNC@H=LZDa+MDMMqDyU5A* zU;mICCC8GE_X&Hl3Iy_0nS_pl`|YF*`E39q$pkNax5^pX&0}&%yZX`U>r^-(n`05~HrriDKV; zbUvCB>fTx_9;sx1EF6JlD>*w9;mI290*w>Un!*hDY#7Kok zz+-~gues8@cWzoGhDRaat%;mVXt64>4^d%Zuu2u-f0|8gR#`P8@o_j4Ta;5&EHZwf zM!(LhF~8tnZHZJCKyDFJIOlm)|G(^j$R9B7iG?am`NjMo|x3{pI{SfHsVhcS%`^LfxG+hhA*%I)^Xpot0kuNyW3O z8?2mphtCIzgV4g>xFFHp5a=&WmOnK>u7n!yPmPDutvj38?RY;%eW;uK zh&1?vhHHL;(|8R_%~#AT@+}8=Xlcpf&(JLcJuzn1*zFdBf7E5Z(BbMUrw@61>TsKE zbFP;!ow2T+5)MW3`^w7On$KR#U^+9bycs;adg5?@=O6OotxLl<<|14O-KZDBfxGt~EJmuzP&3MA9 zb`~Fg#@17=tW-*G{-*2OD)NEyi(BYi74vP`p@fS2bEmVA)4SXAvrf#h%SYJ5BF1UC zs;l-pdm330;Jxi0R{{3XyUovB9&K#M#>kJ~)fvm*-aEt^2 zQS+V)`04X!#g}3zj6@t1;&^9qU}0Jeq`oNK5Rs>3mLejo*kST;_uqr!dKd9zBQzWK z4U(;c8w;^}=-T?&=;xosRiX`t`K@+{u;jC7iPXD#)XK$k?NlZoi1ID;b$WdLC&Aj+ z^H174Zi(LsmBlW@x|%h0@2c3x__q^uY_K-^Eu%J#Lb9S?jDOi5-cxzADzP5s0|hM5 z$Z|j$uUQ1wJvxY+yB$~6bN5kily3(ej7Q#t`tvc|hyl3K(zw*fpx{w#ve)Yh5MINH0?J=JvY10xhH7Yhmf7IxSDyj)0sCD8une3&_f z$dZf4nLG4&kL(k5RtE-pEAF&>nWTPa0FVuR(MI#NZp`xtZ4zH-`SlOF_LPDw4tv?< zpd^&oTITg45&{euV5iT_K<*Q^F>p5qH7~1gJ=~%~YhQ>f+tP&b6mkCctod(rP3ABf zF}G(TMpqbKu~^iq0=ulcuf5OA2L7bN2e&Fhy7n$O3^6uZblSF7XsagZ&Opj4Nm3&Z zzl{vKlis^JQ}kZDuuZfCZ22>28eo{9Eo3r46=Z3Bhv|B?iBMK3>jN%#fl!7lQ`ivU z!8@9j<+TQe$uishTlE|T09URrsjE+g54b?t*jecYO4Q|g+mw=yTX=ZOghVTl%e7sG z`09B(0BQb$iOEaS8(HysSpJUPx3nSP72=3_fsh^$fq;D}w-uli4fRfwbbioZXR^j+ zJ>&q-M*yNAVhJIVr6ch%)_*%SA0`00)q-^;ZHd4#*C-R_6dipD93EKr%Bt6>=y@eKyd*f6iPkgJTB z07ZfPm|vv5G>RaZ4EWp2O{q}7#t!&|IQ&wEvF38c9@hKl5#$XLHDV`w&ex>k6r$xC z@T4pI(X)C@qwWQ$DkV_^JuUloGujvVbam}?taPS$Gqv4>Mb@HvF+S6TAO@7EvW~9M zst;ZjiLrndvqBv&1J<;7?o5^x)=X2BXk8W_py;Wj?|ZNh=v}Qs6p6_~66Maq0y2o| zj@1|8wO{_-BdyyZBUQb`ay4kM6QGh6kyG$0`p$c{+Y)|Ip{iS>MYmkFeOa*dzekdU zfcS5R?l4BEL(izwcGy9JR+omgOJsD)zoU4n9!9|9KS03=lg{vJEuu;m$P}(cCq}MQ z0w`^RW}nqh!!`_MEBgC{8xF5dPs3bo>%_uw4b!LbjTR(joqkzvsiWz{h1N(xX|@;D@EFlsc+IYL!lBJy!J;1in0TKiQM?XtM3H*pE1t!FL-f& ze<*%QH1!@=A~*LbQm^Yy6ZX=--X|oyYUzbBGO zb$~)E{3l1&law=;Xb7b)@g zRIqveJLI=NsL;Z`Ygv2n74OPitRb%FYG{f6tB0j6nD|X6gO!LgP2EAE{wU;a&mz(b zE{*Bu%C>E;SA9EnDvEg^aQodAlQm)f(LWdGj9IT8UD~Oche>K_unGiC*$(&U$eQGz z={HM{UGVGwZp{UE^ToZ6=HLx+k4)_k@2o7prfn7fIZKmo zaxv`)8_?C^@KmREEfO6_FNS&17@SqI@SwWF! z-omRGHCa!0PYA@>Aj{I#3!ZCmAO&2-)w;pp_7fFVb8B8t1;!Z00-s@nx6PsW@3@|4 zUXMH(Y%3F2UjpYkV(MO|8`?GB&QD-~TeArq@xA|Bcx~i4d>KJzvkU=yCTUSfP7m^M zkdy5ss4OH^!$576xW;Z#nnEwjj8Q9W{ArQDL;yRhEdHXMb@BckGJtqI*NOYMxVYQO zlzxo2c&sV?AxDsew}l!RwJ$w>TnBEihL{7FTxYZ3u4uO$j)u>lg4FL4MHv82im_}< zlP!;K7ROKk97)AsBxlaRpDaH9Y>Z0iWs{(smcL1D!I}Y7Wt?9<#!`hF?;6H+%RBXD z;xO(!pAOiFW^~)V)2CnJDHmnBD>iC1Ws2s+FiZ|O~#QRMK=hm$6sxM$L5iHiP9@f~V! z7jG_wQ~iWwIH#rnI5-#F20}ssXA{;D+}BJ9#j|ohK@_QnY#cP1dp177RkU~FHXxR8 zvvS@<>t1{p$G^ z` zb8F^U=fjFd+R>aA&nn_Tg##5N2H3sM_QV~h&7TjA^aAb;@eRSLK0N3;sjp)csf~MN z5_!JJ0VGAibFWh|?uq^(2okGcvelrBUm-X66=sctHlg#u%qX?Gc z86KJT+X@BQu&jNQj)5y%fFM-TnP3kW=~sM+5QzHtc|f5$2++$i?6rNa)?p&PJG&gq z9t19FIAbc9p*N<;-BpCnm?$|$-TpIW@FV`}jVh%b<$*HfFkM`s_SP(nyzjrO&Gy(N zy5>@Ux>tzTnf3lm!;My7HohS7(H$=Fq`@S@V*!Phcoz(^dg*1)d7+_Sk1E%XG3|A#$3iIm=JSQjzD%JOk>uOcCl`!?}WehzaQ-29(z{aHS$jPDBXd>#I~ zrfph-vpDb45g~!kPiV7pH&Ni|H^$|DM9W6w6{dCY%yl z_dBU1L^BFXHKJuZ;mvIVp(EpJYm%|{to;g)<_)54%;m2oaEW2)M$c}bH z^FB`h{C?X3W4QL73m=M-%|lhPq609@voNVxM;B6dA2;2^ja{(g6=veXBn98<#>i7z z6%c&&)}_&QW>YCH9>wY%@5DvBVoGIpsy*cH;mRsd@n_mN(fsn6NVIP$=FK!-UbMW7 zQ#D5*d7~FID%3|8DS`WXNf6wPili^w$2Kw7eoUd&4OwF#ZRLQXQ|ddJ-(b4V=H?^j zra~9bLy}GtSfLr)*)%f35c|URoRPu%z#{b+_hL_^jyMUK_685JU&ks`1nVgH6p)qRAW0Rm|jwLs7KNl~!eAxY~#i?%=bI zuzn%^!RN7|#nR@vU+`DH{&T#s|U(MrP7EAtH97(Tr;qRVB{pa-3Ae=*ujk{s|LsrBoyHT zV>3-(9h>>xa{%%c2L4yapj2MaoDw_Fye8S4b%XOoPr_65zP%H`ipc?#?Btj#g0f(k zlkOE`or$0%rD+y$aS_>`T*W`dZj=atq(x2`lnJa1PXUc?1$uW!*ubRqr?TNwt%}jyhrMXCVB0>U6gN>Q3ATl}8n#)*E@v1VMOFPy zzT!A61S$yD)YIqZ8pHTykXVYNZAJ{1-p!gl*?Qg_EInxbe;_hqx0@b1syuFv2a z*HJx6HzXH8gn=opDiQ#rcUOnNm=B$7lT+iSC zN-X5ty&Um^>f8r|w_Uc)!aZgEEErK@Z_7;e+ji-ve3H+(4D=4TW_Il^W9dNHshO5m)NdG z#MdTEE6Dn;pV2+9ZoCmoUlTc93l{$wTCz3y9JHX_pz&$%VnEt?0mrrS=+FeU*0&%v zXLtwYhlrnE{_)6K{Z{M)rz5k4fvZ{i#F4xHoR^ME44i3F-<_A%e`c=_3J`36%R~wr z+zwo)(2))|?O}(lf7JEBq&Uc^8$bky5b_7r5t zIasEwe!JS&gXmQ~ed|S2k53rsZ6Z~dd4wjkTi+V4*RIt4yqMD3wFV&5KFhUG*o6NB z>|$piQ5CYTU*#sAZ*@RiCaqi}dP|p(U1P%;9v0{OGw(?lT4pC@(Y?p%1p`kO+ELuRk zw_}f($w}>t#do@=I*#PNyt$3~XqBTv?$rp!1N>|@GGSh#VD0t~FN5mBT82$yv8rsZ z3uqdg1N0%u3WkQv!F#?`tNTVA;#D_gDpsZK33jYk3q3>H)E+A#4H0md`RkoOg>Pm% zuLLcN8?>CMW*5cjMR?ynA?NsCzvI)aVFG;<>usSO+Jr&yaI)WE!(4J1icO7*)fF55R@4PAWl;)KPeDK^B~S$<02AT`qdC7r>}%j|GvY{9WSFUY<_qhA%>48tT)AiA>5x78V( zjNV4AH8GG212=jrcw*|qZSL8kBJ#9Dw__PY%k`eJ==2rX-iqS#aX+UN#5a?X9Hz#F z=U~bZ3@FIW3{4Cb>e=35EK0;}#4$5eH8;HiDfoBon1JscclM>0mZKs!B{`o);sY!1_MWafw$L8r0i zO{9WbwFMA1J3>bf{H;h|F0L+O6~q&vO{S|je@lt6XQwkiuNE8D;Nu1;crg%0h94P3 zQ7`w~Q2+;nonOF5PpZ-%m_ux4-*>*N{SX0Q0ZBxnXx z;>yY=5<5shS@yXK_yH?i5AB1O-RXs5nM;LZxlA)E$dI;l1tR@9^%I6VT3JUh59v+P z_zr)WNn5la6)v&jtuYL_1$i;V>7wbY#xSu`p%4m^1tE?uqi{pqbY8^=d0ZG41z9M; zE+{sv)*U`P15f7(d{eo8uzd{JQgoCWIC@?3^~}lr0F+wR@hG)u^gjUqni%YFs;KX~ zTiH{GTGiB-n~7k5=Wp)nW+=*xuBzOXSD4K|+bY+HGgObr>(8cEW-eG^-?b*z#rK&8 zdNGz?#7rKtVH5r~Z6tB%-B6^4E&Sz7Xa!==TV1!mc>H8_6A||2l3MxT)sq~99=(|x z^1@AZMLLO|tuhs{f`KO*JAVfE%aR*w!RrKdqSv#wRxuU&^tHo>k^6JZbL>T;mzlGz ztOw1uH()s`gYyF$$o+|{`(JQk1Xwq@@&|f-eDjfn&*W?Uv!)b7u~r!Ro;G|Jy?$>g z{9Xks9~QfMvGq;jUR+_-oTuXD)sE7he5-65N_CZ^6lRS6{gK_)pZe^RwddR*Kqx2usxMT~cEl)8VtDOCG}fo$z9_ zA>Z}C;HyH#70>pbHTwG;{j0Qx?%m_s{_^KoR3u9v-hq{|@#x?oRX<18Ug2X~OkQ8p zhCK>Egx9KbpKhK8$5`Px)SLwrtYE}S@vQ%^h1?aI~Z1(}BJj5?^D=#Lh5 z=e@1>$3N=9?@9^^-Y}gDMAsyw-{4?wn@V}swZ()`|2g?cL_K@Zl*!8;0ip=8gx8+8 zeV}n?+src|>^vbO)ZTMHoI#j z_|3_t60apXRSe{+FS&_WRDpB7%y@hAYF)xMG$H3Cx;F2w-?`$l0j?@|2xjHex3FD0 z6~G7ot!%lSz5$@}RC-HQFj36M;OklZ=#Rz$L#&=?&qoonFpu4RIvLz^J!vpCyv0n{G8U0;mHwwHymY24 z{fE`c@;BOE$U!zG1QMrf&wIe-iAnOPI$!$y(ZBkcgHLJ0#FrPs0UU#ue@(JwF_`Eo z{wQb6&RJLpyWn%jOc zwOuLQ^60m7u?}h_G9&X+IJ=^SurMMhe)JVHi)(3GZjgMS=OJCRBTn%=88kU(}?gH8bsT$0Q-*0NWi z)&fHxa@qgHg$_}eNP2F`KGll&6soEAu6KPjE@5s?2DMBA(5{xvUucCQj2Xz^eVGMB zMeueOD0539*S7tlqo)HPsZiDODKyq2IKZJ%v%O9*I4*e+i{NFkkPp+k@NPAX<582% zi;}QBZ9jijMT{c7M1Y1p z3@)t=8RCQMnLxqtca{IPTK*-pVhAtcXYghwXv~A3_kO{p7aO0}pzHr6no0;6cQBl+ zUw^NqAO}@hbpNVEb2%OtuvF*v(E09rCh%|doY#_%)kSYaH#yens@jvL@5K%dM7|8B zq`$t#6ST~_Be+;gKYwPEiA$|NWjx+On3!Vt8teU9zsuMRodVCESDh;6nKprND`;^T zN!>0tjf`ofecy|)n1~nJ(l~Fi%cor^+7eci60LhZTLa>E@lEQo7_4U6B;pi2De~4C zkZk@Gzw8rzVS3eZ$Xp#xEC^xd)hAb>ULxJ;UIxnkP9td zTA+vd zg?NrqSbgzkSB}WTi$CL&ihWgfU2Gu>=VoL0gWTRDy~03`$_(4Gn={Y1IsmgL!=I?Eq6F z|4V&eYjSeePCpb}K8Sp0y-Bj+NopbKYEI`pw4D4NR;`Vl*ZdCCkj<>ga}4n})j z&>rn7va$Z+82r8ENc?^~B1G)yd0KEF`qR<8tFo)V)`Rfqaelk^x{2m8m0r5;qPu18 zx2q3baD{4>g}RKL7LWa_%?km|;!x%?^$kOl(!qJovAuu2*(E(mlCiqj2t-J~%@Bmg z#o`9Xrn0gxBfg6I3;5Z?6cTU;8pdud|)1qFZtij7=m1VD?>j)e^zD0kUz?wD(l zDoDzJyv+To?Z8ydc(nj*H(h6)Zl=4Ib#Ue{mNVb5euee>Se2S+1ik{7k+wXu`8}co~)dgLb9NfIy$=A^VMOe3geBR~H0sH&uDuJqR#5`pCjzp0=P(pJ0+6ThFtph`S ztkb~d^_7e3ojrs{&r?J{{e1V-n06CtR>C9R$FHq}WG{~OP?DCOe;aD6k8~>r~m-tAygg?8@(jgi44Ltc?KI@7Do_>!<8GARVp* zK;|u7=IpYfGZ%a4iPSA2UXY-_H^xv7k$d0-SkHJojf zfC@Nh^9}h}g}KOi5(KWNSiYe=)jH?Z9c!(Nz&6FDnK8hiKG|}1y6LaIOFI)(Fp_$U z9~{Xyv_Qx)kf9jkBVV34@f`YM<{&b=06}1rWtGK`v*Kb-xk0j|Yvg zKA4Q25bjUNVEICd5&{^B+xIpP#ArZko7uWi*Cq$o+_WV9$7I>g=L(0=7rjXgS@7Ce zcXvGkzZRo|q}2;+DeE!tK5caU(6Ge9@FgAK7Y_8=C|JXto@=P7CDAWensx}D8mi(V-H zu<@p*UYp64fZ^@o@1$}RV%a$@2SE?NI*{mGJ>|2u*dHx!q%SqrHjlN$sV68h-zC>1 z&VU>7Mv{vHX0M`|LMvJb$Rek50}SfL-eyIN|A*7q%<7_`X#)ylqIHPsP>0bg2)a{= z(1diw$q%Iy8f?9|qWcXbE1Iv94lnmoE_lm|z+b5N;lmJaMyyv-_`}QI?u2Rbg@{ca zsc&mXTUBIP>*sd|d~DkZm^Vs5-Qb5lc@>_mpo6Bg*~LYy_N`f|J;-0sP4f6$xxYX7lAibb5rO0sRDw0p4*kPd@HEH~ zYn0vbe&}wmIcC0P*oj3^hkvoI`&UbEx=xDhv&jbty-v9gouTc2>g;<+Y!}yGFGp_R zci1sd>v#5k?Q2=#oLiYZT6V2Hh$pAF@^b`Lx*a3hMnXzQ2Pn7t%lUFOqE4i{Ts%hc z(AwRo3oHMw|6Ar+X{|TN%{aq(yQrkWC7{W7;EXbYqFgz#JU8^P!XMk({s*~0M!&v9 z^f1YF2@d-D`1|po2eQlzWo>sod#?l^qEk-oom7O=UrRjy012c~dDuowZ@ya{0=@U? z1NIr{wY<*}T8g+uLL2DpH`eLrvQlTZI5>MLo9=q>La47}>vM6b?N<`t06h|p)+s|= zkmK?&h!dL<>Mo{rI5eLG4vk_T2j0KJ+x7z*1Mf_!4PpHs-%wz~SXI3`-Q_>{zAIF~ zitM|){{Vk>9cTa~{U-a9No2F*fDS}Eq5*-@r=x!lWC=;>GGH+p{F4&e;@SxWdmJQfl00Ycn1Zg)w2wGg@38dvVZlX3g>XpG(9Q!?@s1d2rB8bps0$5C zPmo(!0%La~Js!oBigcusLP(B1TehhQaPpuxjt^(L6)I?|Kre_IRX<*b`~|5K*LEW| ztyQ#f{@(7l)_D4$pFl#k1P9O{C7y+?kjCZUNu^@WVk%TJ5AG)nTcV^AldNt@5Ehz1 z8ZXGy6sZagsX>Zg@G;PHz5t-ijTqsP46qRaPf8SsvKk5O4y81ggfI$;AmR9XepVlz z5h@#A89{z)eeU>X0(xxG-NsJo51w5|2+4Or{{Z9t&u(%6zKHD$Hzid%sw&jbG^ks| z`~LtZxq!;(Rlfy|j9q;lPIy+u3M8+g1iJVAeMhqcmo<&|{(ty$!FBp7DQGrjT%A4_ z!c8fPN@;6vVSS(Us;Wxk+wMeD6++(|MHe8NgzOXRs!S0EghfKJto7}u z*}$CjS;4Qo#T}jNB=Zn(E-&zDcmTj;Nlyecrh-*Y=;U`dx>;Rm z=w_hw7iGJZTOR?K3U^mC8g|LwXO|KhEY!%Jh?TXB0*G*eJo@t(@>QH;($)R z-~B!fM38JzA}38_0*R*So-lUX_Tr+yJ&Flt`4C75uwsR}3h+guYsQ467zuL?Kn@dv zm<=FyAtMb?<2Qp zQ&bRDVSToNLd6C}3lpN4pacTY07-~*n3X`70KtKMo8Tp)kXdLMzQj~Yr6}1GsHB)T zU&#Tapw-9H*!BR@oiJi93)VK1DwG6JL;z_GY5^N%630dbO$IPt(RiSME7~O2)1W?# z)oQ2)j4(xwAoa;_Lj{7W3W&0eI!p!{-qdheDl7)m5Ld(ygF)6Q0>j~SVw!j!>Pig) z8gx%Ub$kF^O{15iM@3AsNxDj`wRuTI=`$Dv=uZELdp%+IXgmvcy&}5 zcdu*%n$n>t_$fRdBD?HGkb-tlZnC?OrK}*Ugy04N;gr;XB%ri$OsJz5!F`DuPSfx{ z(N;-(b6^AtAR(#fWe{D``3k@Ztz3{Aq$jXW9y#0?NS+vnBn%uL90RKpXnhPnLAAwS z4M7RTi=jmJq8MX(7aTmj!wVpbfW|~j!a}LEQXmlkh*242@_`dXYEcNUUd2?ezbiyk z#TufmeN2v~mcT98zCrzHru*VrJ{VXgVfikQiSOU|RkH>HB;z&|d8z3w@IoMnM3fh% zUcDzX*MTSYK7_*G_Dk*<>Q;sy$8Dej;dy?FqtG4|=_iPcv>dbn z>K&RpX5!Bks4Z1j2j{+g_GK;sMK;J0tuEZY$z$(ABnsBb#h=8$VB?1yCl}n^s%rdS ze>ct2#|e%8`YGu2f1ywT78%HHa?f+NyD?ZYLjDKgKmP!Jcqt#0=7;zFp6BgFTC^*! zYbM!%xvg)2K`IcuKGqLh&gSomgfJJcH(T;I5?|vSYg7&9MGt<6e3|5G!dh&`AG@4% zC8YAjXn}*@ecn$uA}v?}%16}pWa;b6jVw~V#k}igtPOhjD9)@*H+OHsq|N;CLLiAj z3!c)8&qc;BMIVBYvz^artMA!-`T%7p{r+@%UNUilD8SNxI=SECWZIO=7wbmgdfrCQ z&O~(REF2pD06}E^e{Ap&Mv&BJqFCebX04S>bjj3U>EFl`VfcX|1y%<|Hx&=xw_c*2 z#%lVe_*#)4L!4gY6aN5H!x8F+u=XCdHJFmLR8K~zB8OV&%7V=!HiaSVD%dwx z$JovXB7mbb$J22x!p!^RxX|2pEZ*xsG5b8jbO~M(K~wQ#2O!9-(G97IPy(57MZnnC zqXMl}hG|U7?nlMJ-jO1S?M*oLPh9XZfMqYY`n9KE8~PZx5fPxhPA{eS zLgJp(slQHG%3zTYY0E3h4^h6g@PONh1uSe@kRDxUG{nMQf^Z@X5%7i)lqo@2itPflZJ?fHbqD}rK|$RJe8D!O z0~7#6W&%}3LL(|&JOn5Xf>i*z`#vbplLdp0s3MI|T)rWibSO&&Yo$@G@fcVd`fnW^ z;K4$m5CI0!v0xtUC>;Ty3J!t*rMRmolT}6Vniug5+8L~{2+FPGiVzf97<$nH5hRiX zh@pE{htUcoZBlqb3ZUi>q~IwOn8J+X$r308R)DWnL=b!#!BnARJ#K&+?P7PyK>h_0 zTJ51U#v~v>1XK+4djh`QwD)V}g;<(uA}%u2dA_BOt%MVZK&bfXx7$}?^3+B=hz%KU z4*0H=fC{y4D7s*3pa}S=i2@+F>LJT(XQtq}VBY(GF%s^6XTKFLlZYs<;)7M(7g!QN zG;);GOoeUSZ-D-xrDzj3(Qg-h`NKx4L}7=cH8>v0A@R_l0tgDA;8FBn2*FaivC}vV zlsAqKn+}v!zUzm-!maaxTtR5Nt#snvuFZ^8zPa^J!z@pbK2HSjlfUn4+PeDvTjh#~ zQ=A$|{{RT&{%N~w$i$Q5zj+t_&q2BE^_UjAr3#$)v49Om&R<6&{x3RvXN_V+HF}{X-|MM= zuZqwJ3%vNu7zzG*KxkQv2EW1VCKElK@W#?YNE*aYd-wdw;arXBBLKjfCvw+6JeOJm zzrFhk<=!7gKnzL*7+_&kZ%|qDM+EI_p#ag&`uK&mIwO@~M&X^v>2dy$u}5xhBP7Uw z_nmK*N2Jsz9$Cej;7Fj@*iz zpV0Ka(uGDKkyL}NwY;R{0F!<_GBWxMv(rd~qEP6#{fY2VKzt^?UeaeMNPk}g06#ng zMWSk-R^4gaAGY`s9}jb%ChGl4p%Q4BrNS*_vp)=|tY?U>A`$g>-CNPR2vCKKqwYpi zHAdDh{fppDY~tIfxTtkpmFs+ZLl;nZ>41!2RAsRPVxz{uae{yf8qv6KhoyScmgn>5 zu7AD=ARt3mgyz>u;=Zi%SOSOBqsLSvfvqj_jB*ATv2BL2VV>SNdH|G&(x-L9KPp4U zu!}hmD%sc6hc@Bm!z@J@Y%OQ4n@9%u(#nR)KkwW>ufBL#0Al)m{u`gZ&qx>~1VuRf zW_mNf=ZJ(>dPCPXcm6Ezf*7C+qq-O5;&FrCS}ADeZUTGax29i?ZZ-d+$6V z3VSzOVSceK=j-AESPCN}wD*2D)*aq;{{Y^EcP-9vy7(hnVd~erG>&t(J>mseg(bi`DPPVh=vAp)aFAd*uBN}}~Nn5K{*l8${HGAi3c+<53h zX-W0*)vaI!Drqhg7$C>M0sxVDbWjDv9|e3kItC~~K~QKbMo_N?h`|OSrI83Y(yz3e zy#}%>fDk7IYB=za0r3(jMFc6w2_8Zq+IbeDCJcfAAwhI46-`Gh0c=pHB%~=IrYIs; zMplb~_|1om1_|1eq>6PXQcLWJ*2Gb@2WqA)jL|g~Xn>6vK|>Hn^hhvPIuttBjaY!D zDAi6RpvWdM2QL;4Q4S3`Diye*APrQ_C=_$U%?$=kHlvo-0$L*YGJ=H!(uIPoUM0|N zL17I+Eonf&A)3G~G(f3O5-1iZ)h3h84vMC%3BX~2u-c>J0+No_rBkFpVw?hpkbnUK zjY=vJEC30BLcyULC`Cb0fK^VN;i4QE0fUGq@KqQMZ!AJoXbbj1_&gM}N)5z~JtENz zcr84)N>Gx11*nU*V_SjZ&H@8OApjDHD+@?a zXDSsa16K@^*H~ySgi{Np9Cbk}6`JgmD?9{S8!Gf2qwOY(<(8@;u~Qz}@nfH3X>ywC<_`A|t0O>nUkicrBn%6CBzpJ}jK70mD)RI`vJ=A5hA=={pS( zLOn4d62R9_8?6l=i1-x5KnwhMQ?5mBUGn6B1_V$68)J9#Gr^Qn)LRx{4U3m%{{T9I zEH%Npw|FbT9zI235cQoBODDBDcWHq;cwQ;%Jz@U<*M{2^A&ZY^95?%uJSG-}`s=@4 zBHo{`j;K)Rd6uCtUgH^#_V+Xq3rsr160C=hYKgBy|thGt2;67Wxu2KducQ#`q|xO7r9en8V@!0DV3J z09r+9-~32BvUD@diDP?1=LO$;_i&P6LRD4ikbO9-eKz@NLYy1VqAENeU^b_Uwkhc8 zZ{L_Fcm4B&TS<5c{{YRdR{R<*DiIJuqj~E$t-s$ex*gUreV>0T>)%i?P?bE%qDR&U zH`T<23%9lR}6(0-@5E zq=m;-0R?KXTv}gNNeR9Q$OZF%d`39h1QC=RAe-hx!isLAXFaeyFjsAk?)8kA_oYVTf6?}t9*5iq3>Lus`08> z>>|%_JI%&^B+uuyim*b5O(xwJ=dC<|A*w2}w|1_XyYZ;nXsQppi;)8-Wz0Mup;C)N z$49E~Z*C26kufeAIQ#j|jq!9UQV0u3T-bcg(eYtH5YnZafdHNQt%%xK%AepT@^AkD zL;|e9Z>`u}I-Sq;Qu44;EDb87c^-NMQ(Ht$(msTG%&Q|}Bh|i6iKqh<-1$#42m*qT zmW`=9aP^0VLRTxJ)sL^5pf9o%fHh;s`Vo}=ezcmONI^NC`+(V$@svu;>I$PlcMTI; zmLVcr00I~lRgMd+4Ps`GNcGwaPR0{!JL7L)qZP{&6QR_f+9SAoj6|q^DjKE()qqd% z1nX%W>KjG)6v$KreQJg>#eJ@)j*TK>|E8Q6(T8G#CObYH1$< zWTwCBod%K`V8Zwa0SZ)6fF}`AZcw2-r9-!CNdr`B`-<0~mbnw6h_F|r^cAG`t&A|D zu@MFq29mz&NkOeD0Rhus^`vW}wE(ogsth#^1Sh(-Py#vyhtj5yCWcUtgkvI+eTU>j zNMBwC5V``iC@%;Aa5Hnla2i3lbxe#nBY;5hV9;n37MN9~MTiV)9;gCPQ4s-R;8F+# z=tV4(k0UT(sE9$B!g`yBVkbo4GPhw@PMhAydpoP(5YY{YmNC-&y z7D_OR#1{I$F}4{;#RApuNzeff(#UkV;+O-00C2Pw%!nX&1Kb7-dWOEC9WxM+5EdSV zS{4CYDprRD=W%HlDk?g+Imi3pU=v6IG=`ZJUxmIups`&bM#7)3$M`6aFj>uA*!}&9 zD?KK3BY)Knf6^w4>xfRQQb~-@Z+(AXU~;f>b60Es0ONo5MfYe!0e=m+4sSIN6iiLu zuIK#!0Qg@VKFAKHFT%HP{+oz_^c4|Yp%|7s@haFNPJWVmfH~P$c!qiyfD_;@vwnZr zIX(;+DtnB5w}0)F-Z5~IcTh>_$8?<7=6I#OBk}t`hFZ6Hzyx$otjkIDD_@rV=%Kl%Rv6Wf#dJdj670!GsW&-pJy1xKUN&X~t3 zz~l0;RRt0L`&8Z+hu>np+@8T1ms7fkQ#R;`VO@^c z;!Bb<@YNC4fE9rB3BR@c43gmc$4SrYC0j<7d*Cn@ir@{$v+XzU&`Y5Yub_nNue8j^ zzHT(C80{C~zO1Z$aZLp`8=-7`fxL0Ai^JiYQTAAFAN;5ffI0w#J-h3gBA0rFA20+q ziyX0gdNX@*=ahO6ziMEfq$%uM0eC|6sY^i(Gy$<3q|XsFtwIb0Ac-Tgn85OfR-j0s z*6l19SvY(|O)1b;u#56~kED}>Ke_V-WuL72cvdAx^Wh!t6tNye@Z3ugx>Vl#DZR=h z0&bMwSJDXE`h!rQJQJBut7rW;k2VWKVl!7RFeCcvbdV=!*NN$G`k!5D707_F$j<`}m$c0t^6S z7zr2tpV2^liJPZkaD8rG${K!Tt6u!w}LMHaczC6NCB90uS}2CGa-AN}rd z8e2iObx6Pxcl|rzhV+9VP(mer8UFyjFo_IizR~H{hvUhN2EpxB?D!CGecN2Js-D;w zIzayb2baha+imuBAZ+6Pe|&7mK-JJ8?=btB5S0xoH`IjWGjFqMvef(pg5KVbPGR^G z7)}!dSp3Fi!5Mr>(Lk`A5R0D%wr_?PHd2&^EXLOx%t)%Srhxk&NFo>!erA|}5Q%F< zB_W10ntVDM6Nv{Qf`HPF@KeIT08>g)P}<6RhC0@|Dyce(4#!@`B~wePq2xirFi?)_ zfv6D$t;0HqtV3odr1~{Pb4??j7i0bJ_7=#PaT}2gg z`bFZWX-cs4My=6ph+@_t4)h72P9UdAN$>*$hXsUQXc`bHfM~=aO1;z^F<|z9Tsu%I z#8O9VYLp65Rm22+)_|1Z_Cr@xD->1QJ%@TS6cjK5*o_xfs744ZP+?Y$LS+K%aA2juE26ao~s zH5NPyP{G5x6!^SbIl%D&aayE>FArhXD0>H4iiM3UyO@auN+{x#2X`M=N$>r%@_qznZ0RI5 zA^!juQ3K`JfjQ zh|>@8JG_59CrNHcQ+T{e9sSq95_&NFi67{iSM-XSGzqE^>w>pk=KQt^rwpPFEHyzU z(|!Jo5LMuv5MTyG{{SO80R_!6j&S(xe|^4s0@w?}ksrJvuK}JVD4s!)7Z_*Ls2w#C zM-_~uR)(yS!{@%B2m)Ye?F2t}Y5t&b00y-_P&)Jf0DI$$A)%6sT>k)1mV5KwWk+L1 z7`fKFv4JK6loPhde}T+;m8X>o${+(tA8Nag@!uC{7gwFnTqaI*U?@XEDzmjU`;LFZ zJeYu^bW&C*5h?5d@CmwK)3U-ovE##_T7cs{z_bhbzP-9n4-tb6j5IjlFW?XZOHnft zllEZ2$B8-NA`2VU_5kn5jPDPAAe1W723R$NW=2?B#zIl6h6C=&w?8ZTgsHZOJYmhG zn6r zkYf}6iNC#L_j}-i7T@42Kc5@5ZFL`bW zz47jIfN1cw{#o;Q&CL`=;N6v5Knqa0u!YHY0dFl4I&#sdj_3M$O_jt76x*;rzg7GhlaeY1g7&k~jQGZJ zg(+***2?FwJ@I`F7|Lywp+Rk+?L!+|Mh&~EXmN3jk!P; zFf&wZNDPrZqQLa9p_5W`FPexcNeWbBtyUNpjb!HS<1Gzy{{M?_}& zOGRQ8;Zkb;a53tl@dA~a=}A*5g$`)6Vj>_!$Z3oS5D!6m2tg170EKQ4OH$PdRZj>V z1qz`+jRufHdeP$af(NkRlpL_=7!(Ik)Iq>zi-P5%_Cx~1M!I`xIP5|v26->!< z5hw^qHDl0p__>i%_!SKmV1w|Z5|&OdFiC_IfG@U7NgXxlLimu<#ytHG$*c)Nr#wWj zZs@=pRXs3?Bh?D(aTG@NPCE4(z9mW&f)%LR05U42Py#S`86;M#@8;bB@TessV~8NV z=CJn%DWD0`&?UU|?w`LD1dt>YkqZ3YEqZv^QIw-2pUk|W`|r!e1L9@MbGx+Od0_%I z0n=`J3HDE49Zu$;HkfdkbkA?HwSFOl8=rsgf8kMVrgfP$qOwd7?kO=-Os(i3KtaC=^l^Dxk`urM4>>PpYYy3?&juyfWXpU?OD zTo;t(SQXlg^q2ntk94pNy5&`ULzb7|yuKccVtUaPR#!eB$!~=b7#6dpDf5_=!>z6a zC+Rey_TBb&OrBg9og~@=vbKIypM@^C_^;38!T$i;;q9fLSLGIc^!*-}HaNzEVZNgLt(k=})|n8JOuq1BDgn8>ZKw$%c$GtYr=; zVoE_r%ZO4_)gAp&f);g~RCTGT(3*S?^=dQMgs3nSQ$mxXGF?jMv+!u)f0|A0kYewRN8kjLDI{S&RF< zr}_Nf@p|n-4!U};Q#9&rlrMlOcy5F~Do>lukG~0yr=Ze{?NRB*Q4dlP2QTdk@w|~B zNN5*;R)!YDsN`@xpXdqo@&xvRExM9^Z<09S2pTASXZ_}Lz$hdkPgB#Ux&6PXPFe{C zb6hX>dQ3)ndQ<}uWdsdsk0;MZiGUH;P`DMc6W@SJx1uaK-&bAiR(Ih@!BJ-S;$Qvs z<0NxGt)As(`#&KDAh4nE);vd_%iu=-h9Um|r8%YF(6&p0gYr+a@%78&qME50@H5}i zx%wxHmbnLH5<`@T)&Bs`Dku`h5F&{I{4~UO#-L;+D?zFuNDtVg@j#0(jYy2>{5ax! zDr7zZ%A)Qwhp*v?8m$CHlzV{BLoE2-c0ryX%4E00*W2S)3Mv;!7(EHYb8X=gQ+r!tXbd5MKwran zL0TH>icA2W5z`iU@&G zGKvf+;wDfDR|+DeVp2sK_SdijsUbm`8Put$6DqjE&@V`MfFNpul`zpr)6|0Y4T=R- zhon+l>wmh+^>wfclPf}|5QfwbDzTN;Jh&iWoelQ3J5NNF!QpzZ(XLT0jG>dxr+2RwjT9 z0t|s!6-@}`RMF26D=Do24&D;K04J-6L7}f|15KoT2cU|@G!f1rIDs4x>~gUcsCoyY zLbijHLwpD}kzp<%k?sL%i*WGp;%d;N2cRyB+Sn`^R7FFJoZvPvb&aVDrNa9`h`@ef zWgGxMP`Db{ufx!uCgk=oEv6m~-t^GGBS

    wz26`ARzVTb$GPSo`3>JN_zzIdXd|H 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

    dt65VrwDo!a0M{|`0^}$YY#yHA>o2=J z6pon?j|$o;)8kAZ$N)0mrO$jNf6{E^wdj>WTiKDA)4{sJp;<_@fWb8)Y6t*Usiy>O zEJF#ZClFIk_CZ24TY@l$m++n+oFwFIR(H@?rw&-chxN~Cu;p*Z(% z6*1aKSghK$uZbuSnJ|p_rCIH+&A=NwSn_9Q(x>yc!l$7S%NNM~eVpgTQ5H5g+KJxK z$b0v`F?E9L^FP*;1RKX6DI(&v7~NCcKhJny0~1qlTZGVfv(R5;4=Ro`+i6a9F+dSX zu0f?3WrVA9+n3(_@&v0IOiMHZT?^{_9|uU8vcLyhlTW5FoN2ZM*z_@ww~9=e<}87u0%sUgcyWwcOwJ${LOb_@hE9z%ZeJ4A^@Bm+Kz`&uw)G?bN~pkcx5O?bxPkP-bFfg?0R0k~EWZ;cRIATE!B zN9}CpvBVOpE~5}61d*5?9XRl4xD^+niKh69ctlXx2~IM6Hky$ER*NY6snhJQBdb=7*G-7ofk z^rV6W)TMCU{$}Cu@yUQ-fXf=6iP&y^(8=G-44%GcX?kj!0o~mZ{{Y*DZ;iWdbs2tV z?|-D&@`y!qa6j+)bFYiSPz8;)%R}9V_sW4Kq5*|s-CWFpU3{`Vf-&Ev?#C-Yf#W*T z8$%gA`h83IIO9+)F|tZZSJARw!kEKRfPkL;7x~}N3=pLBiv*0hX{W$wxn%%oKP!0e z!*KGb#U_5$Y*}UJGsDrX+mXONeBRF!2UxMPd+bTP;qTFOOk+m={{Z8&JxHnnG0YTRf8>cr zL_hI+Rcij@cg6S#7PfvLe-BjmqN4yIKLAXD>(}q-Z?}8D?;W`}{joNIz&)w2BTBQ} zZdWj%qv*_bUcS8m;zSv#zM z*p7HhZ6$RS{e1!yMUaH#=4g&UTBi1azA&Z$ih#mV3Q#C1O3)yFC4g}Pg(p`Jt85Y= zX;rESt58?RWYmTWP~?L<0Hx}lF(rhGEg>|ZX_hB|DWz7`VgbYs4OKt`I0IB537{u{ zl^8fSUIH4B9w7vhPSliiObAL5q-7}Kv?xN3rRlT)o)l87q)q{ZjZ+g<2EGMu0gbBu zB{ga2uslL5-&T>JH$C-a?>t5)9ymCt&6w0|yY?Z%Lxyj^@Uz!}b4tt51#QovGU>C; z#l@MtPhsp8`|9__2)^)hqJ5sd9^&VR#pV1?WIYqT%wTxLf>jf5Xm`R1C><@nt_f0NixV!IvzR(kiJkH3s3ngF0U<&?eO>Hh#r=K=ODHV~EO z1`+x?c!yQR({q4z>Yq97JW2szO43VgO^N9Y{qgiPxHJLZS=MtPN1g&R3g!4xV>!#* zD|{%$=m(P12)@7P%K7L9Ers=g*ZlbJ1V}NUK=d=|N&S>5e7|ncnvo<__kCcfZ-i7Y z!1S577`(jy07?j9?(s?|qwV(&o@S!3;u%Z49fFmndpz}0$EVQc=BYRVK8wTQQfVU( z#SCY7cq4KXC`sycvTuE)C}YFb^a{31#QNWC@K{xi8c6L9{wHC;@IoV}llC0V{%iN1 zG@}70L)$)si~j(QE&}CPZms4vf6V+t0|=#catE-!r|&!9GZ=9?nN(D6AKf<^zRC90 zFS7A|Ir^R{P(89_)$~a{{C!}mDVnfbUeUKw-Wa@8En{(#0a!1)zi-48m>mQzPX5&| zDthn~8eqRn(vgkn@8F8>NTr-%@2O6l&&rPaY>ki_E#2-JX%odbCcvhjb?NxSeOaUn z7Iov-M9OOkW={fJ8GBMnHxQ3DXU_zhQ0OmFQ>-4`ry9db79bB$D%`x`v=CSl7a7|H z(-bx)1WMTOEP{oGsn#O)n0zU4MJ%sMcTtuEB zBT~vVoia)yA^~V{peL>?{{TNTAh&1`*5DSb%hJM)DPCSA;~1w(wKC~(%-bRCBzP-iCENRR*X$`qM3{P4JxAm#?D4V#AnJV_{yKlP!-x$d)LF6a zkgHDF=drLF1lECl^w)Bv@m)fKf_Og5```WX1k$QL+i)&P=(au>7GRKAqtPihkjH|T zHSz@;~=~VUcGRV2k%<%m!MyM$tS$$E`PJihzJ-O310sI z{%U&jClj|}(pir)^VS|z!$q9qR$NXKEt{``ttwYS53oP`xjZQjs8miq{Ta6L@1w>M z3YXLDVurfl<-PC~6`OVSIzF7I2Zs5+wyV?p>ma_z4pi_1hfxwGyVtw-a#$cHum)?S z*Z%9;P{%*@Sng-#8WIhU#4te|*E{R`;UE|XMQ)_dYhOjaGJOrzWux`M$GOh| zGoa~X^VWI`^TIiaN)o1Obsuy5swG7)=vO&^{I_$+C}1+658BJGs9!|gq7}wVdCcbz zkSIYVbv6__9vbcu!^ast3N)Y$QQ*|3H=YU2FzR%e0FaUn6D{*1u(eb%6}Ofruj&{E z8V7C}7M5_D@kWv;NjPAc1F6zk@DM;Q6riAiI8%^eF?f0k)D$ED zV4EDEnr3 zWjJwnO_iUbU+}&Z>Q_B9wSZ2D(x+RI3do@a`|gU*!cm})nmR^_ssXw?Ne|OGTBx)? zTbUO#IH?-vi%LL;2)SZUjOLH5Tmm@0g+j$W{{UAK zLY#(Dsmd;;X{Ar4g>+d`abPjj4$WBwmV_`9+{QpCT6`csV;U-`gRYe$v3yyQfdbZs zlJxM1jVGC|HPclmK`67@oA1R`S%5&@JAXjWKnodyj1v5}H}${p`{N7D%WQ+S>I2Jt z?}3bo48t||`1;MV&}bmR9sRzaTn>}f9WV)sAD~{)9NQ3Z@Fq5ZrkE!L^}lwG`9Q&N zxd=4o~54|$PKl!GJiik3VfCZ;-PL_c9{IB>|@cXm-H{Jcjklu z`jH7yg&EmM>L1SnfJOlq5TNe!cYah)1>YJv;P3jc!MA# zM(;jJJI?(S1KTOa-}#rLk++^8LaM2ZRPI&%^|;)Q6B_CnIUoK%CfAje{L*wEsSyQGl=st;n}X44P&lfeqV2AXQ$;dlQ4_Ckt+x4wyUmcF|1kO4L1 zS&L9WFzfw^;3&`o0ufRtqyGRm%n|WG;3ky+0A$h61>&uHE>3bM-RyiJu%r>|gD#ht z2KY3FqWr2c0LyB8_k0lgTporx3GRRKJW^Rg$Fvf$m1n+lokrrOlze>>}(^VtIdUJf1fk3aY) zg(~E(ufDDu9S}E@#*Bo%j|Be!?=j{*@rugn_(r{P73j^l%U}d6X;U-XLZ3eg$T}&S?PA^cvHksL z{^w5sExn-!);;@i``|(Tn&?m5yYc@3b@3!tLTP&#ufKfBobnZY@MaxHlwBHEvBm)+ zDp@RxMMpiR`)7&oyJHq)3qXHu&aOIxxN`vsm;QS!@KH{bA{|F|OW#Ac1Zt$i+Et#P z-%rzhQy6IUY^|{}arXS*4P1drI~0IFH-D=d>JW#2<7wVS%!khuATtTOVDq%{ zm#Es;GK~KF{#%{`<38n8$C3($kW1OO!(*AyU1X73G8c7lo;Mu4hh=|?VmrRm!xctBYKx+=Sr*AT%_^c&vC$J5>-XpHMP>&GZm9&- z%qh~^c*+krNRIa*jK5dBOrREy0(-eV>pg8PxQeXSfe+$~i*84JtQBVpSuB&XY`&yE z0Y=Dis(be2jgjdO5L1j_TI`c|1?u|nN0Cn3YxGV_GJ5ZrfMT@=+D!F-+oZeVVxuh3 zs2=35T(>hkZ=fV)vKszB&3mFKnmDZ%WAe5J)j!MO5m_FcGlbn|e?BV1D$7nK`bLT0 zS?KT?xR8h{m1b5RhT}U2p&@Y)X)mr3yENy7C^QtpXFCk^LN|pr?>enWtS|2DJ2AZ1j7V&3`z>3e` zneFE6=hR%N6OL)3bLPFh_70><3(eUM{7-#5;%cQ?`2vkQ{{Xjo6Iu#%{$_nI>-Z6X zATx2VuY>m8>OM5eRoFYol5h?5Cw4MuCYKe`{vQW+Jd0t4;ls{8qT3&AXs z*S?4Qa(uVIMyT<3>{Ds^GG~jiFIuCY%=Th`e3I*u%|m2$)c5Xto)0Cu4tmOe;rRam zY;ZE!rj_aq!hhbrNU$i@D?P_P%EU`g38H|iR>3_?6Fu#^7a)yVB4D1WJxfxT#+rg5 znzIdEcclBiM3h2+MN*6Ey&lH%JZfSrFF*<^zqjArzF+_qLK(~JgWhUS1RzUL0f?FE zulp|P;E|&h#1j|xpn5TU1t`9nll-4Te?8$L5LIVd@5#Te?RhG=v$O!nZ1;2Lb}s@j zgwT#H7bN8IXGUnC!P03Ivyl8nq=>=Q$}A+H_LIe2RuoiBYq~NXfu!Xz`x;nk2oxj0 zhahaAbT)1@7^R*|RfTG(V(O7_VgX;JEGwYNj+m7>Gr`i2*uFTNYeZgSLI50{{Y8*ulE-sPtvjD&*;p#{`ee4#djeS-rvSlPWZJD zR+*A=ac?A?ak#HcGGs5jn$dq9`QbtIxti_hehzv)*T^+BX77F*ki+rgizFWx{7uOx zzmQ2h1SrHyBi4HSGjAWjQ|i(8pFhk00G_;chp=p|{0IA+pU)QHia4w~oO=CzY$uHl z=UZg$p}1h*{!;@_c6$1VOfY5_1IQq)wDsTOPJepa&m+4TpZ*Tx z%(CEU0Qg2*I&rPv)YCT4Xg&&oF@Pr);&%tc`JyC1rJ($m=g*w>_9z$F)3PzM+3=q~ zkg{WiG#BTg>UzUZ1RqrHp_ScF^BwsfB@(4D(0}(ub2(>%6ho_Qz@We1f6<79Miek? zQ@{Q{NH{oCSq3bZ1{eIB&(O=iw zO-~F4`=d{Oq;J{v_G!8A_8~)x7`fme#*`L=8ek2NKzS3JdIA*Mr4V$;RagOlAcg~S1b`tRXmt`5u0KY+ zphTi(yq=DVC=Dju$-24q7C@?K0z_e2tS2|X(`Zcq(KX_K@ko4V5|Mz06%j>7)l7$& zkd*;SI2R$_7Cg;Ot<%ufjQsWZcotTbIvAtfjrVq;a4Jz$oudoLoj+rFvJ6t6De4@L zZ?C(gpn|%)^Eq<;zU&VkG*ahEy2rVJFA?vH1ZQsrPwCS7^zVsi#hfcPe$1Jl%pVu^ zSyz1@Kbz|%I2BX@b_emB`hTOOVrXTKRCs~(zP(%lo|X=9a3X%m_y7VJ?KZu_epY+9 zd6JPA6Rq@osqW80DVZRj66n9&cK#R5zz~pS&|5oc>8JeKkD>nndZDlQ(D&h#0swj- zM3_|!v+v&lWK@2S=j=}U)$8I!Iu&OAhc{=>eAmhVY&H9z_LkPVnlyp1gUEbRg( zj)D?hrQP1W_U;rZ=gbi@0aTl+?LVA*gQd@u*7w0P-&9BI7dYmnhi<*bX=DbKHjw zz9EoA>5zhd9)CH$Br(|2!xw7XiWl+hTW~jnBHUToEr?=7M&?X!uBwt)H_nGHd z{xnmFma~Ei@PLFTnJkKeqtc7(?@aPCr-MqwtFYPe^lyVbr6~j2q05-p*G~y&pb^Wq ze>8;OV0l}pX-I0fg!F&rAeBQ1!7!fH;OTJ|M(2iDsvt0JU)PD7e&rTv9w8yKQ%}JY z+14D^9<{i9Tb%y@4*+EX!j<(UAha$*svS#9i6GFrz$?oNk`@`8f(jJ$0HoBg7{@?F z8%*{fMrX+_BpQsrwf9#40Jp=-Ql<<67k-36R>Hwu5LON}j0mI#P=E-ifTie%P81x8IAFySu|_$A5K4M;ML@5UZn@(3_VU{of-+ZhrW}=e=dpN zSLXbOGr?7-2*Hd2y-Z$y_LYFavS_Y#-D!*dmPlt8P2*x%d*`wF;m|NM>uK(f$$6sI zi|-#DxW$^e(s@Fj-6`pPOn=t?i|1AiecyfJe?8;)(HF_HzCr9HCY&eSgqN8> zp#)l0bX|+7_&FqaWR|KwKvXo({&4Yk9@0fud(%u<&Hi{3xDf`SRRM>s^!9k*t|Bo4 zgzF&_ExTIEN+uE*3>Lvcf`d_|1PTHaj37`&5g53_VlxW5D9uzEOjOYzbrdN>3o2AV zKxJTuv4s#x1OfpNo94(is~hbyqS_qj1DH7DpaPH>00oH}@H9!>mu4~g`gZ7`EIrh! z>+H4pzWkZAytjR=%JyXp7Ciujcc~A8e+J^dh!H^6EdKzgRVS^uPXvHoJ|9=RW)XRY z6*Wd}^sRmLB24VYvmOKMo`T5=8Ap)0E__NV5Cz%opg=%-zlIp~{J?BX8PzC0Ce3Yt$xoyvf-}%t^LYSO4W|{7PGugfsHj-rz zN(I+_I`y&ew~BEtYuEdGf0w|5l92T4oJDWnY0m*t4j1^sKajE1>HzlAeINp5SdhFVfU#j((Hkuh?$n7& zwim(xg|N8_(rP+A{O$3_f&6*BXRt@_!g!o7_<*c8Z!E1o74rh(lWc1RtPm0-fJI~R zEo`nP#?&z04pafC#ZKJz1Tdb>`gzhilDYksQwnqqo8SP(J-zwH{2A*x?W9XbiT(co ziNB#bzEuq_ZE|K7YxA4ogM}IX=Rd$ce>{Sx2D9QjbD53#eSi)qCw{Zv&wp>(<2?-< ztmk=$JDK}{$Ag-M1WEq@E}xHz*s6kqJ-vVX(>sTOM8KDBa~5~?$E+2aw&%JJr$8$F z>+iv(MiZ<;p1<;^-x6wC8TJY${ubLgd}?n1On)D)%psoqdl=C(n&W-WI*iJBH+#b7 zOx|XDI!t^(eqOaZ+>iT^>G#M4VIoy5Qxl09vzZ+ONEJZoF$+fi_tVr73`yzgNcyjE zcRKJcAw+)^-hUa#zegx6NNzrT6G{9;-e^rC4*kUM$}{EgQ(M-nHhQ&Sno&Qp19(R? z+nKLN{=rWnio4s)>_MsOk=6C!2O>2reF+NAeueE{FTTV!UD-m&i-)kDBv8W{@`E2^ z+~V48?xL)F*^O{Zm7x|3QsIiZmffGy!%50;qw&X;BOs9<8FUCWRV39*6)k=&MEw=sc|y85|Pw<)8QSz>h@JE@XRfZY z6iq6>!}@(p)%_5up@%mPUEbk7o)W=93y6&PpLTcM1+;?JoGW#Bm)YEm4`+A>?|o`xe)=E4WiG+k?n z$@iCWz6;KdO-v9{{{XcTE@G_%k4KOayaV=);|W5IW%_fA(-1!&1W!bCT%Gs*_x!WL z3sKkoyc|1yCZh3yilVkHZvOz#Z)MpJ3%O+~np0sLXZ<~RtVOiGgEt$_kT18)D;5>c zRh^soN%z12Kpx)SKpP?0@o!*&pouf|^#a1bhHr)dY_^a>YMR2*ldDie-H6Zn+nK_o zR-IHba|`tReeeDJQUM6$on7zMNlf>_Y7G!YgiVaer{awZ!Kg4uLi=q`OwHUp3aC)l zE}VwXU-kX)v=G--Z#k#uKWwD{05iSGdLQ`F^@2qJF!Ok&%kVn4z7n2&fUZ&gFZ4Bh zfdCB_xe1-J!u$6;S!e}R-4|b2LCXjLzBE`XVltpg`V=aWG|&o?JgJosDE|QQtt|it z0I1;S32Ja38$u|kq11qhfTA+B5WxkAaft^LrPjPHz!9>QOd!1^BLWb`LeP~(wNeZO zfB-zDlQ7eXLb?ivAPc~F%t@4`K@eynBY}d!2=p0lDvn8B2M!c!Qpha8Q6jI3xgMd$OfB}f!nI_N4RR(Z@E7ia%0HQ#{4G%;-S&oU-A*dx1SYL@F z0$16E5r!o%Mfg}osZ#+Xxy-l7Gyu~>*n1aS-EAfE!2=eI01T;|lk^Rzofd}>9Stu? z;^C6DP=OT&@!2Rt<^&J~gc=q_UXwNtT9p|gCDaJkz~`xek5TXC?5ca$*WYRX0CCm% z;v7^`ZOuA+DT`Mct=13vLkRoNU;b}^aZZo;{nq~8+JSsjaqRiFwLQ}e{{S<<2T28z zn!SYh&EEqt3?_(6{;w_f&Uo1BK;!G>A7}5~&oD<8YsA$a{XF^b@pbKbjLg*MckWB1 zQH?2=59u_iHRKB4I2{)-NE1869^?3{;sFMvC4VQcgZoJ{#Wxl#9L)UydWGL zC>rk*d7qoe<&G@hn-$`Qd$TY5hWdJj{@=rx8_z%iDr!RC>CadX0{Brs)%(u25w$oy z0+3x=D-%!!Fy&O7jtk(50}LpNOxgK)++)?%UVG!MenwZe26KIBN}x5v9=mK5+j4AO0jsRhSEX2|lZ} z{x}pNL24J$`s0c2t;SXr2x>@$2kB7Kl(^u^;vS0O{~_a;nlOrtd>;{{Vv5U;q&J z*VO%(>s}rkIRjnGxLr5be~vl<@YAo?+3oyq?}1Xo06Lvx_dOLZN5%mo5fZhj_0@hN zvL}cLXoP4Dp^KdfYKKyAxhii8sA4ru?b+wA1(8JFMlU)gpQO+Swi)j0n2iHpPe49B zwodz69VY;Y3*jp4T5c_KllgLkh3MevbaIFHQ%Fmqc?vkj>WBR={{Y4(gcS)~ejlmt zvi|_`$^$f+Q00uG&wKa8C}#)6{S$M2;y{ZSH%F+Li8YJcE>)Up6Bmx_c2W88tn@Sxttm{q(zxX=6rx)s8a zv#;{ZpYnMo7>av9q5}yZvd!>7C3fJbq++e#ZjZyy{Ti#v3b0_G>DPfEm>dE^{&fEU z)bcjztni!xr`O!NG*DQ@H6o&7G;#$P!Rf(&UFd*m74kf`vIGDe0Sp$o8h9&HAfi)x z#6$_`)i8BvQ#(e5a0x+CK$F6SC(vSz2q}CZb|}F$2!;VrTA-}~JRen4m|qgbK&Svl zBSjRTsYoUuJ8vpMzzvZJ7g$47L4)BSAW#kq(EdR5@j^iGpo~!n0PE8Mlvk^WY5F%< zLRcSgWRM9ULJee%0uc>7V{L#@iboIu;Vg*RaaCdWV*-E>3^WB$R03#YDGQk@YTCxZ zb3Yr|`@7&$BnLlJV)xnu!zEU02&d!Ka-vi@N+OrV3s@J7^b&y=p|QIXzgwQNzPmg3 z`|H7JH{!GzrfKeDNx|~SQ?&W~Y|pxTGr|L;zj`Yh@F{DbQ!JfpGnLM9jg0E6azso;A`r0e;^-+%J&0JS)Yp(n3*f4!Zx7AWb= zoXI`R&-PddD0&@qnVrVpv%Vk^3a9O}CNrjFe1j1e9L#b4dO6CK{fKy<=AU{y93tIc zIs(ud90T}hX8uH^i~j&#xu1vLyq`^~XbJi05HXSY{il})YHvhNU?%#He`lCP$7Fkg z`^?TgnAK7jOIz^*_g?$=j$~t=Al@NGPLJQ&eOlEO0$ZKSteq zz%{Zj$s!#{zww^q;j2l}?x9h>&;Hy`7avh;J@sb1lDE6&IaCP=sSsxW0Ov2?1ftdj z-B{&yd(YY68izBbMtr~E*Vm?m3AFbz`_p~?XS?A?00R`+%*QX+tNG!@z6h0B0_eHZ z^ze`nBS51OIZ2xj?}3)^L%~Rm5VTrOszyeYL;#PlOHtbJ0^<sGfvBla2a7p%X?7Io3Yh|Qq9V%}Bfy)H_dLu2HAXJ_pE?wr(V@4oAm=VQ;01 z3@>W5Y5IbTrB#a?_t4ZI!YyZn1i@6r*cOlqZmq($h#9RBO(Nw$6W%XYc)&Fgh@j2T zWEGq+V|)mTpetqSj(-6o-gu<9A{#0aXqU4)-0?ko0>6R#9)p{{h6d3@Y{@_iecAB6 zd|3j4xQT|ouUP&60A5jg!JTLQf(FZCfGe;_kvlurre+?Ch9G3GuFHK}oZRzBD1>an zTh>dl{O5zU2QBu@DEq$8$(}J&9D0pQ&!9{3`T+zrc@zDk>h5QINmf!l;h7AGd&zvL zE2JSdqxm;kv5xo=VrsGwHo5FSYUhYDX=t7F0h{=p*}@bD6wM*;Q!mW@BoqZy2{n%U zi|llKPh=uarlxz>hW`MbKoHW`@C1Id(5dt&2)?L<(t7nflk4Ucb8$`v>9y2%{&)&S zS%NnRfVdcw;77&6u1}su|tqAID09d4?pgMq(9?q#E$u2=?TluGt{djGj3~#*!3CPDHILT-pGNn?}J+2)H?V z`thKE2K6W(byL2nWjqiyu>fenK!&xmJ+o_yY0RUe8UFy!zDFwrns;%XZ+ZNYNwCjo z#$3(yg zS&{+_%82f1$M-MA@{0)i=hzL)kpBQX;z}I}c|Q9uZ`@q;p=CMg`H8)SX5KjY2z0O% z$~pMHx$pVl7Pl1P*_ARum;2k|p_<%;%j)E>4E*&pMrp0|^9;WK0G{{hYBvq`Uv8oG zAIawiH0L|Vl!$QI5iLhp#)esA@2ATPf4&ux$v8e7*{`RDA*NdB9VUiO5ll*d z7S9I+aecG5MlI9RA8X>F7T{%%+JgG|^BdB)`)v6VL;Q06N8BhgA7@P%zO!onV3?#D z<*xA0z3&YRBp`y*>idB=79s)%wCh*eqPJnJb^`nt_VbW>T%da z=Z6=J1_Q;zKLSgFws8VN!aC`vz_6i^;`OA^;z4v^PXMVvQ;1U(VD4Vfn;=L^3oR?1 zL}gpSs*yeH6c1Msg%EK_D?u7UMidZAuY(V(N`wL|iVhHDcqYpVY9v>Myp)Ag;>xWA zt97C$0~Dqu6pMJE8o;+T3^8mA$qJ`BtVxlEpT3R$lL6lM<#ZdKQ7{z?u={<^(t~t*`{{X&KB}l8wg-S&ShvH%8Q9y@3 zcYppKn>?kxi9n)rY!_J0oKkmkkXXDgYNZf9s49R$YpOg*Px*iGq@E&G=_fYDB>MwT z2`5STU3ClkdR#^DlNtnEAv;*R`#}Qlo~IV=V9cNGe=yt?TCK~B=@=c7PQEFi6KsNf z!?N;EN3de6b<{JXJvvkm`QZQng=W9=8b6!!A0RjbRYbr9ZEceKA4F54HU?ku4~KKp z~*k4+NIVTvGw&y_)xxPjdwqa~tzR`2n9<>#hqB6$V^_D~h1Rq$|EKKhFI}#LN zo(2~2=+I}W@jRa^;ck}o2_DYH>1~|-lzan}&>A?&F5WsVk#b>|j zhMq)L1rS6@1(Dn`tZ$NxW2p6hIN~S@jNb$(4M8pKK9I**$e6WO5YC0_4N&e5Lf)}an2IwB1f3wt{B1El`Z>m$%u)o~vJ?JU#u~pBrx^uuC z@MJ|C`47YQ^S~wbGlaQj#Gak7x5Id_ta}9i0H%9?$%?E007!kC1#sv2_zn`iM9ne# z-hOy*S^+&!MK`wLqHP4E1JWR9Z?ZJwe@_lnX2Mlcw(GhnID%yw;zuB}xoVAwc{*CH zK!U*n^gV!Og&+Y40>X%xL^5Ci(;$wlg2n=%02o~qlt#8$R)`=WEXy^-;0Ayapa+0; z9nw?*69$4ZXX3RO%s zJZuZ$6@VVILV%#1M!14hi~~@PP!v#503m!LU?>8jAOK0RrATg0!ZZS44{Y`3eiRIEDrBvxTsjlEw-8g5?rX2`HVHC7>mFZm7K^(T7p;8M70{8HxxAs zh=G>PZ>Md7$kr=?pe!$>vh{BtArU$k-gJ(|%l?Kp$g*^@%kHURBfS3r=xR8>9R%Dc zz~~TF8{pY$N_$7Bc4ClY4!owui+>fqv8U)qPWXsJPS*-U2nF`fTnCy$QZ=^XjknpL zR7r{A1c;<5VYpjHqBF0@zye9m_KWTsX(#)x-BtDS$VYvkg?sKEAA#y%0UvJv0OJ{P z4z>g6O~!v;{By6HqZ56u5jb0~<4`xiAWG!N<)^Q9w)ft}fQk_UTmJye%)0dSl<6=2 z$^0Afj`!Qsf7mI{{VjRNTW8UcK-m6T@Kwm z6rT`-xo_h*>)Vn(#OAACzx)&1CLI7(FaH1=$l%id0J`|VuNzdgaP}5{f7?V;)MQ;% z`WoDb!@yNOggNVWA3py3-kWCx2cgViv`wEp3Kcn$Jo_yEbl4JkgGDJ$X(s)Hv%Ztd z0?Q;~my?`ZP9=DP266yYjCE7_n)}AigP{Qum($eW;vQq(I;mzMhS9qws)7Tq7gfe@ z>NTDVh=#gEECe7IQ5Z}CHzPqR8)7gN8(Upn&5kH3c>&=wklLuJp+*XIi6|oiBY=S_ z2!Mt3N4QGSrY%A#LLsBcGsy;&K;)=c#Q{PUotgnoAcZhDa0g1Jo9>AWh$4*|RYfc< z(0oFWgec4+o7o=saA4vd3gFbVjo6Nsi|espGe=8iG+r+Vzt0kZRNl^}m!t%} ztRm_s4~`1}oR|RK-@x+M1rCh{QoA#Q6N<966&vmKPG4AY_Ja8fToFp( zxu-wD=4s&pM0&`G2VZIqEQ89@#Zw@rJoGhom=pr3kn7Ld>1? zpWiGuLCb(X(`%Ps@i#!)xC?mcuqR%UMR=wif~xj^^R%%40Iz_e85Ews{PwVy{1&GN z0sirWje1xnJ_H1YLnihxeOOQT#_jgQ*oQ4U>RQh9l)c5X6ixi6Vjtp769zXlG|8@N z3UcVN_9vjLd6ZuKQs{UrUdR)3@hRyjam{!kKwicT&1Yv}#8@EErA!44P5?g~6>`bq z5MW#@6~YvqcRbXOAII;`;hc5$-s`OF$h@=3I9n7#GNVwov-c*F?7c}=oUIaBS;>~o z*_-e0exE;$J_#jA zxK_-aXgT$T#EU_VYX9O}b+7tNes_~Ea|VK%Ll2D#gvY~U@%?uWHw zhH2?ZW!ndFnTg7x1dyJ-Ie#;&V6=!Bd5G&Xz3?7 zC9+0Vp(BJD-_LJ%H*k-pMlIiO>BF~Rw^&yd7O`G1VV)pP{Dlv%l}C47ECvT&s?fnC zk{=jOMlrvP5?LfGKW8qGo0%b}Du%_aO}#YmS!%v?W1p|n|4|bFyCBE`oR5%%t7gGeJS;UG6TK_S^uADJ@xqo=wG5-B z_kaMq>~!VucUq>gMNMUYsvl8zIYjhlK`4(4Syv~tL z+^YsVE@E&Aa;^L`Ma`1Fa(ihW)G|wZ)UY0I`*7WL!fZXbFV=;Sd%e4Vr*X3P%iWvzQD+tXFP7oxkQR$tt)?$Th~jru-pT= z2y_G@soKy+mE8OX*n3F0RM4To*Nhi@fwR0#_8^Je>n!tdih&VwAZzT8u5ag~ zzSyu;h4%34*6yZ_rN|}FHQhT^oCD_m)%?~Gw zlfzs(tX5%9q#qo&H-&=n8SKC4;HIcYn%S9l;HMi{1wa7A!}@GsOiU7J0)r!|4HDx%ODRmdQSOKB%DQN;O9z+jbHyH0dDCiMSA*G_S>cy zU~}Z-J9##4yBU#MT&RrI@u(E%jcH-FXZ6)i-mVDPFfxJe-J$7RvAjAR2}f&G-viB( zYoBPq51EcGr>oq=v>v>@&WUwwvo7y{0Bbzbw?F3oJn)y4aY*mAC}5%YzgTkQTIs#h zspIR|Gn?rgg(BFe$lh19i@BGPQ~;X1&5PV%kN8ZdOYuWP^LNan@tYfh)Yxq?l|v!X z;cUoPRSqKM^iVOxk6=cdpdw-+IOv%kFEcABWj@7+mvU_nj#6OBI5L=h~*U7m1X4?9L zMCTtL96X&QIR@wX-1__zILpgvz8r8jx=n=k7`b?(e{}zSi4m|n!8)xJnfEiGiEK$V z(R%yT@aTpcwX2o6$9fxZpbPK&9k=cB`8b=k!*}u~ME_UKn!;$RGog`!w8-vlQYL3q zk(l)Sl@iZ}4=6O2s8z#B^FP2_Y?-t0INZAEQSQm#qj0#h%L!=^u6I7?2&E1=Nc4=Q zt6Z{TefW*X9k--Cx;k3T1{4Ptv6afP6kdnuN>Mx`zrx@In(|pjFnEnKAKve`zv;Sp z#1la9bcH)wLgRozgV2aLn&(yE{+MSI83xN|{;>#vzbKdnlFSE*tvhWct&t=R1H<$2 zkrN3LEd($>sx~3UKMH#FCS`qJU)BUq>N?al|aWA;C?%uP-8qfpof$4 ziVerBuM9 zGhX9nsJA%N*vKUFL$Q+f;FCKn987;McPpcGx5$cyl6B$+4|6z4w7f#%ldhcmpx{R{ z-$^Jym`}tCFWZ!s@QNb5zAf5nUVNfpV-1CQl5PI-$9*Fd?3rc_aA=oJT;H%ZMQ%ND z`#5E~TRb)BvH&Lg`AAMbGAMAV=+A$Ezo+$Aiy9bd`xiJt!ONFQpX6P95kKX=`8&w_ zkBVvj495Y?Rj9k}XDQT$eE8_DRdTzoP+RYjwp>|rb2}Q#gv-t%0@H* z{h=6HQ6rB(hY)@@kQ~@4%`FZu^e}jAw9cV}Zys~-%wQ)fQMs5IWE>qq!yREf&;eqZ z^VJq;+~eZlbX2pTfT1e?10Vr~(-1Onw`6w+$Rq!uIc`PS$R$uZ28KH*KS(2sI{voG zq&y^oFSg(|T!kZ;+y~$w9yNXKXW-EDaspl{?aagjCJ0+y5*|RHDQz zEah@0sLu{IBOG1!yA>r)FLM4;5=`o)=G|;Lh(rj-(33Q<1p9tClK+ms&h`02ROX^Y z|3cHR?|c2uc9XMmtH+{N8&a{Oxy5I%`XOqechVl4B951#@nz*v75#Syil2_yRf@;c zVr5shgBFf}_7q`eQQ~cR|75hs)wsd|3Ur9e^P2#DO{hAK6N*y@qze2Fe^`E)6EUL_ zOuSBPG#<`u;E?%u>FN7oLQR9yzJKv&S8IHe{M(v*IAW>q?tuAL!+h{kP~S~ifd<}J zAy22Xh1UIbN)D)7OA@MSdkXN!U&?-jD(Cl zM%5#T_3@ZK)bXK!^$JJ_RZ*8`Z#I!0uThFXht%A^LZtJ|y$(p1 z+EY(4V1{U_ax|dAiN_g)jcMxQU8(j2=}BDaLBx7dycz81AdrxWYPn08CEMy0tmv5m zJwcWzm%6mvRt#)d;+bc;sKR}rRC)pmCVM;0;`eGx+s^KjzGveLzPrO8dt29>4Z`nm zR{bT~yoP4o^vRhTidD`_h+Z`Sr^G#)>~zRwuP_(hoS!>;MfaXwEi}OOAMZ=9j#Pig zzx465or75D#GRwe5Xp-gW68Dqdj;&W{2+?-f**%$e|w;?ESW z_0~kr@^7sD^v&uXrg5LGs@4a(P6QuRC=m^iQt8jb9&BE_*CcD}jo=3tbY|dM>Lmrv zDf=_crPsZFa+{hz?zmOB-v)Zt9jIB*^Xd1!yv|%mIdSo`$F_+4-M@TwiO@DKVs8A+ z7WwV|@`uwIx1X0&%XBnukPodVq9dSN#NE!)%wmXz@qJsgjov zG_!gJ9y7E>7x+(q4`4?D!6%ERZR+JkgZZ2|`win(9;OQ(B-8nWiv2j5bO~HM9y+1=X=} z6N*AdHLS^8L!0~C^+HLNsn&i(j73O__G?Nig5wv7!2E@!01)@j_y?-=U|4MQ+x#mV zTG&oF|CEqq22IiOp9IL%3kTX8fC%Bwif^>Z5$u}j9H?CAvf#+Moc#ziAd>kf|-n0=*t8x{$EfmJ_hI8^>zrop$ayulLk?>>q`KT9nc zYV8yA9W|?Cr|Bv?3d|XPYx?`Jli#8EJz*VAkd$jBvXe68eI9c44x6k>|2^pDl5eis z?BAsMGaLl+^9*^khrBr`+odOtETCH@{O#x2m3Oyadv-t16Mh#J$=@8*f6?&qg`qR_ zH%(YO5n&8rB{zrmZ%2@tj6PE4{c^IZfEd7L?420JX?gDz`*;1Y3?Z9_m}})-NW4q} z5Y0g|8-4m^h~gc7F@wY2Q)thjDxo)OtAHcDb*Wm~J1tn%{SvwXKp zs~NKuH_)y13&k?n{Ghh9|Aj!(1myZ&5GcBhe1iJ%G?=b<;l=$$Z_X{PGv$w&-?vz6 z)~F~is=(`W>Y-@Of$7McuZvb;l_fLsf4dzb(fm^i#3&=(*$cMRU6ZDeX_&|J&kP ziKg~;iuios&de-RcJoDF)3D+58FW*DyMh!E%L8-p8T`r9v$ZPyS{6kc}FaDUfY6z(#H9y zqB{ZY=fGO`yJl+`r)GkZxHPA$`}z@JXRzvSk!{KD@8L#PZ$6R-6re=^B8P}qEG`aH z;Xuvx5Lubu0CnQTBka-L?}1Du!+%O)#1YS?lb~Ssup)I1!(Kv&!D)HnkezE(jOtTp zzbd~h9U}i9EPtRbffqmKVTTj~YT~L*^ewTSjfCqCKN^fQ4prk{6ZJy{bki^a8!y3G zA&BRGU?Q#%i67aisE|P~WvRfBH9TYr4_L6%t)1ToCbHQ^ z6v+|yLt>5GL`x9-EE#CqUJ5ztHmQA1noJ}-)P~TFoVYOt9=cZ(-6NBg1o} zEw|9ZP)uILC0N3?3DVd^s33lo?H&z&MP-{%bAf{em5U)l;1NQC8k3aS@r%=j<{GI$ z5mio7cageZcORCpvG0GojQ*MKtSh<*P}ABfR1!_2bjOV$IE{(u6uIsGZe)h~EOQD( z+=!f8PE-W|DMKY*%;6IGKF#%T7E(MqKbdyGhL4?=KYrE{)zQ^gs9F7II*8UwZ>0Ho zfMzS_OVbuom9HrmR-vUC4X;RB4qSdMxrbOqBbA8n=@#z-w#tjtk60$p{nG*zOio+4 zHw%^4fB7i4!*ZE5GQi@@&hmIr60uHXIxu&RKAozYUk_W}25JwF{O@n^4Z{hB_n zw!#EmX#X&2vxzJIS#o!uLN{!FNhkJ8|UXoZj*y*yt8%yDL57)-m*IKlWaZA zRY;fD0Hl#3Pwjp_xzNF&5LrDkaW91M*OgCqf7ubi_kn(ZliOY08E%1gOFgh%jxL zD&R2D91w|@1%p6frlPc<(C~0y(KjKa%WL?WPk16L!x5%E^c7o$v$iSo%gAqqgj9}{ zfM>>!0VCamtYjSaEIo*VWzht}auRrT`D5KZUNSXi-sQ+9h42XE};&I zw?=BKmAZScec!+dO5ER7VPmlOa{(L=T$+jR)t3AdEPSjFA1`@i+`lT|i_S+cFKnw$ zyTMcb7w4|Q`=ZxOur!R<5+?R#Y5{BrJ0p0??!!DCk zm>DXG2Hk(g=A`u}TYr0&IaNziBMYEW5B(SU*hB2)Z9x9O=_B=Gs*uLT%OLg=+ijGt z!n6lj#8DLnAYYUw>%YlfxqrGk<{E; z`Za7a?Cn&q+nY8wdDgA>a^y=RxW-bRn4m@mH^NApXY6EC07 z4B!_%=M=ir>U#c57V1suY^P{#_M+$bb6_=2oKS&#j_M4&c-x4TLNoL3rF)PCM$8J? zhf5b4sx*p`sPBUp?wd`crjTG23LRy^ReY0I0ul38%ARi4X1%R|0`f57acEV%F5mgDL-W+2{#w6x5L{7QHh{4YUqg` z2op`kLF5fm_h9vm5(yOUUo<0?S8zGBnu_hZGx-^hQQERGFV4@t2DradPhTzmW=U4J zSU?hQWo-@jmu^mr*#t=^rP#`ocl`&jY1P^Mf9deY26{w&?o)hdCmoQ+je0pgnGsMsV|o9(yrljqvkt&N@05s?#R` zxQKO#?VK>b8m>xh1&&-uEJ+J5oS^ELbxm;73V7VX^-)y)CoYobp*USH@A{#7A*J4@ z$4+Fy!Iy`7$ZI~&xwJ0v_fyeIg$$liZ>4XwAf5fQk(p?lR(*ZLkq?y6P-q5`*>H1m zu^S$U{#W>OePTr1E@v28jSPR;S?-LO6Odu178L{6>=x+RONGvlJt*~7PC?L>k0a_M z8#K{8-8}?flqUd3P(XnDB5Yb0w2W0wl$3U>wgO;l^U@@nc{URvA=gFDDlZ6G26h+G9QC z2g`sAl1e<~C;*o{a6Co5Nv*Udgm$Q)ES z2u+$Bo*;Ti!N(}%2s3ZiH7>`H$T#3yJSi_c0!HLYig?2#kKs+#V@ZHtwg8qslbi*py4ZLG};tMVrMA0J4TKLscYj1-vUgfNAinOHG8++<=l^c$-b zZ7vU}dni+_42KC#M)10IP}8!HYG(L9UE(e8!Cju8>zqbg-udS@cN8Qd^Umd$`YozU z6md=7e}KUGRTfDp8PAr>r&o838)VU=2EHj>pTRT3BM)QBDp>AY{sZW*(dS+9naVDtdEpvepy&)xl31q$!w`^7(ryZ>= z9`%ehZs%t;oBsiToLQ73))qI+x2O7$!PY;#l?J!>Cr)b`DaL#Xc|WHxqoY!QUT?*> ztM4k@mLT7a=nTBXthy9F%5%1o(myX6dq-e*ehH?f;a7-FYO>;5vf@S3Xc6yGT|TSD zg{mV=1O#P*8O@GuvQlYCL~iRgum_g_Tyb5wz8_U8e>IKsR8ZC3Fhq9kV*7`-43I8C zkAD*H-5pxEgoa#q-TwGA8pKX@-kz8z$2@bgMk@^MTV(T8s8tR>={VQah|I+8m_{5> zmPpnE_lrp!O0LI-(Qxp&6a4#Aca@&Kf)OY`ZCH5R0d?{jAuu58I zCZ;Px24WgrVvB_=hNgW^VY3{=rnQCoRi%w2A@Kw@#+rqWhvf)kfSKAtW$Ms1_YEAH z0MPPKbIi{rHdNhyuu0IDycxxaX8^q;x6IMGNxb5fl#jLWhk>MU*)>3;G~= zW{J5@Idwr8vk+K6`!ypnB9;P+CX=+yZAcbH<0asuL2MLAI@WBoMQLb`;ZfuxH8Sme zD~@_^HX4LlOv#0chaG~yTZVq1kpiwMb?9|Sg`z2h5%I@W`Y|ZqmV#BQ#mR~Z;2$|X zN&&QGz26sL{scbpWRe*x&~kfeJ10x%FPcO4R1xO~ufNEtYoEYSz?f=?)#DnYO=2`U ze|(jFCtt>=bPJMBn=Z-)ijKCoK{$YnxFL+xzVwUiHHRON_U*tJEFZxKF#!N2h#fyn z$^z}mfj-UR8^v4am&(?IIOc94&PgAdWNKt-V0&3$sYlLG$cJ-S*d)E%P>RwN)3SmcK734N}rNjEG&(mfv zEEU)=RynpFFD@Lvw`=Flz2Zl=&M679mH4s0coH1n|O;PNY zXO!q0R^3#>Vklv8@(BAA2C}T`5@D(wKk*~scMwX}d8`TQi~PhSKs}nKoB`175>X?3SssFRq#;-5QH~P$$*q8PdBqfNCG(8L)5g0 zej`K|s3?njcl6AO9c|Q5%pqX{>lL5Bf019;i~zL~0b=HVF3Y5fy%zZc(fpeWXSWFP zuqvhg6G|8aDpsTy$R-eZSU$UuEP#+zuD4AfAglq`f(Y~9XMjcld}e?@njOMVLHOb69)9`NED%*zNupBuWGztVhgvQK0&tEBU z%XZYKe?bobqFUGT#{d+bacInsQs}G4^%IY>F)LJUrVrj1)i1^z9w0_vaa)s4pe zWcpX=avo%SkSQ4RBS1N%N2KugLFuSv{-J89+B0c?%t$E?PL~n34~)%Q**STu4@^h+ z>puzd+i*V_AR-XUyS~w#^<0S))Y>C-+qk&GrSWz*4d4t17i3E}K9~8*WA1O~J+V(rm@tS~bH{@am}H zFMiynWWUp~zjZaHY(A&1&Rt$2u5c@8|NO1S%n}$)dS=O`(Un_~6p#SLta=Q&CDm#4 zb%U)}l{T&C@`9@fTzb;=duuf8KX3HTA{;5%zADYNon#5fDXO;IJ5b&pnL(y=$3|=n zaOx*tJR0d_&+Kd8or9~m5KV%W1*uSm#dqBl{Ft;qb?>&j=yKT+T_nn7S3`~Gx$k2l zLL$X5iFHSTFQau#76x^QwnM;8Q~yD0_X37ud3?O~GuhjRB~G z@5!v2pmbf6LkY1r&z*%S%bq}eq&fMOffNW5{g>8++u~@)B3gDuR(>)dyeEUiv!<5y z2`qYjlA&1hv>XrsFcv~OtH+W+(?t`F4R)-Ovq5m*Sozp=^O)ivLXv25LZIygfLS;c zi206;rlneiAgi+~%!qf|ZkZ>^sU>yL|>?N`#A^dTu{s-nq{RW{zyQq$vn=6BCK?buC?+xDk zWM$_ZG7dK+dQ1^|+G|Pa;MIJx4bkBat-#l`llY@C`d>eQhXRN@0C@lZ{r`dcN5LTm zKpH%M9g?w*h{5o_0NorM@ zJrXbynEv&?uEc!yV`F6JkN02x1Mn`pntR%Pq<3KNE}V^m7Gqnp6^ySh zVtIYqWYs)$zX3e3ZGzRaM#h`NbAi~tVgXz)!Kr`zPU*WdsEooOfmJju39E43d{d6* zQ9k+H@P7+}!Jp7e6-$PbP22OtaNZ{jecL;J5~oS3roU5@71B0~{$!F6locz6d4x-? zvGuId%o-2H`X$WgPW+8^hx}_Q z&gW|>_+ZP|x}Sf-w0D6WSFG4s>+uY&y`oZBd^$&8S<7E8U;k-b^|scv0ynVsJaZEg zyTbfC9ER4dykmQetNrY9ofH1by6yzACOztg8F6eM(lqL!7-bTZ=z+?yaZ3({ZRRQIxO(o2Y`Wi*ekRC~!-fPl4>i&d@-!xmUip zN1N*D?mE$)(l?!Z$uZ17i)guSof!>k-!5j)U;WqIfZZaH_2k0l2Z3jz6n>r&kEu83 z)wr)4O1qfq90R8bxoBh~>IFXrZr8;+auw1%wfbaRHfyoqDBDS=8WO^I58dLSeqJ1n zms%X-q&nqNp$!$)E|33EH^BOxt49O?>}I+~hppRxv+m}+qfK8Y0&5Nld&EFsv3{jD z%!dW9m6+5X^V9azPc-O2$aH^{_fWSMwZ^Ps0Gwgfo8Uot8J%3Hfb!4cD-Hwt`&u6f zQZ&7D(eyYtSrP#NRLIU4QCFB?-p{;Gw7U=sjBk4P_e^6T)p5tQlB!E$ZcO5PXlbD; z*1-}u5YDv0y6Pb{vOoIj=S6oLo}Yn2{u;7*XLlWq_G9vT`v;u;j*6#eG39P7v`_&K=cyI722V2LYj{WYFEde(O-xlli@t-A zexRUbso2FYi^>x51^bzQ-C)}eq-1EuY3$*8caoJ6UbZgz7`F|+kuyfXfS}KOknv#- zG1W@kEgc;z9%ZspexW7lBzYNdaMiKq<8rZ^asFbYxsG3ab%8)CwWKhr)6`77uZOz~ zX=V#}>JJ8OTqSSQgZw=g{bw$H$c$*HGz~(;G?SSEdeVY^rRNoHo7n1;nghatTeT^O z1*sFHIXPqOmRoTNCOTi4p8U_5Z83o|wm3;SL`>>A%`fz%DrooqDtT+DwgvuUg>xYrAHM|lM1+~`N;NViO ziyCa=1v+zV{k@9S|9{A(9(akk#;fNRzUErZq_K%jZq;1E=@}}-A>Mn={DF@w$6Er- zMsgO?Yt1d z0c!5YcRU25VVa7i$PK?v9N<;(p=4 zJD1jZ5qps*uG7-@&U8D5|0#Nj zFqL0g+0VhSC)jE-7%jPXbzJq63Mg#`>$UM%SGiJCN#0%vBz3Ha$iKA@9KSUWe6I9N zS`Bt5B|Fi=_+;!Hn?sY>)fka8 zg|!7GoXw z$r{gj%5gFO{q*BbQ-HZ2!OMK5TTITQ5XKO)7mKNHb>qKfki+2WRYJH8zG(@1Fl%E{}hyFCOS<>v)0ev9N8tY<4aWN_OymLfv`_W#_?UZIW=dEiZD&__pgE0F#7uZ z8ENJ%#uG-~5{t;bIaciN4{XCsH$YK->IZG%ryoa&9zF!W47AIB~_Q~KA)VLNB~Socg=iBOi8r*XfE&>AC#on6*3k--YX`w|2atW{ObLpv7Bm(vfN zLH|D0ZT<%20!XMVYM_s5-@ZXT#YH-&8eF}aB=m1Q8PYN$`le*$hiVIYnSgI%!5X7J z_vq_>Agi)!Cdqt3@FTtJQ(yCQ`Y&C^4qu|REcFR!_oKD5`rYYYco?cj%oDlul*>#y z^#yPmOT&p}-eqT&n~c(y#Hi9{5V96xdydz}EbbxzuOzPZk*iu?GaK?{&2f*N4*Op= zNDq*=FM?w*l@*zsUbO&_3jJyHHWvzj$JkNdM{_IuE=wpKeob~N}b#dQ<^^t^K0V)q;!W8qS={bI^fPu{qfhRA!F!a z_nRlCrqLC~^er!&WV4OXu>&MF=?Kk}niLWN7XAnl>YtKzFgGV^I77qhq@HcLf5r30 zreFd1^rQ496LYQ-Y7(JHl!@85a9B1Yg{;ZP-P5=%Jbuzpp+cgG$P#|AW_BL}Q6XCk z+1vX1`N#4PtvKoz0)ov|HlYmMv=DYYLau^0m362{8j%J--apLnZwTKkJ_4V3kD2jL zE~n{pRX#0G;gQ6XVF7>y+xy3z_zGq-$)|YEwLBbuLEJrRY(Oa8IxL90Om_19%Pcp0 z*~T9-VsCPj*5$OTg&(tG7Qf7kCo`zJTB1&6v5(0A0nnU4FOg2wq~N=9pIoA%tBG3f z`RY3QkgDOwCzCe{vX2?VHlHDWe8p@$Z?Se;Gak{%>W z=VeZt*DFJ$)l!p_2Etsf8Q9r>CB6)dBoWywAJU1=?aUgbQL#gAagLFXmc6|S+XAz& zN?^`^m%OY40@lLyu}g_N~VpWyZw1eD8xH#=a#pZ0~0pFAO4d2jEh*`8TDCd4K$>t70kq z_HZxSCdv7?{~r9ToL4B6ra29|sg_rZ^x*raf4Pb+^(m>cWxYE-n89KZruejUILSqYMS+aYwg(OKbyzm1b;KHqthCb zx~R8B3=N)sklLKM30sAm_P-O%(rvqZON>(f(xZr4dZtvG*Q0Gfpe7r{Jm{d&agv*b z^3)lLD(fIi<#KW{2_arieu%RK zk;!Mh^_!ev=dUYh!QSf66Gv88cagVzlx{mQ_iYXb-FrkhoopX`{g?kX>DK5`%l0+V zn$!3lOT$X-?)A;fPbzuUbPgLmLqT_5T;G)}moUG~CUGtF?t*>x_}+g29dTb%){SE_ z0tfQRRE_{T#f$wQAnluHn-Z{&7wh+1WVajlK91&mZToh&!6SJ)F+7BP!7bv+#8~_Q z9P6H3O0KbX|JUTNrsOD0f+W^NaGSpudgWz0^w&Co$}NTgnp(d2ZS>c*g6*~;i*z3SwZn4(Lr#YjlZ2o zP&GI@L^IG}=e|$gb!?2Rxp7uiK~RQ5Aysi83QEsrx1%va+7h1QHR3V7=mm6U=(DC7 z%U*sen3T}U+b9zrfytZp3m^ipM)m6Dm>1!*f|801xQwP{{sybe$-ht_7IC+(!HtXe zB7pdPb&KuFuj-q#GZ#o*S>>`Ogwqw)vL9FV6C@5~B5b`}lhTm+_FRch&d!hK8VvQ_ zc<2*!#YPA72grFKEvt50u!6PSWTd26Z=v#$ zbRB9{MLr@n9{p&$=A!qXQqhn;M?|+vBlenDUoNpqd$XP`N~qC4y`o#7sIsV6upg;M zv*loSPP9LF$+V@Ffl!7{Z>2j{a(W-(0z1OAkCbKFkDsrO>m%(s)F6Ejf~j1M@&PRl zI2jN|RBXu(0z*u@TQl;8;gEiG1vvbv8kI5t|Byk@oNHc1?{$$j8-X!3qbdQY+dThc z_7cBqgo0Ru?{8rN11pdy5C9IbrKPJ`ehNXTI)-R|*!NL4QPvgi;GkJu=?Bv|Mb+u*ag_88Hno-jNt>-n}YdFMTc zfz4v)9T9)hT|xBh6>Z$hBqI16+f;R%sgP} zEU{tzM>@Z$@`V6Xj47R&(mCfX=h&utkb6g;vLhuAR^ZqtlkohlDws33W?t)$GvRzz z*q2P|t@nC;RjSdP`N=_kz7KzL&CoS@L8Al|du_N&yg$ER-xsJ4L&}yUH3imf5_Ot& zS3Om`4j!0f{Y&JmC8h6v(sB0aTAWp?lucw~KvAssQ3Kp`WHjYJ!1~?ps8xX2LMM)S zj=dv4L{%y^TY9$sz0{?zX^KZM`8Nb*9)*qZySL+7pR1)_Tvo1fMvv^*+oiho(@O@U z&mwqtncI82_2P5sla@gL$$#ha z0(E$oXXNiv_wM6XOY^Jb{I{qD>)5RRY#2ZD`NQXql{o2(BG<^_YjzL1=;Uka5Gak0 zks#OoK|J*nF6s!9*%S-%BZce33{=4-j!KWy6~FZ4`&vhXdY1Ot2Y-sob6+_mqJ zXjNX^JmV*1mg>N)FXwHE);1~d*W-&PtB`~tH~ov5uDX1T_zgt7<-@4U*ZZ086clvh zXAj${HR@O2WS^;RUVYKJyYOcd5dB*BQptF;Z~W8YT5TZas%ju-D^7rCJoQxP$E)4p zZFwWuDMSCtw!WGDTvCz+N#TQq9HSu2*Yp#OHnP35cN1oom_144sx6xbFqr*>bKv=n zoT5nEozsIQD`KckbN@nq4iDDOAQ;5*_9l%RyIGnm%TZL#wLmK`_DA1JT=PjK!8?*p zg+$6QgNSJm&tQT|+Udn=jW(f|7T4(vcU%__jbK;B?WEO|Y#-BWoZg{b zvH&ySD4`*dk(gn4Ud$I5FLz35JPS>M`)Zc|4MyBqz-!{Wjj?U27yk;%uqqZ2@;7QW zJTNxF%=t-Pg&*Mnp&!>XuQ&y;lb`_IpUm&tNTRoGeszogI4vYF36-86_**3Cy8$po zvH_cNXk1X1#i|e3!hoLLMEP?HO!&zuRV?!Bc&t%}mpLt8c2>Uq`^NJo+{dzHR+xDy z{E=>8CH+WwN%Q<6bBp;@0uPp^933zBO<NhQpd#~}29FhpKm5@JVVpgZ$!X%8x$s`wSV2Zj*t58qVFRy_g318eE3eZ>dqsUI zH z?e;ho?RKm$sGch=GG5R&!=H;${lri1P=chbj^XS!9mvba?Nz@mJu1jCC@wDWCQ7&U z^#f3g{tjxV6H$4xif~+4&v**q= zO+NX^l*n4F56)*yad^^)1FLogn5SgEvLy4{_?TIejCjDziM+z%TBhK}bYH!m-wPT_ z`9J&mlaOtq_0==66KjcKn!LPzGZnZMayHGOu%Bkyc5hjyU8W-r(;ez35UsS2kJ+C( zK};cuj-KoUe)vrOuBxz4jf?YHodZAKZ|v;m2%qV@+hjIIG*w4!Jph?i4dwYD1*S;uRqG3VrwA=xXD5=Jg5aN0qBc<1ou+wMketIoS} z#Sp9~w&OS>^HazH6$Pd(uOnS0s`=&3kBiPbd2l3}<%=BPv~5J;WKdF^{4DeGO_$Qw zW&CBtj~}~kIQkua`trQC{Z1KixBU&-B%T!ttLnm>}wzAgAB~13c(=Qj=tr0Vo@z zs)|?{Fk$kckCeG5O=-2=YhnG@)sz|WamG)Kkt=$fvzG;1L?RT*fckRm@|bq_qhhP} ze81-hKE{QWb0>~28g*QD0ce|A0lbknp~GKYmd9;|2FULtdpe8U-vcIaY*_8Z#hcq2 zVD7+UL`INT`8$gkG-5cv0p}jRZMTL!Z(Qb|U_UGTabe3?V!4Bl*F<8gVBE7_L7A)# zY-+8x2&G-3JXIrA8n-N&!}hgNmK%b$+I z0W$0%1*WtY^lz(Qu{ayw7lsPT8XzeE<*&h)P>W;wAmc-Bz;AD~9sNNH+$#WNXZ_-# z*hc2X@g3y=-E4@;>7%C?yK~J1c`ZcB@)`y4Nl@zd?p+$x7A%#G#Ka^$COy8$>*9Bw zEdyXwx|*G1d5Md&>n|lF zzwmiz?Gi`HVcZrM***?)$DY~SXP@Gz}1(1@pUQPK#JS`_*?NpV3; znITdC1L{B(zX-Y)hy^=ABXF;vt=miJ6p3gc$VQZcae;O#O;8gGu8L97u%v{p2aQWC z5`=q=!q0k?1nI{;4xB23iNeXkE?{ZI+I?R4Vmd7WK?Q-r{q?vd@B}RgRZ4^o2|!*; z=tU1!C=}|;?R!nRssJfON^^KQovRA-`Dz6h^ z6u-~RBw~aWQ~=_vMnN9-?#I|xvS1#`cwle*zL<-k{Ajb;&Xp0y63-$H^n9}MhtG^P zcgm=`R(8WJx$T)B_R#Eq@!plJ=ee|6h8K|LZ_<<6QY&7NK?0V3Uxd(4`>pT>YtikR z>yMz14mo_{4(>S7aAjQ3nrQh%RNs%R=1`%j=hqiAT{k?RO*A8Uy^(0qj1NGvLNx-+gz;gMb8+P3nk>k7ggw2K2`5 zyZRpanBH%V^i>yGJHw&3xyWkB*Rkb@(P69inP)G6aIai~If^^F8M=7!gv!j^+tvPK zqvDXRu>QUKrY#DOI++YrkeOchtoR)EVHE!WJ^MZS)@?5%B8@|=F8ftI{&1@PON8!x z&TjHY_wTMHOpp8P{cUFVCxR&9W4(6>ew^3ehAU<7zRI7?^`CE)Ks@Po@?LlU0P&&W zrF7#z>FrCe{{U?fM@SV7);1rn_dg=3x90A8AwKNyYiKvxhrZCSua(ZpEb-g7b8LGb zTGRe_(pkU;xzOeR0P+#z9Z@4mS37&B&VTsv{S@_nS?l}j9--Pc!h39?>`W4$o$mQ2 z21j`^Xdi!&l*!`+O(=W#XR;yN&kPEx=XQ3@^)IlK#TFmy?vCt|@MutcEO%%s3pC5V z+*7`%hyzkTra2#LOi}hOK1B*a9^crZ?|C^6sigoQBM~URofMZwFDMie0fpd4R4so= zinfafSX0@M=2=|Fy%#}56y-1hgdX&_$;1Uz9VAqZ+;D-HL`oY7`UDj#{*v*cL`{V2 z0DdOHf3sqJ@KD$*TtFk1lhB-2Ase7Yj1{w#N1YzG!$D@-zff|Q<9;{3GNQ?Zz$+nS zC={$Ed=Fy?ga9JY>e>t=)v$~???BmBbz3UZzKw`I5C94&iBoxS-v~57+=^F!oqOFN+}pY19Rj6)8Q4YsF}2EkbH8KY5m=#gRY&0hm)>2v&d@?efQf zY1)?}IY+DBYeb@?4H5nW+~-%co&aguBQ$25Aij^siV%n_8WyEQ+_MpvZ-`1kS|lxN z)2}lc>EQ$?MD{8&fJ~TWDrV$MhqD59(Vxch78t4QIprEb9m}henqx6rsQU+oMfL5v4kUckB;DfEO z(1Qq6aT+DpNw1}N3Eiy$o-P}#yM8w&`Q^r9q)0x3i|fJ%`FF|LHm zl7=ELARL6q>i|4uK%hyL_=PLL=SCrcbT1J_5+Vc*1cB!I1%i=ld7ThaC~M9x$Kpb!dZ>#2cs@Uibge@Hn%dW$%{6zxzna3v|tJ9KNUtY}L)nW0`O zJ)vlLtQ)n3zaH}E{KkrO+Ag3~{+^Zo`Z*kg98(3I1orzm24zJTALp_AeaDPR@$!~6 z#WX5p+1ei8N2A5M$17csU@wD-Cb<71-`?K)dx zMm^qK@MuX`(Ei?=zj6A)n57yW;&S$Tf_r-sAf*#rsonnoe_fZTU{F%LLQ%s9T+hJp zhz>LNdAR5JI4kzZkH%Z`{?$u8Cm$Db*Yi4?J`x>y;eZLIYw15e*SpEie5*@`jYPo#9u#KkN5A!8GIfu3Bw5eqJ6+tKX6jFS2bOXcNHI zRyjmUYF8LS&%E#tZNLjZ)AQ^sH0VK_1!wr5zUj$LkBYT1PmNFi0HemeuWykFZ7ll4j~N{{Tno$Jp^bg(6LcOpE@%KdI&U zj~(?>{r-563tw48Cpjf>Ccdwc3=01MK{YCI#6Qoh5OM(yG51eEZbEy>!6=n(fJ?&8 zKlUVQCsnzBm)B>bzMpD#K+3SBhyMVc{zkDZTdTdE&2R8AR`_(8>=R9YOv?uI=G(w^ zc>93Mr*(o4=jWQNDtj((-}Qd@@$RCy%T}Jbl-B#-3`6&LPp*RX4o_^f5*%Go&*u_d zx8?Iuud)3W^G*7%0q=s>_te$=*tonsvET*;jBzSrtKVZ8?~}u?L$?0_*#2HWNau>6 zOWpKS_x}KcjZ6cO6(ZgL0Nu-{UTMAyP9OR;ZMOFR0G-pox2%%>5F`0FH~E7UVajQ_ z&%nb!#`ufa_FjhPc>3-27sx8Qg_Q?f_OII^(#V2iLyB7uWx5Jw>Yxw`Q;gI%;#_*5 zSTsvZxGa7`3pBzFVz2Z7h4EHl5;%X*l}Lma;!Q(@W>sv`0wFUF0{j)!NC2;Z0Ta?P zhOX2Q6J510i`qp3i$5TSRdJjL#AdzFDQXMKvS@~@<%=6>4$K*~kQtaj06JbQNW>gf z5r3r!tgfk2AmXCLDB6diqT`7ouv4PQ2VB-ms{-9q1V{?7A{YQlmbg=1K|?}PW?nUT zMr|gZ3KVE84g>{n`b_~<@F=K*e*5$dv_Ag;o0(P9P|n3KuzR_00Aol;z3b|3dR&>F z6009X-;?rY?idj8V7jLXaML4)MqD(WD^8E<;0egAGDd6R$U;KHEs!+q9U?`7jJ4vLX}P52!PxMJrHqlnK=@KDl`RjMF|UZLUbudAWINY>C@=pn`9PP&>v8% zKvG1gP@}-M+932`j9SwG6qdv&1ymFX1%wQ8VWw;t3QCYc5mV++5e#?=qO(GYn*0uc zYsStl93c=As%t}GRT&*r1gAwoMoh+w0}uiUHiCi$1PKKLuO$YZ5M2%-OmS`&kR(vz zF`Cth5@ShgJWNnb=rjRdC?l+ko>C+rfJCB)G%>D5ctBbd>J#V79nzzWaO*#cNmqZOs2`*A`5{?cLhE>-o9KHbsERjtJUosLc)>Q;H zm9SC&02<{o@pH^tWrM^~`B9&gkZl<<`iLmQuq)1RVxJ^3Qp7d@W7#2!7|Q6D)t(=~?9 z3iMnQZ_>SM`JpORw6px<)4z6ccU8KndcZsrn|Zuq|j!%ySB{{RQ!xuToH zM;Cs3tU{(8&l1|Y!pYyG?MvUTVH^(!y7P{4FWCJvz@mMn^c4R9fqk61c~!UNd;2<0 ziDz||5Q}TwEpI|CCHH-|$I)*$zPDsAJNi4|RK$(Hv)*WZ^*wKbt!+$k<=XsG{!H(I zD*CzV1mYA6XZ|cg8d6!4IUU|zo5G%2kd2rDUvhta%zNNXB$i8U72ZJj-(HrFsf7ao z*&okEr@7}#g=OUaKlD5Hd|-gfEy@1?fzAH_-roiWLC0T{W03ygJy7+2*rBO2yaVKgmX%TNd(Wt5GvSQ&|HOT7Ee3ZpM^%12g z!v?OU>Qx#YSArb^bYcX=K%bcUSgH=R1+bw>Ycm74yEIUH#ky96?^qr7BaWHJ_!No8u zV9CZdBSO=E!wQ*520~Bzn*9x8@+%)0a$vS9)hbzVuC*hz8!$CMM79%`@ zygkAq!h$6l()@t{m^;DusHOz^2@5?YYn3SS)W!|t=A=%;>#TEciMxSubhSy`@fM+cei?FdjU;S%mfe;*3#o{o4Yoa~@ zl%%K&76Z|pVd*c3F@-t>Ms=#-#9}QJF)f9HqLVC#V_PqRFraRcMk$mqDOYNONYpD^ z0R>_e-9-n5j1K_=u9ir81ok`*ATWXxidhk0qu*=bGC(yI8#ww?I`j=ZNJ;@>kD-V_ zRtb}@fWiwVDf>qzI-q$^vnw6#=3?K~RG65Dx+{tqB4U9Bp!u&|%zM08I8Sfg}iI+#fxz*K`!x{@;-8KPd1NIPKr&FRLcc)> zzg4P~mkU`&3K509dyiUZ*OcidE3}8Naj~r01@MEcBwpT#f9O*U&k-1=E+vXh{q@(j z3kf1jVdAz4ON>Hu$nvy=Ibzr9+^=j;9LBM55hjCy70xE_h6$blq#aotFLS1H(`$7; z`fdTq+SmD1*_?WQqH6bAy)(yQ#fiW-c?oOp;~3N_*KgDZ@-I`KvkMey@xJ0%fx?G6 z&Jl+5oQy<|f05^XnA5JZ`@{KPjP84BNglb34m&RM?$E6y**dqgH$6NMmmm9DLHhFF-j~Ra=T|0M z{{X8m4}O%w#BF=nUH<_7mi_ULk8S?HgX{OVecBR<34vledn*kfGWiEA_VxMhz0dRZ zz=N8e&(a28Ywf@S@>CdYKxTpYoJ-5A= zIB*;c&MJfX&QoeTpt$TJXOu?NzV`2P{{Vmf7f6vNsgM)-VBx3r<3gYD7v1(LtUKXa z*ohxQoOJE~0JwT17}MsjvSDft^^cY>7JCXF_epL;-gnGft^?eEZix#HPj85w62DJn z_5T3V?YF}PWq5bL{=39iW{Sox_Y~for}m#___H_#<_V7duk1L5@)(=|?5G7=Aaq&K zV=%f98!Mt}3OydY6%y1IFrq8aE#S+AqF|H0#9^e@hr9wlM8!exp`|*%OMOM~NtGA; z0-*Z~^mfAdN(s|e2-4C4N*J|u6=@t-+Q*%NH#eT#BDd-7v@*_}mQ7CpBWOr9_XU9Z z^f_td6tzm1@zEYrW64h*FcM-2kp&?7=&eMI0j?P`oZriz8FqNJt`eCRlE2^&R?|F0 zL!GAu`4`m)Z^5D;_Wg@WKk4lDW8xyFkE698WBeu>9w5v)KoIFoBKtOn*T>9NI6CoU zZaEE#aWV#kg=thagnAzdG#)B~#u|tPGy+I_o(wbyh8cys(12Rlj{=fS{{UB{i5hK3 zr&AFC8KsqeoWuz9p+Gum<|7|v0cTl*&qTFhjd(wYx;A<% zT{GM~fR_{@Y>r8kI(>HdiBXP`1V>XLz38sK2}C1O4h0m3p8Y>oo(+R_M%F)7yI7-j ziGu5I+dF5;*8c#PTr42?jfn&p=v>to`siNBjvP_aG#>6)&lFK`HCvrNz$@4sM2kqMh0k{OLZIUnB!ru949WCao`k5!eA>RtTHYFmXtC+h#Oa;ep>k0*+nNgHb0ZUB=quqQ-P!d3kM@f}B3tjaa@PMML z4ETMXsH|gcfDq~t^+@{oE~wi?O#`&)-3I1+y%Hc)YXpPY&sX8JXMmMOsupGdydO-b z8QAFY4`;G%(z1oQ_Kc-xHO9o3WS10)WLmc%7&BlEi$1@MNGY5U1F&Lkz zE^qooi|$PjXh}1@m|H&o0O)1#55h!w@#$g)OF7(nLr#u+v#(w~`gs`M#h?EGke>e7 zeAbl1_@`gmKfb-wS0FCX=qlP_ufrB{=ZXj&lhy=?d)Rvi)`}?`M4!O>A9eSn1nbR2T+&oU>;}p20snKpV3W%`J*<7h5rLQ`t*4fwS3oJFmZSjb#{VC{zX7RuM<*yXNF8$2*H;sHTT5Ezs(`P#4z2WQ#gmQJ8 zg?{qjz#59Z5XYb9M*jY^)q{f{LWXEh=H+_RD)@%2)h(X4zKq|0%8(z%DDa)h&C@eH zz*Y8BlVgXioZojS+902v_D6=%zr634ps4gUwdN~$k3FvV4svo-_zdh5{{TJ3z(lYf z@H6`w6zh2S4c@H&(Rf$yJA-6dd)dFWyocxgL;&LPtHq9JkMDD5_3$AU6aL;i%{%L$ z?}Kkldww6V7xQoN@z%?LZMdGKyUe){8PcBlket!E->Ei~MldNJbAPl*wEYv$pdP?o zUTePW_0gUXD)Z6pFmA~|!-)Aqs|3!IdTt%Awd3SXHG}--rnW4S96? zEYb9^fC|Yt0*zEwvsC+6g|ei=QWd#wni=SULg*k0Fh;ftwk?Gjs(}a<5)&zdRJSO% zi{f&IU}REO=S_WOvG6z$U_g&|O?^MF-MN(#$T9ef52L{oP@2-EK-Ogy{{Z}Tz7gbS z{5|8+N&2O+LOW1GcR~V-4zr;QQ4&VCtx)E@n{Dimm=lNk+91xV{J(QsXMfbAiP{1I z2BF7-A*#Lh6>9hl7+XZ#CSQtWy;~0f1Sdc%Y_}`Ouer=b5*z^e2o?|feZV2-W@^~v z$aZmS_Gp>r3Wlk9(fxC97vgV-Bx~p6CXqOIn~;Fy&1DBx4EVhJT9?JH$}MON_Z9gZ zAHIEv4?n_}`r#sQRg|H_WvWK0&;oS;z6NE`!Hv@<26X2ts?mxiti7uSA&kUUUl678 z$nc;FAL?EY0j{wt0=MgI-_xT!irGn$pYx&fNoVhcxYY#$Cm1ypW`Hee;xgd_>`fDB z;*L1IXy{1nFJYQ5B77g<_=v!Os1=_CkTw)yN#LLaO=Ik7hTxOgCx(X#D3m#n*i;po zbH~}86j}yMg1F72iQ#C{g!{p7+5ut4L&R7jtN;eK2B0v526$kAMGBy(dTL^d2vfxh za6%0bRCH-iR7CK)kPSUiYY-^l605<5K53-{$s@7E`+OP&0T7Ug7PAN?pA7+`;oz$@ zh7L4A1I6*?$6h1{un={t+JblxV$c_8W|3Ne;51jx0>M6L1ShMr>`MLwxn@H8tL|6VO{X(2AME z6e%WLDcn6XL=6!*`XCNj^Uo*?Ry`fWX2hX*reBDOw#^v%_OJM9c*2V*qfwqiB{ktemYd|@7< zfe@#t`chP#J<}(rceHMtIm-GdZ;<>FT98uVPyAJ5@`c9x#p;nTOxq7`Z;wH>e>h*- zvHsvT`Rc0^A4EIdFnHn_QH}EgO2S&Dxp(;I{eVBh;QLEE+duTo z$8<;^TiCl^;82er5kLmn*3+iU#5;1G3iYPnNuB=gb@$2TD}4{T!j3&2m+qc76l?zg zp6$Zl`ZYa+repBu2e2pSw!nO)bO|3w!c_kNi{D?WGC}HkugaJ7jd_GO)5!S<&e{H;PmX8Pd54DqORAQ^`X9Cr*m(m1+vpbawa@n>x#Ll| zoU|wVI2^psL_w4Ku1)v4C#!w%^Ov`#=lVurKw=z2V24%UxU%;&al`r>)5 zSm=TB`dfnU`{G3zQ3R$7@J52w7=-b}x~McdoAQcJQ6CAawl<3wnh1eXnZ9dQs02U5 zL{Sh|o=p;wU<7EWfdw#2!eBdwN%MU+EHV(33jzUsIK?u#1LT{Bib4uDhH9u(nl&j( zo+2?;i9j4;K<9d4eDoy*VhliXXVi=bZ;7>~N7faCATvT-_u+s+dSg1MXsfmBwUucB zGG4`Mh*2$cgdtcwRvH`uP~&zAfUep~LQ9mO)s4?(*hTbN;MyEK+8V@wLkY)2z{Dbo z8TbLnf_!1<5ErV4OM!~82Em%~3_!HS7w@-nL;St~0WeDHz`r;_ttDrMWkqs<9OWrb zPT~Qgf`YC!{{SC*iKXiBCad^+!`TN)SsGmNV|DTMa`0+nKFvIozhB#_ytZWL&EFde zM3ayk_L@RBfhU{cT>+GubjB&bJ=9>15HMF@VxU=nc^?zjiGDUgT!s!vKn*+9bE0^e z3~E`@6bV3y4N@)0NTAY#@FW7Ug3xO)*o@nzl{}E_0O$xfrC+NKg+KtPGoaW7plPb; z5fOw%DAK`MXs#EpL?atHD92Wgy+eyIH#{!2E(9aDFg=u2r$zCHP@T1w6ml(CAy5fT z1!zSep}2HqN5}zyg7H0yfjL%WE5OMGp_ZcPTFz1yFnn(?+6=Ev1s2d|%!O_R3RGZO zN>?OVaqxKtXr)CoCq<&~fV2SwtBL240%NNA|+1fxpO)QEv-DL`nV;zb0FBzt^fEgAsoIxrHoO*YHyf`*O=7VuI@ zSDrsCC|cR|v{*?-h$RW81!4fD?GZ|X-(-LgY5;Gc6)6(fUEc!;OK2DY5`-;-fTsAE zDu6)}fkhZVD(}=bI--wLn}Xe9(+mwTjx8{O6ZFbDomZgX7o=6wCJnV*&+zb59U=^* zbRa}D3~yAKgi>680@$vz3@8egI_kIJ#q?uS^T-_MpgVgH^Wb5pKp&1CxBbsoK5Fzq zq!wHK58VLzItM&P8nFRq=y#Xbxf#>WjQ;?BC#E}jc%O^nVVp}eV%*8@*&nBri4|=X z0D%U`GyS>fK!Jr``}Q3IpQzt+=pK^mll>v~{jw^V##!#3p51#h8Ag+c$Krb6fA(Er z9zca|avVb9{FaNJ6L)WHqOYXg_>EJ{R&-03d6)dKgR0*&9|~u^f4G4U_2EMnxTDM^RoT%61}#wm;V6i{(s}(xWqjo%vF zpS1mG&_QqdV;H((Ks3n(r4meQ@OPWyUqG1Fdj3=IqZarm*G4&6mZQHvv9ON__7;5} zaFtK)-14TS)|Lka4-4m zbmw4ytKm?e*5m3>{{ZoIZPEe$0{Z^|+3|W!3E+UG93-8-+tc6lp3No4WZpu_8t>=P&3)N)|GWUA6PAJ0#H(E9Pn!=k1nE-|pEmFa*2o|a-- zKtB524DiOTkG(3ib#miK@#sjpf@tgp3<7-v@HETRmqlJC*-d&H#g2}DKHvE6Y)r-=T$QP6xZe8Uu(gS7~F^ zr1nRVc^?Ez?KzW0mXo21An@~eT50!&q!7UOfMFr3(_9YX=^yZ54DpB}iU5Fx`l8f} z(H(dM&`6|uSk00q@jc*(P9TE|acd~1JQ7XvWnx9Tg+~aLWKaBeRGNYiX#jx1lx~Wp zcu9#xtLafvrRvI*wl0dg$D|?}^s({ZEIJFLbb%IW>*_ou9+D|UTzC-#K*U3;kdbuI zXc$LKMkFmV0xnNVBJdK(QE!vVSK6E>02(H7pd=O6iAc;CEBzs0b$|wR0Vwq0RdMLVk&^{ z)_~$C9qJOcple(2z-pb>zI;0aVi zlBLCV2 z>Igy80-dO^TIh9Y0>X?&1s%+x0f-7GR4SktytMe@1UyEAh-9X?Q=v&*rL8Ck+9hqK z2Jm#vVG{pe+U0?ss^u>cpp2BcO{gcd14+1vL1bLNV>2Ms-@sl3-W*S`=&^#*SH#9emb z+E>Z+2ya+C+cpj92Ru+;V^vAhm(xB%{{S|KpKYhtPp0Ac9IC1m9?*NBdVAB}NY7MJFG)%uIC%j>=@AR+@R*&ZH(t>F46{@I24P_|F@&wBVFi|Zz(IDdW! zaWV1Y1<;ybu$BJ+7c%FB2AIF6ys!TNyF0IfECY5w=4Y~+A3dD7YCS)ll$`m(+##MI z*thlM0pRI(=<@x+v%Bl=&?JB!)bU|~mc>)w>O`0K{1aC!7W37AuOPuNo+$n|H(~1f ze+=tm=R(R39NnMw-;p)uP~p1?ke|Juo09o}yiw}+X3frjtLwrLm!m#+{IUN4)2EKF zvW;VG(yX>T+G9Mem-PKji97!Qe+H+HtJ(7Z0Bx2t;^)W3*;mriwA1HT*q@R+X$zEz ze_a-zFG5cxQa5W9UtalSsqFIkFetrydVkKVOo~b*1>F$txA#Hj)PX4W3{3Gb`IybEKM6Mma`I)Zn=Y5X!hW7k^@4pIq{wZI; z{C}`BGsuy8WUpjC{Qk+yhCx(bV204OT_!#DOcC#JAkZCJ>s>&HKv6(b_P(=)Y32>+n^oq(6kCav zp1d5jf)I6!)BOhZHixL6>;vP2J-Pb3;s8myFJ(2FnEd zvIhd)IFsufXNwIO0RimPQ2`aZ?R-8V3{h|_N6?&4OAji61)1zdsmKuNKOi@dB@fpw zC{i)dq}3>>aDZW2n4hf>7#=dL1rRaHVrjS5Eh-|BCiE3)(I)h5Xn0fts!k(Y8OA7g zp$n|DotQ7H!l|^W2bP8aF3f=_8Kk6%xB+NjDz8;O-RcQ+&p3sZp1#l9?Y&v4;lOi> zfDDwkYk@J^T)h^hZZ<$#LZo`Z3;GHwlzpIxdQ?TT5e0{lE+D!`5e*rrkco;Tbww$> zn;M}gD51D&Kh87jci7Jb5f7?%Aq;QAWP0W_OYKf*JT(}(SZU&0UuZyyL!|(sjzEC3 zaiD`Dj1fi=o4KicU=$LMrBinbHb3l&qr1Pxju)?rpt5vO zhLeJlENP*-SBh|OUuCj`1x*w57sFZrbcd?+q>xE#572?UDz0w+MU<0bHPLTh!~ z7htA1($@GiIfja3Uj4C|-67$MJ_)!3b_@(C16!}ya&DC?>W|L_z@We%-(P979p-q7*Gmy16wJm+Px|x}I>g?3vcCTS zA+{mrULT41x=ADd0FTYC$gM&!l2yt+$MdC%C&K$R_uu~jRWn}zJkD5u<@rxp0J8WX z&M$wWrg|U0{{U5lM<)C4y?tx$ChYLg;b@=N`FFbi0D*iBSO8CYM95G6$vgs-aoC0A zA=#Gce%}JxGebY-4BL7f=U`XtCSusa@|*jf+8_j%*RIAFzPp~s%Tyfx?=0N<2m6LEFFAA{twhJD@gQxqPjj1IN0w7x2PgT}e zD3SrIyoNDY!p_DClxdWZLL`PD72t{-?~4GVhSN$ziG^nf_#mM`1~`tA&yesC%i@7F z24EAKH~0PDQ^j<(wT=LF;bFKsW9AdMds7*}iKn`ZnzQQs75@OmU==bCqsj^Zs;-PM zM~|r$AWVF~*-#Dt00Do+*lGYEALtL>lStI-NW1?4!4wiAl0a#F$_)geT6CwOijpD~ z(w~|~vWP7s{S;lTh{96s9&jAtA6L2AzAex~DrvVIGXzf7zz~FjwmOJM2;W+w_r``; zG@#(BG}!B~@tb%MU}$MIIoV3IA1Px(DnPE+C^nhy+6P4dDMtwna#gy|pkNdM!Zbd_ z{{Y1=(()l#=~e_%?h=X0kBLBn!3wEC=@5S50Z?ZlBP-$#5y?f6_Nb_H*APbxsNR;m zAvCoorf|AOE*KfUauP_Dyu?nH6#)XNvo(8u%F$bCTI8!vq&9frTMk6g?JT z9|X63lGH_xLF@!i>tEnT7NqpX1(<({fd-pcl5dNRR=r(6}c(GA`7a;-jc>DBr1Ls@DVC z#M4Rulu}-c$Dj!q$kL2oMQ<1zTAsO&mg1mD?Y1coMw%yICMfM7QR`kE0!0Y-!b0K= zK3y&`3@5=afS^EdaW_SesDb_RbW|}oh(ro8MpXsS%I`Z0=ZSZ~5!U9g$%mI=-|$W?EhFWBPzCxB=|;ne9J( zGRU^Olllf9$=^>hE^pQToF?~|+I4MxM>%H}FG0Nep z&%Cp}q2Y+QG~}@9cnyFURGt6@c*X<|MZ`AG{{UJc3Zo>Q1DZ|r`u$-ek{6!~X#9Plsmw@I^VkqC=c?$-|wb@B->1-%IH=_5M@Qd_;tl%PAmr+X?>w(H{~m z0)Akx``iBj&qsly!XtfsGv})7NXiAX+uzUlDf%Yt{?!WO}lck~A zb#ikF-4g2Fa;L?=d6YpNHE4c~zxnHT7g@MsgAw%*12f$J0MlXRfZA5G`%1Y!W4@f| z1}nS0O%jJFSQE2G&IYIZXcm z)Wh*V^0xr^49-LFU1!b8Fd17WTix_+y7T`4y;Jxx-^~1~avwXvRSMm^^37xVdr7RM zrZ%6xz9+=e`c4PZoe%xqaz8kjR^8h$Nn#{V@<}H;_@KRywggt&?thUh6TsCdz2E%T z+N1p8@(gdg!Q1RRg=}x+Nr5Vy)PYY|ufulMNJ8i#jCETAD#Xzg@d8vBkdZ_jAp-0P z3Fg2hDhm)GFgB1@=M4mAQ84KKg}6}cy;S72VS|qvym;IT9}>R)P3Vo>rt{~s!YzxR zZ=|I)NAi1TgWHLqy`HD?@R_s7FsG$Ws@)Sy>4|J~ODFh>(Tw5P#A`exqKF8rTQ3dD z7C2MP$SmL>OSO$X;Tm;M7JwoXc(WQKUPsrUfHaAKh_KxiIU^;HisTA_*3ZYcrKWSy zq5vEqSQRQDoW<&=gcA?7OQVMSCijCPc!9*H>C$Ye`^CqF+R#!hYPO_bj&2Eo8zE_> zQmyufQr5z3nA!>$x+oVgS^5>VnL>hsA)u>)7*d`AgtGN@2-i{cdkcIDU|D|z9;}$n zrK{k6!vzDt;bjttEVIBW5U2x4BbpdHIy&$GnhM3H(_$6e6B-xKRD_i*f}|jq0gU$a zL;)L>Ek!yyax&VtCbQi=0 z3KJ%*MTfwsDqwsyR)7RlR19~QL0G);B~+RPi47bFeWz-J*a>74)@A{h2E0_GwhGlgR?rbfD21c;k;TRa=N zJwJLyMp_hhZeuMfF^skW9yNjAQUVJw6L79H;1I^5;VNnZ*ddxOwtGS>HAya*od{CD z_(TPesR9DiLrT$j+F6W%dD5g50Dp`0TD>(;SAkfNLH7-WNmziKF)RlFtXdUpG!=B7 zF&^1!4uk{)0w&mqEtt7>3lu6O!7j8g_bgQ!1_4bFC{!$XkCYCOO(77A1`uKa(oGql zD55GTz%W{)5CH>|2`gDhg`|S7F0j79ghoD*e-vm!c&NG*D|Odp6?cegu%KojmU<|Z zQRu?ELO=z3a5+%at>(|6r$aexOqn!!6C3Dv}J`BHmE`n zYFq?@bw&RG6y_je!4!fLP>82e7%a+X6cd-C7}eiR)^U%JO{Vk#*lJ(@001muMFEa` z=Qpu4p1+Tfj4SWjky?$<%)iv~(gHQl{{VR8zxCljfN^U>*V~ukJpOnT5JTy}tL^}Q z3F*%YRcNuuRrY^AUWQ)*_7~jx{_Fq_I$o$bJXCICLH__ZP5wRu;ha6~xhl>3#Mi`e zw)Sn}@P1H^ooAlJeT}By`ru{v@$dnW42B1&8D`&xP4Yle{Z`h2xWm0WSrR6qv=)`w z58(dir5d4U{JzSci*^sLP#m4~yS6{S4F3S%Bk2RJFRI)>w+*w%tTL@*q|?_!v{dCh zH6LH>di1`lzvX;|T2W4$NqM}~d9{n;mFx?1qJFR5mTzoTH#BoQ%s0PWIP`9XqI&xl zUFtHs{{U4lB%@4|GJk*b*NN)oR#g5275@Mq%{)z-=ea!@*uT^K)L;hun0w!pX1V#| z2n7@VF8XEq#q~MlVb}cwr!aN=oqehApRI3weBPgwlgWap`|n@zp3X=8d?K>H{``qM zw3?rF{{S0r4^ZDpJGHuz1V*Wi0dlyR4~)5K=42-a-P!j3*1P3mb1R?vk>UH2@0tPt zJ3f&MSkTYUnc{#ySWnMs1S?)zGsjt&+}D%mskCk%2BMOJl`nriW4y#2fTQ~!k!|09 z`6J7GC?*1LwRn|hKg@>t45axz_l&)lz2f(@L`8tE59Q&%AIhA8bv-m&kx7rBT5Ur3 zsJ_kyt5I$~1_FdL3r*2zOZ8d43`5+Zfy~QMwV+rdoJKUO6<{S(b{UT&O}hGI`m>|0 z9r3z=`zx?2nc9X`9Osp4^ok-XZ7z)0Y5jakf{{pVtSPlOkQjOza^o1cca?-2vCakw z5DX<}x1`}@(c1Ggq53n@NUYYxEu*2Z8LP1^zpslF!B+t~$Dyj3UU=C66r>R2 zQe24O=7zqg0408uR)4CR9N!UG;HuCB3D2g}wO7Wc1wThUJ;T?%9=wVbp27|4iA~6u z8v{@TG`tWU3gVOw*S=z40F_jXS`3y7C`;m{K%-VbqLqT=R)axrm4PAXS|$Ggp+355 zV6>qSmZS=cbuik<`vL;B=&T}spC>kecr-<#08p|SRekCFncx8wQxQv5_-YOKP`)6M z14gYjh3F|^qaP_W5Cm2Y2!NcSdDw`BTBsHvg{Uo3biJM}(1h;5AVx7BjD^wR%C-g| z6%YWpQr-b+Kvf6`*r)=2hhEfGYZ2N701PkL$4q>8ezISo8lY%#xA8)af%NuflceeN02P_z$;Aj6VWQi~)T?Om=9)X$|Oa7760_(KMY z0Zn`aZ0IlBQB@)&R~_+dcLEUT5J5~54_2$;P@xcDCiD#&>rq+YZ?Zsaz)=`O4hZ}3 zUBx4N00$QWCAMB1Qi=wEq6mOiQh)>!3FS6)Fk-wIszjlfE-OGF-jAT5ieFHBG3unj z*F@EfMCitVNt9})BB%rf9{Xr7ga|f>qEakqpy|hkf}p8z2GtlSL#QBvmJ87wbohNR z3#VKliU2nNjxK$qV;&<|3Ls(9{{Zk$Ww1oG=_w+$Oo4)Q0D#{Th)(oM;t2Msv?ecr zX)YjuGYvxa;==ei*Z0{2UcnSIEdWZ5h6;sBRta7xtPc$XY(O^v>p&F0R$W1XP~Z?G ziVU~#l}2L(LP9=VoB>l4LDg&iil>Z3MKIG7=?8M2m{2AnKna0!=^(CsFNo)`Q?Sy{ za-;@=R00$Yz#$jdl_)3mN;wb`76N)2K%oUdVS#EU2_jVsIJ&}~hk^{DV*Dyi2%Nai zCxTG8U@C^-^MUex^olS^iS1&ji~|n(VEEPN3dfJ=#~Gnw`?`ve~E7M0M_UrGq?^bw&90d2*zKLiK^w+9z0aw4rZ#{K*B0d!g z*vOVO^!uLOsk-Jp7+ST=;719!+`zCiF>qhitil;Xk{$|e**KLyuQ@to-S7ujqBebU z!qeFcu*Cp1m)3;YSv^yI&o>Y2ugE>;{C)lLR93gpp850t0N+$TSdV}Gg1Vl|vkOta z0E>ovJ_G6h0Gno3sC*WC`HP$KY^RvCc>#34q~Dt~_V}m_x`DY=@66mf{PKF3xv8k1 zW0XZ|4AaCS{{V&O99`O`xzl_~1OEV@FX%7%{{YVjMxxEM^}i><0Gg2TXUR`EI@a{h z@V!^YperAY4_=fxC%>fdMCC8#T%{Ft&+UD|&>av9Hk;`8W>9~87;S`vyE*Ok7^$C1 zD1fIKj9%R3p!CElm7pho#lC_VkJNM zIEXZwF??JRs;Tijpt5!=2GM0f(JW>{*gLkZ_}O$%U<^a^!87|x5i{T7k%%m z%2PTs4;dM(&Viij{I7d9_)p(UTtl$I6+g>Wv;)z={{a1eF0pMh!YZrXLj78@%Epu; z1&M$yawpO&m1UKwd}@}1Xbvii)74TSRCqvY^6J4G#rL8>1oX-ZgNaKZt9xC1pa2i+ z5Ps?dxNd{KFfJs5(N#!(jXu{HhlHV4h*=djg4(h$5y<8OVAmt-)=l2A0V@Mn>FHoX z)|qPm0FJF!7y;I0=!|d#zP6Aqp|y9Qs*9r-CWI=5T}+CUx)+M2rX=vgND<;1P+v+- zUAWdHCXIT^6C1CH^dAeOjZz(b?_keQqd-bC9)PYYxp;fR@5TU!O^NLg_q?Y7d}(2s zJ*wu-)>SE^?$Ln7Q7TFc!4|}SX+=~AsU*d~nK7z4;fW5b>pdE!m?5V6Z0fjJx?cVM zq#I2d<#O&jrOto_h_vt)gNYW=QaVpqIb%Oy4L?F^ zs}O*pMXgHpQE2)hBFZ9&OCo$&yBn>MATeSnps7??Sgbvws$@z!lrjRkThb!X)W88y zV!Z^82acdn@gtbt_AE*BD)7@nFIw;<8jIjXV|td)2va)G)9b)9)0Uw5OEn1uq@pz` z`JxCT<5)NVC@PxhB^#q6@UQ@dX&osvQ21yGqrhlln!S4a&(}#w;E=Sdgp#YkG{nUS zc+fN!ghc{CIKGfMs)y1x1pFpjB?y8%A+Zcf_VC|KU^jK^D5Mw!M5R`>0kRQ@&|ry# zWAATDa)=7dr9-MQp+I$n;+@ne06P`*G&BHJ9Tg@aP(Z;eY#e~!WC`LG3`$W#u>}!5 z65G+XA+k8iF)|%m+gBmLfk;YW!ls2S5dsgAO_4846Hx*Q2e3-k)`BS-ZVLv|deCC2#rz@U&QsxBW?Cv`kWrA5_&5}^xX)xr$%anqtF1ulYw4K1iy5UWJUm}&U> zhTy5%x7X(w%hB44UMxDW->?bnS19Gk~bOA6bmaInTV?YxZQwI4&lQlXDV6fjC`F=_+@UMc{GN$qP$mEifK#dr z!EQ8B1S^ReV)K!N4<0F~=m);k3l$#>A?Dfw2_g}egk-1g4Jr}wTeu}4WlAR+SHXfr zUttsvW3{!_O3_jYX(qwa$NXVS-kw!N0}2W8-?$m|YLAg!6e2DQFUn3^`D|gNN584g ze;uCZum;M%P2coz#Q20c6GgU3Fn!&|fAijXs7GBI{{XPQ{{VV=PX|)+{0WO8ZZ320 zzZQwBj@!(Pn z{uY)Bz8o4LclXgF&ra>}h%-xe{{Z`Et0%K-(KJCJWx1E`O-DC8+8wLB^|JBjv_0>E zKgM&ommO8#U9MDj8(vHOSNY5i{PKZkw@LG@D(}}mog75hA%^k&%)Y+Iz!zYi{b+yx z0DI2ojWC7pCwA*FB>RcMO-^*qAO8T5_0jlv0N>d}XZA%oH_mJ>6-( z=b@Fg@`ld4kUIDHALdiQDRUP4KHKd5SN?e+>qI+jcxC?pH1_kzp$t)$aAmv=&;f0E zz>%upzz2pV!K+DvHIlyl$6mfliVE$Jw$JfeTXCx#G4QLHr@K zd4oA$M}q176pi*D7XEiO_`q0ze#@vnjj5JTTJT3i)y6OR`$9hIc(+15YR0OTuk3Oh zV{%Xlq{Czx_|IHDpb(&M%4t9T6~2b~t_bDyHoy`5y)!Vnf(5OwYAI%QIN=pV?Enm0 zEpv^k*EERLT_v!B2S_WY4_#6sLZKto`z$t<_+l1ViV0L)vuZtFVPT8>ID}bqswt6B zA|QBD2NY5ih*V7!$r;6XWux7ih$?IDiD?nZMztMc(T1WJ3cUgSSBMazG;bZLXZkje z0&T=6rbk3>6aN61=Y^oEC~%bVtHG82FQsujBh6Y%=%+(+SHwb~sW#X>as(9T@bFS% zK$IFT;r9TE!9+MEjm602`spr)J~;#HL_V)GJx6~$If9g~Kd7~AYym3xBn<%HNM%2v zh(cn7X(7>6mvUtj?KfsV23S;Fbt7;@L|{!}5|{QlkujRVurUj9mx<5u}(utspXp5UUEM;bKlDVObpyt1O_vRH_q*>L>*l1Zb+l8>KKW zumT8TA!h|uLk<7|o-mac1KbTLhR_$P4-%m!h$z?>iZdv}1@Krh8z|Msq-!H;2gtD% z6o3lbC~HgsgkKE)fE8h0#0g3?K=eApFbqW+fk>kmEd@P+G}L%31Vk>2Le`MCL?>@w z)*y$@=Fb2iAmSMnHy{j=)k?M5C)CvH zSkj6ffHP#&D8W?fyK#$BdDTCW-hLM2jkDof%nS1VkkC$1<4nelRUz_ zXUu2YmPfvcy~WZ;`wMu| zc{+QgK5g}xtkwnTy|{hX^M9VaC;tG4rw(X)ul>`d6$2fR0`|Gt1fIPV5mi{gIb450 zA~5uL;3a~clM%!~pMx70R83USJas~m%p+jPW zhvCvwuC+m>g^)>%e#oK)?A4$M?Ac}ZOsz0ZdtM4!O$^QW;d$->a6C#x{?Hh(J)$fB z0D+zyyScWy4_qTSYf0#QyM-l)kx5!*d=ZT6~J5Ks?()M^okT4bJ!5$ z4jV!UFko4O3RB>`AB}jWT^z7Bqv-u*$S7Uq_Ow`6Vg0dKWscL6dlo41vX%q z)~8d(5ePWZb8flMgI7c4T?a5mYC3GS1yR04(+6s?%tY9ppIZ5d4!lMi@{Z@$I|3sy zltdb#gYW7802|>-B|_mqq`V-#Wd)!JHtKMlx6`avtVo4OOa*sv!%&@C+|M>l3JeGU zu~2LdmHvv<6KE|ZP=TQ9R=#PWTp}?6M&%2f2+{p91-&C!C_)WG5%9LCI7iwrJS)|* z$HJ4M0+1dYaY4WbMJknRG>i=~ksJ={(}L+JrVx(N5`qy+MuN~gTY>@{IzBuJ7XcaU zA_x%*B1#dV2*uDsD?w?@Ff{NJqKLML-UD^GXsVtJL`b?3tAShul{Cp5V3a#hGJtw5 z4hUP|#K49QkWpgt!tmb$!Z#FMV*Fy1sQ_pxb4mc{s%kRTPzTk^O%^CQQ`Qv6TPP0^ z0mo*_Ad1h#lLvANkW<+gBjw-1n8ta z6*^mE9ZwHJ3nUN>7pJEVgk)t5CQ&AWw3p%YLRlr`X@dnA0q9W~|t zeA}Mo?eiRJ+DA3|j~1rCTSw4k7i*LW2u=>4%m$OYsvqNie&erTg1rbPV1CJ2fy?j1 zL#RNSfY6nudfN|6sFe$Uu+4IGf@9rHMR>lq<+Q|7xucG?{ zKh+*bNg@J(A=l-t*ZTfG;<4bBx8y)Oon!OYf1PucwR3`5xq zlx%^vg1?ov7ykhHaB1w3%eGeGW!3t0@`yI_Pu2eba=yom_a|Q2_nA=lC;rAhMTNYg z!%R&a!xixttd_e)kmx&?mS@|vgkC0=cddPLY zkAEj!6(J5MKb6G%`?veVSv&qBz<%a$?^ZrB06^X=)#mr7w>vytCdy<_`V&1B`8qYe zhbOb2^CuI!&lH06&!6-DL)h3Z`z9)F*Yi)}dY<>iWIBmiR^T5u5@{^T>BaQ+Hq`Wd z^%XUqdQg6;D*?dTd>+2FGM{O4#?3)n;eSe?*PJj3ql|n>nDWMGaEO5`~g=9g3=(u%a z!wn5o2%{`oaNa9!SG^Z@g9@OqfPLSIcyYRhY$1i4Lat*Jr%|HT7-*=`rJc z5!3B}^@O54l+R#3EQ0z?8I#~u5F6>x@|cs^6bq2QBXsZX@hXVe0b}YuJF!WF z3Lxq1ciHR4RCPcA?`1je4c)r<8UQRB9TfzG)V{Dh04~0|`{(j!)(XT5g(KCD^D+F? z=R5#ZkSZS1vUKYOiyX0nF~rjGG`_aY_r5g>mNEAYwhlei3kdmA{*YQ$EaEKbmRbT; zYHF%WX5n{FfvjjBX>aG!VZ_f$-vFvVqB?&+_Z`?CZ){YS6f!AElV_~6$ifjDf+*a1 zs8{U5S_r8@KvXs>HrEcQcsO^68a4xjHb#IiWu~=hNesc*L4|{o)5Q@<+1lcm9L6#j zKofvOCNI?XraC*zo>qe?Sfo9H!vtX+7sMTosC?mQ8la3|!dIjg@DBd~=mZKK zVFCm+J#axn9%u_RFj<2^TLo)SbbL2qfaO6Rf@(Bj(g&7=0kA1uR4Nf0)w$*gqLQWo zbke8NS7JCD*mPGAb%aZ*o!}D?2#7TVLNPkDQ9)seKrCAXp;8p0)RcMNhAHqE0=Pzm z;B*k_Q>AAtyJjtWKC3Z{Yt5u^kRkwtujB_PvLI+26y3Q`st z;714oou*=mdLVh#0%29DKSBr~Vb_2c1QFqC3~DKI0UE*qfki1eprV*N70)b$Rf$## z1VJb3JzoWmg{S}$-+_~f8Ar`oZ%e7EDKu&*DHFg#6mGx~RWyg-vr3*NC;}$3*1&59 zU}?w8FyaJ3fn>x=PgHOu0;LTsb_9SHVW9x(7*z@c-HA@rg063nDZoep(hqiu<&1n% zV5lR~6=BjMMTLU+f-0t_Ai?`PEIoiJ866F%st{!KJoa$#@ve9xs7W5OScxMIJx@0H6VeghRDRM3q>$HkI)a*#`#CSr^%Z zqNkPtkO}Mof=5OuK-6%OSkN2;A^r-QlVNoTN^3x-yh3(*37%qW5?JF9G%>OpDWTc5 zg3IvDB@fgR+6y5XA3zlqp+PB_p*-pVC^{Sr0x2O$3AyGFXLh!2g1flb-QN`gup`re zzLVS|+v)L#NoDjf{@Gt=#OHy^%tPxF>Yj~xzJMTD{LS`0n1?BMGdr&sI_7b+(@22n(wfoHutBpuQ4bYaSM+MdUhvXIa4b&M?+r)?8ob{jgCzgfuk)FAptND+wI|&>XlRd*a z{NVopeb7=%vCmD^QOon!b)@$GX7~zF6(CZR+wQ;1 z{G#-3RPH!^w@Lp1L%|h3K7aZ?srEag4a1EEv)}-@Gd=|e!R8Q30qJIR+`fQWrhSLbL+pvei~2w)`*2|ILw zFB?*U2ehKA7F)XyCaG{4mMk-U1HW*;eO z%uaB~$`~y7G;y{!AOZ+~s@Kt=TJsnL0`zpqq=QHrA6T`#!5+e=w%IoRPZvOm!g_4M z4p}}K!7vS23IVo9rozRZkg!?^0hSy;Pvl_I3;>|uOQC85{V2#L9valjs)@10pTkRL zuNs9~B6?DO1okCzREF@~V)|4Nj1WxWRpB;#466lkR}dE2e08H$*1c?B;qTh@EheRE z9CmHI?CO)m%?xSSa%-bFWG^2Os;U%{m>$x9?MmV>e_4`YW1-dPK60dT5*tL&UsznSD0zh$i#A!hKKw$wE zp^YK|{t$dI3mhOrLs~aVgeacvfLcT?M6StoFCebc0E7^53F!0+5lt$XAt2PyQcQX! z0J{^)h=C4b7vxKw8bI;EXnQ(}nny*-*p9YC=7W{6Gyx{X^h`l@$~eRf6b2jixk$R|QD) zI0l7tRR)^@tpZ6H5VlCE?%xF=0>c!Q614=WK(3eygD7_*xCp?ts3Hn7y`hZs5B%!Y z8%DJhft5v3(rRD?Fch=Z)|3x>H+NO!M8dUbqKN25D*Dt#aNy&jq6!#Nh=V$KI*M$- z&YUBnBr)v1SWp~-ofFUi=_NbhhD^vI7?6NDRBK8;=oKsnA%S>gf=EHyqE!KkeY(13 zfV&;PkH$HeeJ(1OpoA zw4yYXAZ;$Q^-jT0FPtI=Lh4dL8Ew3MkZ~MvvbUlgi-=tC2!c|56dt(=>wm3@qqnmE z0Fpes82Kl>v!BQJc>LDoZzv{F;}iAY=f{U(TCfhd!3I4`Akb6NoIYdYXSGn!Vs)_aOd`| zbbih80R$6Np7Kq{Ie+{-m;1w3H`cVdj1PVVqHe@UQOVh~?%(I1mD$hQoX_({zWlIb zND=sn@>B81`_ajSe(Jr{8nHSxr(>ttlDu! zb*%mOS)ZS!d54S#ZQcC6{C1@O0FQ!T&ePnTaQ^@ln`l5VPlwmAUi$Y-os-CjJs64} z$m_*V?$3S!uSk6%O$m7SlhNR3^mpvkXCj%e=g=1DjtKkX_b3TLKo{RXS+m}r zz>Gv3z)SBx!=ZPIUgchpz4o?W^?prmAUJ4!p+fCHW%p-@LOQ^RijUQc0yrF=M!O3~ zL^7f{wMBNGokGF{M+7bldF|Ox8w>ztRKkk*D2sI~UltP6uSI!g$hqh}2a#gf)qTq2 zZ*D&f(VH;urJ%_Cxdn|wad{vJP<<2fY$VPwf znnjRZ#*s66}htfo{#JFDAwuvLb#w!-l8p+?w0fPR3I(SLTx=n};S zJ>5mk`Z3=SN+K;IkdTOQddB#_aHh^;2ds*-52Yh=s?7(s0a#N>y3z6|Ef;PCK+C-g z(GsfPK!Zg4>;C}ekAw!WbKF;_bNTolj|OW{8ma>|(DB!v-xWz@1iBm@7|-Y8c)+21 z4|DFJpg-ckbaH~-ezx>>QH2+0h(Hj6U%t(Xzx2_iLIN#)1CY_IKzG*Ry;TDzY6sKR zezYrS4HXw!H~l%5{@|Ge6KpPsPy@IU4g*es5CMcyNLm2)637xWM#v0941l^m%{mhJ zTF@qlnNO5aJbt^g_I zP1ggWYzrQZEbajmD1{YdDp1{_?MT+2BjBN0JW#1vTz=P*!cqtF;CdsQml zC19qhRbqo0Y$Zx4r-Eq;0-`vJbV7cvt#}wVDxs|)F4KRoz7wzjDI59Ld{iv$HB&kSK|LEh0WjKs}|#Fjdz{`3C;%zw_b6ri=+v)TUuu6m^d&I}e`Rdd_S;qP|e zEm7!5N!KImK0jA7%uA!r-q#b|yUyem^ie+r7@RKj=*)+U*TJ>*3GI@pE~-^Z0Q8-n zzvh9R{+&hab56vTVT4Xy-B9V$QXcQ4lWqS1{AuklUE2Erk3^T@*1k}Sg_EDY@!>Kq zTT&=Mg-Hp#=g-oA?MF-zTJ(RP*zIE^qz~|pgc>EHw6ZgDAhD$0!&Y z2Z9=(w|z1G2dq4JO3gZyo#2(t&c%t27^rT3=cNg+yOM^e=mm`&?_fKJ@m46Jx=-H4 z`*P{)`Iyu3VZ;`9x4XW$UodD|Qel_o_PWKs`~YeofNH$2MbnCUseq6ng)uV|3(B}Z zVE90Ly_H=y6vZ)?CyZp3&{iOi5OH*Dl&63ip2{dsN5N-b3zQ#6ADRyWP@3(p4R~&J zo#p*Kk6rNqNb}lGNzdPYuRChZN?P#+PB_8z^hhX?aVlC+NvS{A-Riev0Mh`;{ES#T z>-JP&Ur)2q$+3T_`Qikc?*#rT@3KeM-0}z_s@&t_^!DUPh46Y7j0*_*Oq>ZRMrzV@ zv!H|#Xf6p+2D=*LVeD?gug=C1x$2wyAeXIfSnMW#S(-KXwP=4 zw4Wz8Ulnks?lpt8Uaz#%Y4MiVH9b9vtY-6s+u~_KT5}(A>(WZ`zI0JfL4EJ(BX4Z) zf@lIB&A$GUQ}^@5DkyF$lXp*1dv}}S8`ThVs2e(+=Q!k_ToZTl;7SaSpznkOZnIv! zN3i1i+yw{?fY6i`Caag-h;zykUvLVj>-aL_YVU?114e8vo}3&A6;Xm_(nhNV4Ghri zZ!@opBv9(EuBz$l3L)sq$csXi^wCJpQ*No66x4C(uHJFN^yD6(&<-d3Mrr7KTFuV@ zjEJLnV3)Rg{=P3AYBrnN z)?a-}o!UT2HAFK zXbDhZgrM;{V<>=vAqdk=0?vqvP@&9tsMM^0kPUb%Qiv_7+4j^@gsNIR1%L^Rpp;^? zzW8={ih&QMB&mv^QmI<-z~I%6WP-wMwNVGdbPC#F2-OISihc`JrYp4uKB9+dM^Qx< z@RpK2F&rZej}=kzG(nVsSu0>9ak>u1!{O1MOdy9Q4|0W3Un2VO#_0gM1fflO4zf*s*Ma&K(c^KWC~$46);g!+V@Ig070!(62uq*D0mKrf~b25hM9G0r6OS{sD?^q%>_|f zbPXXh8XLx+V9+`mNQEc3il8c_tlUFFRiT2rT!KMBj0ILi9I88TX$MdRl!jzCiUm-K zlx{-ytzv~RDkxSgHMB(pb8aG^0|fzVg6Gqk^-)xX@ZV^}Y0!&)Uy#4ihYg(|AzKA#2NCEXw zXN()EPSDO#_QUhOygDjD+(fgaL|L_FT#%ws52TuurXn>|)4)26CspHE0BAHaV8iDm zHAXfbf%^Lz&oOI700M~&s2((>^m)Go4x=N~&-{T6*TkX`&8gLU*vGc+W8$!rVKe#* z>n|$L+6tFOPiXR^Kk@$D6bAhJa{IJl{ODw{STp`S()3&ae=?hcyKqx_Q zwBGixqNjbKYO*;7HRMU_pZC?H%(~Qs1gFU7Kl}Q^8VgI`NP4T${9yo1UH4Z4Fa-Yq z{m@PD;BV92{wHho=ch?%n#^)@)r|iD{$`*Lb2aKciJ|O%d-fC@ph|PQ++{8dMw{TE zn);*u+Yj^SeZV-ZTpqUHUi$alZ;VS4nI0ccc5^Py@-61q(g>cb$??!F)AXfl7=h zy;LwFd|}{NRic;%>x(z(vZ#DAiv~(jXfa<_xyrleumCv^^hlsrc6`qSZN;a5LmNBJ zPj8Un4{$S_a3}fq?F-q~3UAB21J-Pf^Ahml^YyLCdxS>smlxqbjJ7=M(SOiHUyp5D zfEdv#txh(Mi?`~+MYpHZ8vXKx6*eF$F4L)nv<#jEYK_$P_G;*0fd>l){6I1^GN-6s z8=fZQ!pT~oG=|b(>=CP6Rk`-?`%bf{`m^IH(QCQA5c(35TV2bG% z->y`T22JtSwh>CxpE?Ak&gw9poimZk?;ZQ>2Z)7KIJ{+{xO(@rCGhcZ#N{Kg>__l_ zz6hqMTWx62$J*B2H^d;rcs$UZrb!e30AB<~2*fe^T-c8MhQsH!Isue(I&^yf08msx z=xo9-!xgpkLLM80P>!qbSmYp8uSz|;)HV&p=R7*hr{(daQA2rr|Fx;jW&P%5!Uf}o~w zJ-Z-dK{z0uBtQUypkk&fF=na(@XbQQFpwG*C0z!qh!CP!Gy(;QjA$aT@P!3O2v!8F zMI%dC5ph_Z6C+!rmawHKTi_*LV?YZ7F*T-`MSVuF8Us`?S?FLsgnI2!yskpD24PL`l5(ZfGGwD zhCF&e4HST4itZ1GizV6w0lE=|KMW8^^0*2D42{P56r9GR&>IDIKvEI$bsb3<00t4T zf`r%~Qi7LMC<+mUUhssNIt8*|TNIpC(E)(WrJ$h~R6f|_9EXD94~)ZbRTgZ}h0<7n z&rDgtDjC4) zlw`U=6o~lIC8)Bl9VD*?0|LI4Di9IvWB_T11J8YHh(THdh#(yl4b%%}cu10+U5B6m z00`OJp)rQEbV%8V{FgYjIwg6a^?eIdVg(KH;-sQjY{7&mpU2M{_KoBK4l8oETWr}a zqbk3GtdoFgYQ;*hs;)?g6jF;mSao)zsc*82Wz$qMWZx`{U@Uv$nX~(@cgd7ig+F-Y z7fU^_qAcQYODqe35&_^A7c=Y2>P%VumH zg}S3g+-_#=*F9VC@c_r_^Jz)7_X4^VsxMJ$>%V=FgyzJP5JIS{KOgsf@X_@T3I`_C zCLh0+kWlqk!Vl>W&)?^MV%h0K4d3l59?L$J!uP>dc!xwo{GRC8-*wLrx|+JUC=n{7S#hKA4w%2&Dc-`_5kJBmR@cp*jA<0q#%mzcuqxxx9qOvi|^O zH12qyJWM}-&ZPGL0GA@(PGwp7`TLUze6C-i$q_n9Gq1fE(TI&7p@kd%A3KS@0XU6` zB#{v|KdepP24PR)msfosOVfu`h$*fIY{%MbjnMnzR-s#snK27;RQP@i_->wzd)UsOq#mluq_DdSQ{LS0LTf&|aZcYS2_QkI5W!7Y1<;9E ztf&UhgXNh9jSf``!_yCDhl#eUV0aY(Dr+&TRcD4Mv0X~j-6c^C(h5U3aC32*~W1=+Pn6Nu&v z_O1Nr%yY(2N|`;Gyo>l4_8|Qk1B8WRJ<~HX-w_faH}X729+}@p_@)BDgQbJr#%Z<( zM2fTt4ghh2av=Lksm2KoqKxz^V)q;DRRC7C1c*;WaEz(fynwSDQWzaF8i=52>%!Ma z=2S@N!&E~e>%!p$6`eK+Q>7WAL~ct+<^wRn4u;{2Cx8+u#9%xsjmOya^@836QVj`2 zdnnZN!V&4USdb7K3WWiK?J$-)7ob-f8F|12RAT{Zm?#qvqMAZbZeL+s4CDOk}K$NRd$&r2BfHjf+_S> zt)hd{Du`>xbfX!hP~kvmq5_KGpaUo<8ZkH&6k_0YLkO1|4I2phFULKva4m*(0-K2Y zX$FBb2L#;;Ln}~-At9qY3Qy5MpsAvARhH~X3&{(Iu!+(XQ3#M82+Ge{+k=iRAdy`s zi-~Ch0tm*`Vu3)!YfN#Z6*8)?!Nn?qwFr76P=lo(hhEVf zhk=w5Mi4_Mhy`i_0nYJvt3wg?Mj?u5r&mQWM_W?V@Eb?bT@h1et^_4X<-6U0X0v5E90hUAzRyC zoo~Kn%VXfckkV~o=rNBJc_4zua8pC4xRIz~;&_NvC&0e?e8?}bp@5}P$8->0pOg9T z#%bK2X|alC538K&1IN0*wtP~=$q zI$o(uDe3`q;{@7`lPOkar`Ih;OsKV)g+RvCAn#J}&h z?;f59x-9^LwYC)9{!a@PRA<6ApKpAJY?la>St3QI=CMcTp%axribQoWYsY7G@F@bq zlvXF+^FW||$dF2L7(!7L5^tZ}0fys2N z$ip|EH_J|;@&@}XFC26IvbJ+|X!CP#0GDxw<03S{EsXXN$cv{@&x{tsKKhqd+M7X)Bg)}aU= zh@o+0YKxIYE02$0dIaUjlsC<-XT7mf4~ zYWS%T*MSv&1u{PUbns9@Fk4il0|&6+QNBss(2DR`UxJ}A5Xhii({hr1!@F^Ne zZL*&4w6zo80iPiVSeqgZH8pXo;F@{?-V(>QnHrKhf)c=vJ!9eoDPXr>6eDgCqiY6Z z9I&vn#wCJ#C?D$fpmpsa*l~mKK|x&{D6!1)o&>Bx1xnf@C(&*Q6d@1MXcg5=b(t8b zs_mJ^1`lV>S-_q;5Mm@suS`{FLOU5K7(f{aw%b!n0F)Pe7Etsc5mO$ir%ERysw6>C zNV!HU(H9qvg@9qah{EXmbp=zY-DhWIhRrVGO7a|o4 z33^0ea6~a6J+{Twzu1tej0KAN#E>hh^y9+WQYEVtOj3x&QiH;xh#3n?iKpX6uCxMX zbxnaK{v%rD8RAeNHDVP~l4vuMN~Dl|$Y zNUj53C^Wb!N*I&c`iekQHF^#}s5o$D5!~n^f{dtkC*!q(;v7f7WYtIT{{Tp*uVXHG zQdUV63!p2H)ijA=gAo`hv90D!ZYE-b&w!j6fkUxSQ+Z7AbtUKK(WP)QC17OEfg9MM8P!^ zo6rVP@I#zP?Gh1Ife<4K5*FLgw$^Kgl#~Dugvc#|)A=HTK?4;%)VV>UW3n9>C87O% z2%{KB0vt&&bEWT!ZFOxLEGe$eh2Qnm76d9LbRs4pktlSSCc^UaNe73(C2IJvvCb5XbcnEfg$_>zC@)qi1KY($+(k;BHB>+Vh8Ppr zUni?P3oRfNrKEcgM3F%yo?;sKMW9%!qR}Px(NzuGbs+mX4~eSO>*Rsvau;_vXuLKU9Ym^wcqHP#sc|UfY_3D%YvN^ye;PxQ6YzPYzfR>H`xrq&BrDUpC zjGAAQ4{sY`V6^M1yxzB7vl*VeJBAF+$jbT{;{O16FEBv$_3QF)4@a1zZx}!4KV8q} z`L!4b&ris3tZ{u_cnY2aaF4Q4A^zl>4-gtTf1ih~?P^6|0LR=`pHfMB@xRx~3v5*N z#vwoc9S>e;R4Vguc$`O@?+v~Z$3JcSq7uzcI({IuP|VM^AYgwt-<_t1{{XFXe!1Lp zz9!QjfAt{;n#0_V;-pPRsKZ?}} zp`P?#^DL-)G<5v`0GR&(O7%u+roTi9z5f6`&;9VC#m&Dv@9V+Xthdai@2i7*Mjt-& z^At#08R-3U`|t0k%AjFN4fKZVLg@Q9*t}*fA6*OX$o^;Z#5J}50C9q-N8U#5%uu5s z95K^>Cq2FN5L0*#JI=%N_+H5Q02)S{f`1ZB%l>9Ek?pFrKmC<&dX}C7DY5U&{m@8$ zd|gx_HPw%3dSbuy9b0@#Wp+Df{@>>w*x-gED5%pwTqoaa?&gS*wMMv;b@kKl&Lc<( zLi&;_{scHIG>?uUQT~tw3WWavbXk0+D4xqcz@Ctswp(DkCj!PR16{V%=92jWehuyS zsS7(Iv2)7ZG#)W{!F6C%&uA%n1Yy>fL86V`u`GNe!lI%S*Rr*q(-mvJWR$V@dAUgb z=k$(-k*=J3Q6*k`u0x&xHH;n(6awZ9YFGls2~-F|iITuWf)6k=%pmI7buUsp-lnQt zd?<$^6>}RHq+21|#`)iLg5PQDen^j5vl|X%SjyLO2IIm{OQDOOkuFd5%+E)f1|Z#B z!SZGjJ&C>R?P7jLMfL^muQUFJup0AKxm+5CF$$qwb7Me0vPI5A6KSI zw&v-K>@YF<&Lwz^u7tH|qa4Rd+HCYSvGF>J2^Ibg`ZNMoRMurZz;j}Be36xxwFgjO z*B04??B}&ys#GNC+)xX~=ziw=AjrvdBvTp2=zw2}H#qtj;mhyR(=3z43ey3Q$KE>> z4Oy4Kz;VjLC53iEF;76K9f<`=u#LNZJrtM45NL=|E7ye+F}p(D)Qe0 zAn{T;djk^1FbUDs@PAkvtI!C*$cO+`0il@1k!(RNK&@A4@lF%a6bgTYc1VC<1gMxR zq;z#-fz>!XAPg?DYP1v5AP6-uW3<4gfCOa5v8bvO%nc)0(Q*F(Qb8X(jlpU zf+9Iajc!F$I!1ShbO!?)!85#&CE~xH#l9vU)(I zsArsXlBk&YV6Xde_`z@>ti^7Usb4R^o_YgO63vD4hPx`w0GMp#Dezu?&}ONJ#d#L!e&uMACptv`bu&ME$R_u*oGH23LoT99w`u#e?zyASx5naed{=bSj zs+xj%Ph~E}r#)u3~L&ry3Ee>INQS zaI*IwMTV5&(r!;`!37&6{t;h zufJX%hyD)fCmrIvx!wM9E?!Z5DCZ(eb0H-Vmfn7K!X#y1Ki1L-&am=o%={1Fknjio zYHytF*5*Gtp8$oZzDFZ$71hmAXO+T73=2teu688>jVF|Mgi8q%4WcEg_&1VXsbGO@ z9S2&eKEWdhF5wB(f#jcQ-HYs?YMFr0!$5I#9$YJ{dhB#Fqv!j-ltY)z0YR7bAr^KY!3A_B*S&!s!2_ro}wM zyPBQ!rKiA~3>}J{vR(71Ohxd_W}x9YSn%U^mlb3#>s+Yv3xS7v9{Y@1gv1Pa@LpiB zk(gLqsX`3yjW(UV5bK{tmAlSnb(TF^6sxwaOn${0^RhtR&4P3xMq|Miwv5pC)jo#@ zb^uGrY+D+_<^|TdS+p9D@a79O3FWNiOPY1bG@4ua`+n~o89LTwq$zfdHkvfo z6fa!%oSM0SK%aTNU)p;)mtwssidUum$@i3Wfa&o z%-rL493!k>vH&#bxqTU65$AVn@4`EWVO-J1tf_2bz?)J<8k7N$f zCKxgBLV}~ISMtc-VV6i*&*w%7&okF83ADzR{K>Q`slyCNuu0NdUWr~Fy^{u_?bz$N z4`2558X!%HSLAb}oEQ|6Izq1T-evXpGMG}g%s7*O^58jsLU(lB}BSa0N z>uh-9ya{}0q(PIPtDcQEjA3erGONN^PLnnn@FB74sxO4oINr{ZfP(vkPl7)CwpHN0A5sTj$toz3|$5YdOp4FfmZ=&itJs4pXohIjlF zvt0@_==6iAgXDmEAM{`Jf;%y2>;n=?2MI*Lo3VT%C1WxjcBq}=6{~_5W#CpB1`mr! zk!CQG{N|(}-%kc}8h`{kQOkinD>==2h%ZxQmIa#7cK2094jS&7*62!woEbT?#>!#^ z5yfuMLBA1gDu5#LZbF+p+egKIPXORyB^7O|YE~d{3JjpeOm>Nk_E) zCI>Gaj)5w%mD=V~W22y(A%VPiKca4A?alm%c7Rtvm>v%%dDfAEHv!gSJF8v zPNbohQt0Oo zetq%0$+a!<(8+S>I_O_@BSb0!K^e6z$2)9y|K098z8ccM0Jm+-=0D=1>R|cq(hfi> zsrNPT)~x)?2xoV%6*Q!SBpRtjP&0q2jT5@X`sK+lZl~~Pi};okaji4>oiAnO zq|eOnkIpWZuT}bEeRtMg&{qdteW?Ne6iD_N-BBk{xDN6NPzKN<-289s?3?4vrzv#H zy{hYL_)yH>So*Cj6!Xsqu(4j8$%6{Aw33G*pS4rvsJ^u0`x-vwvK5&l>FgLwO9m)< zfyeS@xw#H6$Ili*qRWcU$c|2V>}A6H6L$>QBt?ixPfA7=Zb&*#3x0ZMfAx7ksj8U9 zS0=J`eE4>MBR2SbDTS*@+cvWL@5V>Pru#;_*HLZC$CZE<#N$vY9%JoctaWKcZpZof zk{5}ew*YvjBtGu+27|b3B-}HxBG==x%Jd=Yvzzk|K3y$7=Zk< z6#FjhS&|1Iv)?W<_6^ysKm)Ow|ZqNa10bqwE_|$5O-6)22|KSY6`&3x`BTWhY6d&F7&X zZ!7=g30^^J+ZECV_!;p|SYs&y@z?;b5}X~_GdkxnPYa$+u4*IN>bu>7cm&=KOW?s8 zs>p-_LdRA&-2u+0Gsux%$^hoC8b~t37#cZ5&O9AyPsm~I;3ctg}H(m=+*EjgepSp8MS34CtfAYE&cMTOPY zl-oi+8YbqbO;7_OrIBV&gz`aeG$M*ugM6wdep=?^maGeJbR^m%3@2t| zB7kD;90yI+ASe7NePUlv2eP7C#D``V=_{_y@-!ws)}xH6Rjk^nXg)R`xWUtSS1Z*h zO%vNK_g&f9{R;;zZUw}L%qso#ncD1j>7bxivTzLeaPq=Q};(lCHPGk664C~ zJR9!AZ1S&X`r~(V_6Beb#_+T-VbBAc4ROInJs9l&eRhQ6w`4rZ%hS9HxfiF?pSGpV z^f!t3_PZY*vIt9IKuz%HgZpM^r%KiJ2K8?tFdC7n9PshzA2reE}TgU6?^<~ zGTdf_7%IQji<~J_KuLMURqsl|n|BGmt9=*Zmq-5r)@Tl&hAMMAUQv#k))8%rKnoX2 zfs52H_v`i-^4`2;S&q`DyZX1E^m1#-DT-O-;_tv*H-*g;(zLkzm(U&cQfc$#dfd^< zWqo#ezi=Iqe?o4xKgTch;l?!PB(H-}z~ z>}CD^Q&UA?5<1b{b=y}WtdH*;n?~t81;w?ITo4z?)nugxvZl4?WTe31$)6TxEtdiP zsDeWO-g|rO)SXj!qXxdaZ=!O{05dKEo*@yP-D}l`=dEWKIv0BI}LjtP>%PS1I;7G_pe>j8yBk1rV0ywU-jc&;Wf@u?`c zhfXx~5f;hcmrXCuB2ewSL{{O8gy6mgY1TN-lG3~5T8nbLzjABUE;#uM`d<7C&!Q!{ zJO)alGmk8POXjqSi@}Lx=bl1>_f1BYpME&*SX}>$4ONaVQT|w=QjqS*waRc?DylH% z>rKx@Ip$k*lK_3DsqEwSJZGf;|-S_^q0nZMXbt z9Zg!s9km@VVV}?gEi&>?K{Sys4S1y%PdB)`)eN!*^%@-3-1Tm; z9ptgOQcuMw8}j{4Vji|7@I+9P^Mjt1I=ZcY7Gqp@IVLb=ltvx@`uBa;sGp0LC0cSxGxZqa&yu%+3q~ybRo#svG#)p`))YF zqRrEb5fo+aUFW$6Ch+8mVpVr?MWwW}`_>W&kgm?sq6V>?7CQJ1lyv_*;8;*|vLW#| z-g}~u3#qK!R32UCp#0FFmuvtW%x0x%*d+1^gFp5nVQR1#fzipmaP5jP>BFlba^Kc* zdRlH<O;yx(+))5o01oLO!E1; z(uPrRMns#4t}`_>XUGsmUJO;TfbqAP%3f%m{s%aeO!eSmi-~T4d&$H#3&wr5y$9oM zv&oOBo6>eml%pH12(c>Ez(A!CuK1GDxB^a%rYStS_3L&7kdE9~w@tSHgNsY>W*N9m zTQ3ozD0^prSj&ki2x14IG`8HMbZ0r$1xS*k#Aw*b128!d)&P+bThaBxfTHl9v|@3T z%LeK?!Ajx!)dk3azq8e| z&fue#UCNAYf`^npYdn-q{gF#6ef@!gKT4)q@+4w6#$;ZuiQx3!3enHZhf9;b3O%rmud3EyC&VA!WWrb{Wy zx4xP!J(=4i)$M&-5M~k@gPNLfj(@4^Xrta)*4edApJVGah!^7ddYzrV>UA;B*C>yR zT6?3Wz85Z#+oSa5syITms#g>c*7fLzaEek$XEo+TEqAOFgoE*Ncot6P8jIT?2B z-licEpc*|^!4N;V7|u0Kd|A0;W3(7eO_|dlUG_yA%`Z=}l5;7jN9-|QN1nj=J6&gPIG1vFJ_?uG!LEv-{XWXBCf6~$t2eJL zs9WNG$A-tCDGDE~E8Sq&TZ$JjVk-LTjyY$V?@aqnEr4v^jJLWCAA)ph#-g83fY4WV zA@23O6K(AY)j!JFFwW;cC<&D03+*K6=Qxd*g?95Lg5~yA#8a4fv45!%bni!|YOxm# z?2Q(A(I)WfXLwiT0ZYIz<6i0H*{b89Bi}0;cpmWJox6M>$p5Wn)f0*z2M`|VZ7YJQ zo>F~>?aROv90XBj*IRz~(Gccw)s0bN_I2ug(KP~){_XbAvwPCtk9mkVArt-W?-Aus z==fPKB389F)H!!gMf$-Cv#Rg@18j?&DzLW+%)~G3Qpk#`RPvX&&&pC}I5;e%Ch;B# zYtx;4y=Q#{13(*4Ix?zDYd7}d*XYdQ+@9X#Y}9NjjAHC}5xJ$DW~zlM43jiS@TYjq?(;fZI7{1@&|ylyEaokk!_E65{Lmu(vPPyjD-9#?t9o~P(XkyP`Ej@kJsvqwxpXz(Zs#y`tT#t9QY_&ugIYLqvmN=QRUW3$x#$o zv3!57v_mtfL6bg=Wr_kmQwe+4Q*s4|h?R_1G#F3VI}QQBfM}jD8IGvfQu8uC*Hf%a z#7nD8=dFnYn^OrdgjbwHX_n%!Zool&tR3p;_}uQ(`IBK#Q+d9Ostx{UIid*5ZPti_ zvmtD<@=OtJ=i(3s!d>3HrrRUfcXFEw$sLRF-{J_3c+y@UUo#-zVGsh$*_s5)RqAvR z=i}vpY{bgD#Xy>cW+=~RfYG{vA=&MP(_7KSMQ*CbBE@9-yUh=vfw8#xV0_NxNKCmq zgmv8qraD}zcS`sW!|PLhM>4c^gW;WnZ#CODYr8c;CLo!ZFR9Z?BH#(?Nq%7|6oi~ZzrS;JDOCPc6}JK33Ct$KwAoofMo4JpAl?>+^%DcVuI|#o$gUG8?and4|@9(Jr(m-MymE`?zgP2iv0JF!hbDzl0-l%a| zi-*;yd)MVtJFuD@LR2}6|BWwvxfyALaM8g!wU)@=06leBxVSUuTC_Zg3HhMae z(BnP7bK;i_+jhM;QPaIaiPA)DUNWC8lMn^g$}?2wBTFz-72==?eW@`6>JRE7Pz410=FWxMwAMJvTRY@LvHZ;i>Q%N$fH&nGK zGLHHF2hcrVyi|W(S}f{d(Z}pGsK}j=%3G*<>w1i&k>9@6|2x8TFKlZsplW(RemUY$ z_{+m4^FPa~#a}K_*AYwNePp9Ak{*4a~V!W;g--`QXFsFF{S zE+6O*k&nEuhOIF=YD3>_!D%-ru5@f`F3Sm5XItF5DM4K?qGG*RWuZ@3YY$@t1vVd`kHs zx!J9 zc-k1yl?^TQTxQTBO{V$*rl$`$41sIoUXwiD(QY%^i6!aR>nn7>91?Iy>e^$%YsNg zVR>*gn(`Y1w`7I}Zp~7I-pySw0SgpfhkY5g@g_1UK=~Qhxu%=tt~LPToN)6_3N4kM`a!L$?qPoi*E!n~tg8ujvgdUpMR{ zv(vOsstzAj9K>F(4PE_X-r1MDQ|HZgp}v&)KhhV!y%TDu=SiL7N9U*HWQ?84x?*0}kt_No*SPbeECt<} zvqztjC>ncyRQw0%BJJqMQ7boppO@_I{i(!pWzYQ5+UScSo@UKq4Voy_&`Q&q%7`B$BNVR+d~!A1NMDMJ6JRzV<4FREdM&c!$Mqu3G_tVi*t%E=bojAwbDDx7l2QI++azvdK_{2NcN{v+OlAp(NaS!+b&}Z=O??%Y4j` z=}cRejeU;4Z$RN+6Eqj-0j)A^KBw|T&WITo{dDH>WzDC%Fzyd?%6GS4AU`gEz4sDQ z4XCOWr2AV)M!Bvj-DKR?S7=tJT_`L;c#C+Y|LK5D65U2dy->#_u5jO3-EKKxdyKzk z9TPip=_({`E8wwY zP7|erBm>5CHs))T*$^%wQ&j1-^fhR)PX8V)B^qL7R-z=(>A6Mvz9U~jJfJN+4jl= ze!Wd!5n_7Ny^YQNU0N!RGQOANR=FzVT&)P#_&hd(zH6pC$x_;neocNS&YT}DA5<+W z%7BwJO=mS_By)`G(bw*<{T>Q}#?Gx%PQ;&k^=*7-@jg?w>Xii<;m&1bPyoDXItb z$jNHxiz#Lmqd(KiHRk81dN>3)s9Nr85+6+^fk+lj@a8PpI?@M~ zlrs?;XC(GC8_>Uwixd4ZXslfjL;+kE*@e)U+XCS2(1cKLoOnEHjSNs;(@r2(%yxR$9r_PzwTOQTYCh_;CPSOIId#mn*?_U$D94^!AlSv>-mV1CTLokxrz<_p@=q4;Pi56|W)=KIy)TQ;I3wTUplX{l}h@@Z(VN zy6`;gYCi!vI52R$|8|?paX^#r+jxlcU59t<7k`Y7JbS<=PT#jS{^YgZuV{C;@R;1% zrZMoU2p70VN(z)6J|AhkM;bSdwGAyb-Mv8eI<26W&!27{ADJR#BI-HkS4NkYt>1MV zaDVpv7P$$+3P#8I*V{p?76<@al|##Yi@@wdw2E?!coh;F~2@@j8l5Ol-FlQ~9d z;L(48=J6t_mzQ%xXYv%(t5Zw$k^EKuG`&^fmR<+?TYN=73Ql^{nchMhdUU=zf84ur z2ty0N*YYn`mZm(@6jj%M{w@dZ773kol>bW<3Vo#>SBE zO0^12W9q?ZAI`q8m6~bL!WhGl-MZzvi8X5v@hkmwL5+I8_L=+J*`5f$iQNYQa|U-A znTWhwGv*-X{h0QQm#i;+8`^N-G0HfI9Nft-a7bg}F-k~BrI z7y$#B@>OyN^Zb(4jjZNDGrRUs30zA^AZ?g1ZXfWF`h}}WmxW*XNBgh$v>q9^*kL`e z;XuD~pPR{93RDFY2l&>y-b1uX7mpsq$i@bsVR>tXY6{XlhK5s>(6Nd}&uX!1ve1Z# z;__qdeKZTfb6)*7xUy#AoJ5{gsV1Ko1ae(K8)8L3n(+)4gzwHr#7>+q{UBMxQE%28s+8Ge*#T4;HSAyg6#DR;PkzB zSnDpg{z{KSH>a@0jjlO*0&9QspXK>I*EN&+0I)nj0}-nB05KX$KIm!J5E}pu$4fog zYK2g0=oXceRR;m42gC(w%bnFA-9E+W7~;bX(~)u@kj~Fb3$eutR?Bf}#yW2XoxMAO zWr+>+{qUZULJKs@J}8S=2y=T_UtmGq>@^0J>HQ_Ie?SC)`tF`@%O%+AOB~3PeCbue zjSG}rIpgx=P##1#UNDvdccm;F{_^(oNFfuGC`6{%pAs)mZr7#UTf-WdnI=4oB~AJz zFLF#9uMjw4(~+%BFH+e!<2wPA^7#*-J;KLRN4?Nqk$oE9?^t{TA9xMnRz{yMvjy5CHOQD z4JfAyDyotr2LM87x>;VyXXccD4RW{00x~ga%l~kHZMok#8CVQd^qIsp2LWcW zERHKrp@8O(7E|aOVoA7`>XTE8b<^jI5As{pO&DCHi_^cZYP!O|i%6IW+ZFOID}}0x zeIzS*({hp2%abybXq5kcIqGFZNkOOo<@MFx+GQ_8LJ8yC_3*~=d05p@h3ru%HM>UO zhqX`iVBWpClYghZhcy#@4F4Ck|Lywl;U7Fn|4eeL|8dzUdV*G$N%yDEJ`2u#zvc1U zbaT^mIizz9o+?esA2po64~LIzUU1#n>~MVN!VFYYFpallZ7SdW6IwT!a@~@p))9BI z!fE^QQF5l7(b>tEMoN7`d&VBOOn^CsJ^T7x*L9U|qi47aeppQnOA|4-asq@Ny@C5g z-i_${!#wEBR=iDA{EK@S8JJj24`)0JzVZ1w8V%&hOK64{`Y2iv8I@=qC$@SE94GGM zWLiPJE4g;FC-pW1{?r`I`7CsP>IqxK+}5X=NOjfZZml^pMmy_ZlOhD7;}z%FR82tJ zyHu3Uc0F^!?w>ANg8?A=B~)*guRd>z5?T|-e#cg5-F=^@iypW^9$I_fs^4~X zrt&R^YwfDKmNv=>1l&GbUv~Zv@MK|1MqF#o^G42HnYG2=rXfRJ^C75NF1u&I+!r^1 zuD(ZS_JDnAaxt?hwV?xue>eR)MSPqNLIBgr|4$kVA*yQ#ug?q0g#r?0B*~Ut9MuN@ z4f59Nh@=1QsPgAw_}Vl(MT#KBUlib^uoxo^&<+qLL`vd_1NzjER>JHb=F|OyxgmSh4V5EOfeyT9F z)mDM>8M|#bCy2mkgyS@bFUTkodrKG&3j*qGaNodK_45e$W^UtoH^N_$O%nNEaPN0| zVmpO{v@~m+e_Q*w$i>Ts>aA7yDo#vv(lDX`)k7(d3kKHgG6e={q8V}EGoL^{9zpt0 zQP@-#>L(ln@EI(P=!`-OB^c0llDODE7p`qWCci-!;SxL!r)1fm1j!JBB*j_&8PA=y zA2(ZBUL_IfRvy&4R-{FzN%Ov>oT{ewkw)Oe`&*Tt_vedf%&IQqsU+)_GKSwA@ zr&_yq%GWx>^nBTzc<4WICE4z8#0i#gp#*QDSRCpml}iv!A_%OgLN-V94Ct03LMC%V zzIQ^qX@YPWt_SD1La%ptz85kgW0zHPjg?kQ6v;mq6S8f` z{}jK`oG{50hRM0Dzjn`C95huK(;lZofDz=n$nVb-N+%F zNPNO1V#6_QDov_DrJP9e55NE#kG@~2JiNh_?h|~Svd#rM133%G`oQA?Fqq#EKA2Tf z!0eE3QB8`Own5%4J$)ZCQ!R~3uOyhPrBNp0&y{N1D*f!vrY2bvmh`+j?M}T4_nFoo z-kIYq6-r!01?DRqlEtSh%b#JoxS>71)#lWmI`iI$I3Zh$Sz{lBctGHoQBEXp=5;Zb z5XtkqSq>gtXmh8FjRZ*2aE^?wZ97Y+ioL*2i79E8haG+sl4p_?6B}*hNm0gz$Q)|O zxwqM(qi%N$Yl$%_n;jaC{md@L7Sy>%#N1uT?fB#~ zAyxfx36z-XS7WMC11t|MELSwD|W5HR11$WCI{LgPCn~T|{luGStm&s&b3c@9v zQqE9=IJStOj*&mPOOJ2}?JU{cjE+opFHPxO1xeTcNAwkCvx(AsbsBVMvR8-0;>UyYi@#wn zO_@VFUa+H&($9SG#2nz8^brqguBq;>ULJ@q_3@pi!~Sa`WwP$ogGk5MzrLQS$lR<* zs9%pX#YZs@GtI@EdUE>EJU52CJo;ZHDuW|RA2?B@hSIK&^zer z3eh|9vI!L?n2TLi9f$Ju#y(yY1fJL_FmZ$?r?9NMidWf(=I4aw<~DenfdpwF@s+L1 zAj8C(flKG_pZ^2+s6qD?a!0xKbJ9NFRxx8X_#B*)Xf^5-NiNbUt5NK11}$kLP^}tZ zh(3K%7BUey#??D|%yYE?7L{MuTQX*mBr5+72DS}bg=XGknN*mH)$HmxlByS-^#T;_ zb=2yu>?>-)cXDtL$-!{3T8YlJonze1SZ4+NlM&ZD{|p-Q5v=dIPeu|u$CN~xi*CJq z)p@(vFwlmUiS3Ser-rG_4devvmEqOd>u?Q$8Rn_i4g1x~Z+bbQ_iYpP@?KPkFalM8 zWKX8WUrYa4`dD|s5x_JZrgo7?fxDw}E8(=YMz5a(o4geZ;UNS0u^U6RalvTs$sz<~ zCHBQqF=zh+oJRixAwIcIBK3-I(TI4Jn7NEdnx5$`31^7d1C_!gsxUi!4R@Y=T#_L_ z#+ePDgn&X|)`!S$#-jUp0d$v$$nKBI4E@fCa*c}-4|+=grO|CLn;Yr#nferQG(rDy^^7(z z8e&1@z58!!ls4wn2iB4#aSvMAHwT~7I^rc_TV$23C2 zeIVH%5qKaY2#0zkNRj2~RyO&ZC%(GFHF$MDWa-GlBcN3Gm`RP7^211f-aZ%k=M$D@%$)&6AFM@w zqiT6HRwWnX8M40>(M@Y4>YG)X15v0r3`EQ#ByG)Ihpnd~M!+?o*5F?aeRJZv#(p&{ zGKhv6e<#nf^tZrnWFt-0~$7A z!PGnooaP~^z|OFDw+2Uz$U2{Y-4N}1miU`U0mvl(_Og1e|Hq9rNAXa?;mf9cgC_8T zCgcxzHNew)kw|s!>WyLf`i`qquQ>(+`tUP88Emf0MI4<0X1_FxW(j=qQmmr zlNZuaEcn_iy|q7>*q2#0s|6|lzUqpO!COgf{bpG?Bv~F~Gh%b3E94)ly?H?d^i(ib zWI2sT?Gb7q)!f!LDx_dl(*ch0>XPnye984-Ur?=ZLV0}Pq_XK)&OXM8l;HiOzj-_U zG?mxHcb|3S&l9J~8@%;myuez8q^p;YPZ{e58q}owDv#c#B2bD^bmzCT{Qrf|*T0N# z*yU`Q-zyi1SSUE#=R0ni(3{M?v-}%1yoouxI+*+TbT6WpB<}pFz@M8U6VBc)sD?fH zhG^89oIph^n~n!=$1ssvGe2YKV%R9o)By=~%^R2%*N`GAjPL&i^ z{Qh^eQMZz!ZMD?(e{Rc6(BDg;jhU8i9$@oFfR!VQX`9J z%5o$-i&J;Hv$o4mp}u> zX4vk#vc@7|z1N{&E9L<2k}j6&H+Hd_)!#YjjaqXx=LK|O7V{q`l3NB+<_Rm+aDQm? z1*a27MR|So>>*=Fu%JtQY(gIt7>Jpwt9o5Zdu0QXJBdR*I&^xPgQN-~!K`5i}X^*E6=uG7awTwh!=4hF%wa$A@q z9LCK)r0D>?WghGUe#6y&B_#15az73JW#)74iU01+2i^QAqU$tVGLBj`4T$t7WE>Wm zis=RU`;u#l--JAL4^Og@v2u%6CQ`luRb~P6*J7q+ExUaIE$@#kM@9PkA3}+YHg4t( z-->MrmTNjS;d&sT2|YrdagPjamt4hX)9Hox&35Jo`ko7@%N9GMGiqB^puTXSSZsz2 zWR61n?l^n=OcyPsGHzHRZFF|WjMMH5e;?R4>Y&597X^w`ilnK(`R z@35e$*;jv`*ng1bjTTgRasJd$WL6MpZ=j6JpCCi=<(YG*3>`*HiW%hy2gvP3^##+|`H8upSb{9=rf5q|LEkm>ea2$d3Hd?r0=^NupNcAJ<9~bo&8w!g z);mw0S2Uzl$+FBm=1Fa{sFa-$(B{ORmpC~#(GCPJkk9Otx$Y)wJ?0pToDjdqgsMEZm^ zC8$!^DB?jKgFE;t<$yliEYmDKW0_h3Hr3LDaB-j4$h@J?*2uvu5WB`xg~3Qr5|xmx zl&h8q>{3PO=9{J;U&y$JjYB$g0xnbU&G(|K70QnfSCo&>@2kMRgP!HH3S;z?^u3AZ z67n7B)+^dOa)7@9Q6T3))JZM`)D=={X`(;6tnF`;gq4P~fhR0{5?b!+<;Dy!V14`H zY@J2qw7!F=>SUQ)TFafvvgz;fR%Dy4hv=W;6du%yaT=uc^6Pz)fA8PO>^wOr_C#wi zHNAj?N>W^hpR&0c1tdr-$T-)Gm|~%+A`$7aiWyQM7{i0S8179TMxF^FGie|B8WVXg z0i9Ov*Ob6I9Z^cGSq{a+L`ok43=ZM4A_DSqSpsF$Mo{@%F|s%hP_a?=Kx7s9wyug& zLor1$W-5AP0H0E9K{Pm+4_(?ziGaY~em@4)?M&mnW|b|O1$ak3Hn6XbHkmsc7W(mC zduIkR2?+8h9nXobA3qh~)-)6p^tQx$Zow$YuM_i-2uZ&cmI=NaX1wQQmGx=e0 z4VtTAm>zle8PVaPxXn)|?-SC}JePB^QsT_!lrz39bt?sj2yJM&P__Fbknc;3QxRoH zhtADL9ltv>%9YS_UDmq=6sK!D$mg0~zEfmeMH#TyXD|Pb1C#!K*>7|};Pl#t^4%xS zg7U8nnnhpAk*&?#pFFuKWL)se_nxF*&vz1>oHmxXkCy@qHDT{6RewFboL-hXgFL0H zKfn39r_ga|fVX=6&BYCW;o7&^gCla>q*BA~cKmf{$>?NE)ASj|xuzCGOY_8*%r~r% z?tt>6h9*nEBnYr#JsnU#1R~lPbW1lA-g? z)(lqX@jt4Z|6~El22O$dV7M0H?y8ntwMddI<5}B;m-L-55CK{JgTuMhgiVu{<$27!QPA&pFG4T0j zM{2L??@u70sN@y`$iXrNuG#v2S2Q}XKrB<|4+VNZi9n&7=n80(40NVYN%VJA6|i)_ z%c=JhlyX-e2tdvtT)a7WIE0n~Rj%wmD8it_?CcMHu?1NaS#d#vs)0~v#OQy38%t>8 zUZZqDDgOl~}b`soA1cRWmk0jnXPg?7c@-QCsOSY89>3VYO(j8vVWA|KOZ+UFTfS zdA|4O{&@NK%Ej3EXWL9R+N3t3F@>ja?{OWyd#|B+_y*~<)_fdQu#dF=FbA4tO97Kzn)eBGL&lOC4BWAk zW+<;mQ@v_@&v>kh#I5y7 z9}Q_{lNzwNo)YwoDz07Vf!U;`n)A_WH8t=ouWXXcXb3D!a2Mw_ABp^N^SDOwH zjZ0~{1rGH=IaQlA+~na5ATlY*v1+)~t^|!e*!=Sjs?>(1kS*`aL7X(2#>x7Twj4d} z_UPGoFnF~bI6i0`y;@ZPh$om|-e>G9Nujy}a9PPbMJS2&MypAJqDe=DS=0)-nlz@iFyrQ^<+IqEU2##t9*^c@A85(^mk}~$(#0Ho4NtrNz1$%=4M(~ zJ+74nN3V()TVl^j!{H@>D`n03MJWl>uGy5)? zJQND|v^<3TGkKnjg<7sZ@|6vHqqGF2!a5d?c7~;4!9u355JxcAc$T_9s(g$Vgud|a zFW;Z6MSh1fuIRh2O!&T4|2WWR(`Ir(X@0WnO}?JUYi#nvdnsV*EML;iHpS{?>rDO6 znX=x_I@iH)&P6qjv%M-sLC)hJN@HuPJ4r^6^GK;R(bs=mtQQs6jd#YLZ@)fJI7wm4 zUH>7(Lsm=n8thmArTt($7j5nR(Zz6dQ3OT4wY8jBRPZ|F-Ei~wG41Q=XWvC6B@Skn zV>UZ$X2MQ~XDDj3Z#~j3jO4FK3#!lW$rHF@-2V!uJ-@!Qlm0Y2WNh=Tp%U*oywEg$ z)g*V!d(1B1+uoa*b|Eri;Nyw6#{AX>*KC+>V(uCwT2WG&FOrmJn!ioSD6Qj4Dt7d~ zN=cv${6mTi*vg`rRdP_kUEk8A=7-V$W{WUl-HET=zeJhE3kXhj&e}SXC7V)X0dZ-; z?1q4pk*P|Ofw=OGxO+!k5G&_WL?>}F(N@RF?YPE9s7gh8KqeltyhMJO)@%JQwnEuM zWH5jaZ&;|_<1PCGBGv7|`|F3I$?1)dtx(X6k8y6G!?-RT$lt0IaPy`ryw@Su5ouPb z+I&y^IPtQ(w8&++E{JA9a|2d(%!U=T^se5hOav}jukfJ%18A#0VpM;1J2s|?K7Xpa z*o!-mT>e-bs7}kn|6<{I+q>T&v}fp_S2wk@;7w5FTt{BqS?x$ zSi)QY%F@&`+g`d)n;rnB)36?5>HK*5trsjV-%ajL9m&h|fc0vdeu4dLd*l?JQxwU)+8Z?vK^XB3sl^7HFfXQLvsPKuwijLwwZ?Mv z3AQ=#6Y}( zt8WbgK}?ge6o(E$1gw2PD&sl*P6NN?I7eot(-w$=F)PyACB~M(_OItTWu(@2(}D)I zsX!-M_V)UY*7T`ZjP7{b(|+R`91gXqd_q=@(PqknNQ47j?c~3{3$;t4snln$@>@ZW z`1#oY3c2Y#r#U00nyWKcMc5Vc$!bDN<58qHAiMuy*3rC zERTfLoT8fif|K-$+D=sekdI%cT&$y2*DYqY={Hl|tr&f*!dwJ2BIVfHij;q0_ zGt=P8S^h0JQxcOcFKfGGu316_D76tYI>8GLu)Ier&U&?-oP(mMjr4f0FSct}`s)R?@Z(6!ZuNI9qC@TF|@8xF!ok%&wQ3@8L z1?egGDaSNerS)r|JQsLFj2vUNC3)egRr?8Sr!jBywLF$t-3!w`U1U#F6F5AZgCnke zqWjb3rp1#czBP5_M&@B{a>HoFK`yV6(OK&mjiB`_XQJlmC^*!@%5MKKnP;)Nt}`$Nteu|J{N0yjs0{~F{xEI#+_d&*xaF%M^)TNH zuHNAEpF#~>J&hnXKg!hA$J_e^vcbDBS2J@gm5H;B>6xM1b;oAf?f z1~t-_ma83}YTI>$8X6tm^Sd-~=(w}l9m0U%{Q(otKfm9}kI@=4*%3THzR0S&X)Fqi ztuJ^*IQ~Y{{B-=@ouB{WB6DzwzSs5Fl>z=&z28DxRiS?8blF?Ea(i70MPW})d##(& z4-rOCfxxF%^E0rp0Is0#ibzv0w(EZuwvRzFKwVA1&bLcCVxa|)PcUoM3lqx8+UiUC z_~5~0C>UIKw%4cFd-Us%jud?tsL$->y;_NO34Y>yg9;P9qyast_oCpC&ga^HmgKy>nUS|{C7z<2a_%K?2E5wd6g8-lTB8V8p~YPPt?3X~oXBXCl7yyO z)K-j@HY4jCgXunqiA&r~Mm;dy!F0~2Cd?~xQ}Nf>S^nEClah&#(XCg-nU6uqScE`J zw#S9Dt$B`Es!d^)-tH3cXPo}sv;WsVn^l(QbMz~mOJq>qB~6LsPo(&4uN<^~piqnd zbGOHR?tx^d>@Y#Q+jJR0vM!A0h#8Re1DCaL@|A#zRBc*JJYJctmz&WTfG+~`FNHTk zoOn5}dDymuB7l3XWVRRu_|3MQ{mIMU(57Y=vWWirS}$`ENCFU93@Vl2LLZ+q`pM5J z<^|c*H4+l_kbbvg=d=LDeDZM&I9id*p!*2%E)|6Bw4bU77%MIt90SHUf1fX@KwA1_ zT=aNdVk4);>QCGy14vK+g;k>2L)Ck|`un>eu*d!#Ibn2UCaRb^F8+pTk{y}{0BuMu zgUhFIqYV^cCKMZ6YpqHHt(mn*0esg-@+w*sQeP#njH)=G`icYbgN=PBs7z_v z7@-^E%LhL{0{Ic3Nf*GWXCEVs^6^%Xq zbVY#$FB`%o+RDP$LsFKH^s=D=>Z0Jd-k<}0U|)r|$=x?MG(?GJRy6-@mLq%kotM&but;ox+w+y30aVb*uE*vjA7!&p0l1i8v~IhlmYzjQ zzDCaaHdgY0pMZh=-7!v1-#evu{1z4zegRHMXEY7T792kmvW!b{t661NmFrkSR&sDe zsk{%KHl{a|v4YC+K=0EL0%P*+FZ8#%b1yH`;`I&U6N2@jkks)HpXYj&cOa_hwKl>b zw8py*r~&#y8BM}nL?c(?2FNuf1ORhof>^@F-s3W0m@H&mHPWl-k3gTS5}59!7U@+e z8XKgMu)~P11`d{nI`O@sl3l$n@di)F{@x$J(!+!<-h>K{mfcv8fF&(~F9qz9sbVsz zi8d`TB3dd>Pmor<9K_S1&RJJg@|Fa5N+4Po)n zC6zZR(F_6|kWq4yt25UdtFGcTU^Nh#W6!#TQK5^YMw%z3G^R&FaS)1b5=&USY-a7p zy4QWag+=QdkL6E-LiHS;oPRmM$7e_EVt>rWr* z>HYh!sp3b;f4?O|ywAPJSVfNS*LruAP$bzaZKYMFKq$Qw5OzG5Af57Z#eTUk(m4~^ z;&~IH(~nymv{)9W{SRP%>Ofz@>P^Q|2%T`fbdft_BAZiBEw=58h}MQH6jUpz!xQ#a^+)q_EiEfwlXH-B@2`73l$@4T_+v_Ubpn%+%e33=QUSJo@T_tYt>DY`zjO| z$i{f2!s@DYVdtJSzhRj3>CQs=f{H&D1;3hV{4(sx;M2hx?W+Md3%mDJErKTbez-dg zm;YLH7F%N?3SlG1_XhWWzg^9QbAC#AH6lIiosy3#;#7L7@$TNO1f9kfd73#rt>*+o zQ`I0o=8|$o<&u#*R-+y+ua#(vqvdmCIht3A&OB9B8Q?@QkfhT5!DY79i)B=qJe?w_ z@{T?ByPM9rffzsXOf}^-$dyFkWywns;(4L=s^{UK zjSI)x4Xr{~PZmHDX>9(nQz9#pvupl_(PTeqHSo6=i^Nw7t>a{K=WiyG4k^cF<{fT^rd} z*O&glri=NA{ww6%Axn&m?;gf5^;2&MqzPh*EToprIo1O#>j)tF*#*)za5H0=5a2UN0df`^&_y zPpk1D8f9gMGP%#)hQYWYxzk8z_42hhjM9MvR#sA#jS9IgkgMEE+XB)lg^8HVy=p>(G+y z`TA`iWua(UKGv1w{fk6l}0mS;%Pj?C2xUXV~YJ8aL45UOg=KID#_Y4lAfhER<^1{jC7!Y%7uHeW%zk?%J722cs#)^7SVzH! z(*v1Z@;3#wx&CVgS^4MzxbM#`^?!P&Bo|frUmpqqyjN7hM7P_XJ?jtu^L5w4$?)O; z(;@zcfGX5_TJY-Czkk{t|BP0>zXvS#JzIMIA^TJ1&cY$@_{ih-pqbCuy%GM0|2CCs zc%TQP_uu+gn=IT}m%pDu9z7Dqd3v1@o-Oh(Z1t7&QYw5` zf`fk)R~;knmHA&_Jio85u2FzjuK(RBP)9{9!RE|=*>!o`DIT>Ija%aj0UoI39xuF& zQOlD1UVc^e{(cZS_Wh35=)E6Br`-~KALF*eRQ_%9b(U4zT|dcneYtb*`92!`;&~`;BXku|F_*C!9@^ig=D!>{mi&K{3qkz&+Bq&H7`fB|~zJ#7iHd8@qOLegDp{v3RD*&h|?MeCcv7gA4vKv$*Aa z>u?wV;=)KxexPI8c{AD^srwuc!LJ;7ubn81YGEK^+Cp4|Dy$>)=i1M0Safdgt(wc! zNzKpDsv{kgs?hQMTk^Ql+Gvxl?~>B9UP~7@a-GqRyI5eu?D&8oPJxS#OpmM*-~P5P z86*78k!Bk-|6Jei`;BB>8TbqKsBH~Y%%a!VUKNrDXe6mi?qh&7<~XtXwtvW!w91S5 zjIVP^FMBy+<+rZdYJWj-mn3}b%<5z@v&lwH7RdyVy zu`X@Pz#KW9{!dz&8{&{KSaq_JZV?5c$ZeuT7Za=x@cTx7!UPhvw~UVeDgdd6Pmr`L z5=a4tvhi3YK|-Ru1V zq+<+zlEL62qsKAph@TRknM?GS7U`?yDe+fT~Hdt}~aq7u|E>Dw!M7X&#KzCt&g+lXpS7i$&Td)@gz`czYS5hrNIM z{Gk)h5WZuwT%xmsqityrY^48b@Ni@Fc(h&iH(FpZR=z-Hb)T8K3l7Ls3YWHgsKHar zGP(sOT9}`*J_lnxPne@9!WLm_0##JD8ywD2769C3O>}?14b3yEG4u2EvPrC47tmf-m{HQQfpwwJlqV*q zM_z5<%}Su(T+p%Ir6T;M-rrVCWN8|)fH=*ruC0r+hQ$bj5T}uiurLk@jh8sH|#R+VV+2=y{ zen}T7l^J@RUmgAV`;R!`%JGvHlzB+?!O-k1}A(d0M>IXYag9H7O_g`9^&^=H`wPNiTT}m z`HJea>VfSCV3LB-W z;m>DJBT(@jhFJn-!G81Jr>i~O^uKnbX%|M+WdDLLqaFWA2mC#Gm0d4yxU!`h7*m>Pb>e%*uydRbXtQib%ZX}-~#(7fQe3*d0pMMRD0l_?6Z<^b=05q zb@$@Y*WPw+N2<53EshP+v|54Q+&L0q`w{ciM`&E&BJ6%)m;j_Z31g+$9mo+Mg7jHj z#O-6RHghgH9J4-3#0N=?s0DJy1z`o4c08Th+B-iC_rhT{oRf`M&q@SQp;5>WOT8>a zncPhkgj8F$8} zH(RJ7)$2an_N>oy@G!nCme=KJJmbqMLA7$t#xB0G97&*G1zTs>XFX(BZ3JLxXRbEx zPiPL0b}%FDgZ=yhZKqfz^T>~zx$P^bqLFyj?5$sOvdKObTA>UMQP*dgPpWwIzDt#s zXpMgjWL}C>_c^L$r)V&^k4z8dsS1}h3t0JK?|fnlTKMWzI#xa z2NIQnPfI(-abV1`JZZ2FKAMUtUDl|03+daSDmDOEGTuYjEX+fCC%pnPKgxR^vb0>i zj60-GTQ$fN#XJ_--UfSc%apE5Q(ZX)*2LZk;sV~ZYV|$Gb<%lIAAc+A@ic&L!u-%E z2)we=Hr6jkvO%=fqms$6*3wz!@um+{z8KRH(7PLghx)sS0WfWjcOf+809);G82w}= zXHRJ-aokl0AjCsM_b5ukAx7`IIfAU3`5PapFGYG52VH<%vQdF(Du@ z0BrdipaGrZ(n7M&0}&cLxU{+^P7v4Buvfj^4U&Nu6 zdK7!z**r~8JWIg0u5uJHiLtvXUk6&NA$$O4ct>Y{@ciAPSo(*zOVTk<(%z%BG%yH; ziUv^8%ih9OpfYR1AiS&sGHHUW($WSd%jJwSmWq9K@(?F(a7;OGi_#^vND8JXRWHU5 zD6Q^#6DPa$BVEmGC_6C^!n?$~{@p$o5siG>S|zZvxI&0HQR=bR{$Sp(JC^ptJiqDp zro3hFi9j-g6T$w{%+nLATrN$%0bnc&O_4tCOQ`BW>hiE<@ysNsJ~83|8l2jc-?z#B zX=cY|-inoy?EQ&cZ%Ug%8w z^1SKt$t6Ff(`78lawQ7Y%c6N1sqgro68LNwlh9$#clVv`I{Z zL#!98utqDF^U_TpRHQaX)@r{O&9cBYgKoDlQb3apyh#kh`Pb{=5f_5+8ooz?1Xt3Qdc7@xU%ojO?liz zMT1o)BEL{0rvmF#QCdm`Xgk+O_4Gqjnd3nTfZ*)C+wvL{=0X#NlZIVL!kZz3tBrmF zbwH!tYB^v#sOi1xD zzZu57T_VuFnU3QTg2EPk$(%Dwi@bzx5XA+Uzc57;!cSlb1enUe9wv$KLR)&9kvgP?~_`K$Qf%C>N`0Fj`cvs!h z&irZB(W2u<{-dPEg~joUtN2AI1c4ZieTNImM}S*^i0) zna)44Y8SciKh)C=YX14ruC3Pb$@N_~D!M+5glV7L%4ne&cC}VWV`$Fr| zK*m6c{lG!kgsH&IWW9niGO zq2Jwav%mTeptJ(8?7dA3IhKlrS)jRS5(xKr{*fOCYcvWOH?!$u1oZSng6UQ0j)gq( z)Pg@sW^2A-5=h^if@38lfq^YMyN)L>U^c3lA@(2 zem4v0%=DlU(Ig~Vt}NVg)n}A?u=#Am)_nIdEt+pbGLJ>ek&jQXl85OF!7-vnPFzK1 z>$yB)B(Frg#b_qD^;jJVD6)FrUQLqwM0r1_8vpwCjYqA`lk+jxvm#z3PZcpUDd5b~ zbmp{lip%4)C^1ns53Eb*M2j90wSNl76^pg$7>fM$*EdB`Clk_F*X_AtI*M|ZS>wgf zwpkS@1iJ8Ug{&8C`3ioQ5q2A*Hk5%@gx$>708BErKLq32yrLXcP-P&1j*s=1#~r`p zeDI}6eN>fN@5O!$jtr#KkV-U@XBt#o_0uMjW0#Kwdlr^UC1F)04KU^_=^O&d))Hwg zsTB*tcjH`i3(0ctxwOFjTT?zUI;AGwqw@E424xV4EgaU~?keT_+CvbYcriQMd?lMF zF4HASO)_45i?KYBtU*q+v7VX@LrCo)M#3U(ZQ6VQg~?ce$I|rlLf1G5mJV?+ zvPT1;$H=t47!9J_VCM#|v z${~yyZ7QBaH&*NhO0{wXnv-CTpveGuRo)Z6p$dK8#7d?n`O4d1cEGQxYdkj7bg{?! zb{03&q>Cc&-!Do?AIv^@+z;xR*ofnJjErH+XQa_98L+Ad!4Q!iDqiM(S}`^B99_G1 zp0JLOdkwZEtrah|8Zy{}yvQqG0d(3V90N(?v0Rv^;>-`ZH%2 ztnaZex_c_V)2pXNTRj!LD7z)J1V}{iz6?O0xoth=vkS=hatgu3-1$b(3(Z76VN(5m zqV`eqZgc!b0-4#ND8@&u=eMFrQ#?>|I7T`4;((^JrPw9KZzW4QpNaJ)ic`mG5=v9c z)54@L#vUd;*K|J#mh~h_mz7sUD-)2bJKSeNofXnhQF@>|g=>-5XD=igQshw*KulW8 zPoAiK7~0Pi!iZFiqNUgvMBQwq0H~#Qmo;{yX2FRKnCOwV-I-T6OH$dTXe@f=Bbf&@ zMc}uP6U)LbI$=(*l>SfBrkxE^-Z3J%ViR)Il@(ngr7ldSdBor_P8bnr zLy(sv1lxnE?2l{^i}BV;>6Wzbx~a^{L9(EDWI!$xHZWLaL7DJ};*TM^DRdR$pu%d} zI8D!Uc@;6g0uhkHan8?n~$u)TpksHCo zLaE699flp7K6?1(I3V$9#AAktf**JIWTGNr@Ofb8<1>RwSf~d5=3$uXzj2)*oIf!& zf?wNJ`Kt;Ha^MzpZK5Y$tuYivLrz%W{&QBdG%sl;j(rR%P~F~fDdvO^y`ovSWl+3# zyb|zCV|hipGSIW7dS_^6Ygo0s?8^CSNGO!B&zqaX6L@m_UB1P1;-Axpsyz-T0lTN7 z2Jbeu*Yc=mJLDo~+kblLKaSL2ycu*H7&~25od<>P(uj-Hh54@^9fy-^)~3B(kBnJX z&O%uU1N<{3pZ~3o$~iLNnCWeWpBe0`|I2q`-%i{LD|qAhLalyY&QR9(KS15ptx$rO zxRZrm)jWXc7*J(Pj2pjMQNp@9GH(LaOuKdKw6;Cb?8j@?_zwAMQ`?GvUoDM8qg@ZKg~{!Li|~12l+>2%#Nl3)Y{s-Kz&D^;d99W(sFSw#es-y{ ze`=Rs>zw8IOnhS|e-i%lu|ulyquR`?QTBZ{@ul7@tIqmOL*vsRzY0I2al;mX4(=JB zfh|&@VC0v~?<~<*u-`8gUB{NjxQKf3^;%(L?}C?K^r(H{En)S~-}XwoP^(m&&oidF z>^rbH!nq_RnwP3ByKp$J3X-O6;<@?CT1JOcV*=PAbQkAmsKutT1ZxMyI~n7f@}e(> z$2@;I$*<*I%k?=LIJuX5xm3%;F|IZ~iHMEb9Js4+jW0xHSCk-&?ci&c=6OTz?}ep< zYD89P(oAa!b;47yWyZc|Twir4>$#~u7gZ*!cX38~%f_C45E&%>O>(rf0g_Wupn%zrn}Yk4{S>W)Me0*0n3tX(MI$8IPis%n@&%DgyfH!Su0ppLe;=i|js4aPAvLyw zG=W)W+s*ePh6OwLZR8DyFLGsL>r_a;a$3 zyzbplgi8?{RV^&7V%wMb&`0Oa#SsNTa9|j?nd@U6S|6{D_Qe2+^deGle2o0KYZ z4JtN*YHs{hf;~tsl$Av0YcX5+Tz^AsnT&NyuGqwKwF;0Q3KV+85w_n;IHz~hxfQzj zOx$;M{MS>W!q{)kQF-Y}3@@vba4bG5_I=XMA7k~E4&|259oec5w=WF0DFC2m!lB>u zU#Fj5t>_ewX}M;65~(k3uY&FHrZ)${FYd>LPDIU-)nkXpTu zLX~GhmljLfzP`oXZN1WROFALshv!9Mtv$N|&Ad_Mt?T#VPl67a#dWr?9QjE}NFD2U zzPga{_ofA(|K#&qNV_BdkWObe<8)7hBZe-%*1dzi$K5wAy6WAIfM^l@?wQIf9xH=? zX}_4qHk*fn9sUDM&DoC?T%FBP|EVsKe`HW#FQ4T^IEfp1mGU8J{|`+2{EiJ}!20x8 z0diV?a58u4bc;<^*%fe}i!wT^?_y{SP%fx8E4UZ_m3Plpu3dvcbPyGozLVP;Oy953 zbty_bOa@XFv%Dc@=zq4Lp>d?Xa#YAE7$>oRE(1Bfc|Goj}Ic?kMKsNoV*O4YHVkfNZ&^BKwDqC|= z;p$mah*9Vwi51YSYuj%}*e3_oK%qru!az%{>J;Kr2AEoJ47))kFW&T`f%0b_>%ZOd zi`+ZAWf9Qv#)Zwf?L_6zc{SzV!gg`N^$$U(coybQqkX|n-4FmMl4IJ2y=?eGiZpP9 z;g1TBlJ^y@nzSh_tve0AcI`Cq-HpqtSbNlu+MJ4@L=7Bgy_H~FSC{9F0gq9Rw5Mv9 zWPg~)=fLBbe!MbLMjj6&jePGnF1w^(*Cpjl1$jDb8IZT)$2Hdm#MnSw!1jzHSm24u zGX}Z@SonlY35t<*M)TP{#|zDY_g&g?Vj~?FnR7@ogf%QOMwml!5!`r*WM z3OyMFyFv3N;b8ktDPxNWHZiRLZ*a=26B} zs6kX5UkbHN-IHpG|Ej;@kS!@utxNd80e-_AS&I)7rk6^!SK-L8Ix=JzV126pCdnMn zt_)3BpXRaxn`!NlE$x8XXa^1$g6`gcKfq%(FHVr2wWo(3b0^c9DofHbWUWu=(ld|5 zSRg!$E~riOoM8-^H)9<&?W*`Zsz0`s2?)nSH2ByiKm+y)W+Qx&%KV5d>AMNz)za$| z;Iz=It0h#YjT>Nfu@$6DOszCFuN#U? zLUL*HXdMFb*Tyr@&WBUsk8Nn^rBH7K=&zZB%0!^8rF^&KPnc^O-Bu@|BEg9pW(1?Q1As(8*7 z+*he7ehHabvQnZWOQWJ3#kSob-LFH&N?uWsvvuq|`48aeh)_?WN2I~>PPN`Y{k{+M z)HZo>rqO)<-I+6|_u%c-z5SinQQM~8VPAd2%Foxn!+Cli1mUiV?qX|H7&L7KGxW7( zmL43dNsmZfpL>z@Jc@Wa7ge~H%Tms|PaV4#U#^i*P7kgf|EqcN(F6UWR=rYpCOy2Mj-L$4zm+kAg&I?QDt~7$R=KAc%Fn+bKDn#-|J?d!Z_?Mhv zC{ZTh!mtze()r(6|AW76hY{M`Qp=(bu*BwGWvi~W5ZF2T1 zj6b3C<(l?e%)NC!L%+qlCTRAX^|fpMAuj>dqPbQ#3Ep^sK`+UGVY#Q2m2pT1IP8JH zDE<-<%6|7B;KR7VG;+r3bo;cA^ ziYzYC-%}J^wzhCdp0eFi?9l8OdNP1T$C8*cB)rmdTCdq%HdEtr>A9iM8pG;@>zM#L z&5_>Tg}(TFxe^hp6C0ba=nY(sqG~i0AqFf!PtyYS`_u@X}0$O~=<6_=| zr^bNA{yvP-WGN@;H)R2>2Zb9rh`pks;e)t2Oba6OQCKpoKt@q%ASy93bmfKC~n&3K3bQX&={^ z5A(Ux4ob1`MYhEG;ANlQDWCjeA^JHUMKn~Ay7*c(KqX$G#pDgs!* zXqp1LMccX1FXrKME39vyMu@63H`^0b^SX))EXYDuHL;S*997qy9~<2occlUN9{_3z z_~gLVNK-`8^-s#3bNo=aSc?hbw6exzmUuMO6t}IPvQ?R*~GA52J6LNf`v>W3e^M z?fIE%>1pBhQPsFbO+c;c1lHVwgBC6Syn!o^w6a};fvN^xD=O@w)mxH7M6$*p+Tj9) z)O;e>lrco=HNJZ6Hb1+D#t0yNYRWQ-8Cv0TfS9kmUKL*YwKy6i(5h3h+SYh&HfjRz z)XMjCw~C6z2!1UTrqiz+pI~J32m+c-0MOC$H;R3t74UzU7Z$tf^|RQmQi_Mrm9Rsf z+)IH)#k#*eKyFj`F0-t~*a;IsdJowKGtO}>#txJ+7AW#0;f}?viUAHRjjbLAheD3i zzUM~{WL1uXX|~~!QjA5TRB($NCbEK5_iV+wRxU=j2Uek_2czzJq~NRwPk{;T_>`j+ zug+j}9H^v%$&d@nEiYQSTD$s9u;jB=8YZAfWD+NWijWH zY5|V~c1jP(8&Kke)+6R6!5swK23e@&9~5Poj&W8T&LZ2Y#S=5imnL{OMP_yRm3XEX zuh#O#Heb-8NF}kRq-@o0# z@p5K1MR%8$hOeFd^t!8v9Xrdrm)q~W0>bRtJpR{wawZh|S0Pv}pGW8*rC^M6uJ?TA zKftTwz}umm_mFCL@mn;{mqw%YRd*y`5%VvG;uN0Ap$M}joQH{hJVk$H>^x#VVr)@P z^}~w?E6*-ic_o!0|5-WBJU8`kU+ALo$jxy6oqaaG=yAg-*ddFtxI%<`$zF-EC41Vj z_~FVGYN)4^;FlyFcmJ39|D3U+QVt5%T`nql+3JxU4oF45$2$LAjM|d09VqUuC>QCTZ%fZCYefxCEgw+lv>BPNjnXSP%{25^ENI`?i%1NMKa=n6Cz z1EPvw+m6l+gvLB5=`+{V{LV)FkeZP=J0&pF;-l&*DXJ`bGj(FE>|L?6m`($EO8LeO zNte(@y6myML*$TJvU7e#sCnz?vMTztd9xAR;8R@95H?ZOkf%)a&sFA#^SSj%Lv3HQ z9(qUDTr0dKregNd2c=@jlXXG?@Ns?6Ku;khp~An#;g>cEl<++^$KXY_J@*Zkrp~c< zg>wG^{?+}}j_0WC%XwvRe78Nw2cc^T+s2=q1nLNWC3iHtgvuZn|??*0)5hwL!*>uS+7b({eoD~ zX)9osmnu1UbkTPcnoR3<3%K|&qPRM3vfpPO6+FE^fcSw|QlPaF0(()*ZZC#6198$n z;INjk@B_(XPluVi3b-&(w8?Ps=b-qsT`mi`Q-*-+Pdl{VF5{e(ClbbcZ&818HFBl$ zI8|8ocsRxw7{ot}1!zVycR)$8L2;2+|LfGi^bwwGPGA%aq~5~#^uP69bct8wrfp&C9v4u{ZShMJzPOgf^Q3_1n~4^ zC*!7Tj@O!CMVlo7xNMH`n*e9Uu#Ym`agBqei>*KQHcPNXRjJhKUhf!URTzr}qoUu) z<3!mlbGWXF#4poScy{;g2bd`)y8h9hfJc8iU{dT$qGKD@V~5n>GT{|Bd?2PDfjkho3bEMoPz@W%IN6%o%_ zF5Ef~e+5+RpAAMaTY}eK&h&o?`u^jEib;1LXaj=k= z>cWc#=lWc}RKWcRrA_?1Bdp2=ApT<-upcP#Obqa1E3pkssOhReXQZ@R@MUnAH|t$ypViIf%H{Iz{;rlW+UZxYf7 zby``ayb?q}udKaY6{h_)OB14xaO?DLWJjB_m}Sd@_jQ>$Z-5A`G}=$>_4%2s#ymbI zIzh@Ou$~a3Gq1L5k?dSYDl~xk2=<%GTCKR0P$8U2XZ%{OtB&3KT_;^h`j~lf`XY&^ zlfoL<2JoTfr#S^WesFfJIsP%wjC7*ju3Q(jeEk-r`_sKoR>FWpktVVg8}WUaYS)+a zV%tg!s*ojTWV?(eExrG+HqHt6;0?Wxx`%BV_qu#j^N5EK?JXLx<)`#RQxzvR9ycwdB1myS;UjfIiyzzlTJD5+rGCr z!Hrxo@414IUkNVY)%Gy=@i!SjF4r)iw8e*MP+LAV0SWaZdQ4ZD0r(XM(?w4qm)q&pG!E zF?_ft!ourmm`(;;UJcLWu#D^kZ5sMmw~?aX%Kt zcfBlG5B~tnzH?7$)tl**0fDXG z0!YR=(W*Uss48lZxl2dRAXA5Q<|Fw=9;OO_i=g8p#ZQdB+1*#1XNetQ{> zclR_ZDvYuI97^mm3*hSJB9@w;~@BcHo<^IVF-Kj@Q2OR<{FA+f?}uhdFHb`=vEhQU-5DA+ zjDu%yLrzSte@1cT@qO~nzh%8^9FcH!XOoCIgvdQUs|KPYV!2_G|=|JosW?h)|v$yMrvfxtb@Fr@tpfbL}Vtt0-&xcmR-l z--;Ht>_<54(%NN7D8v@5Bee4anf_=`)O!al*Zb9Ph5Z$zqq@b^M3U*~xd#&5tMW^~ z$lMi@@czyubEQNfdhq76$0ODO)mJBN2W=TYsxOFl{x%Ox_^8~p0fSr(R(*FR`oKTu zlh*rO7H^9`2ksGcZNP{8xQ2<>)*nyt92T;w+Qad8C>BsL7kp98(h-!P=Z%O6J8i|?$T*8sng9624 z@M*yzyD`1~;twH8CfeqPB-n?t6mmNGsm z7sX=B?qdNFTBKyy<8zsxOK5&?ObX)ug9MPH4+ui+-Fw&QqgQ$c;^QoB%4!idt?<-k zoc$*6Vn(of@oerzsR#f4cx99h?rSIQ>5dmNxrdN%{rLu_;g8B=9VE6wlIUcyHi~*} z?X+Z_2KpdwI5C1tfi-}W=Tn_p?k1)RWsK9t3nIe&=arEsnzjm;4^6Ox$;*04!u=yK@%M#kb0*m2vhu)W8?H$?^?ar@j!oLerb$G!YvHYf|!)sAu|%kzbi62?`YkFoha41ubiguPC))FjBY_oXH{e$k0OzVEr3NI$Vy z^Km>V(84kbZ-K7)7aD!e^NJ0}WOKjq${*isM5s8DMHo>yZf?!jEZLrAQ=e%*Hn1=j zPQ&*OP?xD8LzZ!7Q{cgX>WE)sgsODszHXB0wwX_Q!j2Sa$UUb)2PzN0>P1PhQ!U`r z)%A<5*Oo}5Gy7!^wg~pjMY}ikx07oOOa$*jUjs9j5+}x^A~n3>O6Cdq{{yTJVL$NS@twr z3dTH&p?RrRXW3zGPHM;a@Ig`Z17rj|2Hw8ja!=)NL$V}UIS)VPve@83pEAH!_~}Fa zGG}A{sPniSGm?75hhy1Jnc}w5PBN3 zTP>on*f94jr>8Xl?%$bgZ5kA^yr@Vt+ep{osn4kWTUt#;ynW|WDpXSF7i)0zNJIU5 zcZOMFb+U*zJQ~=qqBYF-aR3}x^y~QH^P{3@&$#}r?~&qdCI12B@;L4_eOdE6a(^wC zH2tLDBB(IlUWFR@N{a87xI=2cTj!;FOfayEz%1aD*uR^CT|EG;tJ+px!TaM0-qc9EV;EUFBvG)zh9+ZfDd2 zlkTK4o6zKeQ<(JXV=IoC?Y~t9`iEMj+M|Ej$0Wc*sxt6oK% zn|E2$bk~g8d|iZ%M|d;;9*p84Vrg-kF)Dk~Ue6Od%JJ>2p&jg`C9VDC($5Opw>*+C zq6Wf#Dn@E)qK1B?=9&oyngt2l=-BF~LjBAohk?3xP7Tgx|t_V;<;+ElF_AaNDAsu$D12Jy26!7~uf{ zuq-5>!GNmmvQ}K}`?2(-24&9Zl51JY+im*CbJJe;sUrVj9N8v49DP$c-TC~_Pu%rqc78B)zV0396LDk4hyOE^k9Az-!{PHVC9MgmFQz4xw>IVRePxr%>C!$w)PD@ z3;U&P5^_otc|tM5+&K!ChYrl5`!Uei677<{?uzQAF;Y=s*^Q{MRC=8|MizGLdd;I% zOBMC2#*s`qhJVFDVMoQ`Yihffj-whyM5cRcSaL`51dJ6m&-hVvWl8H9k^;l1tROD< z!4aux-SAdlqz~$bX2LT!%G~XBob&islV~A5gDMHmZZ-oF5Wzyc78ro~oz&$u(TZCz zJ*?bJ0u@eJFstsLXG1kT80?%#kD5Jo;!4<$V>oHZM`r(mg5T2!&g$EJkiFVH{RPQ; zt>Ohw)YwzCTYy+gK;*5w>#f&!_5yryA>lxFhD@0J)ZSfL5elHAVp5NT83oMj3!GaRFDwxEmjvpN5o+s zY&jX-<=87ML^7RQQxz6g9L|zEyz_22T*RlOSR9HL%sLNV@cn0U z>_p1geS5U^^fh1<4&V*v7nmG9zrd~lvl-nc`=Z#-#O{hB!pd%zJig%AKgb`QVYUkF z2n_zm{x%{@CoIt=IpgP2xHIg6mkeIWlR9&@zrJP|8qNP^O z8v|14OPaOQ%0qwUU|?UI<0A)o@#(X!5T}wz!>`X40}q=q+>mRVnw}R>p3na3?DUP+hXBRaobPg>e8^*@7<@D<7bN14@#mvH;*cR z9;J=hUm4Ynxl-@kbFhR@nwF?F(x+sOT<*JaG*9*u#MBSWCl?9QNxsaD+1Ev{u1Y48 z>EX2?5nrd5{3?yuRFS^BJ<(Q)>JUI~d6BYG^2}E9fl$r;GarJ=7xdRG36Pfc1JnLV zv+`MCR*@HUX)2FsE04vDG;&2l ze^0=57*h6WPy_LZR0Sw9r|K#kujr(CqTv%pGX`=NVL-O8)1eT%794;Fwb zwu5CjZ$@dIp<cYoydB0mGLJsUv=T7kuOdFO zL`ty_r1dC1ZzliGR^za9x}#-_{A zs$FIsv&w_=)XBO*$LgyJR7XO_wZCK&rc6#n`Z00Fd16w!%p-a1F%c$lS41plQmNd* zm!E9s+wVLmh6%S%fC(`=eD)9H3%7ZK7h31_F_{$uiq`d?4#38|STKj-*FYn^z8IP{ zD3eV!cB7J-1&3(PQlbhT=@`E6w>^-QwFd($xI2ldS`sHi|B-S zRBYgpA79JxM&LGnk>qcr4r~z$XotM&BFitxrPOGV^`IJFa?{7Gz?;2rB`}{x%$A+h zN?CMi%Z+lkurpRVUnhq%^tHvv?!Nm277X_CXMrh0bGA8@S~dP>tDH>6e{RlLd^}Esj~dlgI(gGLVaY0%RAcN0ngUTHzualI&yZ#UNA1}smn{5L z=fG>bGbTf@Yhvj}*1AK03VG6eHLFeDF+Fvxn{9_&7}peYbq5Zi*PG`OrgE zK<96|rNf%E7GUMTUSrtST`i{<^jjOkX4@lC-Xa`BYZ zR4VC;>nvG8@^~9x#=@;&q2LhWdlNO|sME_}b^?~rfl9-PJ+coWaXRxfcS7zACXs}~ zPbTM0@1=ucEfE!;ivb800~o61<@AbSJ@bEnDfLz=m^*55C*rQ~4iyM`Y*{UpT-T_BxGnaeYrf!82K1P;&4x{e1 zs_h3Im4tAgMma6s@mW*f{7`rM{AUWvm;ZxX3Au9)`DcJ)l$8G2mZmyf#-Ba^<|Bv9 zmnR#2;u<7{kyTR9i|mVZe{PXax`%c}AE#9Ls``yi9KB|>-{RYY?{iW1rcv|nA_e5` z2eF7$8!cLzpUEbm9=x0S^o%}h(l_pm=;e83yYc+qIOPza96(%n`ao~{Y`VW)ScC5* zg#VFZNEiXdMgLv;8$(HDsSFp?uO1Bfb4Q#Y8TtcUP;!`vTxzZ3H>~o<*UfAw)j@ z`a=aK7|N;mgCUMca}3A_*^ddnxRy%Z#+CE;q(L{J9}{|y@b@6GcL}pxx+D+BP_A7r zWs8Au%u~pdCScn^0se)Tx&w`+V+1ygy(O)djY8|Iy#7IKZn2=V6Y72Zxc-E%(i7)O zk%m-(zLX;Ib_N8_SqE;O<%?peUt}og0MHKNi^pfTmEM!JphjC_YRVReB>?h0zctLU;rjC9K0i2eklm?Yw=50e zp7X;em6N&Mv_hBvwJCnEZp}+J-R*MgjxSQ!i9Gdu;4W+QR{)FGpWj<-r}$HKkv4!W zk&@T~dBGvL;)S-Ao~S=}=`&6B2LQ-7e)PwMFnxIPJwyoN%j+)wMZ>8%nFF1K7YmkU z*R^nup+OIS3!t4e@1))z$hdryxd$v^-{q9$PQ#r9hQXOE9Vr$)z^j%lSF8(JzBC8- zn!#5Dp-gM!pW}_Y?1=eI4%lB(VCHaI0{AM1m53E60PfIT0&p5hfTafz23(Xccyulf zi~fYn3C2s4pDF_?(SQ-5D!!$jJ}K?5CenN zdfM?e-nc$9c8k{vBV`uEey`M}EH6vmvd%!h8K+TT9|F0B;I0IE&98%d*__u9vB7+6 z;)JOs>l6-x!usNKl9vlwhJ)`CN`mzV{N9sqbDnupTbJzG&%WQWPJUJ)^5}NvB!r}3TB`| zA{jgF_0m!V(VFY1x3hn3Fe1 z%2^>^9kOQi0wi66TS-A~m_aOP2vU3@dG>Al7{XFhuH33pFejmcb8GcX}i+|X=vJ=7`IQ%fn-=UmPD`Vi_I=-ag$oMf+x{)s& zGwcd2b`zn;Keop`Eu{SWrr~mpW+ok0_BmMTl|PLBMK;VlFzb%ilsVVWiIwIT|Na9| z&>d`x84UOSu!SrB#p+tie%UNK(9rx8k}hEm_dzgOMcp#__a`A0Ud_Ybe6x4_q$9QV zvW>}G4fl5^$KU_{qIWngaeUtyQE^#Hkbe8G=D*Y4&q&4(=D!O{j{?$&>RF4nVsD;;L? z(p{~hjvt-(t2+knv6TpB9sQNr>HFv@J{xMfA@sz$9c1VE)M2fQdX#tJxtD6+`2jaaAB@9RXy$y=u-7&^Wb>A$MK0I&wp!K8ntt+h2fuq?OZx1@A zJXXm`Sc}^D#fz;y)&D@L_Ol{T#=5+U7)_Z`Cju<8MVy z?j81>fl^~cVYtT4UJDo+Qsl;OcGa9l*9_; zm5M?*!DUHl0$^fw>uqd*4D(n(D z+AMqtXwk$@r4&|qTDZ)l3u?g<9*=#{yfTaS;j9ffyV2h2Fg*Yizzk8%8_nS=&L-V{ z0=CYk`UdE=HperSuc^(%A##m2WIk^TL9rj?9dE&JEJGXlI;=1fMpEf zi^cL=Gri^#`^Y7BN4jzpTob$9l)JBxJ12KE;D+(s-Wk*xHwx zz(!fJ0Ht&c1|zJ0eS2PsQuJCLx5O6~5mzf(1ufu^Dn)=e@EeOlCd6{es_dmcg?ouG ze-k~-E47dp&nDw2D)^P*o_vybCi~xV$=L~#6T$a}B%P@;u$1YTm%iqm=*4i%*|s~b zpXEVra~&2=wXC?``nI$lW&YkT&gIeNmzE6nc3llXjn!o9!1A)CSvVsgUcw{j@9pZ%3y+4~*MZj9Oku9IJC^Z(umEy(A3eE;X$$jfsJ ze?B?WY#;dKDc#pyrv3QxBG&IXUm!F4xW`=I5$S((e&+WbC6DWzJH(BU@{=XEhaD|MLe zlnx+vatWVx4c;tzO*9SV-xz2a2I-NV)fjPq-TIa=G-zfVOF=T&SWB8S$3*1gQ3KB( z{Rd!XfS{AV@rphE^ENnd>j#y_T(j9lAX->y$FLhhVt#Esdw<5pivKqaqRf!w<3u&x zlZ#lBGD+|}e_Qhk@MTXdxfv_q;$ibp_1HU!Kk-iE_pn!8YMrz#t2X3%oFv?Z2!gQD z2QV7s7`%~9I_8)u-^~>^aBE)Z&aA0Gli0ef#J()$6A1dW2Te61%WM6w%Z=J=YuDZ; zXS~r6E0xDy+Ak*ZUeH8uQgFI&^i7BPIrwMU>%9I^NAB?rE%?7ZmwwDf^OL~}s zw!LaL)Z=V8TRh&Di(BPuro&)jJgCT@*ivL2bA*A0%KEPBL@>jRV-c&RGUa=@xLIf% zr@FRz!22Z8!n%4GOc){F^&$QH9xX%gui zCyEGXB$;l~#;G)=wtzhXb~^A*{8g;p4_Y?Lmi7D9CYO2NJMwN@R)~XI%1XCnG>TKi zAPE>@;*f#O_RxB0o(IItp!W^B*Li^-mLOdkkL20%?LzknQyv3_Q{C z{f9LFU6*&Hko@NBctXp3gmD==(U@A+ z2sqKX;7&M!5#TWj!9#>pV9WoqqKz4CrKimqdUNs~xE7E90JTsj)NXC$(v>&-?XQX7 zjFFLj=^1eQKR~En&lI3V$P*dlUU8!jTQ(T$Y_!DCzdE@61oMc-Mv6MX+@M1?i0iS? z7V?^sVTV2eqni+#FTTq8ATX-!2#IyK^TRL4acO2+J?%r^_+K$OYT?xY>7NwEytpC_ zvE~jgM6^{&pvu8Gpf{E@L9dY8;S1{tOM_Nu=g| z?HB?$kj&q2iTJGGFcsDY6x#h6fBCj`sr2L%ytkw$LKkiK`kIQV5fmU_ugA5MN2fR& znH3^IZa**ah5Yo=8uW`1u!X;Z!?E`!(`bpiSZTU+|D@%88-fo-lEFbo^&Y@OJ%Cwg zZJk9DMuCmp!4#8r@wWA6T*k*1e5@(Cp5~p^0DxE;yk5u*%A@Up>Q3!&;U(PBT{DSE zT4uGb!K#^|D^k7kk3z*KJw)I!1qE6uu5_0ZtcH0Q%cD6&yGpvVHDjO#C>eW0-b8af zMF`ozj_@kxLz!78t z_cKwC>OOTA*|H0>Rr+l3uRp~apM1`hx4fd%S1l-9m%wLtla!?2)^4ezG{ClD@$SZ* zU2<~iSn<)-$XEOI=Yc|&f3IC^xu(LOwf4$h8VY^iuzz-anqF@=@AcZA`{-a(H#WT) z>w8_lx$MK2BLPOcJK^iSUE%Y81_ZLhxP-`D=&iacU@8;eX0i z%Z1-Xos2cdFtAJfrgJug_kI)c?&kH|Jcdh_7sU0>znCHy?UwqMi|u-nFFy zjv%ij@!_}rMZDWWX`jaSM)w{e!I!&-lXPZ6>|R`W^Za|aEVFL82$b!!NL7wT05q&M zS(1kxu>Tg+9Zq80;{y9){PoXz$L-k# zj|bu(-7@^T%WVx^tR%Tel_hmKtAZ~zj1j+B>FD2K>}OZTR@4ktxxEJ5ecb`hcrKBz z0c2a3k-uHk=#m;$O8a!v%oLa#$@Bqv?8Lf&Y#U%#cGeqTJWKv(O;kVjXS0qlOUREQ z__X!PO`3&89^4LkW!TK_^g!YXE+*>nKtCGpWN+(m=+H$F;22Nx5O)JD?OkGISdkzy zW1dbkL9Kpl=Na&vXXdnwfSz5R0_r$}5?nm1=)2lOCU#A=)}_9>>W@p2U(ns*;VzD+ zH5Bl#yK>w7^hb)M&N2UHWvcf(r_ZaSkphtQI)#fnIbm&eZ8gF#fjKp1D+mgR{1MWi zf-+hu{52kRWsx43SusBJ>QlL+%vz}y5lbkZu4xRjw~V-w$!tUk9+M@X&I5i;xD{PTupKqCsKfolJ#`?UZRqUG@r4iq-*X%J40 zC2Dsf^O;!Z`fm+!3E?_aFksc{S`GJJMf34&cFn$9iHjMw`we!Res3#E!pwRe(mDq( z8F+=c1JqLp9(Ba+bDRGFoOI*^xptJ74QA+hDI4ozagTM3Kh6}Na5qi?-(qCZ&m~ja z5|QaNhY2QS(`8h&M}T6~GAFD`+Bl_;L(n7ulax(TNjb}yUNXibCn)vI+lL-tsoDIx z6V~42Z8+S}W2)nNPBAG#rS1|e11-*av#4Fqa++h3uZXm=-p(HsKis~OiIxd?!3#2(8Ui4ph# zH?ywp(+XCymY-oBxCkXBUGX1Q`6iK=&^MZ*(##BiE$C)VTl!zBuJ~y2(N-a3b?rfR z3i0W+j#3&*b}KLC<^acH<4NdmZt7p6yiUl5O$cA?ALG(vSyh&+og=he-J7VPSFyZi z^Gn3a(a-sse}H3*_Xh%E$Ui@#W=3CBvh!$5#G6Gv{JyEQ!J7ZH?1J9MweUH-ysq4E zK^!|YM)Qaw!ipv@d+0ETz>IAqX;>2)pQ1-HF?qCFv6Ndd@y;vIxIu3{85~$$sB$SR zNoo9){tTz3-^=#MEg;wH--rv$Lgu>xOQ!Xc)S=bi#c&*27aT}cQlNb*9#ih#tUuGP z$jhiFO1uqr0W`PqaGxi_j)5`SW(!`*eO73^uTzbs7Salj(WYzNrwbV)z-qBYpGArB zzw|Q8yqa(07VNWQ3Pj$Lys&TxYnZI!E3P2t(I(YTy@gW%D{p{X{n-> zSqM-Ea4d0fzqfNPNXF7hQd!1Kot6oR?`0QnzowFd6`BBf)yYKfkaOK1=|aWN4V%m6 zXM++h>2W*y)s|=={C|?N1b-Fqei2`aKb@w;z3u%;Q?eRjlhw3L@LzX>usTFS2K)&1dhswd~B6+Hl^zC0{_p7|!3TBPB3oRNq-bLTi_zz%y zDSUS(_HJHh&%v+QRxdSyO=pI+T^C59$>YT9{&ts({@BPXJs%yqVP|W-yGLsx8+10h zs~xW0wQO+xeRD-Z^-84bh-7VC?FNmU`vvk$OjPXptxkhG>YEssG|MinK5Wp(e z*hS@fw3T0~+y3~k`ebP{L%8#f&61LbC zO@R1f?Hc_^X{g+!HB!Br3WJ=A%PRUZKJf5;FrVNG-BY)lwz-q?8s)5{B<`dv**}jJ zSv_u>X#k48(IB0Mtwx(B8MaU$-p?8O*5mC+kjm4ND?O`l$rbiErt!LejLCm}jdqj7 z7`WJkjS>~d6hob$;gb?Cm&oSH^mA<~bhQH)-=^(X$e<=4RY)ZX8_Gd@8y!pe2tgwj zyk>5+(DFuT0n9WYb=d_P2?Z8P(5H_y$(F$gtq2-^2snUo>%D-nYZUkBdrZYU*Dyf76o}4-+ajgI05vS5xVBHCLQ4w zQSd?N%#p>*wJgG%Nr&cU3jdr{%etgOX&}M`7)+kpFI7`AP&e+OLMww7!@nW=Flze_ zYf2K^!NcWVh&Ai*I0ND7)qbywVNycs5&o-1o!CQ2>@N@EtQm5gU-umoc2a4x;yMeI z9%VJK&o^jiAgTK!-7LmHo=tgUGpTE0aIrmeAPGgds007?M#|xs+{6(|e5FM;O_Sam z36GI|hhcm9%7bH3Y6_jR2bY%X>@9HS+3IQ!9(~&-(+b8zI&!oy*YST*9R%d8-Yq{J zwg-;~L}KhAR%&JaUI-X>o)BkeDDFt`>_a{pX>JDQ8vAPWIiAgy$_7)`ic(IoW+^u2 ziQy<;fn}CQbYKkJxh9VK;Aw(>s2+&{dea$I#s^NPYQU z3%vh4?2lu?HPRhdrNDmgjPxq(Awt-0(||K@PMe9-7PN1paPYftrPteT%klaH=lGBR z0l?IW*N=pbYAQwNx|X!Gx#-I)BB4~ljdw(yyC+^CsdlLlm7K@;CzKgt(xor(Od;=r z(i9(U&YHYq>l%nF2S(oT>dq_zv%?|u9&)f4$>heGE{re2vcWlFDa_RjmSeC`$?k)(AMP;1e|V`F z+1$aZ_?vma!RcYpSf9JPc2cTSY8+on{}-5e1UV_n;~slyb1=&{PLFVY@H2u-`%}g~ z3j6X6W;TMQQ1<#uK!_|9T=S{i&3sv!5&`6j)X0RPaCqr2#N%TLoj(#Y{5YU5f}8Y6 zLV56n%4A>K)QyrM$%`+ffcbzu#R?ZPD=AY+abxSyDTuI+GwW1fRNE0iIYqorRat-5iu*w2TUr!!SIYY zr(rb%yQHei6H4=ufTo~NsnniPBdQ2j?8U=$J{qf}Og}L2`zP{8c;4%l%Ncnl%lxjN z*}q*LWA=Q&t9SWJ_ur4z(TnWh(a`hv-Q#8rFOO^DtKyChSSQXejUt!do%2T)?ztN7 zUsY0Ah+_5r4^VteelorSPYFwiioEWUiK`C0txJhgxW6)IrZ@5W@9>@IZ2=`M(D3!2 z_v7EY&M$wO5HH6{uqe$}?mCILN84|n|LncD$d)f8-f(nn^B_6Gfc+!;XQwwO_cK1k zK?Cd(E;#znJIh54S86KL8Xg#)-H2oiJ4U1HpZw}d82UOC5Mi|()}-HeD)h9wOkEJc zeewSH`snTTd+P{;V86N`N@)z5#W&EA29JfW>ip6I?6IdU0c>sk!}?=cyLl^bbxDU4 zZSL|9*!1lukj1~ht%P?~Pqkmr)=Z;5#ccicIKC(omF0~MbN8A)&$yINguYLDlGwi9 zxFbSHPW)MF`?&RhKx}*ty8rn^^WnW<3PUf;=fa%nZuC3Zp?xj?`Cb=HlvQ&??TOH* zgi<2n3{Z=P5HNKvh6p}R6zXNDlz&6HQ)-ZX4o%%Lq$Vx(Oqcne^OL<)?}zpe*96R| zGzhP{^ouN?U83qy>vPW^2@NQs{1hPLf(!vFMzV>-OXzS@yY653v?E>U%F911R?fd} z5K-uvq>Jh|V(7c?+G(IUB(ZhUI)Aq3tPK^)_(iMM+-glv>ItM)ZzK(pC9G}wI&g-n z_Tiu*7vej0njeM2MaJk{HndrNFiMt2A7E;kzdvaKxF%TTxpG@MkXap(tD(`rEox1S zaa+6$pDYEOR>@|c6aP5_?M14++bV3}UmcyB5JMGSxt5&Q z_r7}Ex$5@<;IJ|etTOme6lJZJr7>%uRp{^MEb$*e7*^j4bN1rZAOMf0)?(t|B34>t zv5u3O?%QbSdWE!tfwNE4b_O8-4J}p}3624EK}o*W#A8fqs- zOmQlz>|g76w<5Ys(%#sc+H!npuqXAX>~AJsm=b|#)_c$3+` z`2;>JWM$TlOOut++DRWK!PI{ze>!gt#x+DW{Q6EXNSy7`kitzESyOX%0oSh{dY{h7 zhq%_+3A~9Zihn%yJmgt2_ajn74DVQ)a_wra65wO4!qA_(&;s0?TH1c%Lz#%z^MP5K zHP7fd=hisFFkS8FetIh;a!8DA7K5(c1Y)g-F+=y#mD6;g&S#t&iQWObifNRcdQ!DZ z?Mn)|%EvA@S=ty~3T}SOsr;G`YhcKMtnDdZzLy1J8j(;I%Bci2+V$YvJe3Wkq3wXC zSg=7_)cB}vU;3IpgQT?(#_OXs-yrZx{Q#mr&F+zK|%NA0I9sb9-|>ai@_R{Mrf|RXkHZm05jruwnjEt*u66q3D#I z^GvUwzx>jzs_$2JIeyl~J5xX8gWM<1qx;Jr&;0yt_hkBII&&EDNp86N&t3OrgU|%m zU!%UQNj?&TD|*9Yl$rC0gNhI5)QA=iHAR+BgZSWA#i+MCasHd@H@DA2zJV4Fe<-w> zPaH6J%S)9^dcQdfR+`4_NrF&~I8vHs0c%E@efZGY-baJ{{p1MZOsa;h!r$xrk;8SD z7xHs*o}Rvbm(5zl!xPLb+phBCHDg?Z^v3ie}2uQ`B97M7)!!JBF&>R(H6;O5WD5g z4EtwiE>VdY&dj`%8OE<8)pE#1pX#@_4uYco`f^5*&$4QgA{U2z|pQra95~ zDCZK6U-W#W&xFs&YfHpARdkp{>1R{T*N9F{f|aG(1hXqwQ$B!RzV{NW+cCae? zc|vJ@@;|_!QJPz|Mgo02?^sNy$?<2Aosn*X*FAcye1^6ZeW5#hrFoeKABJ#s z5Ly9;3#&Wd&f>0U)xp{3&Zm;6Z|_A+X?*RNOUy6_dM27)Uyyno9NisSe1q zVoVOKowPJ19lzGelzj9`G*jCO#jgsTE%OM=Zu!V~V~21EElo~udm+p)kz#e|aKH4Q zZoiKGNUJrzMbc;EbV1crRNo_^k^Xq`RH^G*Je%Yj+n@ujRBqrc9&mO-`g5jz8~0b~ zR^`xXpyQH{s%AVtefF7%EER4W$^Ny*mnQjE$fHw9GoNi|v<4vN*Nv{^qou%?yXAor zq@Zzbm&gE^ejcM`U(fU6uUB~%p|*g-B+etuP}b1>0iEik%)X<^31;hZ8gnXI`$auZ z*3X%+9V3Cz(tpD2?Kun0el|(3)c?b2<8Ix{}=aY!-X_2{O_10lAXSijlN30Rktab86H)5 zzd}0|J$fU@XXDxPl|3n5uuFW(8y&YDNOw<`_PWVGCKR+1nyq?y`KDwq7Im`7SdY_z zt+!JYuyK5)ZrCrMPa*ef(liuU2daSho-&S?!~s@7f1~0SmXN}ZN(cmAtOrOM16Isx zH-I~6I);LZ2RZaq$jEmrRY!}W%e^8aMbRF!VNPmu0p4&jwQ^npo;XlRPzHN)$x8L$ zh*zBDd{kn0b7$!CQwW1i5L98><{XI3y*$pG*yzD6*Ui2Qo@_@5RLX?KrokibqG!E*!DGk**YpvD^4|bxe7YDYThw z`-|hphYGQ8tFG%Wj+#X*Bw~<|>(K@8c$8{M*K!h{d%pegEmCljO#FB7=2CXpoj=_k z6@3pqBU}5grfqNyo|s+NY`REv65b!mdx}SHbT;2*$?)IfO$a9|oJXk}y<ddvco+QZO`ME59QmVWYiU^B4gmrKsyBLowibfvLzZ z;a~L}@wL~KJK|FA;C9NmiS>%F8{U)9CWepdCSFuFiIB9uM|@XZFYz@`9SR#IjF zFSBYuS)z8AJ?)d11*g_H?0Z~ShUk}f?cp8BmIIBt!6wsb+Fvwh>CK~m!$U&e!0NIp zpgZ!fD+tOAGwZAy{A>J!C7FEYOVjRF>p-D@U%JBvS|oZLO^scRzQnhpbM?9U?tOY4 zPMer)HFhM$vW?TchP1la)wj@}uIWR6G}<@rtjQZZzVZ}x5dBu&HP%eE2Av&9&QGrs z5)Kg7xfeTQC6&Tm>W2`^tVHQEA;7NP|%kd zAR-aCz;ds_+(n8c?xxl;YUwWH@j1L8Djc8l2#gi5RhuR~_j#82ebt~5JugrCsJ5&z zN2jJtVWFR-FVi%Bs~QCmvSK%ZY`tSUB0i5e42crbfAWAro-ximoh$c`yQCZGE%(XU zFxdoeYK{nvVB_<{fM%>gsv2+c=k`mDWM23<>(;K8d40D*n?D!F4v!QULfDqBydzf> z(ZGZMP6G4;;V|fJv)WxPS_PTlkevLkiE2Bx)3^LO^8GO@O5dJ3J<+TtKumFrHL@1! zGFYofLK*ENE;XGx0t7DiwoXi>#l`yYgS|Q72uRxKtHP-iMr&Q)5>koCxQ@*Ioq-g<7gwx4FD3}msiPv|2`uc z*khMNgLWzC7y8(q6r^2G$7>sPvbrn0rlVbbcP5Z>{N@7b5gWu`Zw9FX@w)l3Ri({& zy}Db3WFn%EYA0XRD6LHUR5MJ^%kJo~@eeR2s-hlL%d5F+Gre7bFdE7g@vNuh7b))M z$UI42W^~Ka;`mKMpG=CMU>DU zfOM8GDIbme3BS<#%F1Y3#z8L~MRrTOA?}^%m`ay)=bxfNg1hr^c9phwyGkcT53b&jaT?2clUC@JO zJI#{bEmI)p)_; z_tLMqkO3R}t}`REbK}OMG=@KZ=B=-Hw?Cs<5g!=LO?#QN@Am8Zl}(3mV)97k_ZvAX z#y{E)eJLr4Z{7{5&d=4l$ijv^ixwdr>b1kXsnhP{!)1LoDylA-V>4*Ed95xQL}Q5D zqUhq<-fw=fC*#1k?t5qOM>ZP~YpPtdmHQz#<%QgV%N19eM7A zSu~NgQ=%3VMkVAQvNK3h+deYRkCSDP$S_WwN!kI^2PSdL_}e&@AU>ZbtvFUEQvL%N z?_9pfezUb2V}_@qk#W_A*f-MAam%Tc%y{TM48AqrELO8G>GXHwlPM@N8YOk3RoHn1 zJZjv{VKrQZNRaMn+5Z@Qx6F&|RGdTFAJu-V@r4cz!q}v301DhPDKWqxPt< zR57Cy^a6njTTDq7*Z**z3T|JYsXnI<3_6=-TBE(qLFhJM8=3l+C>gcW9>iRG$e%4R z-byMqNP9_*{gL_n=dF8^b9#WaDTm+^kBX{Uc3}9&_RP$vI6y0jX`!YCYkFPqGO*b` z_r1NU-WIl8j{&v*Br;U|ig{xiokP;v6N^%Jc{T=s^}FekX*U3vit=5#n9G6eM>wwk zTF)P4BB5a}3Hg~$cZxGs4ar>tit`m+z+s4(R+h+KOS}EV`x6{g?K3p>Yl=p9ZjH!j zHS(mja?cXoRMophEbU&PrkWWm9vVLZ5-@k#-1V!-CVUr57qM7@>_jL18MsYj83mh4 zFBXS92_yRo(>sd3bZxA$3)rIt1+>s24Aou1X=l{^FRKl5Uoe|%+B?F#lg?6Z9)@^j zGYqphJX-An^LpoAVF`kDzx=RbUR(Xk?;EbjC^nL&9}b*~ zvuurVkqgD#Rk%FYc&Osqy*qnZ-pymrW(Tt7?mo&BOm#&9rpsIN2-Q9v!2A3xU6}CX zE#g$%)3-Dhw+}aCDr-YaLB?`Lal{Z#c|_K-@dg6lx-hT1{eTgg zaRZqgi&CIuQdL%~yk;A_SxzOBhX#GTE%korWjd|E zrlzK^MZ`Yi(+$uj=}b$t!Riw59O@63;zkjb^o!K- zfxygu(A<6Pvnqb82`-Ug4E>@{R}T))Qi4Bx%zSzolu z8a%Y!zEgfpOxj-kG-A3K%%BqA5ss_wH@K_1y#rN;3WIIxchQ_?K!?&+Yo< zAJJWZ_Fw^qX;esWePzxT?eDt4yR9MIeRa|vakJgx)}R-oT$>j^tXqNg#9QI|+f9%B zi&0-sDmUggzsJ9kP*VoqdU|#EO(5*|FwE@2?rcZxJa8vqKM`7Evy-pwtxOjZintEF z>~N;PA4_(xVff}Pa>9JMdxLWp3Vf|td?^1ThTPzgq4;GS$qkDf zHq&7o&v4dy(~tOY2!QhH<}xy&H_GmtE!_zAZkiE(k2A#xzxqj8Am)(0gBHJEybu9)N(ta?Zq};X&fU zB-7YN^Z^A+sFDITk|}aa*q?8;UUNbKZj}p-Bq4{B)n{yywUMjD`8`++fZN+KbY(XGzCF!;+k#J4|GR|_EBUT;eZ z*c{ABcqC>~m#OuJsw_yBcL-F&$7b0gGH6)|gOJts+^$oE#Y0ZYBqoI>?PzvhN)?0P z;PYLxsn(`Vhz#_(;{JtrOIl|D&7=LIUf%o8lD@f!osp$Mcr3sT4xz-*g%Kjs6Qu)Z;vsqVXG9JuHS zcfZKCd)2aE#uK$ti<854_1ef=DTP!%IT4k=KF+R2Q`xzit340k&ZQfMpn`q-$1?6R z62Rugk74RDjhAOP2HvyIiSfAik|#L`oN2CPq4JCSFBRe2C55L7%4!HFB5z@2r`th= zt5*d$d4^-_mT>ZRd;Yf@#YW6sO_3tKA^e%T2&}>=Nvd_+bHX603qtSCh)}LJRj$wl zAihlT$xssE4$*s0Bf(%?6Hn*nlWoKkLHw9hCB<*!O((XQrf4)Q;}=|QeQ&3!z|%s% ztfCzicT1`a@|;GI0tQIAH3i5bY@h}Dal&`xokF1-jljFgWqd0sX3f+Ilyeo0K#_g0KEwHREM3viFHG zXU`%^Rofm@I%4o#PNJQ&gV@=Nd%ey1^M76`zfXLbpv68i*aixYcy%&Bg&}lva+`u( z>v!TauDQPySm>ywV{y7eN?EX0e4XWBSG!HnCxIBy8m4n5fxaS=RH4pV&$~_=TrZ*A z?eZ{sED5+-vmZjcr#45uX&<(#q1qdZ3rAX78~YxA`f;2wkFz-Rq^>lsrCd)x)oeJ*ASmi=y`cf=B4IDwR{Yc6w+G;6~q69_yI zr&1n1{91>JJNI3N8i|Uh!Ao{>?k=Kzz{XR_nIw8Ui-(qgyu6aXXBHpms%E9tk!tgB zCx8*{6q#Av-?>p<7o!3|cX7~l6k~hqeE;3v51g`&<$G-3HfKpPF zbj;8?XAX%prbdXup3T*t>dd}}q2@(|BR)i2vw@0v);r!aFADCj7>UUVWpMxcdG_~j z;j3?{-wwOB$Y!OmX{XU{3cpIu6$NLDC!4W{=l8awp6dNkl(;`r{*z$u!G>HO<|QCKX0p2nG@cXjh$eU)z^7iId6{{R^|nGOjjv%ey)sq>EvDiIH~)SG=s zv!6*1n*27;hMF{_zu(Vi>i$zIsyIY)Sh?YZt~dTrvNH57CB9JSp{MF4GiQX_ZE{TA ze-W6771I(oa-M@XZ32tQ6CvMUOBlE}skik3uBgVfZwy13=Z4VIP^-W{eLl26 z!#Q31iNS`5F$)ADUh~Y;$hp@_5RbMJSi1#aYo+X+%$z8wW~$PkwjD?@eZ8t zb@lnWLUH9bT7gE1>Fp&saxXeQX*BI0vs(=7+BIwVQ$_$8XSYe`v0EJ{T41Rlk zhtoyj*7_fhOBd%6R51IsYoi)9OSVr@w-&7I2RavC9w97b=9xy3b4sX%a%%zU)eLX9 zY3{Vbw7|!YL9u3q0L6V2gr^1x#e$L>j7IPDai@^%X7AAbLGd@V#9DaZNGZBZEB$_x663YCQSTz%BnB8oh9%k=xJCQR8t2tyzSTInZSV&mm zd6FFLC09c0vT3v^r|RGR)LEips(FJ1O5rKevMX~qmj3H0wL)%K|m8X1W?X_3*h zW?-Ly`McjuUU^5d)QFnJ*FftY-$RisBqHs6Txjz3dDqx@LtNi5|9wO6JX&RH)!Ls*hmF!t9o&)BiTq@=4FK0_$XNwCEyvOe|U9(1NG7hHct3~+K+LO{x@VcfNp zT8b*D7osRt8H$C<$4T9uuo)S58-2c?TvnvH1XFmWI}g6`0lrE%<`m5TNmES?gDl&6 zu~}F?;hW$_o6~H@l~fM>N;l#@)36p#XXW#{9)C=Mp|lQ4`!$%7EfL0 zgp?mJJBqjhfBt?N7VUjW-*jidYTH4wAs!K?d;oZMc$9`^7!Dh^t+5Qucv>i34VpId ze){Up51vf_2Kax%Id(B6V^lxr=QdlERe*BbJDoZ92J5ehLXTqjKZNRVIMd{piUHzT zztU@-um)vXGKY!K+AQiU^VB5SntzgcF+VNKRubAljxmG(+^C2GW0YxgM%|0_6@RNF ze>AiolB|19Z}z&)|85M1n%s-QY%CQ|*I*5iG%>7_juoH-YACcO-tllOPl;)usDRBv zA0Yv3Q4C{uAdqJ0fwiR9h>SB!Mg7^&rCCEtXV>2D{gc<;xjpvshDR60lc~ku(MolW zK_wq}w@0sRw)7p(_?yC#XTxRMBYn_AH==d9Ev<Dq)|1zutc`0q>`lc8cOPzaidI@Cx0VI@QLrkyqXuL8dvWh4~IX?pR!Ip z33oq*Jn2PJuI^p8flJTwd8gPv91f1yNel7&+XKzRb3HiZO1^*Zerzpy&%?aN)XYVu z5Z`$AIL*q9ZL*}-_bZ;u*w6W%M(j>?TFaOaF2?CXUWM-$+t~P$JmiM&cg)U_k~OVH zPc&#E)5B?7;?xj!UY{rcLX(O>C4_lm-;e)(%($J*vZ1SMOoDSZZ3IB;|bCt(iA=@-H9D>9AUz}xL>fT5JLQZ12cU5_Ekz+I z&q6SW>((;`uvtPd#(ZB5ZBdqeTq_T`3na6mtBa33^;O_XT6z@ z`N;RIR)!Wxer7Pr0nB$$*IWa2mFEy<^_ge$8DmFrwOX2Ge3FpLN#MT!s79?SA#Jz5 z)HV?U2G!6|)G7&KOL*C@F;NxQm2lF4t03=^WL1POGtyg7v zPlc>2M4zUH(}GY+onJhPgvYqkMVi+tKtdTce_g-_Mu2Gt?_}5 zCPh&sl_lH+kXH_R_?mosZwK&DKnohm87{jxm(a!~LG~J>zgEH9d`3tJPBEn@yg&M< z;<=j@2nF*I%og(uI!;Xn^_U8ZwjY;dZ%y;?K}FmPK!!jYxJ7%ZAH5w_K!;cmvJRBN zBFql{IPNsIHX5DQXfNJhC}zU|j200olL18x08ZlabnPw3JyVm^C}Z=GAONi$ss=}m zug;G#0l*|642a18I{8NB9|9()BU8=%A7WXNGRZ(V6n}W{y7`m|Lxq(vf8AGnV~J%_ z3ab6|jxx*btr#N1E*w-tsr^!kdWRDn42ryXS=P-R!%{mZ+$Rta&e<3<5fsO_=HFUV zrLDq4rH{Aaa!1~Jj8bT{XE!6R0WRYR(9~_w| z4Atr_=(QNn3uYP0x};vgJ=VQ&9ezG^m6VGS)VGHn-VBX?wtRGPqg=R;1|(`r0O5IIK~oK(TDYT2vexl`0Q1pj z2#TJazg-U>Q@+U}^|ma*Guo)!&rLPog^H!-DR18Ta>-?IMv1%J?MdHqd4*STGx*ux z!EiXIg>YJ}x?62txW zl$@7iAe=aa^U ztB#)f_V9R=H)!>6)~`*-y*r=JF5|49c{lDT6qoEg0ST-s>ueogTizEmd!UUb5x;x2&&3JdTDnVR zf1ho-y%!#t(4b(kpI7Fb-z={5<=~Yqv_4Q-0+uM*jQd_FM218S_XqB6Zn;Jb{rm?A4MJFAx%V6<)q%IYR`~?_)ZmIDyUo98B7f-v z61Ks|5~I&pSF}WAT&ti@Z|D1#hI#@xXSJ0s0^9HQPGcknsov>K>^{EHQWx_PvC#eM ztVt#4EiC}^`DIed1EaP}&KLz{hVG#V7xK&l8N^4MEa;%&MU9(aWC_8_rT8#1)zYQfo8o)UpKB?_0?=ixCGj*Bkb7l! zHKP!gqf#6{4NyTNH)GX_@>GbNr!M?Po`{yj@EV+%ICAeeladPgc&$G90;!ar=SafL zepAkRoB0XoB6kR3Ur*b(y`;`lJ3d2TD2UKM%W)(U`c(b_^t)R`_HdvKH1%|gSL9JC zBwJS>^$zwVFOoMILJ?^;Vm1(`Nq1Ya4E0honwpIp>7NhlQM3EQ5gW;tqDiKvMOdb{ za0m!5%A|U!P2Y+umoA@Rd})j-$3#>3 z4>9+8I?+(G+v4`rU2ul=0kN@nxFv@MPgmA5n1t3nBEdR}G|n0nW9dEDf>GZx1C$&@ zMt*3-ES@YHX@ZNz0P+Eu-=1Wt6GP<7rW`kp#bcEE$SKR%So64*5*laiBp5JQsuyuV z3ra8?dcrVNsP;IB(1>JFA!kEjJ8LG*3@h1q@?CuUAwhTvzK5Lj6=r0*`wPW%Tv#4V z*@P)%TJ9$|ry)Y+K_yRiFP7#R2vxzvM5_JDD%U6U{%)$DO2&VfCClq@j}s0hqhlk@d*l|+xN}l zQRdkWzWWvPBWWdV5k<$pl~6sFK3AMOA3ns37bWHL zfd#<#yZpS#%#!{D#l;7w*9dM^Y6QL-Y_&1u^04dg;Ihj(ES)@_9v<9XhVM>G$Ey)=|x}hiZoQgk?&1*vE5c zP#YHUsx+l_YmfI`>>CXob(}-Fvc!%tK_$%;RU?VQ)KH-XHSc|#a1j|n={rkO>O@pS zwA=Mj30r)-Tr~HDo+pqHD$o)+>n`uV1uYs6+{gWH9Gl;K)p4f$wwJD2OW`>9>9@X7 zo>f6Vx3}kdD-r!RQ*WN=UPi=~UMv(1UNaKn-fob`1uJqCte@D6(m$@7)RUB+J`d69 z67OUI9BL%ePKif+ov-(2QI?)19eueXQLX<{4$hlA)|wq3L=-}yCNF&GzYU%xEVFd) zb`xmli%XQqGDW|<{RcoRzdPEaQ2{-C`|QRwm>D`t!M)dcOK)>a&&x!so!RlUa_uDW zxBt|Ki4?9*5srU==a^VS)PGgo`*#i*R~v_=UZh)u1pk)#+IeS|ReI-5ZtmA7Tdf~Y z4XdilwIttEct?btxq-{T;Sbt84A2e9sg6<+?K-;AamJ&yU_2RFJl06nH1MO9r`XH)6HyV%YP$BEiQGo(|xw_%ujK#NE&{&EX*rQb(4PYu(0{h)d zd0Ps4ke*{RqlH;C@xCi-Wu!D94v8EuQ?7d%8=s2Pf}W{-J~6w01Nd2*iY&%bg3b>y z{t5j_U6OX3Uk*Iq!qPr&$G8{}3t&}p1AdDUPNoh1Mj0lDeer_uOW`u8c>nK=oKJ^^ zHag3l4qI&YKs~3adSM^B*D}k-1n83ARzy@29q5y^M1Yx638S#n_zFBfk3?iATH_{c z<4JZu3)ABYZXQk3I&FjzqE~`NMqSIRvVznqBd+l${+E@Fnb-$_e0up$e$L$1^v77U z#R7{DehoU(3kj)OM61qlt2;D<-{dO7B%T~})cK_=^tPih#s_fFjryAgzGGp+->p!z#fFaub%BYI{{#j zMHFZ}!`P;*;#r`B0;HXD);p=JtDSs;%X@Vh^rV5;9aF*TS=_+#_8MSXm=l%KQlFq;)>XA;^bO@HBCmsaQF#XoGxTr~1Mq?BN_+omjDX^g& zQwG&$^*lC|gJ3!^9X``4p7*pQO zg{hk&xNEM6G_R#6jC@6EyEU}e9bZsAibUnE8A=jAt`un1lDFxlMH^yG7Qg%j<73W& z>{;2$sW2s$-)xwI%$*F08{oZlXMe++>h9zNu<~>|Zao6o4~Ls@HKTOJN~i23C&|a! z3!1}B&u{#W0wUe-B^*BSgR`mWqb%i{OmzhlIpadEZB@CG6^f|HBun>~(C(N5fUMaP zIolYq$GdfEQBofxgkNldKasF~St2|2;c0-iW7lp&;X%k>P|=Rp@NH?)jrWPRZ(`iti^1UauFKKQv*sxH@w!;Wf&{9rx z|2=UEFPAM4AusaxeSE3!z|pm!nBDb(VBQZpm*6nu%B17iY{k;`%c zyi1$3B$s~^>HMZQ?~(97K)GS4T7|zFPaH<`ff`2TL;-^rO!)pG3ox)=<%2c1!C+!3JxmlDb9S`sSNAQ_s!w0fq{!S;!g%D|X=#9o)&D#<%E zsb$rZD!oMbi&evi{{Zbj{sF)ZOK4c#&l&cM9%l0%n*O>>FE@JsWsYLqScka!FZcOR zQ&&6Mqo4j}nF)7%wqNk@p8x2(qy@qpP?xfqAono_4?2|L3NHt`K%;z+htYn$Mwybq zmM+0{eAU%SB7x&mx{DhMH!>7kA=lUFpBZTj=fnHS>ji;R0m?htGtcg)kYzmC-~4@z z57_7?njd+IZ>T(_AKD~p9-64<-F)wGzT>qRWBHw~H$gT)M6j0Y z>iuD7zkAy9?4RML{lP5rPyVf!eQDcICmA^TT7TT*7r~5lI@%74Wuh_f{Ee7L{|u+7 zRM7ExJqx=YXd=4No4wWo3bBjg>!c_CSAlEse4LXd*K1?GV6y$w5Yn@w&^OyGdPHH> z-~2|Hpc*v|_1n8wz<+@AP#ydaFwsdtjlk>d!WW9y)AZ7MAo7(~<4BSMW!F2QF;F(m zQ<`AmA7@7qnGBs`im~B;R`9{U`K4%g+S+$=wtMo|u2hYHg#jxdLe0OgkuJK5gIOd% zKVjNbv$7q1bmu)+o4%LGN%84&EQ$c-p+F~m8P-UTzDs?m$v$(=1H2cfSUF7%1%}n zmz9wkZzZK{J5UDu#DolG!)p3~A}%=~Sr2ZPFdQzh?vQHRz5B|CC=ZxPce@)xZK7F) z?bMiXg7%``@>T%o)XB*aY5u;7(J84|%|KHLjge>0Q|-d^&~-kt+Z+tzqIvTLB2Z-qj-r6av=;&iR6zEOhsV*E!*J2 zDBZFPsR@}Fjq2*sGUcaE^Lbi7xwB2GNe3MwtJ!xrg2`2di`6Ubg_*G)I6c$x*?4HS zd!(Lu!FyIp%4j15{3>>#tbO`bH!eL8&oY5vsp&1Y$Km(@EF5zKCH(wRAkFggixb*(Ka>)ZvrMMQbT}c!{kN%cyva z^T$HrfIoyAomu;B&}Oh(n0CXC`9+Xdb+cS>n_KkKzoao7a%M&9awUs`$ZdvmY{H ze$}ECVQ6|edWT%~I-lb}uaDe(>~A9_G9B>0RL^dZ2LXOnT=4!K@i|%7wo1bcMBO;t zFub2&Sx0;Ca$ZjSkz%$~FSmLo!lG5v$lWGpI-d+Pr{0_cppadon@gc&dNEX(A7@;7 zka<&YG8|>F;cdN9sIVSkYN|TIG^A^WT6yaFE6v{`H!%zo9|^ceT`FB9_-EKRLgk1l zxv2AUHoKbB1s{%Dnp&APYv;laU_IMX!L(yHoY;w_4=ktv9JmU}i8G}k8%3y+1G^zH z2AU{Cflt70!mBf}HPubO@7JwQ-b1#oHE`HAcC4)&5M$~4GEe>iI_XX9TH%yoEY;=) zehv@M7f>Djzf?LMy9b#ClTDoYR(wIO^@YJ3%z4Wkr?him2c}}1-j(ZtWd6Dx=8bfp z`V4{orLOqkWXYAJ3H)>;^kcd*%SEK-JGt|Xkk__?9oc^?-hcF71=yK5417pY;NP&9 zJU&QjGZ_=5@VN@Vcq3iC^8~UV@h9GY`;0-Vn3j_j8vel~)tHr`81i%L@=}WHoY5yf zBk$lmK$>x4v5y7vNwYo0_gr_U_U|hb_CwIfH|h1H_0Jwpm`va5L>#^z%=rT-=PbOY zia5rshCLqGqo#)H(5;v^GAK)j>TXe57mr5?GMtgnvVox91h{VcrXy_4z|t!7Dd)*J zG=mRqC@;hNG2Qd>$y^z|trVcP4I7g+IlfW~k+tj*8r@URYBX(cyGDZ4C&gB~v$TpG zT57>8Ip?0i-XtTrS#`s`mpc{@3zXDP3~r7Ae+Rj2ZSV2UszJV>T5%9wOJpRaEmLHB zSX7OaXtCb46mc9dN8 znKNc-wGrxHvd62~0d%zwp_arj4kZvzHN{A*r?qIgn!&;WL$cc!_r^(v4^&w7`6Nvp zS2{8-?ervdEBtNrVszHJ?GrJnFgV*I=p+SsK>f1YB15KQ!k#&c+9{i60g~0n{Xx%^ zI!brxk5wU)1Rcf|h^q?_;zYk=fRCc9@mu5x-{<`UR4b3ZT$kd}#mVY5jOlzJ?c(^{ ztRPG2iG+lVq z>=EA=qAB`EpPKdizfY=M15j96#`>tg{-dr)HEtyJ-+I}oOeN3cRgb7{_d9T$Vv3T4 z6OU-0cWuwm(T)m(7wD2=flns~s_789#naDAp3q_`L|%^NNu&u=1?9G%2{$7S(ll5F z7*swX#`$vjOgni?^LTJPT4i?Z)&g--^Xu%8wN=8w=8xFdx~e8tk39@w0uDL!zOIBn z<>60QG-#u>ak>@$lR(B^77kc%dqRWpv!(PzKAPrA=eGu}5k=YCoLLD@RgqN8krp=* z6%2MYZJ#CJeiktl6F?ReFBD)&BHaauFmyrYj1p7mQzU*pae3%e77`1=P9b_}Kv}6( z9EycQc2$G5LeZ2K*RfCwWjj#pf{Uh;0uxP!3@a6VXuEM$J&!UobR7JFXH?G7JrILs zYfFM@M#_sjn9UqVq5(Keq44&B=b^iNk60oQxx_o?eqBQlhsQ~f*J6SMpp888rW>kM zX6_^zoQeCSE<9O_IQA5I*QTIv{6{Ykvynae-Q9`NeM#?H8o`R_)%OP^z&PgjT!fYT zbe&-wmkLy&XVhArZuRP$x2YY1^t8LQOdP8aeL{?maQZ54x%`VdiSE77EtL2Lf;abw zF`#H^!bZ5GC2!i}x4#Lil(ztf==k!EeYKLLHEyd-9`9jYzR2 zmV+bb@QCX~oRASq(ZVS{%i4_7roj0clLlHaxS-z@>~}v};-Sqy0N(vf7Ii7zyCKN^ z3xJ!MeE^hI%E=7$`UjwS6!18c)dNG+js143wtHHo-;+vIa*I7U?N>I9cyVTTao1&d z6=!fr1({xJZUf`#k3W~D`Wi7@eIXW+2+G@`#(+SZ$9eJSq&|7YtPuC#F-XtdX~typ z0ktkZ8k0~dC1pdVTi~i!x_b2HjWl8=adfJw+t0Ayq5Bn(ee&<-@BRb>6>5qT;g-PiR%8> zE8lN1udXpMo{7KQ@`MlE^M7`gVr9!W3l8-vEJiUmSR@Rno{0@l-!0oArTn{p`M zUx~sw$NJp@lh^p-{GH+BFL7Ebd;6l~)6XCQy(*Va{r78uh}dN$U0N$LuAhqM%&!Me zC#dPs1UyhHgGhQFGbB`zsd$=lFQ+L-3)QTBO0P|S$;uD6sz1{dSOnsY{2^~Q_RNJ| zWCdQ3>qk=JSPeM~{VHS$H)1s@5wJfgY*vO!9Ol2s8_0r22+)_5>2O<{GaQmQV9E;D zzBvRo$Z%%#pw+|Tig~2u8NrVUn!fUxTYNffqTp?uS@FJSn3Ey3PhIcblWmFv{U@^h z%os=gcG(+E2EKZ6;>u#u?XlZ-bWA_qXtOu-FT9 zFyJaZwC9k+oENEY-hy5)of~ZJ$tK5x`gAw!_8EA|uJGUM<|Qp*yNNIVD24pFs zH7iV&dQb=4NP{FVn{o4Q*?_vN%tW;b7B{qb+#EJ5%Cj#+xXCcER{}-XQ@`y%r&&w2 z_|3VsrvFHPF`(+{2QOmXM>mmFPDC){NBR*o#apB`H8s2#MG33TOu!sM{c9g%Brxup z(V8$Q1y^;yfLL@}%~aEZ`JYrw%{@%A zZnw@OU|+i=s^)es4|&XrP(~!Aw67rY82qZ9eC}gpYg~bht4@qT zi33zU)(`>zVNN{~4qq-LiqY995B6oV7j61V*n=-uABz4+FQXN~HAieD-GK8{es*rq z1i?Rc2qq*j*`T%&0cKCmm0-xzhWFB!ue-A(R3Qfu>bvFEQzp0rGJp`naihrb&c%Ru zq`ZmYtJKyXfAyXgiy#xiWzz*!=)!OZ#h2z`)>GT8*QytSC*(u$p}Ahy)plOgYJ}pi z->VVTE!CRGavoXb+R{gFSFC8R5ls?wNl5D#=2h7pq(mDOSUYE1aPrF%dTWC5*UY!+;9 zQmTCCRzzko-xC%#qVqbqD!xBdR!V|@c_GC;ZHhk zK4g^%y{}`n%UBKMUqGIc*8_Cni5qn!YJ^8@&A3m^q*zCCT7fAC0Gq7O$Y(|rF|c^C z+*8mIMf4;`kZoz;ZP`J5Ri7eb>T)ntmO`GUZc1f&l+iC`Kr5RcC%e-!gn zSuJ&~cmJE|l1ThhNR5zBoNC9D_X*LWFlzmF?HZ*TY<_A6)&-w{hlT7tlW>WmaNf7> zP%ajBs8vI|%(2b66vHR(+IhNJB?Hh>V}%Q{(EtG$8x+Rw(%+bt3*oN7tQF$ivT|Ds&j^A3lVDxkf4)@O+1yZA9F0$Hpdg=LAh%A2Uhhl4rGv#Zs9Dda?j1@Vw5C@LESkqzS;LAiD&CeWpk6XnfS^ZrByDU zqB3xm<1|hC=Z{;u^|-~VB~ym0R)U-Gvg)$`0BLegkHM|EBs0`*Ke1dS0r%foH-k#X zy&?mD3bU{B3&00(Y+7x(av|FV5Kt#Ee;opRGxN!lq&_*FnWHGDzLj0GBLvi4ki7`9#Ysf?gT{2p}6~g#57joqYSismHPm)Lna0R z!DZ^%FFQ;*u$;{k!S$Bz!qqjr>9P(e5QO=84!ZNGEZA3xg_nWHZ+a&4Px)10D>*g{ zaiv<^8|A!Q7yb(BlS6OU($)l%>?7OV3?UvKZK`=_edzuS)phv~Nkze*M^2Zhp(a%R z_>3M1t^68dTX4~SHa^g>!T5__wei2k2u%JM`3Nb>?km}sH6IO)>m#Xaom3w0*Dciw z5m5y!3EVV6P{g`-`9JZn5}sNhi3@c9_!9S}kWzY6FW&C_i}KsBD}_bL+_Z~`gXKf2 zQ1wyIOi6QigKy@kxDCxDan34Dc6CnDcMpCmd?H2dVR}X?zw92e*qdVKV-*9dyF>hE zhJ-69DBnBj4VRd2TDqup#Lh+xJ`W3rlzw})Bi){_cIqft+LN#`RjPi!527aw@Q4iH zQxY1r>*fr;>Fo;0V&6smp?s^t-4SB~U;%Z8EByFBf?umuN$lghLm~{NmkXk27tX<9M?U|5$fa_Q58Q2`Ic%=hD44BsEBO~596#+?B4`2#%?l(1j(k$~R|oR-YL#ZduvWRb%{7tfcKUE! zdo%FvNiky$v1SgP#((I`NPN)Y3OzGlstHE?53fK_zkF!dr~o4jvDAddio#gH2!gR2 zQ4uI0qrNf`R0Qc?MK$#*BnTOXp#Hs06>fLXN?IPeBDBC&PHms08|J-r7GeWKm~l1SldA608*jobRC+cu>P`fY3GIEL9N84!|H6s_}?fKIx(C zkR-s-nn*BQ(mOttzASbGa;&@wGF1vuzDF=hd32Ni{;U53zu1S)_iCA33pDO&J^km6-Py_6*vmm1s`ou#foU-0&nz2xuNa9ZH_{_a~5MtIlv| ztdeIvH1Nn_ht~Z*l89&P_fcf#{+yOSnYhtB2nl6#pjd1yI!(4&<3NQC?4dO)ouJpy z*Opumnu>sz(yL{)OQ}@`iBjrljG9^9M4lC1G*Lm)=6;dMssrH#?6X)}8&}*u=qHU^ zblvGTpXXIy4~Bcx>r;1VWX2(>N054oRwDMM3qUyYqlyaw3yP0X=yjyvH9&}6Hfb4~ zLeZe^G4t{Q9FYG2#}9L0UGrcpi26ZL$Fl}J$LX2{k6bso`7+}!PYj%CM2}?)PiIi| zwl1)!2Y3&uTW;`BFi@Hw#Fo?d_)E#Y1r^4L^0OanvNK?$1{F6%!o-3%ru%x|51ZCY z*IdjU(;Iw%cws+2q3enMZ;XV{#SLAJK_P{FOfuL&p_4=pDwzO%g3((&H&pe}kOJNI zz63G})ad{|{{Zl?WIRiXm*xXM>(}&i9|EVfHW0xsncUC1B5PI^8S0PyqVmuEOI&(S zai4hJwgJrWh%?`|{7L@+@BH;V3s*mD^cyRAUz?ivDCz+_`qbzA)hV~Zq-=Gk&~tky z`M&&K8U#j6Urf$EzrPa8#c%SIg)m-oUJrrv{_b>vKIiLj2*4owtFyn5H~#?7$H56m zVQ=TlrO#Xb6*itf>)*NSyIUuk=%nPi>wRhSH*N4y16 zDaoOyr@!>4jel#LHzoDH-}zq;uNL~6rzZTOZu=TCN<=5HK+mPgwcim5NB|^=4ABk4 zDjyJ4K$JdUunXK@U@%1qKnT+i<8o5hULHaW`k=6h(=8eL9HF2KH9`b?YA&ON20&(V zwQLy$Rr)`KL{n1KN$LI(j}W88{{VB@r=$^x0@hw|uthc2l&XFrG$tB60%6jiP~-g< z0mgzCnUYd~V<)AmepGi2@Hrhg?Gv!YDOb`aB#@Y{s$MY`U7olNUoMrTVNBKjX0w-t z$&(f_23`3Ngx-%lqEN9V0;f0AoTM%ADs&3KH{JeEpmY}apdpxWbxoNZ#R~gHr6j2% z7-;lSRR=NgC$i#%H7g<;frZeGu^>DLJ-racV!C)}4|y=@UZ4>Qs0Yiez*yUXfk(_D zDL+&s3wS~9KqAB{ykZy@aF9q4xLFb`1p7u3(l81@P;O?26?4$QikvI}4;e-fs<=PC zjOr@(G9-h+K^T(yPEeqNQ#-TXWX?el4tn$k0c^mpfQeW`=Soyk!|RMm@9&=C?{0P3saqEc*Xxt0(8UhnH7KAJ-kZ(86~RA;Bk zZ5bd0q$Cw)ENEk709cqgOI{dazw-ydA4Ab7kU&2GZCe2fEQYOg)w^8fJqJ>pDh$5lkgV`N;&$Qrk5zrZbyAJgnzJx0 z2r=QrI>S9nv%*rkvF?OB=;}MrC<&yfO24fAq>zQ+VAg=dD#3BS#Td3==z47!sRs~eK%f>O zRv5Iv>hH6O;gy)!$nU<4^LMxk*Np5ssZc?Vl3f9a3~#W zL=^5@b?4`J$?MGU4H{6Hl&)kjl-I)`6kvwo01W^(ej^6!_+$$ShWe>)2=hd?z-_C_ zbsZM9t$d(uKLkQKd!0Iw2ZnV5(I$_t=QT>BqIp=3`>gLV)A@0q4-OPG4|yN&^w`dQ z@=NGUw=^@8{{Z^o0>ZK=a#(K{`9701DVvCYKg@qN{{ZvAT6F&ac^~OfFR$C!6qf0C z{{H|M`@h-rL6WN9QWCw%ejM^j!j(5B=6+tgnW7FmFx6_YZFSu)lEg1mQp9hZ}o(7oolyCck~?IeqSW^h|i|LXJnTosTZSDNVJ5IAfO5j zJ`hjOAHPgOgl;=gYidP#3bOGC#9aZ2gnXOHX1p6RR)H=2%rzA_-m!{L;@=72DvfFX<##a6;W6X>@5EP0e17iBnJm6 z{xLy)dK2|i9)fr6CK}2}TP*OR@^N~liAaG9Q`bCcSPLcrMZ%D(j~51BfTg6WC&9D< zrQ)#;$1SjZLuv@X))W!okpazN-jm9tOUlUxxNvR0XdLo^1w*tGe)l4}M zR3v706z$=O$9Q$M17;PzEf-LSM5sn$4G5V#;Q$pvt2brl7Jg+NfK7#soNM*K&+_?( zzeeOwQYoVQ1%Sk$MTkgnM}f=`K{ezZ016a586)jxpF}7Mgf;lo^&4>i0K_c-ac~7X zwu`}FJLnPf(y*x9IWGYeCu2`9Gz1jYjnIl7$i+gw2#lcsirWNIXd#2s;bTi046b`M zqxxdlC}euQD4gxt?86#>nItTe`|#y@{QdD1aDf}_-U=pZ+5)t2TiHGzgGp$RB1TZ_ z7DhzigB276VHc|!Mp#zSqK;wLSkJ7tPmRUI&zYxz$l7FsnRBO)CMJ0r#6HZDAU50 zNG%|TC~5})5{MrW+@h!rSoCt!5+avXX)qBnjo`I)Du4-ax+YgdK|m2G5e$#PAe|!P z#$_prNX+*~$gJUjrJj+a=xkHbJX~Wt1EIiK`f8B(B1M2tRqBZmyrt)c-}X`G=wFRO9&*)teKBSvVoNOOY5iY{%cbI0MU?!22?Ab>gB#s zkYTNvt}EYt`7U`#;g>)D4QA2PviOS}<9(p^8W9s@Ry+Y0EOiV$-Y@QV(6+j@-(;r* z)9I#PUN-K4m;%7Fv}{R~PbZ~tdZkb~?hFi_3>Y2)5y4DS-;Y0n@=z40q9exuf~lnh zA21=B-Hj-O3j)i$c-%D=4#{i&lMud!;U(#U^h7QgHooe2>5W03(Z<@I>#6zll)2dY zSM8`C2sAbH=!I7lo%9GGfj-O>WCo4uzL(cEQo;5(G4vH`SOy-*lbrTd1~^%>8h&Pi zb#~${1m%4qP5bLfq{Anw;41~rpiw~c3=m2bs2Uh$G19>Eff80%+o?K%dh_8Ghw`L1 zrwB9_cT;jYr2g#e2KozS3Alp=2daKMkIkgJhzqU)2S4I7+W!F0paLn6;D=0eKk-s; zieP&nL1Va|6KmFiJX6$#7lHb$EA{APo(+PUg9A+U@IUgAV7&_f{{S7T8CPe%aXfG8 zK)a0lY3%)t`@X6xH~M_MU;6!}AQei0XR`cIeSV3)0T8!_#9vh(ma}?#PL-h`dzv`^ z0NZUXzC?xeoA!$ah2G?6JOyr{PrmW5%e&8g@lHXddS!TG{9pRhDv0C3Oic;=t@PiI ziW(YG&WyX8@6+oPiXbe#=jVGh`rzLO?-ER&*;KdDAc~7Z9k56Kp0jNP)pqlcC&~A`D+Y2INB1d`{ zz>@S?@V0J=IV4QpW^(-kOU=t6L4rUq@K9YoY4+5~Cfi9$>lBZ918 z)|RdDm}PfHM}f+b)=#CHkHm8YV<=p`yseG7dC zG)LV&9!wAoBk5&I1xauvZuz`gP8All_MrN?5`-oc2kr&qfG*& z1w26wm`bHlquWgv*)5|6eaOD046vJ4aWY3g)301 ziGUPf-~|!L8R4fyA5|d$V8Jg?hzE-kV7`hA5hzr|2*P^-7z3tt0HrD-WP=nEqR6pW z>Mc-fd@7lb$Qh6wLIkicgqUt1Ab?>6G5{)+x5ZGSTP8KO55zRj!2(hs5w0WAS?n->eOic;>UP4ITGaWfV77!i0Ml0+6f;pHz5vj_9=+V_5 zO3SaD+?(M^6cS|w z%SU}4{{R%<5D*oGA{45$Ky*MeY2YZ*1&SLR#<)6=w4N=XR90OefGUMgWQUS|$3Yba z6m)1u1xdmn;7U{IzT~S#yz=Jvt9z58A9B75# zmD^LGINY%6Il3>gL*lIi>bSn1)-7r;&jkiThVZ`UrmnN^jYgoTOlmctFnfADW|NHz z!iQcMTbF@If%;f=t(|ng%+dAW0Luvpv=>BGTo6*80fL|aKqORBgnE$8JF za3&XYaF{~#UwhyH188Rrh{M~RPjT@pg$Ad$Nv9{s{{VbI37a0$$k*MK5YdN~1qBd= zqmj^`c{!KFe-N18Y|im}*;07>8!Tx+!0G=0?3^|5O)RV5f5kcdjyB-3g`+KBtph7k z0|DrOP5Su<5`B9){N3;X#>HDnFV-&y8QxSlBPeI%o&NyD(ERWRW?xgj-&)U}rSb#r z{y{#|kz+m=hl-(h`X$|`a-eX1n<#q~$)$6#EbR5dV4m~=4R6?y=l7WD;=40++4K1E z{{Z|vF(Z!t{{SosbD3hb@s=jt_c&v-d+=rNn9)e@95cDiVaNPDb<>u6)7(;e_tTff z8DPpR%3*$UGlMYkE9jtbGt-dHPK>plV2X9^jx<5Ft*$}SCLud)LzClyPC1>rz}5=X zg<4hiDk>cD2|%#G3fO2)KIkC@Bv3?v0tbe3gVg)u3MvwX_xcg^$7|3{OalzAdV8n0 zPqKL7B;f&|Cld&2&}9P3C|O%X!Ln@sJwGzd5uc{YH z!|I``Ir>BHhIlfh4n`u-SioGe0@#}dE~qtt>gw=sQ$qQ-g%Gs$1~alEKwYXSqJ=b| z4t-jEFsDc*3@a|RZ8xDS=+6nOI50*r0D>Om(L=^hrAo9G`$AOc*mxU3<~ed6jVwlq zjVyrP;-w6)V73UeIeD1ML;zpgA-$wC0CMScV|BtT$5*LorX zV4VVp4KN_#;7~K{tb?QyT7G)l;?Nap6DFMsEI+&GRw;)T!5?ix;LewWo2}A=%txK5S zHH@RYLW&{}#ey&a4T`1+5)~B%0tcWm!i9~A1weo?3i^Q^Mt}@<27$p60(A%h!Jbr% z9DqGHqJitChn5cu*jCR_hvEJs;5zJTDw8lwO}%0oj_>j~&7HMA)%ZXny9LgviWgxI zV#GP&1O_cYuSkp>5DlhH2oQmZ38U}fi8OCR!Ub`gh!b8(*S@qPFAyujI8?eW_cod+QFywKx;j=n-*w?r`` z6vW{+4TpdTbdISh1Z*tR0DJ&a4nYJ6G!}dcfB}!hR+goRU_=@K05+Y34@F4<5kf^P z2m<{oHtk$gN&u8hdVDgND3vJ<>QKRADxwjihzcrNAW#~n30=TCC9KFO5+g>Kpa=j# zDyXU%4yux*tpJCDO71D9L53Et?l%kqNC33#-G^XiXrX zaBQ3sG2nu{tw>%`{t+GdZqvq6L5<&eFYBJP%c%eg zBPRi|rKaM{MAvgKk}z0V5xUY3*WIKF2*d+ANvQU2TnSvBK%in;EpmFXZ29kH`=zww zTTnjxdKfjV*1geL)?sbL|PbPI)xqQviWTo z>3Wc1$FnzQg&~VZlif$DH9iW!Q5J-doVB~5mf;ERGl8Tc9$vCV3P5EHzBd6vr4S=& zY+#n+8wrOAR>Y^&LMm+)s2~zBtkn#lDKK}^-w1BQ?*9ON{7kK^uTQ2DO|f)x^}0rr`GUI%967boR%`tM3Cg zIO6N~O{g%T$8n9g3Uzp+1s#$_&|6_K6CC3&B@Z4gtm=-JMuqkr0}m7VPND``GYYCM z4i`iTlB`k+CMf`>Xz@UiuC)d&M;Hg_ol>3u)@m_-yN8ZlJcry);_8iWW^m8-?= zys>m&b~na{bQEqR-A;4XM?3=!RBdf9_1K^HobrR`w;WhKU6jt051@ik+HL)(JH79v z@B+)K``1UZ7xN>K@>`l&9i-(a+aF%eFn@GCE_c!Q{{Z>{o!d@xvW3cz&U<|MMI9OW z?FXIB_FN#e;FtTG>i+=#XuILmSq$0!`)+Cf0De%Rc%Os|SNpyDHd3T(eSRO}CUuZm z>%=;RYU!DV+uu+#^TJ~&l6rA|n>)vU_rcfz1=s~2Y;ACs_sEI>stD2)Q(kp( z+v5-!s$c_lt4WCoc@P44w(7XO0h1r`@NueGP^H=jARE>JNY$o=+KE$;4>YU9@w6Hl zJ)_baytL}sfKSq~^}97M_;91*9veYojuD$m*RX|WnEa2ib@qoq`X(Z+6r2$eLdH;4 zhb%UZL>sIuCAI0v2O@2uC}`9vryvoaP*YHk9%fTg(0=CeN@NMxz7t>qKrW5SNuTd7 zDx{PruUr9H1okgr*$MPzZku7oKIwx-DGzvR;DzWdQ0y1QLx2$kFE#-2Y$SXnDyT^c zKnj?u1~vkCSpy2*0_8nW0XNVfG7SoDoan~fMjhWw>Y-3Esc%OGXLDs{>IXu=8UYAF zMe3u(8qtt00qNgy{DWtYQjkWENGi@?m=v)HxT0&6 zZ+MTnjmT6H`e7AS7~`TStKf@)AVW~7W6+A4n)r1MP9SiIE(o1)Vt52=Du$U1s}D|- ztHd2*ByALWg)bcEHh2)~iPtLJQ!)hidwhKad^m7g41z~Z*Ti6S=D|Y>SXJ$1-4JrY z(VL473I zDT;mS+8yb@5fLDY#ULFTiJ=fV-L(MtUrEnoM6nQ!MQS6Z)~j!bFapuS z4G<(=Bp`@^0Z;@Ott=dSw7hN=6bZ#2^%jgQ43W>_!1_3!=XurjX}$3le~w2rNin&n5mW^w z1|%CGHb3HZrwbTXCt(){PrnO?(ePF105h#ygId8q;7%69uR~2?U(SC=#fE^|4`6Yb zt`90l$e=K_u##QT7NxyM>W-OYna$Vq9iwt$C_xy(jBEb@au#7T%Ij1j5ox{lYs@`$ zJZT=o6Gz|Ozq-4Z%jfse5PwX-1SwE_NSHV~7?cw9KTCxfD)1|R04#+OhMHB_^pWTh z1jH7F;_IGSzz9?j2x>z`_BA4}mumrO@bYj@YD!)sL!Lx?}{z*U)VkQY)bz!K*07MGjCxqtv)ikljvmx_DSK#hh` zOrIr=mjtjpsN1%HmXV_Sb5^t2*{D@2-XjK#WB7w_h*Po+4xv4sy&WO*#-sogBtQqX zlQA(9$)*&ECJ>}UB##|W5w&PQL{Fd*D%S#+0S|G*Q#KJn3i-)W{5pHaRX%h53nIb1 zObag*P42vV;EgdbgqOaJ8D5{s;wS>3#BkTumhdsj2x2S=VG)tWPsC&I+93h2r6=^t zJi6KTRe!<%05YDB#~A(B&u65Gc2@7&zV9b|A?P+4#0*vi`TkEa1D$_A{{UHq6wpTs zuYEV#bXxD;JNe)%xae%>x<9nvRrltG72@M`{sVG;-(dib&SXALd=?D;brEn;p9TK_ zC(nPcxR7i@r?>Z+-mmYBl0KEz)s0g}L8Y)4{+xh~uiH`;Vt3QOK zA4V^P5u-;bFKWW6_pDy30svh01@EP*&_B-rumPG7(B(f2Gy9?_h$E?+Af)zKT~o?# zg$@`OJ@*_`dVIAE;)B}8-3LSBEm38`vV%e)5_-d{)oEZ-gi}+0(Td8LA2cFOAuKe9 zPOkQH*@6jKsMT1#INQV0r81=*ijM&Z0@NHyNnlY~tqS9gsZ?Sf0z)YU3^pi(hwK}1 z$&gX2p!V$z_YbSmcfRX_hX@C!-{|T~W&ueATaULmKDOt8h!!XXaS-AHfM3JHAT2!? z@GZG(gEYoZwMn!vG+kXv1Ah_}TV3x|;oR!eL&rc1y__Pbv^TOS4H81p#H;2S#ZcBh zgW|WAoJr7_lW58(YicnD{s= zGL#NCi$ zz)qOSqdNY3hG{)!=dd&04Kuda{n@@cNi|g3okJ@>AQ#46aU3X<5_Mv(gJ~rg#h9T% zEU2y(KyICcND_vceXvo{t{z-u+O8B;3^KK1PWU#z4v`Au0;>)IzA9uYRW%>r)$AIA ztF%DlL)lXSQNjT{1zG_`3pzlc0>qFH3v^UEI1{%c0HzQ~Y4l2@p#UQ>E|w7xb4V>b z0)P?W)nS>wJwS{AI*3YYZHhrWA}wR5QH3dCDj<;XxQ4LNAq-F|q$C9~6faH01qgm4 za|ri*3<(m#O(IoV5HDMR9zp5BN4^Fi6=sr_C`*nD9B0R&nTBDfJX2r?qZ2GW+}Cm-Z?tHETeAYKK`V;+ncrWxS+o3r~;%;6p*UJs$w2NfoHb= z02IBs=sCNLZZIG^me_30Hf}RO%)@Q-LY!Xv;-C?lM4v%WEnfh))R+)_91 z#BZqU9n^jF-Rt-{CxcEoVGYJ}^YctQ087}TKXm1zhxzxxuH&<9{Qm%WNL{%i&Si}M z0Lpv+0Cy~cP#@$oWzWXn^y?m95}x$2_gx$B<6lnI+)Rh{E8nN*d;}l>eM|h`?mPP+ zkVo6b{vMx`Hhg(djQoG+eXbw0Md0b;V4#c?LCii6 zNYqRs1R$Ez*mT5LwuNa*`gqXpG(}Veq@oIf0bj;RGRD3|872P!$kX^##xkBaE#{-> z(3(D*h#H~e%qiXsflq$5NB0BC5*0^fV{S-b)L&|Nb*x$u{w4Hx)mD!d|2glQrX6ovfSo41e|3g> zmc^`LEuDMT-E3E6~QMzGyQKYTOe1g)wQT(nf$tm7mhr=qj5ZXfByC0UE%U z6aoS?D_2)kK`Lp{!&F21Bg+FcS49A2STI^jfu1GGl)E^4RqQ%+C_X!T9J}3yOQqQY z`g|*Ar=@<$p1y{AoIy=p43XrEIrDxRv{FY2vW~0$bwXH;?b~kK%QL=X6 z$p~SSC13e-r2#AI#v)l@LJ`r>j58|&=pyU+l)`Iv6B@&UeI6de{ z3`(@%02G6v4wYdr@Ph%Qxab9l5)jaW>dzd4l5l!(3#B+YP*7122ik1n=pOVxJh+3~ z%ZvrUNk@@>H2E2N!qSR03d0>onJSO1NlFG9Pk?Mkg9&0Mv=md`0;&f{m&OeNUq&bn zs3uZF(gmG3CEx(73RdDU4zkz~1BtT|vAi;rjb2~_RXA3SzN}Ktqc_K7>AtYFmSZFJ zN1g>9#7Qlj{{WK~v)8o}l)(Ok4!}y>f}Mb+1^$ta_95uCAy#?Hv>}JKE~7LzM+?ObfVr(ixl7_eqSC0@=?0Y8US_OBLqC;$ zZ~dZf<_*RIWh+)qiNJn9YWV7G7BvNN!%)lUb&8&5it0~5?slQ*qPz@83`zi^gVj&5 zWiN<=#voH+0R&N~?g?8=DGHnbq(Tt`r1L%@L;}1snM2p#WRnIbx$2A-rLP3`^;cpT zwR!A29S2snObK@y5O6y3#7y>#kh<{Oaf3(G>2lQXLtHT+7PvTT`0u&2Kvi> z%R^sLfC4RDDUFw{91AhWz_lF$@VKolP)uF+&k_p65^Y|(nQa2OgXCOlFWfi&f_8sy zlF$L`76xVBqA@o1BX@Q^2f2Os{_npON@XwDh31rTJ!re)ty-7~X*C|YkH70mKBO#k zQnHNK!8C&8*ez%r30KP43k0J}{!frYzGb)SL znBU3UY?2@K-SJ2d+U|m&)7H$Vx{>Ov6t@2QTFVh>yRVTIV2=L){{T{RC)@1t_S^9` zH+K37H%D_A1!AAKzWuV7nLlRDwWPaiyZqmz%L0t_(){iRt*&>_IAL2G$lLt9&cH7~ zQX)%vZ^-lS2H(jLNqU-dCUZT8N!#W=gfrV6{u}=Qso>t54WCp!A3gg20N&JpeY^|L z=lV{ujp#+*hEo@!T7yM+hh( z_`)YAyPdCK*HI%O0nw{zLe3`b`RBTzgAK*~7xNt)^1({$%MScBV)zI}Xm-wJF+eNBe>Z|Ucd2#~|v^h!#P2yiq^&Rn;z(G_%QCHu; zFQxH?)$F2CG+IAuwas`OAlgR{_(sCbNL73Q4|N#^>KCuBUuJp1Gg6G3yU<<}@?R7` z3EcW+jNeu=8wfY0v9vSL0Q*b4o&$GP%Cxh#MHw3{YvY(ysYhQ+bp4wV%xR|BA^2lx zN`6*o$H*Yjv?{P_{W>`u+8#*2D^Q|fP`=MWRIi;IjUIqZj8Ii9SqMH7bQVVD`+dIh*>Rm zI8&Ygg-W#nY7eAW)J*VT3jo9)393HRs+8K56iQ7LmIy*AJHb#yMi_-(M{@J_n)v`B zQWoJzI7ige?~Vu}Xnu=o(zi)JwG)aR6$7BcnOI%R#PG$A5D zM9%rpB%xT6?;IvaeSkbc5(rhZs{S(=H<;fsHN=WK)P4xYIg`PMO0H6pZ0g{E8eW}M z#>g7%uU>#RT6o>Ypa%wmpy;Tm7KB8hOf^v%Uw6?BXo;m}11pMGH;DE-4vvF^06z4b zx7cC~stmMpI@wLUaU}i?LMp=03SI6aS&$3jDnNzc(x;%t6{h?0!9V~wL%xq0jkoy7 zpi)B-KAqlle*k5Ci_Cf=eOt|BuAKB#`xZUAq0T7X_mJ@_1P(s?5J+_?yo0BZV8*Jt zqck|-8Y$WjkO^490i_X<6_iz5p$#Pv6#xQQ8UkM^N(jyi z?+v-AoE^&24Ua@S>PAz#3yfpZ%SHbH<7xcgV+X)scAv}97u-(0y-yw-8Zcu`F2*1e z)1DrJOBWAOaL_ox$Q1A=pi~s;zTUSo000OGEUvOB$D0Tp8Xf(zD&@qCZ5n8L;^2n=-V8un(@5vU;g~^fJqYmzPn4?>*;$? zf~0^nD6@f-$TX^`D&Pu8Kw{1;ReLq7^WPq_Q^utwU2C{ZyAR9g6Eg!QJnnpl+; zlqGI^WH0Y)G}gcXIze$D3NV516}T!C97hA^s*Vi8g#m>zw_lIG>-x9Irq%aP{?|Fg zzufah1Q@@x&c8tX)VAnBt4CO!pDp~bmGk@xGx<5aGxnLyb0sc`k{sf9i$CQ^eS=4A zmpupF1i#QD2>ky5MUS%Z^=-;Pu$}(^-hKE_M7&2&vcmCE~xYG{0w{}{{VpdqXI0}HPbsO>uW^c z^*PU8v;HEQR8V8TX3Mw#04zL(SN_P{3uX1MaJU#=i#zwXg+Km>h*7d6DQC&*#&eYR zuEG5*DIZz?0Do!g#8VC025<1V5gnRTn16u0|pG zFxcoU1<;48Ceq(tX9y1@N((1&s9}1PWvJ1zwERgBtOj~m zaXnkt85pD3-vtm+HgB^!a8PoK=u?8#FYxA}+}DU)a2?|$<5CecMn4({i~x-n`CgL- zSAAz>d>&h@US;CP?f||R5c?H$jJGY)l+RPgR{|iZ%6k$H?f2b~3HT-1fG?n(p1I^B zh;*QIX@BW`s&6Kh10jQbS1-#nG(k#=+^F4q1omQZ+E%;z@##h&nPpsieB!nQ_I(XL z8T6&M!?7ZI;A?B47Zhlz;HME#t)tj_c~(#Tl{+8`WUZHR-8O6-6c`Xt8x^nn0u7IX zl&}EyzW1iDk&`u_kr)luXfcp;`nl&$SlQUvdfMh8aFAyGwl&{{U{D6$M!wLiAb5?e7m8#x>N69o^vvPZxm6hOSfBfQxUQ$xy9(a^a@Nr_ouaeE9SNou_I;f}il)ZgJD zx-rW{P8*}t#xikhew_!QD}dh7@u40XjEN;qP8L~4-w;Ch{ltyLR=*3ld z4o9H~DltQdb1nX}{GWqQ6;*7eA#?PG1sCxjJ);n*b{ouRXZRfRVDv-K603VB**yb% z{P%0Ua@GF;L2iina4!Ceg>At#>&=2Ey5pYD{{XWw{`8f9f&gp%(fu-1 zf|=6b9-mNv^V02K26z!RM5S@3wJLVL$V@@KQ=kb}=p7yMLe*$C z>xl7X{3P*5P!J3iX?OMjs`J)HTTU(~OWZ$6(sRVsEtk0A+RM?}ft+ zeZ4!Gx{?>Gv%!cFGc)GNcoexhPZAy~8d{AL?99*q0Kmtg(S2vA=lN#Yjdw! zezMRfl@Jpb{{Y}A@QCrSN&=cEtN#EW_aC2gsXn7l(meXf%>Mw%9lP6OkUEwB0L~!p z38*tcdxA;c#!t1CJVuK{^MUL1{WIYCM2d;+-+U=HbGxQO0<@fsOYGl4A6b_?Qjq#_ z6G7WBB>nq@bw(@~(;wYz!hCLvfR=yu*(;Cx{{WAr{xt3%e_C+8fFg~bO?#M~)&$R6 z*hJ%6{{XW4modL`N5G*EVc%Q>565|bg#%?5u;3=X%tPPC_>coDQ0eOD=l=lhd_}bP zGXDJiNojEsE)l2DzSH-+o|`gx1sP=QD#oj)FRAm%2>|Cu18}johv#200fHl14T?!2 zOmkVy5Z-`;O`(AvC{7lHIu!~K`oZt*4Xivn?nR;yyjVt1sil$g0hi^U7m*(C`q#@C zb(!|isA|=rE6d}M3N27ZXVo>+U1E=dFc&cIsX&Mtb47LW6&o6$C?mp2GJF?aSP+6W zL>`GyYxVAO`A8;GMxU)O!e8yr0Xrhr2|vcEGeY=)E|`hI?x(PzL{S6ahFWfE#o+O^ zc|gc`0FU%5PA9Kzh~r)JiiY6O{s!Efp7PHi#NqHQD^5xs^6Rze7)_*)Tx5mgB$&Mn^Q-g|)nD5HJDd01eE zt*?P_y>mrPZR0Xg^G>vwmcL*^lV-<=d*kTQmn*!idE4@9?)QJq+iSZ zYTzmNlWL1fEjh7Xk?pWGFHK9X!ay4=yC>|J!n=1zKIuso+V!i?9r!vf0z1? znBfIpgUa*TX>%052^6Vlv4SsNKH$>$^$2~ndSt(J3ExMXK?MyE&_jbk&MWjlqJV!5 zDG)KJ2_8k9 zip{}`Z=o9g(=BozZ_D3HGoPrTD| z41IC`0A^W-*jOS4korgf&O1HBHeo3eM@d=62nuM9 zTdxfCiY!%(JzL!^I6Pld8iNNxRRFLQk%c27SJ2L&f@qGhV}LY~Lck=A_I}{8Hj82! zqn4o(s{R@O08o&%2BW|#F_n&;w6Q0Vn~dZ|C~?#Uhc=3oIweocqc?0u`WY8>c_{KOsICisxLi zY;#&mWu!Q`_InjO};B0zh|{QPp_?~_sFD9AIg-sv+G7VH^qv*!}vakZnN~A zbI6Dy8ei|V{&&A*LK~cO)3!=*+J~>r%cWLi`SAAH?;Z95m)$r20A`;toMz%~CG}(U zTF3nB(H-*vcmzZCdOq@>qX^8DHmQ2$(!HP(WfBk6yD6#oR`@->KqGVnTd9P4_@ECQGf`<3>NyIX(hBg zBM}hFZBXPrfx;{rk%qv8N7(Bcl{aOgq9XRR&tO`<(V#1(G*v>Wn&t(hbBb_a00kq1 zOA%!&Tl9AmrU*!$#|f_z)YAA=r%!!UryIXxmE{9aNW{}eK(a1WZhm=Tut|Z>MFCf~ z@XS6iEmyXl=BO~sveKr)1|%8|5;m6OIA{W}V{r|?99xwQ^-~F|bR-L6f(HxLzL5ZX zsu^0f0O3F$zs>z}g-tL~s?$BVUVGarIU-0V5U8L>61pV+5yyq(VT^&9u&`DnEk0 zT}MLKg27F2*OwuTLGVJUp+9mFEbRvX8r9C&@^$q+Q+#3QRptk)esxs-@bUVR1tP>X z_4=)aI)D%xnIzMj!ZU z`#e{Aq5+rx*si^28tH;5J6J#2dtO3 zTCL+O%V1)|sO#BdKd8k(s8*4pBSxksQ=6fl1R@5W&C&D;gyNLfgA_r9b|!vNhyGFW z_AGS%jBK`Ye>{|qqybgiVwy)?&cb*_hE?mh(1zG8mQlVZKoHsms)RKSPo`7A5-Sd{ zimdz>g{_(3m?HfWLMW!Bl7rJh;K4(}(UaCJ!OW(-Yz0t4pF*Iw`B8V%UKek+q;x4p zzw}FdK>#>FDczg!`6I5d;ojKlluL@b7u64BTtHU6RjZJf`b1oaAm;L78-AnkapHNf z!T$h6#r+;Yv|ms`V+>%TFfle1g>~^70B{Kw>n_k#0|aF7B4g4v>vW@rZ(95hs-TF< zn~ry#Ga^&OIo;5*XGw~!0jT%Q3By76K+{F6W`S)&Ngyn_brBj8g!MHRL)g&^2d;h^ z7S_d1C^X$n3y>C5<(;pA;0Oa*aZpIdUvPDdWCQ*(8UFx9PE~l$fIZKHX1J<>|pg76KrCdtY-gBjN#w3ZygMrh9083E+w^faFH?7%KFM zF^dPu@^vcu=%}kbx5_L=-tj98?gs>eK~Mk{0$dTO`+EpnaL*DAMEW^kM|W6$)n5f# zAPG@DAD!53lf=hTE<*DtP13*r0FM%QP^5Y#!4faKPKs!Z5I}LIyX>>0XMBn(iK?1a znezL=9tVY@!A1E2=M33{+B3*40T2ooo{oCEC8T^*QX0Qie$h(N>-*uXC5n}PHgo#R z>eOk_-5yqb{{X)JFnlkqIjnxclRqc=YH+G6r_YSx@AiWRHv=!pan=vZ{@dRj6x2_p z<({YLPB+XV8n`<&FKbI1{PpCGVQTw+{k_BQCV8VWUE=S)w3q(?556JqBDy-~vmV3z z(jX9PntF%P{{V3Jyz&TfARWc0=dVv^9P-^O0DHZ72^%Yi-(Gv__My#_K;QZA#=7f< zQ$IhS%<(q18s;udPx9g^x@BaWb-PivB1P8jk^nat@B0K@i`_*frQJc0YAWvs|^3~gDS>gbhN{@L);klQO@GaOH zfX4t4`WsG7i%t%ME`>&wigvCTf^s_S5UkCbn9?e30wVhrMO+(k0NAKrsBxwkl~ro$ z0-B&iiQu3z!A?_EE(nKpwQqpPf}(@aq%|q(Zo;C7!~6o9(ZEX>;7=D(gxZG+cEUAj z_k0kOs-i?9y?(L+22Uv#iU1BJWA^MFfGUh6bs|c(0a-(`)9msE0Gool1B*eyuVn+r zLtD@N8F&P#)pW<37#!>-S@IA2e)%9B8tH1&(_v4WqmP3PzP}I=hr5`dLUMRQ%xhH$ zFT<0r-Ti!^TaBWxtfgMS{BsCTLv@x3H9c)RUK+y?f(Zc><|7v8*un7xUwIcy!qS`b zLkGtxPw@W0{W)#KUlyZJ<^Ec8uYWT6poPv5(wUXeM;q>of-kghbUh#DJ^MTy06>Ly z6g4`7DUEN4g=%2#{p-ge$2BwsQ3aNWuXHG)gCr}yNjDXB=(sI(on(+f@y0_8P;raa z2t-{`Hh7z;;yh#+{u!Xl;#l~vv(sLXNO$^YfT>hJdCT2*p?I`B6e-i*y6O`yGiuk- z$de>9wDkSrv(98>>MoVG* zL0N$;ZS*`{$ooM)^za|WZ0kLir?gw~&ni9a7u-kpi`{-~@^YpOLx<=gY3Rgh8f z3K$3^ibM#(U0U-pOC!>8d?htQtl>C-Uf9&=Ahcv{SWm&4{k()#JR%TE)`(uMTgO&d z>%?tc$q>C&_CF_F;2KS_H}s&&H%q1NE&ZZ+y0 z*Y(7tYlf?$Xm_$kw2R=<7B2GO`muSNY^Q;e7OLkSwkI8IjtCF{EJGBLUSwPG9}pV@ zT`STBit47kZ-$ZByVKhk71$K0o^@C(p2=prq1XW*9xXxe!UOGApm7TTo<9EFmA|FD zT;*7fJ`|!P2dj6MeNHDS!bsP|Hr~Z(MpZ!8ENUns*Z{?Y4$xJluw1oAq4&Qi3{lnb zsVJ41zzC5THDdz#n1b4r_n?bGJJk^*q{e}SSWS(xVbtfp6f$;(v6fQdvsC*J2F)aM ztmj+>VtZr}L4x|d9&wI-Ir*{hUjG0Y#LwL@NN1=oj6rKVLce^*+k`2iG{^5c+A9 zK{l~uJXoK)9C@96xQiejfEcZa=N3czjd%CHX({hdv+5b{q?@w%x`Yz2cZBKa`+Z|P z61o~(hkh?TY0TdeoQP2Br|lMNxRT)(#G0X^nlpc+5oJ_mvKFE}(Q3&-L;~@V4QgZ(Q zO)=lM^e;(*Tv8?sk$0r^$`lr$-0P>rQVva%T=0P?0(2U%g2|O&{uTj63LXCBS4Xbt zOWI+o&-KMN}|oq+NPqTf+imcT$&xI!kjC3E~G9vU{sn9oL%eC=d^* zFk1fr3AZNZ^|JsO%Y&cH`;M2TZL``y>=HR90i})!K`k{{Sa69IwZ5VOO_tY_?{0k_-S<8kIpduXbYx z%0N8_G@qQ^!il9u#HxUxtAi&~J9-lbDG6i)p?96#ZeDo62^}bk4IN**Eq$ISSx19Y z(%UMx9oUjSL>cl=r&t8!cZQLzSAEl;T^LrYa-R3c3FyESMxzf4ptPIQ($ZiCjGxk2 z&s|u>>fAWP!B+iG?ibxbbKdg!Cq>RGQi!`fyAp$XQ*c^>*@TAi z=Lj&Qh90F+>yN4z`#&Qn<7bRYNbdfhDJL(Ozdt z$T3bgI0h^LP;h$y3}&tCZT1sBcn1P2#cM+e=?Nf|@J0YYOO`(U0+}a$a84S9D93Ve z-hLu^DMl79h*jGBMBeh4fB+R?N&)M4se4zzFR&mY?ZYhD`SuvMBCq+X4bJ5_yxw>; zWmO`2>?UxmJrsKA>G!`iSDhm}Se_a*1;6P9scdke2(OMNGBy|@QT^_WJ!%95BtfHq zWw+SPX#{t>Pv&q9D_*ar0BRH`<|_v`{K*}B4GNAGYr=zEQeaO3w9yIf&bkzyJ!kV1#0TSv$Qi8v^DC}#1U#%HG%XTLv_r3BVML;ZS zUh@v^g_9c<0fKtqr|4OIGaV`b1SDJw&9d*#c!G}O1{j3QZL*@*d^6ByA^-q4i4Vrj z^_Kk^I8(X&bsVgs%M%K-(DWnTdTVn2F3QhgeX?)vsXTiUR`1Rz4+?p8N+{{T69c}u2!!%llQ*LVK_f}d6HI|L-I zZs#Q)?<5B-rH{6Iu3;%3Fa+Wup4+;Heom)v&x;&Ae1q%keQ%DEWANL%F#L!6d{8UV z$D%J2x*YX+PcRSr_;=Qlvwg30Ez_(wgU<9fX6{~iGU5Zrr@@nb^j%o_B95r^efC=w z_3ZWHR+_xM$t5SKbuDiJX22`#%t%n~cjw*c3(L;Y-&kMjdf?D7D=#|(eR}u*0B{Hs z5v#V)_-Fm+#-RiVw)6i0?fdlo1S&wc-to!#o3k*{AbY3N@Ef(ifk1d^7|EzxBP_4!`4Aprlcb6fsOn zpkzs)@3T!hmz4-8OObVaxp&%@1A(dwc!vlL@t7z9>4|QkLuWA%28{NNN@e$t8@f)9 zpTJGcAPxGw?{S_?8ypP3zURM;{{Y6PM5_Ht%q*}B$Ls%zO3In2+d>a-7)v;^p_GCiS)geD8cSe>2H7`?M%~?hg1fs zxcIJU)`No8yQ;_?FQ>$?bPXaKV}F)>h4EN+8OV%q=k{Vmm1MnL6WGR$4e{jHQ-KTw3%H9%ygaZ7SD;Fv zY=-lzfKLmE8bwC130H-&bkwm#%8`MvgVjYkPiF;aTmunqpcaA{5Zsu)CXf&9uS4~0 zlORdYv)77*LJb&!23`P;VIwi2WOpA}VvLh0l*omIvl17Y&0O18cs=a#E|6Vy!I%u| zo{Fwt5LnDI8y$VWe&tHi!BWoQ;v|7bq&MHI15w0PEW1wHznU^l0FJh|;il_jKcySc zoBaeQ{?q%!^V>5IWd8uTuXG-$_y!P|uv&KkxpNx6Yk$kD$-RZzby(0Xs%_!`g;RFM)i4ouZ41`u!X-B^Q0MNdo9ylS?(ircxS`Y2u&`?G8i~zYpmeKotMaUyT zno5Lq_epS+uZR~!0`OOUB(k5U;*up}@E`zs_oC6~i;@PWOl+~1;?e}YfL}?+1FREP zh58T)45H;gyrwxq3e!j^RRW^JLuX)zL>^g1bw>*Z<4}729S(L z`w0V_4H^ly7HQg(>}DYFj#NB~C_c&8w=psLQaV&Ut556q8&)5l+`c3}+w6T0A@+O! z0Oy-8xgFg&WM%~6W_ZOlNGIyw*n&2Eo>50c0#qsrA~g3IfQSggRB~zWdrE23&^t=sZ(Z=w=&ni#ztfN3anBN?!I~{xNDu&f zGm7XV1X{D_7d_|qBm#~n0~)L`evH=Ty$=|z(^dEQgZ%qFbHjw~!u%&5P3JE!5HU=A zWuBWKpSivuxY_>z8lKhue-3Ao5q6*9zg>U%^j{5YD8_q9kFJR7%$~wN242|7Tal*M z6Vv4?W%kNg^~R}$zfr*oft=%Qoi6_XX*>s_Y>%;Am!SH#d-TP}n76WieslEs0m{Dr z00nbd`;5Hwc(^cQ=yT`dP(O|F3rWl3T;P);XvD z056;Z^gZ8?PV&Lge-uBL{{Yqh0OL57fz%9L7W|aoTPgnls~FKKqY;P`CfmTzWqlGo&m4vC;tHNsyI>gCy9?z1u8BMF#iC+`_KgjVaCg*AQ+Tx zSYA|>HkUxI)R);XCO{*FrEFwM0QeT4&;S}5Cf4D?TUIQtZyDgLxFCBFg+TXByIn*i zD67E&Dvl6ZNoY!K6_}LK6^f)PTCqXEYFyYf`q>doi9TJb!TNF(3lFO;|JuAnV?s}dvV19cU10Lu0 z{&=eMt4$Cg_j{&v%i=~Qnlz{}Y`9-rLV6xpha|N`?XMN#W%H23hXV;@#E`~ns`zqf zO(4t!z;_Y?;e9A}D@8V(E&BEKufG5>aM4D3 zItzI7crF%4#RWwmQop>p*Lrv-iy)Y4_Hr#vs)RjjJX!?egrFRVlAH2j4`P5T+wDf} z#|dFFaS~vw2Ovr_9cTQ0c#f)-kkr-{m`)1qmYiG=uAYPjkM>|~c;#J@&<5`Mkk_3@ z#WF#oawEgn&5XPx6#(N!9l4jRJ!(PPh818%ciV?PZWc1EaEsWW6AL+{8A5~-38u~& z4bkJO><+Kk0x&+QxYDHC#)ag+OG(nKME#iSC z94z)REQ0zTpruh2Jy1duPfutGWG~E8L9J2n8j@OyF%=q`I{J790yg9H zDJ_SwB8c%qLm?KXAwhxh)N}@`qK9(JKnF&TD3C!yZi&-Gq3~+)X{L2K(!KfiuHdltXe;M!(zS8)jW@D<9wXBcOv4fjN@c?3zEIlCLFOklx%c=}65U;Cg3 z`1{;!2(pYq_MMhuKg9TS2-I!Ha^0?f{Jw|4)Y(S;IFZ5QA6xj-)=^xD6MoKb&b(oY z0?&M}zi-54cFbf4wa-?p$4f6gys9BI3;27=rajA{@$vQ#Wt_gfnXYl|Gr%If_5QE3 zmHuP)p>^TUh>N$@=XM(Ff}A7LaGzi#^|mFz0C`c3;=lVZs(O+sPX7Rh&Ncr4zL-z& zY1O(exO)8GSONj7MX%St^o9jY9{_K$kFx;N z^)=3Y1I{SbP{rN!vN_HBAngIHbv8zO&%AGb_zfr9sp!9$GWY!&R2wj*L|}4c{{ZA2 zuZgZyMB@|_;;otX_`%@`svxzq@u@(vA10A0ud*B!m?mhDO%E0;MUBY+04vn=cKF9a zNB5Jz0$zuE3k%8(E@{tQy(H{BQlOj$bFq%>DPG@xe6v6wL#v&DfecHR%$ogsKx+H# zbvn6$Rx*+OEepvGBk98t3Os5z_3rl%>cg*(VFN~Ba1$)Hr%9RsO8c*()=Zc?+&fpK z`u@`Go`pYZ!j~xM4p^wEV6nf)h$kqJ^aZXBD_Li7*MbnNESgn<#;o}!t4366h<~eD z>KV&HBhY)|8yC}MwjWUvv9=9~9syuRNN;>R2qh~gL)oEkRkTbY-3|JM1L*BQ6?y>! zRiJ@jI&_Q+Mg8J9OyMAIseZEz;U|n~zR1(pPpl=|zWfFdZtwU`-g_J!I}jj36b3v! zt3|RAI8PQ~WcV^Z-Jvnuap#yC!F?Qr*U*IMlOQ5co|YD;p+RxPzOO_JOkTjO6xAzm zadDe~gIOf~HP2EA*mn2;#lb+trXZ54i|MMKKPp5}(6j>MQ+w@T_+Bir!dET=>ASR1 z^1I5g7zs(KSQya}-xE8Ej|xgiTA0O7Ebt}Y3UaxLTzahDmBkikqR0uu2ps69cm%G3 zQXw5QaXCvaM!jh$20YsRZ&!mDSdmHSC_KJYxkB!FqSqwn=n{Mwv)eB$+ zkYz8e4wOO0hmbkGfncZC;~Sof>&i668|?HtfSei5lRS_SvQ+K^si9VzPIJS8KnB*+ zi7d=S641p&s?(xEIzRPhj+4ac1{FZLSK7clNR*SoPy&i>fxwJf{>|6Gnf!AwYEVM@ zet0QTTAxTIhv77C!w)RPV8hvZ6^c_oSL+*H{LE+xVs|i3D#v~T^}-D9 zUq^lDqb0WPctskHdI?)2W?mdbo-<=QAIa$bwYFd13SlT*J-!jnGux*kNmXO)7e;(j zuIGNL8X!|3(HAqE&)c2_a8MUis$#`7_8ynUa!`dh^+~?I78sBMBM>YK5u*D@GJPKf zDS^fWb|Rs8b*2->xk9Rfv0tzKhUhLQa4$TXbnJ6JzyeGCTKr1Qo%hQAVSTI zG>Y6SD$NchPc1+}2L;`OMsCMQA0pdO1X3_42xYRA4T<^y{Q#(vM*<-plfcomFjz_o z(AiOfuCFUtB_Kfk(|Z!RIbA^qACI_wBx`mKZ`MYF^3a76>xfV&KudtMBzpl80nkus z6Q-U*AYWb>VL`bNbp*eKhXnAI915cp(LDeWm|`e=b10fF+fXYSwTZqQ18IgF zZ%Unt#+-HgII5h9YBJkZ{hGca5?EKdkSN9RO#D1btpoyP2uIZ|o6rVUPCrk%VrirY zlzsUeqNewZH}c={{aivO%2GDZoj-KRs1HkOyZ#1I`t2oRD#U_odSma?S)9ueLA{Bn&d2cg zf2+WK2dqDHe|`G<{!mLNr#^a{)44ND@Rg?!dfUXD{?j6D@b2Mw)=d1vmt!f%&qC?f zS^SG3LH_^`5ej~<1cvwO7{2xMp~MRLcc=Bd zNHWCexlC97r}n@|`_BfUimR}x`7$&7-B1h>D$Dv^y))TiK?(36ygltd{@ELhPZgm( zx)2Y2+dY%wS|*^yQsQ=6CwfEw0HTaV0*ZSG_RgYYk_qAK7MtkFF!q1*D?IgG(*fE( zIj3)8uYxq1Iahn=_dk84Z;?_;;V-@a0L9T- z-x7$_-i*)0rsGOqo^plXXf(vg1Yc&F@%~YX^H@ZQYNE9q zh?Muf{A9FV~z)$GT=zX7?&W&6_x8=*cLF_A^Yih zPY~~{Kr&C#N$5!f*N346)MrF1eK-)A)59czeFw6s{yPCGDzM@RED{^53kn!3AYUZx zYOr)i{!9M=ntJejRqg;=)Tkem9*B6L{{U`=ySgL4i}^fItzUJhmCIv)TkL`2j8l6V z%WuDJreX9*Ca^7)69+&|({_|bn5ED?>bh~F;4DnJ0z!~K7@d7fZiCB$uvCi*t{TCA z)Y(yXTC45PXeaTGRE?}OQDU_++1&v85g@XmAJMCTMZ*68eI@|_sDKI-;U`;w7I{?w zDHTurJ~P<+zG-E>>bNy=O4C6@9uayPYEe%^@_>5scrr;AB;?RD)!%z}&4rBv5hm(j z+MjqbfK^HlMmjNVm{Xnb0g{KL4esXVcNhoCTS^jk&eene0M;ob07lI90t}%OhG!>> z1Y~*<*RK`kye4zU>+GL3nBBVP&(*<>xy*k4zlY_u3boG1PVWA5)W;d%2N*MIo2mnT zRrKNn#|02%N~5&7(y9=_j3=>LrE7nO@r;zHQqE}0%!sGPW%1I(BzPD{cy*&0YR?+2 z1~!Eka%2FRq7S?RuId1#v?gniNu*XXVIENb0O3ba>Gv9CP!lqN{WI>;(Bd|zgzNKu z8?e7S=GD;!y05nTZ?kOA5ajiPg3h?26`{uLJQEPy=&x{xt$s#*910-CWcxn=xXpgP zA+&=}Uml>pDn;pF4NX!3K6SjfXJq5VuQH-B6p&;DXeI!j1a)cYq1a|6d0pb4>x4-t zVe74$4RBL~Gqf^k2!+Lp_K5h<#~JW%qya1ov9D`H9}^BihI&|5l1hb{NK`>eAjX|U zH$0$$!7rfRf^>AXT4}|o+U8Ke5Hwdr;TAB{7|jJzB>-AQfk?$FfJ;`RDl_+Sq$Z41 z2G9m)!_n_a-XRF0baN%^^;0j~;39{=Yn$GcYtDXnXfIkD@tQpN%rtPsRKeF${CcAE z8AY#x$QAv3uJ*P4AM?pfixd{3*nx{PliGL)QB-?dKu`n1px_LRmMpL^_RT0Z%i7u< z1cnHJNd%Sv>M3(0?*2{VZ;BUVVP;HN$89=$#2VB^pKb*2U*)Fl zv1rp26pLfr4M`3U4e^E0u@I7HPv=wd%vc-jrtkM(zLV8_2nwM}9maijOJ}3{q&<3h zfBdd-^yfUeFT;KmEb8{({&|pUQ}Z{YGjo6Ie5a==7tk*i=k|Y{T6Fdarp-h4>pz|a zC-)2Sixszj)7(4+3rw%ShxBhR-1QR`JWvS6IKkj|v~6^GrrS182q`o&i_*V~^YUNdEvxUpok0Yk&O8aQD`{ zq$L=CXYa3>{Pms+6<~AL0haLp076So5gr1s%kngjGZX2|gymJHJ5<~=qc@&VIV6v| z#~Dfca|(};!>2%N>4g6PeL}36Y_bdg079qhW%YYkhMUm;03Uo0=y@re@Ls_h=cnz} z{%^m2BoPfVV@ove$dY=UjT2DK3D`S!{{ZjPf#?-wH3{y|8F~hOH{P3j>kttxz^)a54c=#CND#dPp1X*)WUKrSb5K%z=dw# z7#o?m>?VwFC7{(h*QVz1_dh`(M;Inq;c^Ips60-ls^F3f}HTAdFZ)Ql-M+DJrg*s7GY?pdLYo1a_dPt<#>cgf=Z1ToWRm!Og?kt+# z?};EnISFMcs45*h(k>uMWux$I?GaJzBfeOMxK)I#W_)H&P7(y59rcJ?i=92pv&lir zcJJ71Qp3^G_$q_i@brBC!LyY+;L^5`lj5?4ION8;;IuJSIFXS0npp&@&5o&(XHW_LyCy)UndA* z(VZb-jsT9lvRzOUUJwsu*jE9=u`j+4+;yo#ibv@ zAvujK>*B=_nO{+zNg6pnc8q}LaaV{vP6P1c5CGPNOyNT;nZLD-d<{)q;&vhYJ#V9t zFo61Brf=K2RKvs|#j28^gzKyS00ky_LW2;}G1Rmaj>u1KxLYL@>2mL(t{1`e2*E)_ zf}jy*=wM#T4FpHgC|n=|1|ehth0Tbt>)1v#_Vb!nspu2hIw2f10W=;RQKKwQSj&-`gTl=?mG{!i2Y0Q2xg=;EuG9kL$p_2cJSNYv;2Jy6yMSfiark*A0aJ4=))wys z{{T+t9sFqNn}_iK09oKgDu3}SM*jeGcfKl#hj#lRg`Cer_6V_k{7=7q=9b@MtVKv$ z@1ot*p(0i(i{d;0pZxWfd_TXwD2XX<(f0KG-R4gW$3!Q$LwJ5pPG@52%m6ncc59)% z)3?HaSlS)$eml*+)J|*M+#D?6{{Y?iOY?MGe)1_V{{T1l^Tkm)fd2selK%iT=)M3g zEq~{~%)NW@%H2ZzP3E?JGQ}h#M)6QkB z;GXdEf~TQ2h+aSls+~ZQJGq-8kWc_=gqX@`vRA7U;fpk-E#QZ=`y0|`EMtT;_foBE z1o(ULX=#aNUc+NKh&%b>Y&ToQDR8RmlU{A`WHFBnbpc4;{?FIKfkypid$SgB+;FzB zRvlDXIk5Xo_#DJ?{FjYKP+jU9T@vZ^1^%KNp^3A>FA_+Gu#hg0EA1v z2tgm<3=n0a)8i;Om=gxpO3(iQr?Lu~c?o@Al6DnQ~~QJ-#GvU!6<=v3yH-Z`7i@7c!93A%Bui{d_@w^gi|P}RiNKt z!4p)W@cw)GG3MdE1d(XLHaf*k1m~u{EF=RpX;y;KuW5V{TN-LFM@Y!1xlKHg2sKn9 zPW94K5(DfNB2ci)c(xNWNiy*J1UVeu;O(dSLT`{#k9zGimO%;j=?@XkoC&VBUlu`AO>HEe^PZh36U;3mw`lgcpAj;92ObQ0qyI64<3GGfNDA-qXN=7&VUbdOoj1EOW#X3N-D& zj&`@U`-*;$hNWefH#6%-x*9MKOmIm!?W9y^#hgbcP3iT9^A+6@@`YBWI?mdq4O1-j zeD;8v5XuDxci^K5@62`WkmQ@aN{vz9L*oi!h?|hSbJp&juJ}GL)n9mb7ctqICOb^g zV-8-qiAX+()5!~%KE?$6+n&w`Ul0$dkbUhbpFa)+e3*boFse|?mMARE)$kN??U8te@-aY5ds4tAD4 zE+P&oAr|fl2Ys30Au9Bi9U1q>871#FQu z_`rrdc@l`0^qe8uMi}V0@)Mc{CJXFEj@RfxJU?57J;4G=SW`Nt)UXf$4fnBag{g|H zwNMfahL2E;`=__n9}S3AeZS;N1!4aH2nUgI4FD-Ck3mS_Sf_z%7^MV2gBA2v1O!)@ zB{uP&)kao?`T<}Fc#7(#ji>^QYv#}g0ET4*$7SJ~J`{@yr=YEH3co#R)6QR*?moXE z?sP}?=V1Q;Q}#7?`~LuZ?20F+{O>(~vgRj=3Mhlw?)q=gF)+$0v)7>S?aVnF(tdd3 zf{M}mfleR&{!b7PYFOSyKitmo{D#qSyOsp6`LH?N`g&F2qAzXELm{Pr1*l-cg5T{EgDNp}3dODDO$Agk=5{{Xiq z;okMG5nWml`(phH@cH#ndB{os05`NtlxAUkTaAK+=cM(1oNGk$e!7;6p#rA4KbY zf#L!%w11}3q7XzfZh6*K3;OV{!I#ZAo?nN>^+>xFW z#M*4FhGE`&{JG{9gmGH7pFvRd-(B++!DYv4!2xG7Efmy%>4EqVIoA7o%+DsG2sDI` zNWppaF$O_85eKH+zhb)&@077bk|Q37Y>eTGW91Vp2uO(0rf^S?utXs)Dnzi9mRTQF z7l}e1fkcr6Bc}YK_rP#bWDtd2MgG7xb+d2^0+FjmrV8;@swfDbTL1&UIKx3+PBY31@r^)55C4~j{yRyy;Fu4#z5@5dVnW`*( z{{TnAH4z(V9;?hn3`UW|#ab|{25IkZyq>MWd~Svkze&oouW=~fj$kb!p5vN(H~4?x zVv|8?JCuDH>D{kts9oWn@ACfu4c~LV0;sSm5Cp@SlwW+rJQzio=*S;3O!xfffBsUk3_w-2 zX??1BnBoI0eE>A0RvwLc7#G_bHK__!>Jg;y_M{t)7fZGvO7o+^8inhyVp`51&=kL} zl?wg|$GiriK@kDID6saT2-8Y{dKnxV3jz*>%998YZ?)rbR>rz$r1cV74+e8!-!#$C zMAKr{qVU}hL*NoU;M2sMV4VWe3h_jNJ;`G_A`_?Df#d)ZH?0(#yhRJOwCFR`q*GpU z7jORnz&FU=5=5Q2{kgLH@C7aOk*5k@LH_$Z=vQ}4i;MfeS;vkDGf_bh0$n3gnk@3c zC;{Z?v)M})04-o@B}@_MLaRkVt2|5)B(yYjLE2ax(JirXN#)fyNT!k#N zFvJa+$pV-$1^PSad{6}k=Klb!vD24Wh$@g#8k;~|f2eOiE9Eb>OYS$FU+27jc#x03 z^OVy;-zg7g_p^Wh019`kCqclb`|nOk`sfE#KxoPAehJ;5{{WrsOF*aj#(pSvgS~Uk z@Z(u|_6pzJ=kw2ETCk4)0RGIcQb-;i&b^b?{{ZlR6PZW?84!;XfSLFv@OWpGu}LCk z-2VWi=excFvE}z51wEg4rIYPM9YvP&4_?Nd4_!Q!6D_5`{?19SAHF9EOh4D+^Q-m4 zY6KpVHY>(A+?=1~QB=BLO8gus8P9}Y91)}c0Lj6)_kAr|UI#lmgngco{{TI!zA%TW zwEP|Qoa?{3AP>tqggO21r0=y9j;t#Bw<8dj)O-~e*L@(|vi4K5{@}G{c}V3{u(t2$1+o{*Z9E zt}EOD@h!k;GJe-AQz;^Q@F9#5Rgn*7(!YHm`C`h0;93R`y9U+oCzFA!0Y?;Y$g?nY zz6>PvZQ{l$2cwVa*8@Y}+Nnt-QA#Z9s*DJoAkx4fqAsWy$y&29(2z}SYNwJQ8g6M> zYbi}t5{3;8ahr zeaXP5V|_9Et%>LuFkFAeHfOym1_F8t@Y*k;N+rDV>>P%mx_7CrJLEr0i(P9z116= zh9*#2pcnu`OXxkXWoJRIHJ!8(vsmMpC-;?yPQZP>{b)krX#OL;@RSY zuNqTWrYqR<`)`}XWvH=cskK-64F)2^Boh-EUgrU9$ght`H*7))nJ#Oq>&hSuz^`3V zDAI289u6cl8g3B(00&1$54d5{IRgk%GudwGVuBK2V!$H3$*;Y!*TrmTF;(uKo`Wum z;pP7T2Uy%=+ly>g=AqzKFc_#6-Z2g5{DOc0n65YdTHdsp)D0Nql{q;by5<)*nn+6! zdaobKF?85-d>|LFciAQ8U>~kW%9AEzbKrD++&AZtYSm!aW5;7@3A$egQ)3!?ZTFij zqBZl@0fd;3Q>6A|)t*)nQ6ihyVa6Pitd%h(^tPa$?-zC}67ax+1cxEF2!}{DF`%IZ zMk4@Q_1A~h8GiP#*bp`3bp5P;j@py*L}7DhB} zu#$W6+EfJt8b{Ur&B=lT1N>=4LcOzenmbQ84>zC!U{Y?!PcZ3I+jWff09o@R$H*3vXEI6r{{WMJ z^!d9Qs+az9WBf_vapSMOj|NZw08D(b2A9#py!B74e-9jzl=)g#VYekpAn ztlt%=;v4Kivd`}x{N+qWhU%jvQ3uv%@q8!-IG&c4d!3HweN;`lc3LR!wCDc-j(GL< z5TayrPwD&pYxqAG?zP%C+q-r1qaAtrFTP*c?AZ7Q+$w1<=U+$u@$ZfkKrr?H0K=F3 zGkAsxjl=zqt{q~3+R+eIf2PjyobG!mJa1aqG%4Tz0GRLHkBLULA4wwd*nHtnT}f<% zCCt5uC;tF9))MH&{4~N~XfQ1b`}5d&IeXmsp1ORz@)3-*7RMZv!0LT9TcE9(7!GgP#A6ZND{TqGfofbnm$vRWkzktS0f_wVv<(pF?Fy1J$DL(U@HnbtVfAk|hjP0zojKNr*}jAG^qO7S>leUO8e|G0DOWfyGKJ(64WPaGvwwv2yD}Yx14}`me05g3ci>2T#ojZ&pE`vP{&VYTQIe3rp4cM6c zyHt)Ls6?Co16C^Vnd<-un*RU*aTXWVKv?IjzA69^LGQleh3yZqi3O1MI$j4PVFbGI zjz7%2v3%`$0677PN7Q-62!{Y5P^j5CtgB>Tu#O~fO=Aqxm{cX(;YgyH2NzH~@v~)o zMuxc}U_UkM`VzWY;%K{IA%UdZS-o7Qp<{<5Hkd;_=cf3M4BlBmz4qVBSye{P6%fl} z^*-5O5_)YWd%Hk*fzEW%GSWzmKbKSXxRvLp_{4A6( zg!E5=9uP=Z2#hdVmnrv$4W0#&wFMtb@fiKiHdljOtJSrIvRm$ST{`DWg=>MA{O6)i zY_U)0dWkOjZ*P{0)Dfaje=j?6XBW?G^cSEfQRsH%aasZw@XhQ!iU-jh@!X99#T@VK zRQKG*HMCwStDpwY0uVy06M})8uuraFmV677-*+8Lk$bZf zMh&2s`sN>U+kd_!0U&Gu(zb4l=&<(RAOISy9sdBt=)^0)%rq;kDthQSdQIcw0q6+) z_5#zU98L82BvDir&Mlb4=Q3xax1zP#Yq0`?a77#8m>`LCZ_?Fi429?opsp3%I0vT9 zCH9ghgbfPW#S#gsCS-OuRB4pKfHLR+r?J(epm{|$saUpQwnAX?gV&E*xD*cuXVkxl ze0(jf5+&9kKxj+^FHZOY5NMKjA5qknX6KA%fe!U)?p6{MXub>&uV18p#lHTjL%@p` zBK%=^8)+l4;zPx{EIFn%xcrCtEbss%1;4DEt@j<7DLiRu6AiAvbMJA}i+lip4V~)B zB`J@hzqIm!3Jp!PE()q{*k689Wk7;d_Vlw}U^Igq6=F$e+-_Y33{8^)Re=SMV^*&O_^eP=+t{}?rfB-H8DRd`eTR8lK3NPAQk@r*Max_ zIjY5Ls=sG11LOI${UE0X8yC4mjFu$r;#>L~xEYcE09*e6J;VgZFmi)8C7V7?@re5^ zJ)3miX{WUL5>jQzlb-%OO)-97F>hNnvhrS%rK-<&#H)a4`}N4Yvp+%Ng4k%iK7Z4_ zrDMQA2T`G9bf3MmM>6W+>WOCxQ9#~+r*Q9y5OItr6Y_um094E3fj9&OmaPkKGcBip zMktb0H<8&J{{Y`hE+a_7SMp2GWqgg#z59TZO1zR>#m)Tp?N2JRp&cKJm6`_~h`uqA;hn7>7r8bDQGf|t0LhcFS?=cv z0(f=Km^>2fOs#sKG^>ORB0e~KO7uitp0ub7oD)KytoBZ4q7BbGNK&qeyKAI_0!D}Q$(RAg7 zGh!&hJXFZ36kzBBk{YW-v&9vLkwiQKFSL?_pvBKzzJj5hsaA>T6ZQzG1xr+5wFoGH zg0||5sCo-PR8!JTfW%D|K;`!daZ*q_5Cn5ttOuYWQ3nuCBp{BIa>=y7kd0U|l{_qT z42few1k+)g(Ql~Ifh_bE5~fPx5dmszi24;JWn*BLkP;^-E3=4DO$nq3aKjn3E55%4 zn!pP&xk@FaYiIzQ7w9j5#o>_KAaEjc;L`Ve0yg>)C!l>qY@YW%0E}trs}$MAqul&W zdMBg*0CDxd&G*glf(%(&XvUwXY#w@w5+xSJFeUk^Z7Ea)0!Uq<>_MB)?53Vj69Q@0 z_M}PeaJ-%?6!cI)TA(>Au(mVATD-0FKIilC^zBE$44%*yF4ycQG9y$BNEv?G{?Xz} zJ&hj#nkXtb>U08u?=xv%8CwCS)q}0aZz3jOqe`~LvFKlY~hJjj3mhI>_-i?fdbR}is?ZbZ=oTdPE#7&+=A(`6Bh&s}Awi7Pwb zL)DSL5w3wkjHc7}DsXH3)2@rYWpGG_aG6nBFyJqyR6R8vL}>&S5l_h5;^Tnx45DG3 z^^9HbjBD%<5E4KU60=%C?~E1p(H5m9kZNjvOz>jXfDW1J@~w;(F8NY^qF z-0?_xqV#`Q-MIG;kBg<;K6CHDY|Y`lRo^VIMEOFmT-+W=lWdqOBGr7i|ZWz zZpkN$P!*Ww{{YXf`c5G{H&RLTdD|iW@T*@M3zSKo_U~`s@Q7H{Yh&(M``h=a4}A9d z%A9sN_1ntv&pJ*!AWD;VMXtG%zGFu^TuuJ~U!4BtQ>4?~W_-Y`^$f{Zz$&NmsE{Qd0&j( zG7)!`mO4DY3{{ZvZV0pw)I=uNi{nP&d!v#>`*V%Uf7$1c*#;c$s4&RfxK-)d5 z=J4wZbpHU;Y5xFEG^on_xotBOQVZ{RbFWSY7_h?Awlg;QC`XT8x(X3ci{2DIMSXlJ zt_5`bjd1W<^ljwgd+LI5{U!2|Q(nB~XUF>Qbnpm$xTua$sxe;RJCB1$wGmESq|&lm z#n2Q*5B4||+_U-6#W%z)WyB>z{rzP3_r*Ish0w1J2Win$v%ml!_xWb#AEzAfo3K(x zp+L3nxBbBK%Xo3#ExC!1bGY&QfQ3jZ{{VkVPjhhb7;53^9xh@*7QI7Lz-1JB3SszN zDf|UrG%=7drK*8eyMbN=T106YLrA{8ETL7~;!cU)0jdO`B#ta8;PSzy1csQJgOP>s zu>p?*f)C(87K~2}8lYupF%%VjhX!GF3ZaQw=VsQ;Xl)cLjM3FZR3L?RsLFJ#@RngH zU?>Oz*@>tC%^HwMi9|~iAP+z)h7f?73W{B%Qcyu)z7LUZpbUthju2MZP`(Q4iE03- zfqH_3Y*KiWgj7v}>A_C9(&=E!43>!K0w0VOD3C(JA&Ha*KsAMfZ~!rY*Vx3WcA&Io zi3JE`!JR#YO+LDLHwsaV2z7!1pnAM>3_>gHpxaYhL2DloWysF8len_z&s*c?dSJeR z-VIniz(~{qVumXk*Wlhztz!UIM9#-e{46X#JRouybqGTcB2&PK{@yjq=1%fBLD`EqR?rIc#=Tg3JWB4q*p!L@xY9r20Q9( za>c%zw((ON|^b%5UglGYS;%aBUH}J0U zg2OAZK*i0|hClCxQh*In_rCZkrWe_K3n}g!M~|pUf-0pIu98$EP{>7J^7~X(dN+lqDSx?Q0^ZUpJ=>-$)mdbC;_c$>6 zA#m+-q8LB$J}d`RK@A1nppUnhYKezbPfG%X{&f-31cDLuO&^E(>Mbq6lp`8@eM6gr z%X#m1Az!S#8)Uzi(0knRv*3k6AJvh8QMO>%aH`Bk_aIY79{3t80t-w0Xo~cUm;>Ib zK=hyCp`%F{+vX=B zJ=9y@=d=Fz#!VN3Ql0*qf9HjDgVn(&JNNnR##zHfX+Eqe?kIGAeDNs~E7E-BqicJ= zCxVR)f=52NIA_=M!%A-5+P=rN-uezFlQKj)8JwBFzgNWAom3L9*-8U3PIC098=1So z>$_jS?;0yeh=2Tb{e2zN!5zgUUQ%U+x7Ve}(FnbDvH5=D2k`!(Be4XVOxF~z>Y;tq zon)@fn7JG7AF?nMa>x5;{Bz~@lkI_uQ=I<*f80!@DZ_+XfCzcv_sD~XRF{Ab@o+obY|ELMlU?VJtYvV2jH%%|S`@1uP_{INoB zr=L$+k`_;KV$#^a&*lBh>uKpod4UmoZmC4S8SvwqM-57+?*9P1Ao`xLHlyhD)4yN; z08?LG@l-|{tQGIa=dLAgz6t0}f5*^A+v|VliZtO&`wD%(zg4v2quX^bv?kIY75O$W zx7E)@r|9#!T8HQu*H{TF{NoXcoXK&F;XmkQ{M(+J;$S<&m@RfsqsxXZ0p1)k&lv~~KVQF`g{{X#i8KFLS#=?O1KK}qyB&YKe z%F)&Xf@fQK@9kt`2s$!*Yur+6iu{-@q}?A*;`*y}akbBZy0Nk!{s`W8YlJiaF){do z40)Wt&n+0+v;#FzklbbtH_Al`?_Iu=SPAsE@0Ka;rA}|Y06{zH*F|d(KEpuh<(-GB zPdXrf8BeG7o{{TRLwtJ>TcaE4hs}4{H`s9$GP{>Dh>AxA zd;B_%Lp$Ffl~{+dr3o(XiQGfT1PfF_3?tsC2~RaUq~){4VG zr3Krev1tGRhl-S@8h{qK!(dV)1WK0GSk7ao_hR#ww ztiGL(73#u>sIH(82n`ikg50t)+G9h5gcI~6@WzB%PO9>trVrRX0bqWP12Eu%y}=v_ zLT0Q6f$9{XN$7IRc{EX0W96;QEAS4mWQ!w(_?1S0^iGU{~xpaOvfl9_d`I!ea2 ztHco(iUH1`73jz-Yfz*Ix88`-U>!le?s;OM;5Xp?I4KG~>*NaHE;A|BPz#8g^T2@M z80WXyUVWz7gR?a;)jbVjI#Y0tpXCCFX{$u> zZ~#;sDzXvA4}04~Mq2b00%aXsYQz!=wG#VkC7l3bq633~0SsM6#oR7-EC4iol#zz!+607>O?WB+3s%<(Si_>j^JU&inP`Rs^Yj zeJ6k3=`+NcE{1c&H*Y_yi{WS*b7FqY{{V&b2br>UM0LXqW#0PCRpmx} zxy`ejwx6HWd;&Q4ho|gZ{(B!#^Bp(euX(<|yX+4EfHgDv@27w4eF+}{I*$DpoYy_H zxw*blD*_>b&L8q~=loh~VgjO!Ta|>9ckzG#Vn4pD-NwDP`->h98+N~y_r8N4enCEN z!<-Y``!#$#L06lB7#-V{ZxWBvi=eY2E4GD-BhqUX- z>muym7M{3}xO(?fcvs($ByAkBYU2dDwS5{{T1Zms>|FI%Def{s*IcRTyrh=XTEj0B`W|UlQbYRxD2X z1<6JpG1(3?cwCT10&*ou;^Ut7hw17?%lZ8*3Ds4~SDiaP;2yWbu(PG@B(-$e>nGm> zO4Fl@C$HfBv)SThG+#`edlio2>IY|;Cq|`Vldd1xMr(koE~$=^3*p{#7`+}~CjDw`R3il&G!2ySTEO6*knDtIkM%rJnT|+ffmkNy3t;(BdiPLLOywFo zr-2JtHnUUK4Zg7Vh6)};ST$V@KZDrB2gj7}3c;$0*k`IJBjZA-Sj<7V&<&wES-v^d z-lJ5l6Tk6!ws{~3o`eEZzR(0(W=DqX2z3zYP;l4cS5RzQKt#p4#$tjv$awLkRAB%m z3Frh7NfF?HkpiL`2!MhNV9)?x07x3Xn3bRq5Oq@m2x~?vw!okN9U6!GO8eVku(%K zW58;_NDOZV0M=+76J9VOQjh_Tke#FexOiw3Xv=~MrmzhM0x=Q+M#<7_nN^j~07A{g zT%Q^1Q|&Wgq8~~O4NqxWMX#-VLU|Oo0TpT-)hUX+Hc%m<3&wj?J$p+hh+GhXfCEBq zg)*Y2?~WouFB|uPLNFW2k@Atn^r-}Z5?iS*3}AS;WKhPD5HzNXxL*zig_!-U2Xg?j zsUHFEb$fl2+ND{Q;&nj^x3YqaUG7MWM(Apy`1 zvrhaV<41<35tj+ph8V{izW<+Y`i<}MXQ1sf8SS{eD-C>o^`fo=Rjr=PUWw+?U0s&il#5%JJ#YU2^tI+hW`w-Zih5`L-{s6-1Y)%$rR86>bMpSf#w}gRr%znnM{Vju z&Wg$c8~n`t_scZYP$QH95k7wYv)|&QS4Ray{{Wc=lxCd|1rUA3pdft{{XXukk3$_1;qoNsQnz1 zye@vHikXQLUv&OT{{U<6-+%&Ur+GI9%v1Sj`fwUQ?{8Iv&%Z0aVv%;vPr2J?O#c8M z3aSiC?M>rdxzXc%7^>7CFsv{?|uIOQ~)CUzM}sB0J#^vJRn5@#bBV2!c%%c{8-CK8yPCZT-Q<@ z)LR6^dk6VyF?j3CwZz>XK%4W~{{YXRhZ4XBBX0IBkmH2bvUMb1yT$-gA9y}>pddbw zqj}fxmS-#s;*F@-+*j-r2hpAYMJzLA`e-M{8TlxcG^3w=7-%tml0GKO35|+45neED zau9q1Es2j3M)D_CUVS>mLl$kmvvSX*o08HMUg{Pkh);Ciq313Lg7Cir5*E>F5#v_S zVXsE3nD*~Lf-otFJehC{$?W?&`72<`I9h=j0KkCX>D3QI(5rqZFqn#B@pbDUD7G0 zLewKD4^B6~ASf@C+*tU<4StTDPk4C3rt7PB{yb7)0_(CWOuk1Rb2a5xY z#YCe>sZySpL?Nx{9f|`G=ti1&UwC(YA;E%r6cq@Mg5(97Rf9RGuxdV+!b5?><4sHl zya|sL84?Le2qq(h(F(*`_>17J0*|0{(U{rKIxH0SLF~KRIGe-3YX}q}&aYqo-us>c zK;n{}c;a>M`|rkA1X3jszt5LB&*~uJqlPAJx9>BY;2WU(^=1^Wv)lR8!m1eY`7&gf z`!IJrQWV8f-Dg+V?v?ePHq~gc%DMLOJ!f|yq^a-f8_Ff^_}hGG$y>;DpI~(4<+s3A zOY)Yu@O+1QHZse%UOQ0KAT+ZWYm$FqGeeSgnG=TAo`GbE*jyra$Xfg9_FqZCQ^OL@6yCuAC+`0M{{TD{1zAkw z&rSWe@0bVN5cl^k#{B$LJcCBE`V+ejdcb}J@d^M@{(RCt{{TA4ECmthy4leE{{V94 z+IS)Z#(!u25OXB_o>KZW-0#m&C-L5+8~nNL4a|EkO_1Tr=m3wh{vTcTI2+_uTLyl8 z_e<)&{k{ku5=q+NJURJ)hl2A*fi_DweLUGaJfT33wHqdH3((xnScB7Jk4FLj0O{`; zZ;?aXf&ELz?Dl&#JmB>i{q_F+`psa8aLyz4}Ny>f7ji^z?KZ z$)CXkuk49wuDe@I$Y`vuaK8n+J?+-MXVH<#M$ z!SrhIqbfjp7(s8_?urE&xYk(Rv@Jab(*;iq0!Sd8%1=T{?t98f0)-nRz>!Lo&ie0+ zNrEpm;P!s^?d#)32;0-1;XmiEeel^nyytB1%W?d1@SRcxEr%V;niOpQgQ0O+l0{!= zs;TkCp$YtYYd@jh^tgC1gIS;u<4Nc>V7<_oL}x4L0$T5+91A>60sK#K*%0D&T%Mm9 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

    wO?fIO2|a2$>;vEyH_n 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%0Ay;A4UJ6Ne&oR;#m2;(9Dz#^m>qKDZ1oo6LX|8N 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

'; // Column with checkbox print ''; print ''; diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index 9ce49b23e6a..d7bfdcc5db3 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -533,12 +533,14 @@ if ($result) { // Suggested accounting account print ''; // Column with checkbox print ''; print ''; From f2d04fe55cce45fe5295f1dff4bb318d43cb2386 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 9 Oct 2019 11:51:10 +0200 Subject: [PATCH 143/980] Code comment --- htdocs/core/lib/product.lib.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index 0673ad2c3c7..404e33f1404 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -527,9 +527,9 @@ function measuring_units_string($unit, $measuring_style = '', $scale = '', $use_ } /** - * Transform a given unit into the square of that unit, if known + * Transform a given unit scale into the square of that unit, if known. * - * @param int $unit Unit key (-3,-2,-1,0,98,99...) + * @param int $unit Unit scale key (-3,-2,-1,0,98,99...) * @return int Squared unit key (-6,-4,-2,0,98,99...) * @see formproduct->selectMeasuringUnits */ @@ -547,9 +547,9 @@ function measuring_units_squared($unit) /** - * Transform a given unit into the cube of that unit, if known + * Transform a given unit scale into the cube of that unit, if known * - * @param int $unit Unit key (-3,-2,-1,0,98,99...) + * @param int $unit Unit scale key (-3,-2,-1,0,98,99...) * @return int Cubed unit key (-9,-6,-3,0,88,89...) * @see formproduct->selectMeasuringUnits */ From 7f1aa818d2ef446f32db8b89f1fec6c2772b9dee Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 9 Oct 2019 11:57:49 +0200 Subject: [PATCH 144/980] Fix php7.4 error --- test/phpunit/UtilsTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/phpunit/UtilsTest.php b/test/phpunit/UtilsTest.php index e98ef2e8a61..a1b9eafa45e 100644 --- a/test/phpunit/UtilsTest.php +++ b/test/phpunit/UtilsTest.php @@ -145,7 +145,7 @@ class UtilsTest extends PHPUnit\Framework\TestCase $this->assertEquals($result['error'], ''); //$this->assertEquals(preg_match('/phpunit/', $result['output']), 1); - print __METHOD__." result=".$result."\n"; + print __METHOD__." result=".$result['result']."\n"; return $result; } } From b93213e9a39c396f1b947dae9d9ef76738046c92 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 9 Oct 2019 13:25:32 +0200 Subject: [PATCH 145/980] Add more phpunit --- test/phpunit/AllTests.php | 6 ++++++ test/phpunit/BankAccountTest.php | 1 + 2 files changed, 7 insertions(+) diff --git a/test/phpunit/AllTests.php b/test/phpunit/AllTests.php index ccf8d205daa..09c075c1083 100644 --- a/test/phpunit/AllTests.php +++ b/test/phpunit/AllTests.php @@ -155,6 +155,9 @@ class AllTests require_once dirname(__FILE__).'/DiscountTest.php'; $suite->addTestSuite('DiscountTest'); + require_once dirname(__FILE__).'/BOMTest.php'; + $suite->addTestSuite('BOMTest'); + require_once dirname(__FILE__).'/ContratTest.php'; $suite->addTestSuite('ContratTest'); @@ -253,6 +256,9 @@ class AllTests $suite->addTestSuite('FormAdminTest'); + require_once dirname(__FILE__).'/PaypalTest.php'; + $suite->addTestSuite('PaypalTest'); + return $suite; } } diff --git a/test/phpunit/BankAccountTest.php b/test/phpunit/BankAccountTest.php index 33103f1059b..48e2a8ddb65 100644 --- a/test/phpunit/BankAccountTest.php +++ b/test/phpunit/BankAccountTest.php @@ -108,6 +108,7 @@ class BankAccountTest extends PHPUnit\Framework\TestCase print __METHOD__."\n"; } + /** * End phpunit tests * From 5fce7e5fd0233256f01bec4cbd634fc7f9f29957 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 9 Oct 2019 13:32:00 +0200 Subject: [PATCH 146/980] Update logo name --- ...libarr_256x256.png => dolibarr_logo_256x256.png} | Bin htdocs/theme/eldy/manifest.json.php | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename htdocs/theme/common/{appli_dolibarr_256x256.png => dolibarr_logo_256x256.png} (100%) diff --git a/htdocs/theme/common/appli_dolibarr_256x256.png b/htdocs/theme/common/dolibarr_logo_256x256.png similarity index 100% rename from htdocs/theme/common/appli_dolibarr_256x256.png rename to htdocs/theme/common/dolibarr_logo_256x256.png diff --git a/htdocs/theme/eldy/manifest.json.php b/htdocs/theme/eldy/manifest.json.php index afaa3a4258c..72465fea2a3 100644 --- a/htdocs/theme/eldy/manifest.json.php +++ b/htdocs/theme/eldy/manifest.json.php @@ -46,7 +46,7 @@ if (!empty($conf->global->MAIN_APPLICATION_TITLE)) $appli=$conf->global->MAIN_AP "name": "", "icons": [ { - "src": "", + "src": "", "sizes": "256x256", "type": "image/png" } From 346e9f3e1b26128cb5fa672edff74881dee11aeb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 9 Oct 2019 15:01:19 +0200 Subject: [PATCH 147/980] Fix import of web site Fix sort on constant setup page lost --- htdocs/admin/const.php | 2 ++ htdocs/theme/eldy/dropdown.inc.php | 7 +++++++ htdocs/theme/eldy/global.inc.php | 14 ++++++++++---- htdocs/theme/md/style.css.php | 3 ++- htdocs/website/class/website.class.php | 5 +++-- htdocs/website/index.php | 7 +++++-- 6 files changed, 29 insertions(+), 9 deletions(-) diff --git a/htdocs/admin/const.php b/htdocs/admin/const.php index a5b1170d552..53555a35586 100644 --- a/htdocs/admin/const.php +++ b/htdocs/admin/const.php @@ -195,6 +195,8 @@ $param = ''; print '
entity) && $debug)?'?debug=1':'').'" method="POST">'; print ''; print ''; +print ''; +print ''; print '
'; print '
'.$langs->trans('SalesRepresentative').'
'.$langs->trans('ContactOfInvoice').''; print $form->select_dolusers($agentid, 'agentid', 1, '', $user->rights->margins->read->all ? 0 : 1, '', '', 0, 0, 0, '', 0, '', 'maxwidth300'); print '
gxQ!fO_>&2z7}*L&&66U^h&fZ9TiPao0FMnu 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%0AbGpVXTuq8}h|B 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 PIRcd9p=DH1D6jw71(!Q7 literal 0 HcmV?d00001 diff --git a/dev/initdemo/documents_demo/adherent/1/photos/thumbs/person5_mini.jpeg b/dev/initdemo/documents_demo/adherent/1/photos/thumbs/person5_mini.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9cc8db56f702ab69f14c33a8cd5e08427d93de13 GIT binary patch literal 2103 zcmbW!X*Ao3769;nBob1C)E-MhN@FVxYH2ZwC^ZZj`!duLR7(&dB&L=kZ5dINXSB5x zt)=#*rL9^j)pk_uR4a;dXw*_m$F192JW;MjL3ud6R%S0EO^F`5{m!KNJRo3cy9-a6v)1xUh(jsFb+0w3N7{BvM`( zg_Om}NlKzM&={5Ds%ok-C{1lmthO>%75jY&2nK_}1>jz1;fe-J62?)ZE91b*z0(>Aam=6Nx=Z8QJr)h_M z0D|B@s(8{2D(2t|QzD7uu4LU6z?`jnCgC{9J*IOZB2f@7DJ3m~R8~2TRaMi~JEd=6 zXk>0-iMKjuZA19Q$=Su#&E3yGAdnao91A#KkMxfdw67YY<%LwENAZH{KDd=rL`~X8=G5S zw|92GyFdW=pRB)R|KUO$y7(XvFa-A91>%c2EHDDXuXqxA)XV|qOA=GUT@esJn{~JD znIJ~Tkt=Z_Vh}EQO!tHG+IQMNWd9v3@&A(j1^c&a0uTa&4xa}`0H(kcjN!?)Vb^?c z`dbDx1bDe-(h+voRmNYj%&*y?PdT%UGLzo)sKX{;eNIy&wVaDLhE;y8IO8`fNT$(l zbk19bsY!f`#Z2*ll$cJ@ZTjfQ+SJm;t9?gY*%fym7zO=IK6Qri=@iRlpSb7tfEtpV z?>6B&dPdvuSuK9l1nKGSC8KFV$!{f$esa}!{^0@=m$pX<2C(;#yWR<}UB5Ustbe$^;U%3uSBypA( zhQ1w7(6vY%Z$wOzz`G+~graJsILAJtQsSGAsk0t+^qrwoN_$%jv{HeJT(e2H@PY)-CDVjRkRL#eL%GrTB4 zZC7X3KD9dDJVb8tvHruPM5}jp988T-Ch7C9dR{+nwbcK}nYU6)fG?Mrkcn;cv#N21 zUZK>?E@Qub_NwmwID_)7TOm1NGyPjd4dFvJYWsZXZ^uowIg3HngMFHBiml`?Uf*sC z9Q77%^M^Fr*3*IY-N5#buTA#oWckg;m@Tmh&mRVDQ)CzMs?6A#E-$$y6VU>LK;}DQ zerM3@p)vBx+xC6ar?mkZ%zjcu#hEOP9q;M-$b!tSkv}Ppt8o^2QG|0tcfvlvwiDnJ z?083}oqk(JmlA||rSP_Wd3EfjKfA!H?JOdyL?uc+uwgN}xr6m(`c*{C0fc>7%a5tP zVh1HKxdZsMK6y&-Y0yaf=_jJWq_T?h+nh_c6n@pPe<&X^k~bTR&Z^eqpFE|HU%0Wn zyt!F5yW{q_a$Q|wV_IRsuEB||RkZ4JGS5~nj#F8CyHhim+gGbT-c`Z35>Yb4*p+f& zJ8@K0WXBY)K1THxq&%6d+1OxMYsKJKv}Bz~g$i@)1y#m7s~Pd`jFf!VwlFuCuGsv@ zf2OgXvm{VlP0_MJW;_v6OiKp^`WTDw0B^>Ih-$>9@fwwIb4W4|4KESXac#-CnC9*9 zrIs{0MYkCCvguuA%};Aw_K|dquc^0e%`m_~hsplQmT_K^SPNjVWSSL;9eJt~tD7U=W3C@kK2EIOO^n!2IpeC?(an`~s7(yp6JjhmjvBT8942lLcHujEJ%_py6! z7Nk1>cv8;6Yf?dn9j+KFN7q9ag4U7PswL}QeJi?K%2l=Ya)J+o#u~WRcBSk3{?Z&d zNi(A(I=4^3429zXVu;+(1JmD&8JviS;i4@fUOE6Cm6KZ)<*hj)E9!A4XO~ZWj&{-c zrQM^>9OCdjoFNa$_2FWR>x)u_Ru+dn4w;yC&QV~ry-qOl$ze~#{Uki Cb+cyx literal 0 HcmV?d00001 diff --git a/dev/initdemo/documents_demo/adherent/1/photos/thumbs/person5_small.jpeg b/dev/initdemo/documents_demo/adherent/1/photos/thumbs/person5_small.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..fce9527b378ae9810693cc162b15a2c00a93af53 GIT binary patch literal 5036 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 Zt0=b_tx{R@SKW8we+ literal 0 HcmV?d00001 diff --git a/dev/initdemo/documents_demo/adherent/2/photos/pierrecurie.jpg b/dev/initdemo/documents_demo/adherent/2/photos/pierrecurie.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ea6696ba455ccf12772436bfeecb8c699bd1596 GIT binary patch literal 5960 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 B$e92D literal 0 HcmV?d00001 diff --git a/dev/initdemo/documents_demo/adherent/2/photos/thumbs/pierrecurie_mini.jpg b/dev/initdemo/documents_demo/adherent/2/photos/thumbs/pierrecurie_mini.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fcb7cbb0f7402b7bf880e6c0d6f34cd5ca1be5fc GIT binary patch literal 1940 zcmbW!c|6pM769e)+W z9la)QB}8^^at(1QC9)TqEYl;8_ul8e&*%Mh?>pyn{yOJ#KIi*6JEJ@A0WmvkTWbIU zfdGEH3G93aOis91nY%f<7~{{-wa!Kap20JThjs9Tn5f`$XYjUmB)pxI6$#HY)KSyK zGh+NhgQMf{$MJ?bsGV`(1b~3S5pWm+0Y@N_2qBah3MDLz!Wy8ODLtVfGX5k_I9q;WDThg1n_>iPypjv5*n zpRlyDCfV59xw@Tl_we-c4xk5~J`)stHYz%Xc|JBS{?g^twDc=iGuSz~H}Y=Y`dj{; zvb*>0mseC)aUa#y|NQvL(}ovq?H!$6-95d7yrJROBcs2KO@5e~{x~x`H@~p@h5vPJ zePdJbZO;V(z<;xTm;H|mz3YO)U?2>+=Yl}b?-q!L!G9nk#Lb7scAp2L0aHM5m8Plg_W1Zh z5VG$zr_%_A0(dJISYyjqLiI;m zcl`N*;g&7PLv7B2cePw~I5HcpRNbABgi+{kE*bQ*;W)8?uTa*ptafjO^srBXM}OvW z`e)QF`%^^&MvzSm;p)wEBFf`lL43#R-U6efIp5-{sAAG|$Xv46p&~_{#`+AW1nwp3 z`Rd>?a?Le{e?Z8-Qo}$hW35!QsJ?^mZJpPvA^T*LO&F>OPio5IWz3dmX%zCQ<*Opt z?@G~$c!Pe2MP3A}EtSR!jirO;f1y z4Fh%0E>;Q!)-`!*Ykf>3_l{qLJ6cFH^4Fd>bslBB^QTC;)qG!6tTn}?E&txDD;USRFz&>Y zSf1&`0?DEI#;laQ_|RbkOa6_iy3=oPp5kph)o%kZ>QSFlgUWgR{sg)p<4Bw;;KA;B zN~g!D_ePvb6M8@!);zSbmaCzMBOcyf9Ks`KW_bovU%L5ZM6*aK}&~FFO zC4i-yU`)kavG(J^u<7%UhQU4tNHCE^|6Q;YY4)MHfIq&(wZ%~BeZ_CLuf>vH6e#Tg z`y^bSoz(LVuE;1GE+lTlnax_m%UU_zbp<`{x9SQ;80f6Vtqb71nM|?f2%fvbGp~Ht zdf>KR;%Yh!znIl0*%zDa#I{eKSjy8X?NH2W6s@Q=?O1pAp?Z;nE04{5!o7Cn9xTkh zZuGV1)w$tU^G6?f`Sz^i3jAEWJj3MQ4}d=sC~w~^7wX9}ueUG@FL#+F%O|VzFB`d1 zdn&!mO7?3T>>JMcr76B0Je_ZQC6a9u2w*NnJ%8~L9C#rWALOkSSQ-dVam8i##jx8S)Z{f7imXP}p>MaB@kE;ywM; z@SwQx?Diz(UDkt|5^_p{z3rNsjBAMLXn^iy6g#qsTe<@jdi=ufIJUl8mB>Mlc^2+Z z3OU=?VcdB$AgX*mK6g=aQFRP=fznQAyos4!(}yfIY@~b+Y|Q)+5;yTiL-9^6)}X6b zPjJDg>PRtmFq-x)t!f?x4Wr+BEAP z#t9aAlG}_hgr&*>&?<^eC5s!LQ!90+gtObqAD+4WfKu@3^m;VsE?UJRzITRv5_6Z~p{iHchYq literal 0 HcmV?d00001 diff --git a/dev/initdemo/documents_demo/adherent/2/photos/thumbs/pierrecurie_small.jpg b/dev/initdemo/documents_demo/adherent/2/photos/thumbs/pierrecurie_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3595b041ca21eae281035c52279a5f62a7d53c74 GIT binary patch literal 4886 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 QUGM50QhPpC4zmB{U%6xOt^fc4 literal 0 HcmV?d00001 diff --git a/dev/initdemo/documents_demo/adherent/3/photos/person9.jpeg b/dev/initdemo/documents_demo/adherent/3/photos/person9.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..7aff8dccefe7e0ac8716ee66b25cc605bfc36732 GIT binary patch literal 1088931 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 r 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

rk+XsD>bG_?bTt1hQ|}X2jI_x6RE#u-!bA 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

'; - print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'); + $suggestedid = $objp->aarowid_suggest; + if (empty($suggestedid) && empty($objp->code_sell_p) && ! empty($objp->code_sell_l) && ! empty($conf->global->ACCOUNTANCY_AUTOFILL_ACCOUNT_WITH_GENERIC)) + { + //$suggestedid = // id of $objp->code_sell_l + } + print $formaccounting->select_account($suggestedid, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'); print ''; - print 'aarowid ? "checked" : "") . '/>'; + //var_dump($objp->aarowid);var_dump($objp->aarowid_intra);var_dump($objp->aarowid_export);var_dump($objp->aarowid_suggest); + $ischecked = $objp->aarowid_suggest; + print ''; print '
'; - print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'); + $suggestedid = $objp->aarowid_suggest; + print $formaccounting->select_account($suggestedid, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'); print ''; - print 'aarowid ? "checked" : "") . '/>'; + $ischecked = $objp->aarowid_suggest; + print ''; print '
'; diff --git a/htdocs/theme/eldy/dropdown.inc.php b/htdocs/theme/eldy/dropdown.inc.php index 4ffb781a33b..22ff1a87a22 100644 --- a/htdocs/theme/eldy/dropdown.inc.php +++ b/htdocs/theme/eldy/dropdown.inc.php @@ -111,6 +111,13 @@ if (! defined('ISLOADEDBYSTEELSHEET')) die('Must be call by steelsheet'); ?> max-width: 100%; } +div#topmenu-global-search-dropdown, div#topmenu-bookmark-dropdown { + line-height: 46px; +} +a.top-menu-dropdown-link { + padding: 8px; +} + .dropdown-user-image { border-radius: 50%; vertical-align: middle; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index d900459e22f..fe1d1f675e5 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1039,15 +1039,21 @@ td.showDragHandle { } #id-right, #id-left { padding-top: 20px; - padding-bottom: 20px; display: table-cell; /* DOL_XXX Empeche fonctionnement correct du scroll horizontal sur tableau, avec datatable ou CSS */ float: none; vertical-align: top; } +#id-left { + padding-bottom: 5px; + global->MAIN_USE_TOP_MENU_SEARCH_DROPDOWN) && ! empty($conf->global->MAIN_USE_TOP_MENU_BOOKMARK_DROPDOWN)) { ?> + padding-top: 8px; + +} #id-right { /* This must stay id-right and not be replaced with echo $right */ width: 100%; background: rgb(); + padding-bottom: 20px; } #id-left { /* background-color: #fff; @@ -1130,7 +1136,7 @@ div.vmenu, td.vmenu { } .blockvmenu .menu_titre { margin-top: 4px; - margin-bottom: 3px; + margin-bottom: 1px; } /* Try responsive even not on smartphone @@ -2183,8 +2189,8 @@ div.blockvmenupair, div.blockvmenuimpair, div.blockvmenubookmarks, div.blockvmen text-decoration: none; padding-left: 5px; padding-right: 1px; - padding-top: 3px; - padding-bottom: 3px; + padding-top: 4px; + padding-bottom: 7px; margin: 0 0 0 2px; background: rgb(); diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 851829e89df..25f2bde7e60 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2104,7 +2104,7 @@ table.login_table_securitycode tr td { div.login_block { border-right: 1px solid rgba(0,0,0,0.3); - padding-top: 5px; + padding-top: 3px; padding-bottom: 3px; : 0; top: 0px; @@ -2316,6 +2316,7 @@ a.vsmenu.addbookmarkpicto { } div.blockvmenufirst { padding-top: 10px; +/* border-top: 1px solid #e0e0e0; */ } div.blockvmenusearch, div.blockvmenubookmarks { diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index bacc644a824..94735a65eff 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -1012,8 +1012,8 @@ class Website extends CommonObject return -1; } - dol_delete_dir_recursive(dirname($pathtofile).'/'.$object->ref); - dol_mkdir(dirname($pathtofile).'/'.$object->ref); + dol_delete_dir_recursive($conf->website->dir_temp.'/'.$object->ref); + dol_mkdir($conf->website->dir_temp.'/'.$object->ref); $filename = basename($pathtofile); if (! preg_match('/^website_(.*)-(.*)$/', $filename, $reg)) @@ -1023,6 +1023,7 @@ class Website extends CommonObject } $result = dol_uncompress($pathtofile, $conf->website->dir_temp.'/'.$object->ref); + if (! empty($result['error'])) { $this->errors[]='Failed to unzip file '.$pathtofile.'.'; diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 2769fb33cd0..fa13e88b481 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -1836,6 +1836,9 @@ if ($action == 'importsiteconfirm') } else { + // Force mode dynamic on + dolibarr_set_const($db, 'WEBSITE_SUBCONTAINERSINLINE', 1, 'chaine', 0, '', $conf->entity); + header("Location: ".$_SERVER["PHP_SELF"].'?website='.$object->ref); exit(); } @@ -3489,12 +3492,12 @@ if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpa { if (empty($websitekey) || $websitekey == '-1') { - print '

'.$langs->trans("NoWebSiteCreateOneFirst").'


'; + print '

'.$langs->trans("NoWebSiteCreateOneFirst").'



'; print '
'; } else { - print '

'.$langs->trans("PreviewOfSiteNotYetAvailable", $object->ref).'


'; + print '

'.$langs->trans("PreviewOfSiteNotYetAvailable", $object->ref).'



'; print '
'; } } From 16f44b0963025aca5ed12d29a78e479c6b98441a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 9 Oct 2019 15:07:12 +0200 Subject: [PATCH 148/980] Responsive --- htdocs/modulebuilder/index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 811d6d9b876..5cd32512713 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -1243,7 +1243,7 @@ $text=$langs->trans("ModuleBuilder"); print load_fiche_titre($text, '', 'title_setup'); -print ''.$langs->trans("ModuleBuilderDesc", 'https://wiki.dolibarr.org/index.php/Module_development#Create_your_module').'
'; +print ''.$langs->trans("ModuleBuilderDesc", 'https://wiki.dolibarr.org/index.php/Module_development#Create_your_module').'
'; $dirsrootforscan=array($dirread); // Add also the core modules into the list of modules to show/edit @@ -1309,7 +1309,7 @@ foreach($dirsrootforscan as $dirread) if (empty($newdircustom)) $newdircustom=img_warning(); // If dirread was forced to somewhere else, by using URL // htdocs/modulebuilder/index.php?module=Inventory@/home/ldestailleur/git/dolibarr/htdocs/product - print $langs->trans("DirScanned").' : '.$dirread.'
'; + print $langs->trans("DirScanned").' : '.$dirread.'
'; } //var_dump($listofmodules); From 2b9be13a7cd38906edf0d3ce40bbfdcd6fc06e6e Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Wed, 9 Oct 2019 15:26:55 +0200 Subject: [PATCH 149/980] Update card.php --- htdocs/product/card.php | 60 ++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/htdocs/product/card.php b/htdocs/product/card.php index ef144c10e0d..22a8af0d270 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -17,6 +17,7 @@ * Copyright (C) 2016 Meziane Sof * Copyright (C) 2017 Josep Lluís Amador * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019 Thibault FOUCART * * 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 @@ -297,16 +298,18 @@ if (empty($reshook)) $object->duration_unit = $duration_unit; $object->fk_default_warehouse = GETPOST('fk_default_warehouse'); $object->seuil_stock_alerte = GETPOST('seuil_stock_alerte')?GETPOST('seuil_stock_alerte'):0; - $object->desiredstock = GETPOST('desiredstock')?GETPOST('desiredstock'):0; + $object->desiredstock = GETPOST('desiredstock')?GETPOST('desiredstock'):0; $object->canvas = GETPOST('canvas'); + $object->net_measure = GETPOST('net_measure'); + $object->net_measure_units = GETPOST('net_measure_units'); // This is not the fk_unit but the power of unit $object->weight = GETPOST('weight'); $object->weight_units = GETPOST('weight_units'); // This is not the fk_unit but the power of unit $object->length = GETPOST('size'); $object->length_units = GETPOST('size_units'); // This is not the fk_unit but the power of unit $object->width = GETPOST('sizewidth'); $object->height = GETPOST('sizeheight'); - $object->surface = GETPOST('surface'); - $object->surface_units = GETPOST('surface_units'); // This is not the fk_unit but the power of unit + $object->surface = GETPOST('surface'); + $object->surface_units = GETPOST('surface_units'); // This is not the fk_unit but the power of unit $object->volume = GETPOST('volume'); $object->volume_units = GETPOST('volume_units'); // This is not the fk_unit but the power of unit $object->finished = GETPOST('finished', 'alpha'); @@ -403,6 +406,8 @@ if (empty($reshook)) $object->duration_unit = GETPOST('duration_unit', 'alpha'); $object->canvas = GETPOST('canvas'); + $object->net_measure = GETPOST('net_measure'); + $object->net_measure_units = GETPOST('net_measure_units'); // This is not the fk_unit but the power of unit $object->weight = GETPOST('weight'); $object->weight_units = GETPOST('weight_units'); // This is not the fk_unit but the power of unit $object->length = GETPOST('size'); @@ -1053,13 +1058,20 @@ else $statutarray=array('1' => $langs->trans("Finished"), '0' => $langs->trans("RowMaterial")); print $form->selectarray('finished', $statutarray, GETPOST('finished', 'alpha'), 1); print ''; + + // Net Measure + print '
'; - // Weight + // Brut Weight print ''; - // Length + + // Brut Length if (empty($conf->global->PRODUCT_DISABLE_SIZE)) { print ''; + + // Net Measure + print ''; - // Weight + // Brut Weight print ''; if (empty($conf->global->PRODUCT_DISABLE_SIZE)) { - // Length + // Brut Length print ''; + + // Net Measure + print '\n"; if (empty($conf->global->PRODUCT_DISABLE_SIZE)) { - // Length + // Brut Length print ''; if (! $i) $totalarray['nbfield']++; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index bc29f1ff93a..ded274a8683 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3029,14 +3029,14 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ //if (in_array($picto, array('switch_off', 'switch_on', 'off', 'on'))) if (empty($srconly) && in_array($pictowithouttext, array( '1downarrow', '1uparrow', '1leftarrow', '1rightarrow', '1uparrow_selected', '1downarrow_selected', '1leftarrow_selected', '1rightarrow_selected', - 'address', 'bank', 'building', 'cash-register', 'close_title', 'cubes', 'delete', 'edit', 'ellipsis-h', 'bookmark', 'filter', 'grip', 'grip_title', 'list', 'listlight', 'note', + 'address', 'bank', 'building', 'cash-register', 'close_title', 'cubes', 'delete', 'dolly', 'edit', 'ellipsis-h', 'bookmark', 'filter', 'grip', 'grip_title', 'list', 'listlight', 'note', 'object_list','object_calendar', 'object_calendarweek', 'object_calendarmonth', 'object_calendarday', 'object_calendarperuser', 'off', 'on', 'play', 'playdisabled', 'printer', 'resize', 'note', 'setup', 'sign-out', 'split', 'switch_off', 'switch_on', 'tools', 'unlink', 'uparrow', 'user', 'wrench', 'jabber','skype','twitter','facebook','linkedin', 'chevron-left','chevron-right','chevron-down','chevron-top', 'home', 'companies', 'products', 'commercial', 'invoicing', 'accountancy', 'project', 'hrm', 'members', 'ticket', 'generic', - 'warning', + 'error','warning', 'title_setup', 'title_accountancy', 'title_bank', 'title_hrm', 'title_agenda' ) )) { @@ -3049,13 +3049,14 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'switch_off'=>'toggle-off', 'switch_on'=>'toggle-on', 'bookmark'=>'star', 'bank'=>'university', 'close_title'=>'window-close', 'delete'=>'trash', 'edit'=>'pencil', 'filter'=>'filter', 'split'=>'code-fork', 'object_list'=>'list-alt','object_calendar'=>'calendar-alt', 'object_calendarweek'=>'calendar-week', 'object_calendarmonth'=>'calendar-alt', 'object_calendarday'=>'calendar-day', 'object_calendarperuser'=>'table', - 'warning'=>'exclamation-triangle', + 'error'=>'exclamation-triangle', 'warning'=>'exclamation-triangle', 'title_setup'=>'tools', 'title_accountancy'=>'money-check-alt', 'title_bank'=>'university', 'title_hrm'=>'umbrella-beach', 'title_agenda'=>'calendar-alt' ); - if ($pictowithouttext == 'warning') { + if ($pictowithouttext == 'error' || $pictowithouttext == 'warning') { $facolor = ''; $fakey = 'fa-'.$arrayconvpictotofa[$pictowithouttext]; $marginleftonlyshort = 0; + $morecss .= ($morecss ? ' ' : '').('picto'.$pictowithouttext); } elseif ($pictowithouttext == 'switch_off') { $facolor = '#999'; $fasize = '2em'; @@ -3156,12 +3157,12 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ elseif (! empty($arrayconvpictotofa[$pictowithouttext])) { $fakey = 'fa-'.$arrayconvpictotofa[$pictowithouttext]; - $facolor = '#444'; + //$facolor = '#444'; $marginleftonlyshort=0; } else { $fakey = 'fa-'.$pictowithouttext; - $facolor = '#444'; + //$facolor = '#444'; $marginleftonlyshort=0; } //this snippet only needed since function img_edit accepts only one additional parameter: no separate one for css only. diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 14ac029bb27..6410f2c9e57 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -484,13 +484,13 @@ $help_url=''; $sql = 'SELECT'; if ($sall || $search_product_category > 0) $sql = 'SELECT DISTINCT'; -$sql.= ' s.rowid as socid, s.nom as name, s.town, s.zip, s.fk_pays, s.client, s.code_client,'; +$sql.= ' s.rowid as socid, s.nom as name, s.town, s.zip, s.fk_pays, s.client, s.code_client, s.email,'; $sql.= " typent.code as typent_code,"; $sql.= " state.code_departement as state_code, state.nom as state_name,"; $sql.= " cf.rowid, cf.ref, cf.ref_supplier, cf.fk_statut, cf.billed, cf.total_ht, cf.tva as total_tva, cf.total_ttc, cf.fk_user_author, cf.date_commande as date_commande, cf.date_livraison as date_delivery,"; $sql.= ' cf.date_creation as date_creation, cf.tms as date_update,'; $sql.= " p.rowid as project_id, p.ref as project_ref, p.title as project_title,"; -$sql.= " u.firstname, u.lastname, u.photo, u.login"; +$sql.= " u.firstname, u.lastname, u.photo, u.login, u.email as user_email"; // Add fields from extrafields foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); // Add fields from hooks @@ -946,20 +946,12 @@ if ($resql) { print ''."\n"; if (! $i) $totalarray['nbfield']++; @@ -987,20 +979,21 @@ if ($resql) $userstatic->firstname = $obj->firstname; $userstatic->login = $obj->login; $userstatic->photo = $obj->photo; + $userstatic->email = $obj->user_email; if (! empty($arrayfields['u.login']['checked'])) { - print ""; if (! $i) $totalarray['nbfield']++; } // Thirdparty if (! empty($arrayfields['s.nom']['checked'])) { - print ''."\n"; if (! $i) $totalarray['nbfield']++; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index fd7a5670f8e..69865d7ab1b 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3430,6 +3430,7 @@ img.boxhandle, img.boxclose { .ok { color: #114466; } .warning { color: #887711 !important; } .error { color: #550000 !important; font-weight: bold; } +.green { color: #118822; } div.ok { color: #114466; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 25f2bde7e60..8c6bd8d4d77 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3461,6 +3461,7 @@ img.boxhandle, img.boxclose { .ok { color: #114466; } .warning { color: #887711 !important; } .error { color: #550000 !important; font-weight: bold; } +.green { color: #118822; } div.ok { color: #114466; From ec1acf710ce63b082e6217bbe51bde697e0c9af0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 9 Oct 2019 18:15:59 +0200 Subject: [PATCH 154/980] Fix missing br --- htdocs/takepos/invoice.php | 52 +++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 3d2b736ad62..1511d3520a1 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -742,39 +742,39 @@ if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takep } print '

'; - // Module Adherent - if (! empty($conf->adherent->enabled)) + // Module Adherent + if (! empty($conf->adherent->enabled)) + { + require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; + $langs->load("members"); + print '

'; + print $langs->trans("Member").': '; + $adh=new Adherent($db); + $result=$adh->fetch('', '', $invoice->socid); + if ($result > 0) { - require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; - $langs->load("members"); - print '

'; - print $langs->trans("Member").': '; - $adh=new Adherent($db); - $result=$adh->fetch('', '', $invoice->socid); - if ($result > 0) + $adh->ref=$adh->getFullName($langs); + print $adh->getFullName($langs); + print '
'.$langs->trans("Type").': '.$adh->type; + if ($adh->datefin) { - $adh->ref=$adh->getFullName($langs); - print $adh->getFullName($langs); - print '
'.$langs->trans("Type").': '.$adh->type; - if ($adh->datefin) - { - print '
'.$langs->trans("SubscriptionEndDate").': '.dol_print_date($adh->datefin, 'day'); - if ($adh->hasDelay()) { - print " ".img_warning($langs->trans("Late")); + print '
'.$langs->trans("SubscriptionEndDate").': '.dol_print_date($adh->datefin, 'day'); + if ($adh->hasDelay()) { + print " ".img_warning($langs->trans("Late")); + } + } + else + { + print '
'.$langs->trans("SubscriptionNotReceived"); + if ($adh->statut > 0) print " ".img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft and not terminated } } else { - print $langs->trans("SubscriptionNotReceived"); - if ($adh->statut > 0) print " ".img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft and not terminated - } - } - else - { - print ''.$langs->trans("ThirdpartyNotLinkedToMember").''; - } - print '

'; + print ''.$langs->trans("ThirdpartyNotLinkedToMember").''; } + print '

'; + } } if ($action == "search") From 0c8331b6d798eb83a1ad3c05059dcc0c79803102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 9 Oct 2019 18:47:25 +0200 Subject: [PATCH 155/980] doxygen --- htdocs/compta/facture/class/facture.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index e4140357370..adf00d69d82 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3506,7 +3506,7 @@ class Facture extends CommonInvoice * @param int $offset For pagination * @param string $sortfield Sort criteria * @param string $sortorder Sort order - * @return int -1 if KO, array with result if OK + * @return array|int -1 if KO, array with result if OK */ function liste_array($shortlist=0, $draft=0, $excluser='', $socid=0, $limit=0, $offset=0, $sortfield='f.datef,f.rowid', $sortorder='DESC') { @@ -3577,7 +3577,7 @@ class Facture extends CommonInvoice * (Status validated or abandonned for a reason 'other') + not payed + no payment at all + not already replaced * * @param int $socid Id thirdparty - * @return array Array of invoices ('id'=>id, 'ref'=>ref, 'status'=>status, 'paymentornot'=>0/1) + * @return array|int Array of invoices ('id'=>id, 'ref'=>ref, 'status'=>status, 'paymentornot'=>0/1) */ function list_replacable_invoices($socid=0) { From 6f7e4fd15c9f8919d43c701638a4a0ba1895324d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 9 Oct 2019 22:02:58 +0200 Subject: [PATCH 156/980] Update list.php --- htdocs/holiday/list.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index 1854cce2800..882f59dbee6 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -3,6 +3,7 @@ * Copyright (C) 2013-2018 Laurent Destailleur * Copyright (C) 2012-2016 Regis Houssin * Copyright (C) 2018 Charlene Benke + * Copyright (C) 2019 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 @@ -273,7 +274,9 @@ $sql.= " ua.login as validator_login,"; $sql.= " ua.statut as validator_statut,"; $sql.= " ua.photo as validator_photo"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook From 6bb14bdb0c4d36e7f849ffc5f1ad3a91e2fe8e7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 9 Oct 2019 22:07:52 +0200 Subject: [PATCH 157/980] Update list.php --- htdocs/expensereport/list.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index daadfa913ec..2b4a2a9a983 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -7,6 +7,7 @@ * Copyright (C) 2018 Ferran Marcet * Copyright (C) 2018 Charlene Benke * Copyright (C) 2019 Juanjo Menent + * Copyright (C) 2019 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 @@ -279,7 +280,9 @@ $sql = "SELECT d.rowid, d.ref, d.fk_user_author, d.total_ht, d.total_tva, d.tota $sql.= " d.date_debut, d.date_fin, d.date_create, d.tms as date_modif, d.date_valid, d.date_approve, d.note_private, d.note_public,"; $sql.= " u.rowid as id_user, u.firstname, u.lastname, u.login, u.email, u.statut, u.photo"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook From d4757a0b5be7220ee35f015943d4c4c871764e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 9 Oct 2019 23:20:15 +0200 Subject: [PATCH 158/980] globe fontawesome --- htdocs/core/lib/functions.lib.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index ded274a8683..7c907885d27 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3032,7 +3032,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'address', 'bank', 'building', 'cash-register', 'close_title', 'cubes', 'delete', 'dolly', 'edit', 'ellipsis-h', 'bookmark', 'filter', 'grip', 'grip_title', 'list', 'listlight', 'note', 'object_list','object_calendar', 'object_calendarweek', 'object_calendarmonth', 'object_calendarday', 'object_calendarperuser', 'off', 'on', 'play', 'playdisabled', 'printer', 'resize', - 'note', 'setup', 'sign-out', 'split', 'switch_off', 'switch_on', 'tools', 'unlink', 'uparrow', 'user', 'wrench', + 'note', 'setup', 'sign-out', 'split', 'switch_off', 'switch_on', 'tools', 'unlink', 'uparrow', 'user', 'wrench', 'globe', 'jabber','skype','twitter','facebook','linkedin', 'chevron-left','chevron-right','chevron-down','chevron-top', 'home', 'companies', 'products', 'commercial', 'invoicing', 'accountancy', 'project', 'hrm', 'members', 'ticket', 'generic', @@ -3126,11 +3126,11 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ if (preg_match('/selected/', $pictowithouttext)) $facolor = '#888'; $marginleftonlyshort = 1; } - elseif ($pictowithouttext == 'sign-out') { + elseif ($pictowithouttext == 'sign-out') { $fakey = 'fa-sign-out-alt'; $marginleftonlyshort=0; } - elseif ($pictowithouttext == 'unlink') { + elseif ($pictowithouttext == 'unlink') { $fakey = 'fa-chain-broken'; $facolor = '#555'; } From 43c7917108097c0d504e4546786e80930a03d77b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 9 Oct 2019 23:59:12 +0200 Subject: [PATCH 159/980] Update fournisseur.commande.class.php --- htdocs/fourn/class/fournisseur.commande.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 4536cdc5bbd..56ad1f9481f 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -684,7 +684,7 @@ class CommandeFournisseur extends CommonOrder $billedtext = ' - '.$langs->trans("Billed"); } - $statusLong = $langs->trans($this->statuts_long[$status]).$billedtext; + $statusLong = $langs->trans($this->statuts[$status]).$billedtext; $statusShort = $langs->trans($this->statutshort[$status]); return dolGetStatus($statusLong, $statusShort, '', $statusClass, $mode); From 90257dc08714c6e8317ac8d6efd9daa48160e2d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 10 Oct 2019 08:09:39 +0200 Subject: [PATCH 160/980] Update box_factures_imp.php --- htdocs/core/boxes/box_factures_imp.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_factures_imp.php b/htdocs/core/boxes/box_factures_imp.php index 494950927a9..3c4ba1c9736 100644 --- a/htdocs/core/boxes/box_factures_imp.php +++ b/htdocs/core/boxes/box_factures_imp.php @@ -2,7 +2,7 @@ /* Copyright (C) 2003-2007 Rodolphe Quiedeville * Copyright (C) 2004-2007 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin - * Copyright (C) 2015 Frederic France + * Copyright (C) 2015-2019 Frederic 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 @@ -82,6 +82,8 @@ class box_factures_imp extends ModeleBoxes $facturestatic = new Facture($this->db); $societestatic = new Societe($this->db); + $langs->load("bills"); + $this->info_box_head = array('text' => $langs->trans("BoxTitleOldestUnpaidCustomerBills", $max)); if ($user->rights->facture->lire) From be005767174c10c171b8f4b3c8abb50a971829b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 10 Oct 2019 08:22:14 +0200 Subject: [PATCH 161/980] Update functions.lib.php --- htdocs/core/lib/functions.lib.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index ded274a8683..b0dc822bb56 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3031,7 +3031,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ '1downarrow', '1uparrow', '1leftarrow', '1rightarrow', '1uparrow_selected', '1downarrow_selected', '1leftarrow_selected', '1rightarrow_selected', 'address', 'bank', 'building', 'cash-register', 'close_title', 'cubes', 'delete', 'dolly', 'edit', 'ellipsis-h', 'bookmark', 'filter', 'grip', 'grip_title', 'list', 'listlight', 'note', 'object_list','object_calendar', 'object_calendarweek', 'object_calendarmonth', 'object_calendarday', 'object_calendarperuser', - 'off', 'on', 'play', 'playdisabled', 'printer', 'resize', + 'off', 'on', 'play', 'playdisabled', 'printer', 'resize', 'stats', 'note', 'setup', 'sign-out', 'split', 'switch_off', 'switch_on', 'tools', 'unlink', 'uparrow', 'user', 'wrench', 'jabber','skype','twitter','facebook','linkedin', 'chevron-left','chevron-right','chevron-down','chevron-top', @@ -3046,7 +3046,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ $arrayconvpictotofa = array( 'address'=> 'address-book', 'setup'=>'cog', 'companies'=>'building', 'products'=>'cube', 'commercial'=>'suitcase', 'invoicing'=>'coins', 'accountancy'=>'money-check-alt', 'project'=>'sitemap', 'hrm'=>'umbrella-beach', 'members'=>'users', 'ticket'=>'ticket-alt', 'generic'=>'folder-open', - 'switch_off'=>'toggle-off', 'switch_on'=>'toggle-on', 'bookmark'=>'star', + 'switch_off'=>'toggle-off', 'switch_on'=>'toggle-on', 'bookmark'=>'star', 'stats' => 'chart-bar', 'bank'=>'university', 'close_title'=>'window-close', 'delete'=>'trash', 'edit'=>'pencil', 'filter'=>'filter', 'split'=>'code-fork', 'object_list'=>'list-alt','object_calendar'=>'calendar-alt', 'object_calendarweek'=>'calendar-week', 'object_calendarmonth'=>'calendar-alt', 'object_calendarday'=>'calendar-day', 'object_calendarperuser'=>'table', 'error'=>'exclamation-triangle', 'warning'=>'exclamation-triangle', @@ -3081,6 +3081,10 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ $fakey = 'fa-'.$arrayconvpictotofa[$pictowithouttext]; $facolor = '#444'; } + elseif ($pictowithouttext == 'stats') { + $fakey = 'fa-'.$arrayconvpictotofa[$pictowithouttext]; + $facolor = '#444'; + } elseif ($pictowithouttext == 'delete') { $fakey = 'fa-'.$arrayconvpictotofa[$pictowithouttext]; $facolor = '#444'; From 28b87f9e27206cce9d45cf0668515abe088cfed8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 10:35:18 +0200 Subject: [PATCH 162/980] Add image for members --- .../adherent/1/photos/person5.jpeg | Bin 0 -> 1079627 bytes .../1/photos/thumbs/person5_mini.jpeg | Bin 0 -> 2103 bytes .../1/photos/thumbs/person5_small.jpeg | Bin 0 -> 5036 bytes .../adherent/2/photos/pierrecurie.jpg | Bin 0 -> 5960 bytes .../2/photos/thumbs/pierrecurie_mini.jpg | Bin 0 -> 1940 bytes .../2/photos/thumbs/pierrecurie_small.jpg | Bin 0 -> 4886 bytes .../adherent/3/photos/person9.jpeg | Bin 0 -> 1088931 bytes .../3/photos/thumbs/person9_mini.jpeg | Bin 0 -> 2055 bytes .../3/photos/thumbs/person9_small.jpeg | Bin 0 -> 4897 bytes .../adherent/4/photos/person2.jpeg | Bin 0 -> 1190209 bytes .../4/photos/thumbs/person2_mini.jpeg | Bin 0 -> 1986 bytes .../4/photos/thumbs/person2_small.jpeg | Bin 0 -> 4501 bytes 12 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 htdocs/install/doctemplates/adherent/1/photos/person5.jpeg create mode 100644 htdocs/install/doctemplates/adherent/1/photos/thumbs/person5_mini.jpeg create mode 100644 htdocs/install/doctemplates/adherent/1/photos/thumbs/person5_small.jpeg create mode 100644 htdocs/install/doctemplates/adherent/2/photos/pierrecurie.jpg create mode 100644 htdocs/install/doctemplates/adherent/2/photos/thumbs/pierrecurie_mini.jpg create mode 100644 htdocs/install/doctemplates/adherent/2/photos/thumbs/pierrecurie_small.jpg create mode 100644 htdocs/install/doctemplates/adherent/3/photos/person9.jpeg create mode 100644 htdocs/install/doctemplates/adherent/3/photos/thumbs/person9_mini.jpeg create mode 100644 htdocs/install/doctemplates/adherent/3/photos/thumbs/person9_small.jpeg create mode 100644 htdocs/install/doctemplates/adherent/4/photos/person2.jpeg create mode 100644 htdocs/install/doctemplates/adherent/4/photos/thumbs/person2_mini.jpeg create mode 100644 htdocs/install/doctemplates/adherent/4/photos/thumbs/person2_small.jpeg diff --git a/htdocs/install/doctemplates/adherent/1/photos/person5.jpeg b/htdocs/install/doctemplates/adherent/1/photos/person5.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..3d541f760b8938a5fdb3eaffde228bc9b2265e4b GIT binary patch literal 1079627 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 |3I_XWFZilAi`qVB?B3>O@KE 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�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%0A_^g4>aNg^z!@JDlH(xa4 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

t+1 z7#a>HXD$$b5h=aV7^$i{^+G7okgajg<6np-sMCH))Y5ay1ZoEJo$*dG2M8MYd`)y# z2Cf+lj`EL`;}Zvl5r%Y{o_zI90mX#mS81}Jq~_xo36e6yPeX!exJ(RjrhlKsRi;y* z=elX7R)dCI)Znli*je-aBLk9(<4E59k#2_-iR114r&?7VQQw@cH@)Hgw?MM2*Ev-4 z>b2g&uZH*gRo!TT@j7o_(}KcC@F=*7z^q~BtsE|h&XlET6`lcoM|T7h zEp8rt0%0YXL13qdgTI9EZ5S||G0vG+*l|s87Gh{lPX+K~yQUKCbjvwlnJUz^lTprS6U@j>K>z1MkprhrG?C*#vzs@lck z((wCp)i%lux{;X)y`Ig{BzR}~Ozg}O3~)~DuDf}mpldlJX!{=P?vbuL*hTDr+cn44 zUb{$B$9oFV!_9V!Kna6d1!Y*{?ufF33}WMdT+6N_BZxeGmaOIwvF#x1YLewpEcNqun*E z#G!WiyHldJv%cT5Cj*MM?6#J6w}CV?)8S0FyvoH$o*VtDwzY7jF3$igd1ehmb|vITgSTRiB9! z91wTZ#~R~Eo*ia9WTx1`l&miSMC`hC+l(OEFvnQtks=&sBYmFXZ%N#%*<&m=E5 zDAU?^OcUK)$lm_|C_K(P<*L6U?pKL`Osm;W{%}rs51uI6wzWnK(KZ?~R_~-Vr&>4y z*@Ar&de)s&nM#}`8`q%ys?ZyTy*HA7+Rh= zyna=&ywYO{KQLElw=zf+1_qU!xr+XRCP_0})$0HX4l&?0D7fLE5`}4} zKMnpAVsOi!HDp0&UHm7EX-eh2Xq`t#vK67ie>i!kV*{L4xKIKjb;_KjhVANO9{Y_e znwi(8_kv+}+9vU)RPpD}MQG>QS+%BMUaWvaq|#(}XA?9U#p2s=ML=)=0LxL%Mj6TD z-d|LAT>F%Sd9JsIX@l#u-vOpaF06@+_q-Xm<)I7DyLTkIQ zKI(MH@{WZ>yS!nfX@`c)YMB6#PcL=+bMD%KmF#ARm2{v!%FDlY?t|GfkO#tRrirrJ z#!AiN^t%beRPe|SZ!{c9%2BOyQUYb5nfKPSBU@;oYysh-&SKNU+XN$aF<8` zNtoil?=(%gPr`ur!0rnU1;8VKDt#XM3yvrc$xO1HI_Lrl&);)^d^G-6ATW!i8b z8^Kyxn?QdVF3b#F#Qr@~=-5`aMaS+V1!f-F4)(M2ymQXl>B#enD;rl?yH;p-k5yr9 zG|PCbRiztEl?Qy&YVGh)+oCpiyi;s??y1&s?yp>|#6oSLb#>oV$2MvPl8JkAke(Rx zE@T?3QW{J!5C;4e%QrMM7eC~oFwP{5ql&Pyw{5#`v;byCUlhl3t*jeoS*0+nYCU;*CNyHhU7yNy zjAJCw-AI#OeK+rB)|LR*yT=p8yXu_B0tbfpD{BaC=&E=vOfu-5@1mQf11}N~vT3s; z{ED=*Epr&Z!ZjSaP|4O!3DnR4nTmrLR+#6Q$0O*Q+-L`NR_}r{rWDB@@%HoFpew|k z?mD53IPawRls}WIGW0B;z=|HIs0ZO9BYbut^uw*lkFdF0|>&NTjz>_WY{eS zQTv$@24E{o66O+Q7@(&NG{G_>d{$gk(^40tDWV(R{7}Ysz38&VYsaF)B@_r}Js~>@ zj%y)U@$o|)>Ay9G^<8xHQ;G{Ufm7yplKiPL;-?Ni$eb&l@T#W$P?;t$PPFcga^=Z4 z5G2hE#$25QB`!8?^^(~7QqQ%z)ph;cO35uX4^5&Sq0xp(; z%2(4YcYFvcEQo;O-C;CFces@?y%nvkF;97Y@mkOhNOpUcW# zd#ZDsXis%p#~tRILn`-wHF2)989F3tzM-=)tt~1{r@EcmlDojlBtmgOknG7cPVXpz zUFfZI`0z|*_^!wUYI%C^!9Tvo$s9aaZ0xp{#m#5<|G zB7-`w30BmAF!n`*i;1iv7+|XzFas2!9L{K(0`9wpn1E%_K6e8tu^~#@)m?9%R z=kAzIHBJ|>$Dyp{OuFIFT9VV&e6;pWsJ+O>_wF(AJKYwsjxxzHQoc){_V-ij zy)pc6*$g_ZD@jvACQyj32*y>zE$_urlcG7GcfG>m5sVK#@8J#dQZSXrnyh6CyUTmc zbXt0E$qf#=Vxzq@rbq_f3e~xea+xit#DXUj9o%b9IqH5kS7o&C3XDYX=jOX12FEp{qYkw2zz4?E(=9}~x(n;mOCjBFU9CkS;izXN*D@uHC1!Nj*+jN7-&kQLLQ!d__ z@~qA&&BV$&Aju^G6pWFP5bNH&rfFJ^SRrY2PfRPI(w#WK`4yAwM8S88it{vu|H)+S`M#|2`` zEDZq2;GJX}X+b0LzN*$sXu{r!lYuZ37<;c3RaBaG zs!1_1hd`|aI61t0grH`M(=F3P^;(w={$X7%mTo8*Bx<2@D!8r_uQOJiO5Cc%IrC=U%&pcCY~AN|3ISvb>pCJV>GT!X;TeWDX5Rd))jK_6-66_Z28ge!YD6Gd_DiS_nSAPe0Q8sv!w z3V2qE*52%aj|FJwJYx{7TFEu9;(^ym~r;> zjpnVs-W8_t@x#G?tZ!#B@MB0OCTma1J+jW+i=sw(J4wsRO6=q5z^!U;Vld;DKD111 z1ITZl=#CJDoWcz)oK+R;wCU?0XP@OdVw`yK$pA z8ml{MV+VWH3t5ZF?`yypVwmQf3tM=!9$2FO&l2cw4AVm%+s$<#(D^5Q*G;5@EB!NH z-Uf=s>pP^(Yee>5blss&vKDaRXP&=<)mgj$026wt_HMiNKBhTAm23$z5ayajZlZ?G z;AC+{^tv)C&%FfD1o3nj&-APtS$;ms-fx`~O$vW`z-qpqdyJwZ9FxBJ9DI@Q(+|qD zpm$t2Y%4y{);vk}RvovqxIu8yT3gsfTrYV4dSeX-a1E?Ta|6zw2Y@`+^jdRP1QFqA2j+-3jFCxA0?i; z?|uswxikyVd_55vanJCpfW~$_({D8ECk`>iHl3fp0l~)sk@Jxndn&}&u9+hFuZIXu zGI?XaR4~It7rEcE2NVV+90JL^{jCbupH2Q(vI`yyC6^WPiqBtN`XNaKZ+p#R4Hgy4 zeAf5XZdKmy_7Luw#bdIx8~uM_0K$n-B6y=2Qk(QZb*5>sDhj@H-ukY`C$zJllCfk4 z>k7*yWcK<6WI%(GbHOx~5!Mzx(bm2w8-lIMnW5fwceqw;x+ET{&Ue%|uLjmLozZ>M zK^xb8=I)UQxHfCQoRy`itZ_sW?t?Ny%r?3vzE1$0+tNfRJ|5vr9C67s#1zNCu4>o6 zRc6wD=_3eTtFiq|K6-lkD=x)tW!{Uilw-?&3dzJp<6U!&3bV8~NshasHh>dMH;)`h*!nW?%8Kx=&jpAp5vU@L)S@=QZ5JIxG zn(t3Fe)NBeX|w+TDR{z$JeO%;dH(=x5eu{0U9&8EF!3navF?_zfHWmpf)D;URUXYQ zy;SELpg2I}v213V=ZC~a6UjKbRJUI(@kF$f6qNSkhXI8CRod5_@HwZAF*NX9p!Xv`W!mj7nmRi8;3wUG zueK5ksA&RrSNf|{LiYiec>JSk=fEy;=1!_)!fUhoU&Ks?Hd#3}7aOj{5J!f_@U*Gxjw!XrDTstl zBb*rUp)~QQ6xvX4RK{OmA<$-YS0onZp3vJfQ$fnOqkuWg%$v`a}C&dZ~KvQ(8>~bxdIQVbHF{a~URF?n_ zUU@4jQCZFF#|?znOduN^SNTJYIUr@Y(Fqb-n)eq#%MzVw-HgV6wEIr<9P~~i>95Ll zMmX=^$IXq5)3#H)zRT{xJG$6kQYN+a-t$Ma!SC;M@K#U2f(SJ~z37?)fI5sc$u+gX z7E(C`8wE^rK+mct@QEt2n&o7gQ6y^+n{<3_Or=glxs6kZ$lh+@{i(WGDyi zX`u?t7mP6CpGQO*e$!vwG*V;}QKBF@l%^i3;51VeXCcIt`Z{7kPVNGAMZZ{pYKu!6 zTR0*whqYe1($j+bpic$%%<@7B5{v>4;W+n*^G*=$;H{inXeXXPF4*W{gXX(Ki=IX` z{YD-c`bKzVUGJh}Wc*|E%yMv=;pWKk1(E{V%=s(@Qr!ZYW~#&{w?6atZk z@x$_o!;ZV(MBO;`(lz78HBA#=MNn|+tlV%`Zz9vZoX~l19xJr85J*3%o&MD>^4EM2 zqj$MSyaxqeWjG%tjFqP(cr4bqsKd<-?|&pHp^TSRB+&`dKv?zB8gF})dE|ieIiaE% z@L3a8#u4O??|o4|-pKIFg32?hk~*n4XQDLc@`PQ`)fqs=dhgv%=kTm4Y~Eu9VkXVK z5Qcu$ll4q?9TQHIst(IF6~$!&yweUfL%2)4Q=cHKM_xQpc3KV!{vIi$U7dHnsw5Ns zDd0vFL%L>pt5O`)MbSIoRcPDQ@Cml=?C;gPJI!`p)C@VU1RO@5MsCOX&jnQG?a ziVwc(o$geMNuv7T%S`}Rn&Ml1FtLt`xa*RAnSXj943*LdJKxHg=c>JhCV>)93V7t6 z=ZAAa&ZR?jRzNYO!Qh<7H0IuQ?l`ZjXF&XupJwTSOtoKBMcgSo(U&4Xv#H##sA=8= z95^dWN8KPRC%vVFpDfk2p`jS2I1)+W?p3&y!4>pYvr;obq5)29JI#NPl=zv}S7~{e z-8DLA(SIXpb+I)*`1DRS-!y+3$?;ZgfDUFd-=RczvVor}4dDYs!FF90bD(Hw4)Wrx z#($dnaLqc%MPNvw-p3R>hV5%po)}|F&yutx&Jr^uQ&Wvy!^0HNCTodsp3~rm*m1k*b z+20i{({Q^tYylompKKd4c?A1=Yez#VI&X@z?C(GKIi1$1 z*)(tET?5@+Y)vcVrZYxyF8wPb6`vFyj8-X-Gf&qU`8RP!{!2D>BC2{b9KgVi)%sljAx$y$jQvc@(dBpuNmR#Lac5nXq^g*-TLO*qc?ywwOC7F@V2tFoI%HZmc0 z2Nzf~k_?AVcux1tHbp!kSramtWpMHKK<0tFN#6Ysb>Ybabe%W4Ct6+`=A1t6Tl}k5 zJ}(I96_fQG(RR3dr#gc~Ns3~H=eLgcD7JB;lXVvxs~mSLw6&rRx$6j8Ij$E;5tNDY_mAy)qQqkMhM$k<0{*={{Y97rZUpq(r}$sosF9XG1;CQ>i44Q!5hw` z^-Tq=GHO;Nd!p|R6H8r(RQ7{V>Wr)MteopfY>^PGZ<Q_VP=CyAKmueQ<%ZF$0Q zCeI2Y-4&aR-9NRylv4`vQsCjFrn#oKvX3S816*ef)n99!7n6cZ1aOg}0G{a1g*;s#c=#$^a93c?xGP9AIaivu zdv1}SJr`_o`iEY7{3hc&+$KqO_r6P^pAXN6vL@)i9BYMra>jVVv4d((LC`l{(qdDe zaB(;ud2f+ZTA2+sI-VI*C1}!lPB>}d&q-1)a^CSo)W+o#IAkZNuFeUfb&oB4y;DGm z%qv?!*74_u3?y|;ykqCmH{_TuoMTfQr(QjHU>HdUQ$1(TaYbrjv_8XK@>WBjB@mcOy8t~te#NoZ}iZNNw1sTfU zB?J&Lo%tzFsisR@a9fpG)n~tC4$2$Rb^hA&KyP@d%K*7=k|%Jcl>XCB1Amn?g`9qt zDr3t<{6nvHR_|0BifcjX9?Iwr-U`lOp`9_R})4B|3Y za6^Pw4}{nKB3MQ_^QtAeEDVKaD|-8yXYB~zKlyXbG!~1l?wonAtrKS1=Z}&u0;KyU zjOUK^Otq{=d+<|u?=)l)2)o4#z~YIV)tg|0?1%-`qP4Q1b58^xb_X?il_bW4IYh;E z8YW$POG)oz(oP(cEb${KMZtrP_qk7X`B!_eq6#E9s1YgjuY$C2spr3i+n(R1=*O9+ zTjZ^sdB#vQI;%bJev3-rX-+x*cwnuqJDmkJ@EX#*22wjCV9C=A>M74(g!W=}IMWY5 z3VBK=&lBCG^^vA};+*n*VI&U8ebs+d*$9&Of-0yg%jrtE= z%5$!^b);`kHE78=lb-sYC1eZ&X7;Dd}#Q(1n~P)zB*T~WJ)#Chx2!dGa(fN>K{ z#vOCR3ZMm@n`#9$%{cd@;CbS=zrqJqJKlWN6JqReQRamwFFnGDo%31jEb|+bczdi+ zMAL%zUaD|8gjO`)9sbl+RA=yymN+0d@5NKf6-P8_UGHIQIjF$&KiKj@C=WD7_t9W@ zD&V6tx^Dz4JIw(DoFfn?#~l~&7PqVeboo);OfkPSTyH_%X{Wk1-ukA=_*Zk&j}-=` zWGlLKL+;cLsnGIAiZ&43IO2DLZIH{Ts)7a`5q-zpaJnBgMb~gMiY|2XnI8#;4)?xD z8I<1hS9PQUi(%jUC^ZyD!tncW%{#NYNNx$XQTH>hqsd&e(}MaS{{W8tGW;t$DE|N$ zL=c=^f()1$r!-x<<31e|OIr9N9MBgevG~#vyd8VR0PIVn;Rn{DzDcdEbJ1Pn2xDAA z0k7#km?k^CN98%LbBU)sKPXtW&MkBNQ*N?a9C#^-tgon8Cmt!b!TI>_f}se41aV#P zMxP4vU=VAVuav9xyo<@EsP{-k*PKjK5zRD@@+rZfw6xPj^-D$^{8PW&%{*KPkWrjb zA)}9qCZ1~1!gziap@x!hU&tQeg8=#d6Tz+vEz|It=vS%j&xhq3?{h{#HH;!IBwS{C$oNr;7tz<_$q7S)N zk!bv)kSp(p<3g=X;u}!WKsjOiR+?k;nu8UpY~WF)RB_AQ2GY5O6Yt}_;=eoc-dXa) zR5SNNcR-^R(|g`X;B--hqvn9u#bd{c&wC4f5w1BQK1gDX5gWxAh~JL-A-(%9ROWz` zK%Mbb$zlYeC1CGbs(Gq%q8@0}crWSSwcH3+F#J=%VV!X60p-4FnvL%? z+JZIUi~(JDMCOM9!8Ba!R4)rcU=VUb)S3`zrU{-Y*2H1HxhGmS(V}q`L|!zeofrF` zR`ke-f)rgKp9EYn3eHT|A4FT3I;P2i``uU45qVwLd;BA3RRm20CbhZH>pP@xNNB?q z2!H^ml%sb}sF-)Or^v1;%zL6R-@=y$-QPZFVF|{umIyXbAbAc-@bOJ_K^w_3(URkL z_nL49((vx9qyR&v4DpVr*)+6T98rQIY*f>xT;x(C4P^$l$$-<_m(6{X=GoYHNia;o0P)5p zraY>g*4Z{9COP_@*A;;^&Xmf#!1LD8^(RgUyPo)aEOX?f$=>O`I4@){0=Q|E@8x89 ztntJxM@1D7j8Kd`7OPK=HQ(W5Nm&{8^26zk>qMt2BM9CzhJ z7lOwX#a47g@5v2Rc)|#cD6@*G9acX(-u!x=82{q z1u{V`sovpOo2t%9r8sUAs%h4W)zARmDUNfj_0fB)OW+JVAzqfrR?d95G)ti{xQ69Z zz5JlpxU}ifTySuv3C(fVQyF(0)yEmRC|JMzvQ~C(0y79O#ZhUINgip&DHXw7G(yfn zJEHndoH17j6;7ChLCk*8Hf}d=lI>XEC6{c zra~;vcep^2O_gNO=<`9MagJ*6plMPF#|)toBYw!l)KiKe2aquJ2!JWS9TRZ}MBeZd z@P~GU#c92SX-PV$KI%-s$JsbiaVk5cLYhS=iwUmitiIw8mn7!K8ml)K5D!%T>!Tus zJAMh`Z+|Pa+FrCKo7GJGDBv~2Pd(L1gT3!x?IE#R>~CcQ zPrIK=^!3(>z;TWE_zx*jGJ4k<`Qyr&rm)QTAOtJnq)yKN015KrdTCl{gt|QaP6&yK z%9?MUxT_B9@wy{lfm-DpIICxOCmX_=9K51B8LWk3=Cl`_g)@?IHRLnut*ryb5+F@+ zoQETpGs!%F=XJ*cjvOI4jS$9SsrL&PtVjQM;i?u}65kA+r29HC_jnP{gxKWHBu zBi&`k+xt-b^X|fm=>rg~u$|X`wPx1T zO6>#v%p_o#2w{(PfHS5%!hKs4SfU}&I;R5Xw6xW-O)&`Cw(aY+%pYDI5bd^hMjZpF z!+@f*{&TS3Eg=HU>J=peXjf%l82w@y`#!XKb^siW2$|Nf$5Adq~jB;LjM3vVt7Ui{UqZ}!n5oRnWU$72APpE zkMZIl4jw6=#s=jachNtxG!9GsDNpS7k=;YH+Gg2bLe~qay_w|qo5?oD=MD+&Gs6IY zilXSJHGK4{cA2Y2j_beUQkvV>Z5rWpgG@-&9tpkYod@X#-E8^v-l~T04beHEno1$f z6YPjLr^kMX?|ab<)y^u;X1H-f?wt|u8YfF%B9XoLBQC`@TWR6ZS~~N`9249dH8h`u z_tP3K-)b7yUfgdbXz4Sq&S*~dIPR%}N4nGss4-3WAkiXYj?DZhp`gbk8+-R7f22fX zy~mOoV2lAO(;DTzcrWpq*L(9oQ=a+yp^lhud8or9!^=(LnPTBCCi8L!u94l|OX?r- zEdWPJrUxj`0YGw2w3BpTe8_b7asL1v34&xNnV95vDaNp-fpuO;8OMA5tcvBJlr|St zMM<6ukDBAE$kRFmDmiWul@hnUt2LbC;=F3Jul6x9u4{gZIMb@9=X?-Vm53bC#dOc7 zii68#O;tcS?-er}oRfr9VJW$TRVHdUZl1}+8e_jj*lm85t1=Q7W+B#XcLC|YLEtn=ecTtXrHN~>WN)NPaq0KTRPDCSZz^2=~{wI8sElls%c%f)VHT7Ce zeRsZS8!~H`74I2CZ==j4y_eTWz|DE7+- z4&-V9Kd){{mY0lxv2l?@L=V#;jlj&RgN87hCd)+HM4UYlM1TTtr19SMMLRUZoTmei ziff2H5O!JWtpvhp7l2P}yqy!AZ-475+M;KlitQ4{-n}dN4$y5LMSgVNeNo4I+Gsz-oc4HY>kG=9+`N_xo9LD;@9U5sBXXvcY0E<-UmEn~x9L zX`KxtKOK1cLU4W!K6HtaBhIL_k#=Yf5nXG^I9&wi5Dha1VHl-%@`#ZtQAZ+zk)A&5 zMXrg|>qUXlYNi|Fq{cF%IsKv|*TrJ9{>Ki!>lyrOm-drYo(d0CVx3W@_r8npso=Bd zhW9A``K%Eplt+53sh;sb>7)gvVscn4^a?T9=lV=F2Tmhh(SH?df3w-^ACJXxK$-Pa za5}2V<=~iIBZ_OTraGJCoktfI(eOEv0e85S?rTn%(Gg_}2(4vG$T*a~RLm=YoIoRyIZnP5w^7-{!2XtnE*B)+dq{PNX}I zB0p*EwHe{)pV}K|H=kYC9n~M@ESi4l_e}m`z`!-oPWRu=+`0v45xt1Wl zksMXO@?bWU^4|gKtUr`4aB1m}EmLg+v&Op$-rMPCy@me()J5%JrrS#|RzeJI zwA2D84?XxRUe{=52^+7CJW(eV#Tm;IUGpcK~q=;Rl-4yUf((_>BRom?@vGvnDm7}jZ zO4RS;eA7{g_1tAy+>$h)^HxVa6O4);d%-jtv#39$Bsg#?)c1(o_#i5*nSIBRP8~<& ztUYV_Mol>58{b66{&(l;f(GmV0Pz*;rad`vSMIr_kS|nM4>}#j2>tGGGyeeNURiY3 zgl-Zv+U(a<%GKF;xb$rYg8=`QH_t zcMBOs4k#$oDzD%z?^)a?qvctd98+jcif;p#f)r~{iV|R^y*SM^i1=6Tx(H0~D^W|? zkJ6GxIPMT>yh$|46CKrJPYbaqGS1boM4jwvzo>tYHUO5kYp3hU0$F8iG&JNf{B8oU z?GjTn2v|6!&re_jrHH_7ro9%#gn_w6?>soZ(7h~+Bv^lnJy3z$skbQJk zotnbIu-Ji|W4J@XtUYP#?%iy9R5&%~3la~JgDe~5rZWr>F@@~#N#vWUz1BwEu zX}$TUW9z!7MCZP#kOkcR_qrzk0NZyB_-~b&mPb`{zayUw{_;-y-M#rHL`)r?OR`zC z2a~LFo@&y}2N=ksW(_!Qsly3TmQ2=hGaw$pFZ0=rKbzAFAREuFzqy z+#)B_-1AO1g-!~D#Zev5unQ?4+Lh$8-srL%lYUX4fu7)^FsjV~PG8=4lGE9E#=KTk z#4LuZGru*(8tX-ts|v~{iYq)61Jlcb#6{cS)vk|{k!U3-@ByPB4P@OopL+ZOb z`=(RKy$1vam?uc2rxv^erYg^LTv3=MF8hn*0|+BC_1m?X3_R>7z|+P zh%--J4ON|p6?QX2kf@mzks4hy8UVX9n%>WA7<}T3`{lxBxJF>cBYtW2WY)a(p!7{H zXds*^u6!tc7x8_m%IIsTzbwQZVo?DKxti-eeIL7zv?DQP`2MViONHK`s z!Z9TbR-t=i{ijWH{@pi31t(9+7zG@;?5y!JzZ>;H`bhmF2R!hEC48;(Ts%>k3UT}) zUo-utlfh#c=e^_og!CvyXHHmnFQ3Nt7D&xamW+cET{O6+$309MVeA1cU)CpPdQFwnO#?3(NjnD50+<3!K|PWKAZ zW{469Myd-$jeM2kc$id}<0uB*>+G08G}qmBPSN!38|TONyH97c?XA28VuK!ZU&#Le z5FPd~15-d%uVb`kA|i24vp2^2uG2T#ID2p1cS9yM5xw>e-YkgAAf+kAeog@HkTg z;{-#o4#Kj8@r`*xw5X?$U77B(w;0yY&=OiO%+26t2YAFuCi3m}<-wwB1OEW!3ebmF zq2D^Iq}FC?e7Hv-G{Xe=f&i?~PL%RK$N1jS^z3b0S^?u)qHhxuiUO74zg1@wcDYBT zYBJ}hYqeSZoM?O()9&Mvu(2!T^Y|U_tIOz?Nzm5Ks zvurxjI@e8ApJwdchAxKQ_@eC{uFbP_iRQa+YIB@q;;K%n#EuX zxr()WNHwij@(!8<0Q2Fd^j4pDQnNw3=7T{->svI>cvqLob~C<+3V3i<4-Gio%6G%X zJVl}5rUxzMRM*tfIBSpMfMwNMIGaiFoOIV6!gGJyX^OgX?++~Zs_bt1a>q?_o$r_n zw76kTzyAOc&t7Say3-?BPA0Wsr;vAg)8K}(So>sRbn_H;)Z_v_F2&EpmJGxD4v)UaQ@nE5rAhO?Vg{d zNyimT6l4O56F4j?KeYaqIIM<1aILQ!JMn&vB^zWmoG!CsZ^ik~4~N?_f}TKqjj6 zwF1+OZ+=Sb9pR#yLI*`)M2|ihuFUI@XQGQMKuH4wNY9;VT|8zNZvHW^aV=<%%C-I) zUpH58{ypt@aBd!o(#gP7c~^&qNtP1JSLXnl05OcPI$>R4p=B9SKFDcRV`ph{((6m43JRFtma5J7KIYvs zo;%+w>@B7~CUMbr3lFVq%!VeEBM)fkYm)7M#|Oi#-Y5P995tUo)^xJ$J)+RvXy@p^ zj{Y*$mxGxz!+~GL_De3r$G+Ci>#`?Kir2SK+eY-S!tFhvy0^VmrL(6Kp6ZCdiA=M+ zKsZRBJ@8R*_iz+BtGDd&=dhY4&riZG)Jh-@WV7I)ZtpuJ<=gmj!K~WdQJn= zk_V-BQ(h)Zu-xIvHXJGc0Nsh>7;Eyah--<$zl=`fOzhmpvANUV!(}-4BmfBNN8)_> z!e#4QP#+{|m+X3Un`<#F|Y>rycM;fdAiI_9QT?cFG;Qk zkKtup3WYV`jU@`JylbM*$wA-3{cnFLSHWeEvOapFAd1mx$9XBhdo1_zvRrGrAhTQO zqGf5wmEy3emCO5OU&p`poMdh)vJ_J|ZdUi;q;Gux0JqQf8BA)cjx^u0oV8KWW8=N} zEDpLMjGR1ozDwPIAKE|D_LjIDe@epE`$MsqOz&u%E;^Xg^qT9$ z!CDD$LGcnRtnsj|mH~e+~YcZ;Ho~?0ts8&vA6Q z&5{`qCZiq-%lOtby3wr+{{Y6HpOt>f$GuDNMy}u zKM9WjkrVQmNjNOY%QVq7X@ME3Bns1pYKP4_Ba$L8DaFx_>W&eLJLsEIc_^=vcQ1M- zv}3#$heZDT@usy*?hF;7?yFOX)jYc#HC?&jlHN1CHB^O(qNG%QH@w&Qo_@VI(KWK! zMX{3ZzJ>t`>`>Qog~ACS1Fl|MIpVB|1_OiSiRDw1+r_Q?MLotx^k8{#<6+l=%-{xBm2ZTx#}23+n; z^__TRt-pk@vC)(cb^am+!l*mT4r%TXtzIst zIFdd1D|Yu!pStZszV3V3Kqj(9F-FYL;l{e`;h;{s9bEJ4)E=DBrd0X!-DLtN3^%=% zEOGAu)2<58fi0S3dM3k!NbxvQqlvESnGFI6yfKN>UPiUxRj5BuJCDBjF3x7kwZbAk zY0C^#EeN)IZo_0opKb)_IQ}9Y*<{dC2R%Q0GYRHw%XE%hM)HL>LEttpPCe@7fEvyv zIEWd4VZ}On8Y~a?j*HEIl@_Sr4+HF*kvb{xT)Y(FKRThB-ud~ghU&GZ2$v ze2_WsE~v7+oj#%IPQG#o{H18wXz~-90}o;{8f){Wt;RE z;H|%uvuyDo#0~s$!GHCJ{WmxWp!man3d{PX-TNDlrRKIkjA&-Kk138L`Rhm88ab}u zVDybAKC85UBilPsmUl@10LTv<_(V`@S7z-Nq%>MyBvMPACsSXNm^-1x-6wjls_DxN#jLpajhpj=Bm=!mq_#9RcUHxoe;Hb*HlTpEi^&B`qeN7;GEJMB6(n%FE+HU zirPb95h4>FOHAFxW~R(HB@h_o%s39Wf)PNh27 zk2-bNBfer>>Y-2sOmWK{^WaeWWJ8(-aU|}V%6PDD0OwqHxK@l|A=vLRkE;42M;-dB ztzd|+E$@=Hb?ZjAd)@_E#hsQ_0P15pdJht;33ah2QU`}A3AK<+mdCFOMmp1y7lUmC zn$l$P<&Y!Gg0^-V&~x5t`Rke0M~3%Aa@TwDRHq&BQCxFJ9pbsH>;1GwJbl8*Ziq*a z@>`X|1=nG8LmlpZRQsV7TI(C$#SR;VKb0|u2v@t@ch!0#K_|&|$C|)=Xr`3aO@ANS z4jZZhoVQiI^g!Y~x^H+^zDOD^^ifW$5z2S_T=&s_(H#DB-=fSa;l_8rHJ2qj-tbUz z>pS;Vng0NdXupQ-rS?ID)wIO{JKm{==K6*ARR>dfZzX2p9VTLTng*jp=!z$TMiQIO z7Yt+J8NEy~{Hhp1wUvDJ3dgh@%ChYsMwC>vuIQTYr$*#;R&RWQX{_LZV~=_(p8iw2 zHG|~&D^ACE>@ba;si8x%Jb@#Uw6JiHLOq()iuDa2p72h^ebb)%f-mfYew z)5bYstiOpic9)Bs;WHR`^#$DQ{b6-#+8m3sqdK_liYOI z1nKL#tWN>vi>?XK&>;7h)wJDJ%;%@&I`uRQ5mj6#nkKQPO4kBs3_cJ&;5WaN*3>IT zmX3v5S+dfHHQN6Gi;27CpDn_*uziS<*MIDPSt%r@_jj|QOgTneIB(k|(An>i2Z0AX z@D=ptt=rjTcZm^^IerrzWj)qF*7kVt%bi5$3ewfAsJnlNpo5ng;gCkq+7d~gIOMF^ zHkXch#P7{^n`jqB3`fjmkyaEEAX4uWL*+~)SI83A^KEjIP&nZ}D$&sj%$7jMAIyHsw0kT0wq=>n#g8zPOkcYeQPPy1aLzE#dKU(0<<9tp*io0J_=M; zxNn;FUq0wJy}0DC9PmRGP*ziv^*~WcjaK);R|T4+`D&@9R!afps>@zle`p+zXyg>h zjqiFCPWUg6fxJ-mlDED5DXN;G@4UVJ*I?}?!qip;H@>T~c9CwtXCE!@s_p8}!fU`6 zbKd?DJ?X#{9bNBuD>EoT2*@~5T2t*o#s@9RImRj}D)WymQ71IZNZtvS^v85oJ*>Ah z&eJYmRkW&W^Pe;=<$ZS=6c2oOlvcYU%Vsqdn5i<903CVJ6YKG5Mni$SZt?N?_vi4hlR&tWm6 zJP^BhjMv&mdHgA~B$%PVM1<*+cnIOuH@!M(I&X9-t-#$ej%Yd`!#_k%e**;14yc;N z6OB~TbWIcg0Np9ghL=oWIn_k8a`RV&UEq)2M^t2IBB+sj9xBkt#)kyUDu_*FG;^Z1 z9nPLuCx6_Tz^e}ZrA^@p{{Y0;_Li1FhYc{H_nuT=$^QTeZP=cBrsh;v2z5uGuJQ3q z12`T$IAE_eux=BthBf7RA~<-@lC#Wpr!mvU zm~dUB85~EX<*CJXXE*P6+66N2MqPaKRV}?72cH#hP<4|hGx%4&78~CDRMRC8Iq!dj zbo1OJA_~;X#L)p=WqhDFz38{S{tgPTJrt0RD-;IzC_t6PLCcEE4eQIAmCt-sQmV7A z=(5;ZBfNU7hMV|VVyXDaXV3Jw^;yE4mhwc%(Eb$^;<|c#sK*H&i^G13vA>n!_(T=g z6#+uVcyF51g%rUBe-+z{TpN0m6*+t7*UrY!J+#d@L6v?;8dva(yQGc&Rg=)PlT6dN zg#H`e__nYQ8mmEfj){&pd(>0w!xd@X6Q9CpIi5quWd}w$RR@TWYrX!Jjj)VrJ(v2I zPI41FQ3D#L_L4EpH?$2`*6&P&?$MO5s%ELy zd?L_Js{P*Vbyu$moH?q8RTooJ7$Zj#otIUdM5YSI6!Can%N1wckZOsC@>YhjPCNZ4 zTGVKq{35WM-;W(oX%Pvn?lkB5s_ka&mKX)wE$tiHJEohR`mf@Mw7A+6PaXPTzk~iP zKGCMty~jihMCnYum+~Lc{hzkk7M3txA8-;u*&MtV^>6f-YW@z;+6I?cl3~H7m}5-; z05n3-vDkjNXYQS9@@h?TpCMJmsZ$tlpQ>eq4mPmqDQ$xz7iT+~-lu8T;=d;Kc;DZw0J z1SMdpm+4Pmo$*tWA8etj#}!zj8j}d*jssnaEDFsW`fq&JGI$|cFHE!iDg2-@o#Lqw zy70kI$^}IE&iCr8y%C&n-v0ngI*(EPofGW}B}PRKlBS0xh~>OgqCZH=(|i$_{oz$L zuPyJzaf6QaM;<%g$}+6qb-~k7yjSr(yXr$pu1o63)m@V~Psvjh^7BF66`P>d2i_2i z2;^31v{%cTi^dhu(ZwAr2!kgPAA~5{oz*q?L2E*VF=`%j>uP zRrFu#M!VSgM%dk7T*_sjcBonisYcc_Usln?-CtJN(oqgGdj$|_=DwSpDTm6s>hOWS zsqOBAnBnlO+j*m$A_x&7P|YTggxz$AIUmA#bip`QiGb!&5>#AuMKQd-TwxG*vKRXhGXB^PIdYEO?&w48+ zkzIWM07}id#yj&z068z@ZEn~cyS}G;!?e8pQsIGi{CxDP{xi4zD_c1@yMzHTzsmla z?LyVI2kvMheR3b4McGY_wUa~{0C+@VMG2i}i4#A~e+k(?l(4n2wXHc(Nauw$Q#sd6Pc2mMUu8p|s%4lFCU$8`j;5VLbkG3; zs@~G&kZ97SGGN*`AMyfeU3kI9RfDg*xyEN6e0lLg(8=N9;k=cj!_J0wdZGZ4u6w~n zH&q?glF;OaG+y5Fw^fAIOwx;0$q_^Bg(91(0;exe?07BjlJ!SKJVFD0s;9wjRV8&R zF9nzO2h|axi9kW-qdoIbA~(O33~o{2RZUiV!DEKLU)y`)gS6s|pN)mCxpAV(yWa9z zA-&?USz%4+io=qF1{Y?wb&Kx@5I7$t{BLY!vjuB~bKmVb(0(_+1&(MK9eiO24ex%I zZ!PGrhcy_yIaL57(E)VMSo^DuExpZLGpcxrl^5_|M(uM&wy}o)02?Sc#2k5OyZ3Wl z>P-+J3e`H%jR1zuQalr0*!x3t@j>9yQ*5oT7q%|Sh^veq3%W5qC0^iQtA&E|PJfkr z8QoJ!#Ndek04>!u(?Nou=gCl^a`0EkaR(2|V};^eASc?{#Pn8X^NYvZIx60z zK~%lR6gZ;Vse*J?rtyK6DWdfe?ux`BT4oN538d(r^I2A}ynvEtmtFfIjo2q7!2}Ie zot(z}&=+HS(E%i{<{lej;le%FX&^p^nvQtu=_<E2WO`ZSM(QXHiFBH11E(u zJS&2*abs^a^dg{5Fu;$(vnBQKJUD}f23pWNtrVGYl3}66#_k{0pVR%D`Od{{+3jrG z^&)JY66UxJjW|t6@UQcq#CD(Idu^{~wrK=98ccz9Xh7jkNwu0s&iU~`4Dzm#jvg{F zj1wf`Otl>O?q?Eifm{V}pz-ieCfd?41mlbk*NW{I8Qg6mN0$wK6_i=9yJw#tEhw1$ zPN4Fte&8%cL=;6SlK%i6K8pw&k{Bq$cME%>I7NA^mJx!_o?G$sSy#i3_eDS}nggFyLb01!jQpLe3gSgB(*@;KSafV|Xh! zmpZQk*XUCN!dB9>GfPQ?aS(rs|w7v{NMNv~m)JB0(?;YcG$t1po-B)i_TD z6a!q-#Urm2({w~cW`UTGR7dSd4TDmFJmRUw2NH{MWxZFXpX8T*kf`LhTWHgI|0%s?IdW z@V}sK?%V*xk);O3cRiBI{{Ut(0hWR>qnj=UFg|1$BURY#0I~0wA<>xSto!g*fZvdB z1Fk|Ml;`-%{-J+JkLCLfuWYch{{Z%z5DbC$M99}HO)4WewQZ+nwY0KxNG)*$9B7+q zKO4e%w9lQ|AtN7pKK9LP^ zIDx_|=fPRq3qS}e^hY$;PCi-hk`|Ea;gssE$tLi@HPS1(AULAfG&qcXlY|PUm@+}& za;6FN7pGLgeAPLu-l#OrC^Qkt3o|jQb3+Y$Q-CmW;I1{byP|8FPkR8Iex({>5orwq zd?$G;HZiSnaIeZ1cbzSw!eoQM6PYkheq4S~uzeg3G(opVI(e%RIHChUj1*VRAGLoiaDyt*wVmZn z)i?{l%zN+Ue?Wrkc3r?Zy8i&nPr~ef?RIv9{{Rnc{8L;SO+krq8Nt01;A4@|c1I4- zBngQWBTf4wW**nsJYH+>2y|(MJO*^lf7H+DyH3a3Z9kCgRwwAbU1@MoP6Tko=y5_? za-oRon(;`)YtMc-EU@d#Rg@o%`=_%rf%)Hw8jvc`G8kos{{U(6SmnL>AYdt!aGe%d zRjO7HRx8MYfCg*NE%>4Un4i|FwBIB!gA+eKDksCh{<){u4L839H0ZFZo)Eh4#Ya`H z@=c+|5IojsV5R`&`2NEK>Y%~?+n-(j)K*qM*zdtc{{To~%YF#gp8eF)Ij*ZiJJ?gk zpV<2OdM)mYoe((gQ?f#LP5zeyycJLBRBuqTS>qqtXMW3%4TKC3Mm#sZEBLP4cm}xe z*T$$3MSQk6C%QvO`H9V0+LnM7gTaJDE{AV@Q78Os7;sMSG;XQ0T40_h4ya28_lKHo z*JID$dk8W_rwV}I(vu!pC!6M@@S50=6YR(cSel(T?Yx_1b*04%Z}%bCL?^}qt)0_E z*V(u3HGxc*Xc8$&oE4401%6cGuM*rRkLed5%59yS>m+KAaMQs$()65$i|!_HB^V6> z5Yi+<4~Kao`5V;)>4!qGcB87a#B)X`iU7$v`|onC8BthFAPC=@bT+4|w6!wMa0L1<pI5C#Bm#S>VbpFf^hE6AGa zxP(uhD(a{;{1r4D(Hbv>96S#988JSK>$2f# zJhQG|As5zSdHW{XND?7m`f^2Q6fJC?$Uk?wU|~6@NieXYk`RiSk3{1q6%D{wHFT_V zQwPa75_+bH#Z6SpV|(66cSTd}GTb0#2LVa-!FOHH+meU|o+{DuOJ}d^!4O3GCXDEY z6-BejS+nuussI2Z+ch)+HZcWuheJ$aaNhkDrIqFyOvj!p`Ku46>@nr;tiAmA>c8pL zn0ISygm+6$9B0ZkMW*GS{<-5Y0Ex#FGT?d4pw_S(I41{k;xg$xVLDpdqx__D$IB{L z&30=mOAu*XPlp}yU7p>Ic)nxrWoaa^h^}$EFY0gUuFw3(XLXzG!>UZ`TczE&ja zou34ADxEjJDCNNUA-&ZPyM*+?3_AE7H9&qhujw5#+$U7V2vBsVnuQc74j6xKikN1F z5Z5ri;wpR}?6zy2|0FHIOLgjxcw<(jZRaxO=M`S6RB94Ey`| zujBiBUk!1uJ<%DV;ZKB2H(DNsv{o=4**Tt7U66tzd38^3cX}W-=$rsfX(z#480Sh( zaIP4gArG~EKJ=@-)M2OX+{$!5kyQH}OfRD###wKE2wAf99)1bIlikboftb}bj&Q<* z&wJv_Ht7fg*HHIyQ0KY4cU1c#DLNrw9RmZXq@iS5>}ai949X4BTRbG&xFuLk9v7hQ$`1Y-uw}% z8|l6ZG30@!sOzti*+A6q&17;;$PB&|*H3g!0?&b14dI6I#Z>a-yp*a_#Xx{U&!X$- z5%l$4YxqNbR|1arzk`J7xL<{i{#9W4DWb-zb|{V-?ogoTz3d_5{i-96y3e8*{{U>1 za^K})JNMpeK&oeZ-vwG?v5q_HnVjLDzsj+;b(N@f?8eC7P`eZUt&>dP*{3fQL`?Db z^FoJ^pU=1Lc0SN=G)}6`;mre7EZS4rBY1?~B?i==pk8syz1MriIJKsLn(OQN^+H8`sp1ultBeXp9xCgi za`oziBwoU99_Y!4&MB_=CrYH8w#-=Y{P!ehx@Q3Uf^@vN zJkWi+>2bQ05DB&Uz9-fiEu zj_Icu>%j|qS)y?6TLP{)6b`5i)?^*~V) zPeomg@l@BzWrir?IxN?=_p+SYj}<-ch>vt~--?{KxnG4Ccp*8}8CZ$K@TsTvG4aJ{ zv)=a#D^16ejP&Kb6nXrvs0?Yj3N^(MK_1)95k~O zc5mq3%VpRZV8({It%EJZfv>(8h5Xm>mc545vgr*Dp~%klPG#Awl3`g*o92Q%&lTD2 z+UTx1a#n6>9XB2dgnFZA6&%%`HOW4;16-44>U*wC6xy=$O-d#~Z1NuOQ|-*)K-LhpYl$=x2bTU-oAPt0Jkwk*n3Z_W zC^Wk@LC=DD0kIWN?_uDZBZmZB3x(`7MhT*l+G9YfP!Mp$eiL<0aDl+0CAn2uvOfx< zgL$XC3Dsf zQQ^m;W!C+}_p0qeSn6UZtveicfJGa4O?BbU7yUQv!ppJV6c7NX6Gn`=o(c2LfX3n3eqZ z@V%q>ZrN*LZo}Pst{TU5##&E9)?#wwK0aMK>f;mP$IBt(2vVq;%A>K;WUO<;!5(Oa z(PB`~dDnYABB%+Bx0=JnV_p9L04hD#`0rF55O5#7*ZjHSxpLl1hAL^vWhWFtC3~|j;p7#y;`Z9 za#Nzj1S_WeR(OQw@9?89b*|{5qXjgCBTtF(QOL)p{#FMXb>^I6yWWaR$Zj%j(q|~= zvN2!LAJBHc$vM5Zw6KdQ1+6^&*YMxdwq1#gYi#aAMbHC#!Lc}uO#z;S#pT)i0dpNe zA*97We<_Z&igBtnSOp(Y3$!k%m9cNy<{3}A}`jk=$lFG!=C&4|# zCPo#^r#;2B0x~(y_f-~WyLTMXvHEy6RoApk8Q^3>Ywb&5pA;HRNrlF3S5p!T}%R+Q1P`IQU_zwik`rtem*@$DcSf zA5F}>B(%`wz~``4gc*WN z5bC;;W|)j39o^t8{{Y?YiJS!W8xJ{`kFK^qazCy;__}1$P)rg!iTz zCjm^Vc}EPTb{5)NJ?wNAkx7cuyr&7QXjlDD{*|)ros+b7n-)c_l)a<_>(JprNPt9^ zxsSACzUGr7IS26=ejPC*sx%z@xA|I8cd^%s0-RI~Kea)vV0j_o{jx_y-10%V&OLYg zL`5SIh8lzUS#m_c8NuHLHCUsP&T;ryjpi2x8F1XGgUL;4=CxUmAMFaB$}^qUiq^ji z5k->!01@ZaXT9&L>V*hL-gn@j&`}XZ8=@Xc15d)%x$lPsu)S!Hd!E096*s*X9n}xl zsu@oFd8mxOE2f)`5p~>;9r5GGMcMl&XziAlEG(U9UEKf)ud@D?{(-i%wz9SD?7L7! znHkPoj}`nk@m4*9v)S3Q%IIyFFh1Q+*(A8*f#F$JWH7b3Nin_N$5d_2i*GmXgU&kC z3@3;ag8pN*Qqa09IP&G=xc*(Yt=|K>T|WM3*>Ljr_dtCoo`w@GFHu-p7UF1AZDm%5 zB{|n}-|bo2O%Cx?tul|FRAb#25hQe0gjx%wT%PUf0pgwue&Ipm3%cga$4wP2oZ7%%B-FQwR-Tmx!(7^O3aolOF3zug7Z2Mjku%Ar~UdreyFu8!~$+Kk5l zF(NR>1=_4^?pZQmhB#AO!*#0qBFVq)+7d{4{{X}gaK=RPBU6%ib*8y=; z{!z7UliP8_y-aW*o-hwgvtP;fKlRpjtbJPckVNp|ys%%_U%@~4U*+xYw2M1Oo3JQ| z&s1Q{4g2~mY2p+@72aFP9T5=&-EO|f1w>AWOiFINH$+paC0>Z$_sMP)QD%sm`>OjX zM6dEd)f`mAy|GpESomj>6au@IKPwR^E;xDns9W4`-#QP~!9{UO-Di?eBEg`3_YT;Ws7XX74f%lNjNM!BxJ6uKFZy@Q(s zOteh@0Eq&muFF6Jv4|2&O-G2JJZZr>tb2vifXbPJJZcSO0t^sWY7PQq!4Wx}YeUHJ z^!~5@Wxb5rS>EsAojMuMmXIn}Vg5k&uG47SM#v_Hp6j&OhJz4ByY)|O6@^fie;N#Ni~&d-=z90C*EywR*r&1bw;8B0Jgk-P;Mp%GM{C5N&O*a z0f>}rX(^UgjV0KQOX)`foZ1bPXs=h6NQUVKsvI!q5zRUM(N6@+KrKX#?5D(D!rEc(nYkMRNXCrE|-J%`fl(HSy3t|u)Hn4AVCAj@6#947%^ zA0yD8bRO^VB!B88(9@*|BJFrC(p+2%!3GbE$L=XgYHZ<+FC>{J>qTZ}p14v3;e+p5 zTUp%y03r+tjI;+{T972GJ8QO5=0O4l-y@Ej)sJPX?^-b4W$U6y0jCl{Fnhupe&*l= z7m?aUm95u5D2uhPK6?5qXI!*vgt{9dVs6qz9wZkKG~k)qZwSK+({$th7?>oGc;GRW z{{T>bq}%-G@$a>=Z~N_IpFP={Q$9Jn3`*^Nme;V`+IDMZmfBeo(=^W!%|%5~`=cy= z6)IL-H}Mo$opg=)tmjNr*L&u@a#(+V@tyKOqH$HC$q1~hy2`JLz>V-xfkPVLsXj2j zY7vY=iQ=%PYldFv$M)g=*4E(EFx^)xDK78{$8y{{X0M zJAY}kb>cyBuAe=9m+`%>)u#QM$RW}zH;pmeF3Z~)+iXKm{m>!92;UWI%ElX_bq8JV zf&fxDD?59HD=TZ=Rh6+~ab>GPkvrb&df|^WT`oE%#0bYU2)zXo(g>jHn&ym3d0;XX z_Pg`F6N^J>f_1%+cm>&S6!(LM39c?f92M!xDz2NZItAX8=GJ&1*<>DwS+o?^KzA=R z;}D$UcfU1)Cj?#q$$i!1RMuS~#{ivNHwn$|>k7@p50u7dD8LXq(wk}C`wWfzr#KN< zZ%9tMFF_>$ML{NFLi*qCHJ?hEm=c~~9JnCsunv2#1^!sbL^GbDG+ncIfE?vpwAwTV zgCO9)rMn0F9iGs(A@*()t?2NWoce{?NVBjY{{Y3K4EbrQ9qUO3E0{cnm>QlEts7*= zv;*IXiN+5PYV}>J(0xy&;0bF^CyH~eZ2KvH(t~yJ{{YIB2C^#y3Z4u2!)fGRUP@XcG@7B(>#?HK#mWN_V6EQQ8B+VhO3178kt zE449!qV8e~q<_WH$1(&|PK2vI;C0|kP9Jn*O$_^2Ml^P-D~4{0OMsJmI&1U6f7GAo z2fUx;`vY&f33vk@I#*u>ZDna;YHY0$EP(E87zW;L8Wj}Qv$yT_G$n**qW(AdZq3+i8rvHd0L(wefY+Tc9D|M}HLY_1 z4ZGpT0hT;AoJTwD#Zrnc3fKZ0a;R?Q!Rk$2s(m>hJ0sZ{&MLr+k)@Ky2VS zd8hVQTN;9SuFKe4WCO4(vs<^by714%f2bDHL<#p+gStmqPLOv*+QgvaW<+I|!n3pm zvzl$bLW!>g)Xx6^3GWyT&L}tmQ(g#`o_^}Is;p68b#p?{&)c7Zqnr0(uT<+f=dT1F z=K#fV_HHB^Q^Oi7p~MtH%P%wwpm9R^eMpTu)qN?i91sL@-bme{Led;SDEIxg4(g`t zgIR=LH_I!Wo4r%sOQP-&m<6ndP>OMYptBNcU~k<4fu9U_?yW5$#~{!N z9BLJvztp#D7|Z7MPLrIk>0ZNsuvj_)i@5&)?FOJ^IcXt1g3W^T3~t3@qysofX`C~R z6`L=+?hR{*x=FeVoan7HaS@ET;V`W`8ECs5#6V*b}Z`ip|jm}N$Z@~#(+jacCNu=+Iusa<_D8zTRNJ=p81OLyCl@F`k(z3 z{+9P|?3Qo^>(^VCq~d)LpS0pB;l8QAZFk^~F@mSMA|saY&z&l{ez&~SY0-5?oYc)@ zd-XukXDYoDWWqCg4IvE9gJlDN6=Zbl^x}iK9nMP6v-XR3hS=D>R$?xLB#fg94nC30BIgFWk@FEaPC4ORD6iTUz`G(VR0!#Cl

tJs@Ku@*9Q+ir2D#BT2qc)uCchDqE)AIy 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

=mh2V>3fguB&pG!BAVaJ){nqbZ@{{TyL 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

{6pyXL(U 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ν4JL^SLkg5YW3mA+xV; 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

    sAznrpPRb@M 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࡭Mw$fic zXcz!I`H!MI_?7fm@=>AS2Fl3ac1a7w`%l4Ig&voJM_Ws5y7^^-^{jgUlv)_LDEFc? zKfh_-Yq2L1w6N&utXq^CA)Han2Tb@p5+d=h?%QT-81r}Bmw4sA!ZL<@gN`IgVh16i z$z-gM>JJau4=X6^?EzSq_CzIcAVuw(*y4Z*71jdteGi1MB|cwibsFoP80K$&vMCO3 z{YJwm@lW?d6eO%^wT2W<+Ivk5w7}P&19*7ukEz90*CY|z$l{0ZqS4k0s_t-5176Q1 zTt_3UvU2QCqP*9>A-?rTc5BVr%@gsS*+-rZBQLKX{&8TTVQu*I`PtoxhR+S36L$Q1 zkz!-FG$*rE_8JF2Gdu-F6LY2_ozrTnI<`CtiD4dRZhASmq)NT_FuVhbER*`3Yq|}9 z&lM<@oz7U?7I-9k?0#U4lihDSmYHfwLjSgSMzR{fUm!Op#zJ%J=1BUM=dcd9eqF1h z_<5?J<1>OyPJDXbgWj#A*twkkgVWe7RMY;&z2Xu$Sg4wZ`QSwabDCI&O3Jzv>-Ddn zHng|q>EcCXQtj#A$hi9pzN%;(ggZ#7ICLL8TcNE;d@lV@&Pec9c!YgaHup3e{?)Yw z2FRco#SqEQGl^K2^CLcK#G1d@=M%T#6?0c@nHSj$a<^;nX*FG(p3!BdC^6O#=Qql{FIuvLEpNm&7Js`K>Fde-dYweYq+yn|nZ5C;6l|E+ery~0S5?=T$Kh7pY znD&>mWjFJIhB;f^L+`QXDq^wjQll7Xqf5{73=lXx!rqAmlcbAQ-kYP9suID{4q6@r z6O?IBZmXXel2lm{%kBjmQRf>=%FX4A74Qb3A89Gl*7TW~00N1<|XL3_kSbuQ6Q2D-n8ngRXM@&a7n;#23OEo(u$&G-{U+?1yM6O;{p=oen`?j z{*}nl=--Etwcaoh6j#O8KgDjr}PUrMT@9g$;8XXVYWJ ze)U7?Z$MP5zEJkY)3;oYj*iCxe0i5}=dv||RVVdkw(@L$b~q58xq3#U#$P|7KVWqc zjr)y}{gs%foDayKX5tvuT^a`$hkhjlsQhGD4jCL&x)bdYZb(dRs|&aH&&>5T`7IfE zVZ`fr43t~e#(y^_`3JB|F`3JUq_+`M!n7w~y?p~X{dc|wzN`tW?!B468~?ug$6pfM zu4Yt8rqhpB$~Dw)`f>Dga_-MrF;neA6{v$49XLXuMkIH#uI=S)u8xX#Q;Q4LoB5@u zCVxv~3YB|>+*t`-n|2N3ANn5%z58^Z^HCt{v>4UYZM}@(MSpZ_VItJTaEKxha`n%L zdZVF)K*zTs^notPVQrG*@q=CWUPejPxDD8NBUxsDJ(D6ZB|;ydjH3dl->H58xqD; z+g(j+MxVfNs6{Zb=d7GFseb_Z4ypiKGrmN-Y8 zX;x#X4OA4Aj3%r~mpNyAr#p^gBueWjap=_fOtQzyV=x$=4qDh(L|*^V9!pWSo+-jp z!Kw$|&M977C_ce}OSj9B)Yq~9M8)ToZGvfzqfu{vysaV_av}l2bwvg$ zIsR6eR&|juzHGDCbD_lF&a$&mJZ1}eJ!)kx^y#q}b5H_F9Q3R@jsHdFD8VI8B*fU8 zM*PI8_kaV{npfx{OE6C!H^~JO0%Xpz`0_NT5>2sF#_;{P`%)aqpMB&C^O2(zg-~N?KtB zjrnF02T(m23T+L|xrjy|7OVxL_kLt@?C9m@;oho}P8su{2v2KFEwvY$uMh)jPipi& z%+L8jpC$>4RWKhGqo?7fJxOl&?`S@(pR2UMX{jr5n0m*RR_hm#XQ``tVUS2#B^8$# zECgmt1S>dC5fn;i@S6J1(5wecSPy{SW=>d~6^;cOF)t8b^1%j9%8i8PMyop%zt*6M zJ3clXbNZ%0cQqTwg#PgDcg!wN)@>|Rr2b1QMnHDmPtShzTPHmh1`*v=!yqXX&xPig zMi@bdZdm41nN!3-`30Q)?A5Q78-w5Jcc0w}zO3Ixic#-YJ+eA_`ZN08OTBH<&%aJp zqZ2<77V6IO1uMKSf(CDF-ui4aaiz!#{6GW09D3YCr=0n=kcH%|TOBdw3zkP4TlIJ3p$W00 z)+Zs^3QmM#Iy5>S$|>Q+wI327@p?djy#knL#g~3C=hd

    r|lTBnxZZTQx_a$=2F-an3bYM=$+*h0b77QfLUwC0Y}k#I#Fc;bFD1ObsTeJgl_V}mRw9Uv3&=-%JOHM|o>@7U zt&g$1F)sACBZ5mN2r(nG&(EAhN++VwP~hfh_{olLphF`73)vZ+mLf#LZbKk&k@PC9 z0&9_N3QA9h##oRh9IACFhpqX^^ixZSIlAY6!HfcrCu`o}k6c0ou*EPm`PK1@fD5>w zT_vB^6hgK93H%>9vnNoHD#hw7hTX=U07MxI%CP1r_`{W5qo&h`%nZkSJ4gf#)uvNu z&J-aMh>m;+PO^Z5vbD_pdrXFu)Yhx<6H`wnQ1a+wio|*{qPJtfXCR?{! zun8#LfQ!RNBH(YAOdwSnlGQg``J;L=z0BLO^Lv zrA0h(GWf?l+H)cRs=NtUFB<9)Eh~^xyO=FWI!<+|zKJxpY_2!Q>VyDtI#vGeaT$pX zI7Nlb=!^w4gfRaARj~QVa2|4`iglZr5!N(oK?|=#T**470>WAld_^_s)(U|qgGY&( zca!Nam5&en{_{#a=yb2~k88p+M+r}}el>!?3l42i!wYTm&KLsLh9Wup{bq;p`k&+b z#XPL4$gr(F`7!J1h=vwYkSd8zbqmHo^qVP}gv?}w;$cy`RY!By%XfKat8qXXhD!)= z0Hr|h5{mW>E*xoPfYP)z;<%Za2wfzUFH*3^v>lL2l7gB3Xo*KUxJG1v>9bvtL8g3tfC)ZNS=LgB4@|f_lyU+^L_sSd3*8y0An9l zjR7q1AdxtS_yIUD`f)f#xemEV1?+a zKoXG>NMKNDLDlb{NuM<96$tS?{KWia)8yl_B=t+5d=#M4D%mzexQLsC6OvU;Z7nT& za`PAKjTm1MK6fN`gw6BZ2FXoYQbeFcT)M}Vm6Xd2?!*yP@m%1=B?tir9k}tod`f2W zzprKfw~~hFJ7|c{jj`R60**k*Iy7kB0$Ico^_6mO36VLO!4fi!Ylo@MEhK{pgM@NJ z%;ctsOfpU`Ks&oma^WxJo=1Qu#zAh-l@=m|A1&*dh}N(sv^*dKVQGvOt)ONAgc)Tq zI4uKRD|`VY2xCgsn3V)d$WUmNbc6C_F;GQ-wuCX_j83vFJy?mAYU7}+qDllwh=qU{ zF0}j3dQUkvM0qu_f{Yuosv$zO9E6xnmWnbmSpwq6wKeL8*zO)n<#aL<^k(++tk>1S@H&xz}95kWiAZLzBrCIxWK@(il!W zzI(t@U#qkjgKDic&qOvL6bc4wl)eU9Q2wO>K2C`K`(2@!u zwpkH5chY$qFH+Sk=Ohc4turcbm)?2GiMVCbw&~xe?;$4vvUMaJ0#O3V5=MAutP&&*4Tw-EnN<!l4Eu@9R_)>WsmeHJE4^zq96 z<`G|FB=AuMM*V#!E_67ci}4KDECT=*((DdIq6NH6q%Gj&0Hli4u{6i$AtAKzb~`0JKUg9Z z?1R({cwBG85f%B+1Mc*>)!2@ZcPdf`H`ydHC^+ z;A6V*sI}w;f+%7PB2!v~qtin*=`-u*&WUCr3$ma@4}lFp1b~vt7%m7BOcc(*K%@dn znwU@=Fn4oUf@n_US!aQLZ-yd5rklmAT63{*`-x%p6I+o^ic6Bbh_x$BY^h(y<67+E0z3ATA*H-5Zb@iM)cwd^D92q*@%aO>-Ut zY7pr)N+?zp+;e`ovtBiTu3qlC@^$lxR_nzx;y(9~XSnpgX#M1;RWg}LP@$4 zpT%N<38GYr4H(@wqk;PGD4dfPLsBNkhmGTf z%n^o&M3lcHoRt-Oc@#n#h_8GlTv#U~WE6$`sgQIwGox7|T@Ys*jOl_4o(3hA+e}Xw z3%)cPhG`NBF~{zb*aL`2Be6K@42HG403#~t7`PcDg7Dn_O>Y=kAQj8_AXv$#Ay1^< zK_rYJ9KcQzs>q3w%6;33b;Mwxz(SM?2hUgQ&$jI>FC9~c# z?1^?inNK(m3$iv+K?i3tw}jk0MUoDfG8PcVrseMKFd-|{Z1zmQT_Pmg~O3h4~f?^!q(2vA|<9Lq(ri$Fmn6v(n#K|Q&4>m(w0*hGI8 zP}Srd5GXiJc9~|Gd`%dmVcsq>EgH+c{ z`e9Q&PqY|+hXBbtRcw1Cae<|Rg{BDF&`FEVBsyo&i7zia%;T@Rzc%~-`C8}4X9U<;T3xmTcaRRD9|867;4pXk_Z&7l^|c1PsT)G29t*d7<096 zgh@1%0q1Tj8Z5#kG{9kD6!yZefjYuW|0jB7+qlp5S>Uq zZ(BwiG(IMPy!jXS4h-&L5TZlfG%x~TCA@+Wd68;euQM9d|!p%q#vwq(~TnGpP(HOMCTh) z@$Vn6=!-L(EdUNzM&k7y;Gi@Zmd;o76ZavzbHOU(lFlX)FJUaW&s3Rr1sFn134|Qr9lZx4P}ktKq{6k|4Raws%=3|Y zU;uE~Kw_i4bCE%LC}@M>JkL{*g{K9x?i>CScR#A6HjNnU7s?4*j4b_404@#XUq-wO+3hYJ-3<@N4S}_tLw#5jCEkImR z3&{JOB5u{B7RY*QCd#t5;UzZfxy$OE^-9G+0HL@ELzXZt5D*)o8nFWJ7Yr2+5STO& zH_F5E;n6h3w5@PZW9P>|fG|s58Uk-@ZGosQ-2#%(zA#x$Qmic&ZfXZAbSRIi0E9&B z!rDLv#uQkH;yHJKI#a?SNiCzWf+8o9fwZ(0CBeEy2!!I1Hg(NfRYD9jaw&*-w^wXR z5JPzTbZsDoET+2m!b&Qn#4KuGM7LYTPOM&?0V?Ny`LFp43CSJF`!Hf?B6W%=o{vh( zQH?P{6dT&-(;(1iSJt#O)&93;5?O3^)b;1&0Ee<0-`{?CZNp@E{73hd*pbR1_JoPn z5z+y{E1TyP%qSjM;=X<`6+y-9;=E+x78~bM>2A(rBNBJw?Y=z>>#V3~p2^(#XTCX1 z97RHR>RyZy!@b0n0#67mE23Wcm2;YFYDJ{h#3EuEnYe7BSXfFFBw5r=gcv#*w0GIk z*KLu+##5&c3SNMZK3(G@wJ zxNJ2IAb5pM(m=eLNLdh*vD?MUVgRE^)=E4Z@VCw`7%mIlRXZ!Q#tJpDVIo=@ih5TV z0!a;I3t&`>wt zB23kZK(3&u;3Jkdjx5KrsEVCet@>cpK-rYF zo&0(Ia=#FZOxy^id9$(@-0&s#uBV;IvQgr@eeeNR6 zhpiF_xHNg1tglEUfx~+6uO28!I9}~h1$Dk+YPS&bFGQfSeLke#tP=I}k2yOHho+_L z9e098_yBzGBcU>nX{7_V_{5onVR8x3Z51&%l^fo;+e6MI)gXywfvJ?p1d}aXS5WDN z4vqS9@9+=_*fF_?_Q6pEpi7;F+?XK}?iOV#vs{z-%0z*R35|MOHR*~4o3Q%Wmq~*A zY<3_U>k{k>m5YxsW(YV@^^C`PO^BepUQ;IFzLyM z1O!=W@Ch#;gkYi|QKTD~pD}~Ajb6^uHy&r_0?^zu2y9nJe{>nJ*7U;g(yiSB+PfOL(bflG77eFR(-sT%fWpA09*Za zg#e_Igc`4)d$`C|N=_NF2AvamCDYWXX(N}D6)X*&f2K_Uq>jdr+lHEV#w5aaWFRJ^ z_( zgqB4(w$#V#j37)306Q2H7}F9kI{Q3xgoJt?cg_&Jy7s~~QNLN@e*9y6aj!m~b(_|b zJ_ctAu)J zulNgy96`4d0i|g%$9Ffz*g{VcamvygR;P&KgaIQV9<{itmx`I4A*t1=S1OWQ19zSe zrrS?MGJ9j}1rbt>y_i8)p@@<4bN9{~NU-S#EeY*|poy7@(=QSF{hTE*P#d2w7rdxr zMQ`SGd(Xj%f&`QKl@9yG^ZOkGOdf+g;HDrvu213N>^{SjGZEYVv9Ks)Swy!!b%m@g zM5+ue4EYW5m!J%gvX;ow5j)P#syKnFc%dbHXU!@RspOnV&x_u-k>Xe+mvQiu&sxY5QV2m~=B1tZ;}3r%LTUuTNeV6)K;ZJTz@)bn zh{QsKK}vuYNEz!HJmiu*BuJH>NTLiRwI);`L-bl8=OKm+5f<(Uz&KF~lb20$BVsJv z+EEe+6$mFE1d>UdDyQR9za(a!W-vmvO-&pm7@a#>!44s$pJp(nKuXUQ2amk8yZ}-G zFeWPVQAOZvRX~uEa6u77&0*nk5i$%QaB#)~04U&U%iA_pqUN+oF6i~%T3qazh?$)O zB6x9vNhEj@qClY?VMoM?6(q7H-U(d%sH>=GTiiJ}mckO<0sKG4Pn#7Gott4*zKsZYnk!sE4zF1ZkeHuxWM^MHV;&=j4wexhJOh+0%HGt=edC~kB@=xI zHo~Z0-eNjC#j%B!9Uu|7zd0BJQRdsLdfx3E5=XQ;m~4+t@%qODqOwzjcvDCDkr+bE zgo+<=23@Qq!htN6k{Bbh?U~b|X4Tvk#*G~??&3ybab!WIj?|M!%zE=V?C>S9km42D z{jsf`Xcj_V$GCY2t)`DSYnZTui=9nYIT1RCNVF-Ksh;6cf!CN8U6nIa6C9IxkQh&3 zZN|XSsC>AjfWU?XD`NoDfo#Z_?9r4MF?o}lUZfuvA#uR`YiIJqNwlQ;E<l&w^GesC@IKh;hI?ZfB%$l;<{iN0%*@%zQt<@)3|H6_1m7T+*^`|FFi zKb%X>u6=dZazw)t_nR+$@w~gZh>0iu@sl06!&BeirWFUTx8GcRSN!^5$9CvD_x}Jg zoOA8#;m-{rh~`7)96=TysVT%59*%6-nqNT_@6B)?Py{J$d4Ga(RyRk9K;J>%zFf{# zA_5JSU&{(5$bCLf-mo%<4*qI=FTHmnIYQFWY_656_@x7jB#0j?C^0A{JyK*!1fSS^ z-D|msQHdl5SoOOr(TchQ!gS+vj$IKVSUkmL2(1W=b|GfTb&!@K&_u;+`M~gs_GYXI zdic$SU0$tB81p!Y;%GfJ6BYA{xlwt*jsxnZ-;kpLpBVi`8 zsGA5~0Phlr)MNzsJ|_LPoMx?wA(9UK#^-oLd2&P}PM-2Ef(RWaP5P|>`h>~EN_HZV3 zTZ}U&5)$)L;*xBL)oBb53w|@1C^^O0iJ_-vOmtHT)q}8s?s4FGS(%|6(wRRQ1N+dG z3uuT&z(ocFw&K-5M*&b-F|l2xs%I($cA%p#+|3anw{`5oUP(yG;I9n;>5v%)1c{&r z0jw*dq0T450lZTwIpT%YCqJ>OR|~i!SyrOhvo-{LnzBrt{17<>&#KR+BAi-cyOz!| zyU-osDb%2?1o4_`1%fJ}qKhvIrDtd^2!rTr+=$0Y$eC-MSC)9?~3j+HFP!NvPzbzB8$Ioz6Bx; zMi+@fVtIoJO0Xo6TZSjpZ&R$;*#tEDoAv6}*ATg{tj`4dSW1Yk` zQ^rWUD`21|OW-JnSxJW;0N}h#TV5(L%jaQJy*ULj!ZLa~yab99y;$vDz{5gI=5>1Y zD|+5X1$30sNoWGp&u+Go!cG&gldUjBg<66F3q+#j3ju}&Y6sF-odaq&5rm2jdFFZk zKFli%%Ut_^nHg2hJHo6y-+f2j<(v2;tVBpzd*_}$`qm^*vQ}bqa(D;E=eh6w#gB4d z-|r1w>qPwI-U;`rzrUQB!wKNtJOCdr?=I?e_~NJd%Qi>v*Ccf=6~8z8#vKyP@#epI zA|JlL<{|t&`EW@x{{UGvem-*TGNSLuKF1ht5+vv)lgfsxtS!|1OQA%Jep<*eEy#_= z;KCY!#vGrCzF0Or8?+Z#OhuaO7_V^tOm^AZ7sP;gZjn# zP>1xoG-B3)I_9c&?q_Zwok5F~6QZHF+gNdCmI3LK`A#(gjzm>6_<8t&7Ql!t4Wc2ydFF5dsWw6y3_2c2C!9fR zl~22b)zgD_BvqHd9e+k4C`Sx9QCub;Or8vz%)O+SrV1HO#kLpkVdo-(u_BE~C=T8Q zacbz7Q#z7CNwSK_BxG5B$&|Bj62OLRBShMMx}(7`qtA;8lxct=1$X zbu3kT%yhXo3uM{oqan-0K&TV|#{d8)N4BtjE#IC#^MDLPRXXq2p83Y2#a9rJn+|_H zVbj7kI2G3%8{;gA0oe)XOEKr$1rn;Sxhf(EQ;5aF&`Pn`o@4EXG}3}z{V4C#tQC^r zlMGL1##~HvsO8=I=Heu6%FjysIS6gg-_&=+6Lcowg5RBCqh)+RBP`tOevZOQA0Bi>%vv@@Xte`cqc60Nd7L_JY zf_6UXSO6rJWCvl{v7899CdD=ex+mY93=Kcp+b>gHciGSzeuJlj&KH-AHX~=t)x#qM zk6LJSH!^pDF{C9(gV7!$dhy48Wq1(6JGf7SSa*kNL^Llyo>Ejyhyz2ZTw#`JAPW0_JI=j~zalM)kVBn&Rd?FlV+K2tG-n?A}js719xP>FtA8#|e-L z`NEj835{rtOMo!ho*n-HJ~0)N6C)vYFf|F;fQ|Hphk}}$ikt5gp(e^ynhUtx`+CaA zM3Vxp0VZxis==t!=_EI;V+ahsTbU`B+?3H6Foino3R8$v zYHl#G&|AAtQ5v<9h-IzDA!JP37QsK)fiEJ6fR5^VJM*L^6k0d7QesW=o*YTZQwdX~ zB!*nVUV6^eJ%=D604^VhsK-yVoNzT@dFG;UI|2xi?gDnzc8urqlLsi1A#m2R2UU>8 z!`uc!s5f{@J@h~u((QFO-Z2-WR$nTQ9)h@8(*!9?0Ctd1Dm9cy6IRlsBO(ES!r&@H zo$|oHT?T z!4o?iYy6p#(I@lBheH=Pj9x9pNF@+&pN3CN@ZCi8WWxX%jGHlFO079i_RUY=q`)+< zM-EHoG)kj$(bQUDD}%vR0uz=90-OtCt`El&Rzj&GX{p+xnk6aJWPnQoO#c99@57rO z3NHXuX8a7WQL$EiFvcxT;OuZUI{e~EwE|M1MvvxaD|b&fsgRknlM6%;nOj3s&#(1N z3HBiLewpHTmNQ1eIvNFbWK!}fAR+k?9NT;)V@~xK_w$btbu84rIO~q* zc@J9LAAxJ<7?81X6 z%mjfKG4%1-jw!|898MGhl(Oq1MNzPVlAVzPb*zZ9Au_~7Hd1p!A^Z)YAftd>B15)Q zOjBXP_P_$0`6Tx@*8u|zSH%#?<6Yp0oAXptAd){=6pvUKh4j1%2gnoPViA72z)J$v z*D&{d?xzS5(9IcXgG_Ea%8OZ$+^mx)e{^Ln3)gO(Pn?gKQzDO_Gw6I~_id!F$Lsxa z)oyAX$;b7Z^KChlSM{8HE^$XZ@V)0$Os+tvpH{P*K~r{-{iaFH5y)5sOK%FBtY>+F zC5_SRZ_e#C8W$m2orcC>-PSrcqaiE;j%=6+!}!Dpot1u)Kt$|lLlStJ)Ymb}L?Li5 z)@ka6>fWZVFoJdgQfdTBSYe9Xj&-1e8~q|>{l;5ZN@Z6@*6ZBLChhI7SQ+1(MdQoY zA4Vs)0G3D{5i#T4T8PpUf&w6mc{ZVB1qItFE8HQCJt8BI6`l@ph82+a3{Sp$c=SA%M1gMB}6krIlHE7%D?gPk7`}C{32wNKDfLQ0hT^ zyPSJ!2KB6&yX50?Xx2d~i&3k8H~YdmZ9YEu*0+%Z-(P=tNUUF<=d%VYUfl9bvy9B$ zyYe47z-@n=CKH@X)34_T)ckz+fHs<_pS@z*WrKNXn_&CaK(ti*dSF-7JWOProejD% zQC${muQ(5f@2P_p@n1Y%ZLW9zc)W&z?%(GnCHr&tudZ-t=hOT4%78Gd(o`Kmj{zhF z#V5A*3lfqOT@sN*6*+FTVB1)>J_PN_v{?qCUl&4tjAjB-h2g(3T)h#R3v_NmDhU$r zj~S)YJ*&u$oy+3|iL02fLIbl!{9bv5yey6#YqwE=LZo-wgVJyY1P00cyhq(#n4C5X zv~lAGqhzUrzt3D`L0K8=(5E4+Kqds`XlR}$6E_4T;R;L)gazI6{KRvbYbgkk*6wHX z#u%ar1i%ZPx%3l&V~CMxBUH{0G?f%sT7d33JZu9YQG*r|)In0w>ZjU#5_jfp87a%{1Hqugirf%Ac)m8y$*irGqx9=6yEh2ne@pqu1oA*q68Q9< zo#V>NK%v{{sr9%S;2>9U#Xj8R<5i!C{{XMfA(*AwgTS4Wh@iv8O)6cS@cGD5Q(-KM z5I6E^$H-c;{zBxWGc{Aw!wkK}=F|zoE#Ob%*BmWDt`q7)jx~ayQ8&ISb@|B5NPyit zQ_oo>BLxP*gi{*+_AZqk#C*w-MWWbq72S%lR+s@R(2dW>8EWc2j%iFjkdiFe0u;u)YZgTDQy%F}o8AryT97xX?*<7j zs6LSz*S=eOA`rjJvaXVGRawP z0-+uw+X~Eyy{se5$Ie3bBwaWj@M6?L=;&WSZz?4zZpmZlS#ch6BLWkx>gd|V>E{C~ zQFc?JQ9zQnfs$b61o1Mo@^L~!AzI^S=&8Ke&9GtZLkNgf>L6_B&P5Rlwu(`t5(*^D zA%G<)?XJaonZdMgts) zuRDy9B*BR`m?B{kd9mtd%uy&7yc%N%-_fVM(r$5NOfNkxjhDU8HgI)N5CY z_@iw?$FZbD#YE*AmXJ0Bu>x8nc;T#L3=ZX%w+$srp&mTFPvfp|oS(Nn)EoqEUYJU3V$ZLO3jQ*3y$4`$r zA|dxYYw!7l(;oeIC!QRQweKzr^XFKP6W#F5;s8OObu4WZAZoiGu^l+zNY)4c*7lO*YeHIWr5 zM^>nWn4e!qlm$H@8XhBe=Y0}0gBSdLtYJ~?7pH%{V33RM390FLVF=My@y3qAvB9>%>1CWH~r zR1>XrfC5#s@##`>Pho^PEJKhD+}5~!YGmHkxNKA_+r8V9CO~!pK?%7Olg(tNV%cyz zOS|1gxYk8t2E5G{%BS;?@PNuU`&p8mktee0#Qy-ExYkZr5le>M!541%>s*TG zM^`l*c&f>O1R$lt56|Nu;UPeh@J}7h<;2YLehZVizycCpU816A&T$&>ItdCT;Icm0 zCo91$3&Xg!;_kCqg>6M77Aunysc>R~=wx#b3`qit%WjiWTR`C24t!9_b3A2JI6^|? z%Iu7k<5dwZ6r@zaE;}jlTnZo|AQ?fyDD(|gg>ML(qFcdYyE=~*HzTkJm_}V_Z}LZ@ zORAG&LFEchY=E<6gPthszHky)6Y85TpI$I4#8CGeikR>IibV-Xv~^zdGbix^0^ZZx zI_sU_KvO|A1MjcS@*BCMhM&5`3-UyVv&U9{jI9pCBm8Z6GG$o`KpNxLe05mJf6Z@~ zPM+@?wIKV2_vwzzlcfYMr;6S|NC1VdN?vC-1cV7{q~m?R8N?C{#i>s_h+ht^mZWEC zLhWcsmT1!$%%F^|Dlr`sB$jSDy#>IUgT$h!Wb=!#-LOuCc$6!a3(tq1%@$A&lkgoN zqouq+Mu;sgWyn;^AOl2%kPuWl+f##R&uh_v;nysmt5Jc~1RxV1wk=4KTKrWp&c!%z zA`1tw9tpU(S#BJf^fgFwAPH@_bT}qK0w{<=bv)fInmNuScwN8a`-~5eyYM7R!Yq$e zghd3kUG0l=0O~bHK5&F2ED~IYnzb5X$%U!1)S?#%L})J{05yS8Y?up3+yw6{3+i&q z{{RbDA9%>2p!Mi{>l>T2r4sx`5pUdMjp1{m0sHyHy-9EOVL!LG`H2I{u4nK3-b8!& z*Wc#>{qOng>#T`<4!yn4);n`Y-@V}?UB7C05Bc(99KVY3NKOltm*Ufqs|CT z`N{|#Oy49{TFMmxh{!?)=S;Vh{Gj8js|_x5DE?3l0IWb$zY|b0RL(&+6wxHlxNyof zj6G1JhGyFkP(eKqh;bwVKo&r_sfEc5X_n$Uq-0twkjLA~Humu@ zPf_funZd}a)@qJl9N)0PF=!OHO{u}}mB7-d2<>n*FENb42MZ~?M+;}3({CH{q&bjs z^gcI2V2qfQLWxYu{F1j~^Qgi+?xglIE=H)7G?;q-0GV1cI{>Ci?*1^*iKJw=s($o( zVz3|{NNj6!>+3lvoCe59O#08hI)K4vRA-jQF;Jl~fB;W!rsUgHBot0$@OC2s! zHp@lf)=7|eaRs7^Lwj+QPB{r*Sf1m&K`JKa%5}c=@{mYr5~zg%EkA?*Z;NhXtAw3tJb2gYCG8{+199Dk{3fP9`V)^bP#*&9O@)$`X|z(fHH3Y+x$t~Rr`0^py?;I8I4LPB@6!j0iro80-QiY8aGz9h*GBSsCAR~?Z_x9I9Q)tLpC36Y zu2-lv>x}~dX`2V0{J*S#s6GH2=6Td0VXtECB7|F=YNa5omne}`im&B@2b7Dz+mO4F z&V+(S%Y|2xb1WNR{2JQ?kWNO7HL@vdXr>i0luA&z2_-3(oC2eeXr*Dn6eJ=C005w* zRgM7CrbuvvNVrNut+bXY=QJ{>BE-Ut9d+b!M}427jsABGVcSwYh-~SQ5{3bGB4C|r zaXUIe$&&?1y;02@oHk%+kT;7-pr?eyj$wu#rZ2RZ9_Dp2`qGXcaQ9j>)TgS$_^_@>z{xP?8UHzW@ za7ag+^qM`f;C=Aq3lIG9_xF=KH>o-rwi{EAdfPwULra4m1rtcFmxxg@NZM^Jt;bBb z=;@gN>ZFQ$vwT?!Tw>i9wRWP3_it9jHLWPl*0EZb;+IPgev?czJNpC$IV6Jyg~p0y-BO zrQq%O#c{Y|ro=+2BA$_*Da*Ej3uew+lj_DHZF4Om778UMGMJ`bgPdG6kR;OwK`@L024EE3$2@?b^o_By7%0rVX7EZ( z+Lf{?HZmlht!qS{8zl9R&O>U03{)lvjLOaysi%}Eq^PNfuSpIn3PMG>Y9G^+C15p_ zR7-A9?F>c$ijrqn$r8j<6~<{LC7>|ZDP2|Q*`1UD|4Hz^zrTCf6SUI z5a>bl@qU;TG&2!0`Tg%%(z@llPbT@v6d>Ag@yzpIIZz-_Vzk@smFYmJmV}Y##`9uM ziI_`Hqa6+%nwBT);|^}<;K%Inym`S=2M{wKmHTm%T6mR$IcllqP2Ne0Y8nfoVo1$5 z;xVF%5+Z9@O%scS;k4ld(5me|Tsfj9UV?yUtsy6c%Rmxol}Sc+&k}2y#ZET44X|lL z8r2vHA?2eYCL|c2D^oN`gu4Z##SvU>SeeZDf+M3;oEr7gQ>YUYthFzZVkdKk+E&HI zd>x|$tQzY`TbM*Zjl}GTFzJrEVDWwxufCc~BEdM(4msZkXIfrW2S`R;H?IDZe`IKlO|{@=}QCba(j zvzLyrI4ds$J(VAyyySL=$$HjV_xOJIiYkANzdU;SXEG8-nZYzq;wKRi51l`LnZEq} z{{Vj&mH82=@A$xa1$On@ocXK=tMU2I2I@MF`!mtwdi(NZw3iw_ z{_~9JWJ4tNmmIR$!<%5$Eh=+JGS}GjRdF zbDXP*K*a7E${o)(BS%8+tK%dTXBe5@t-d+OD5;82YkGR>^L&IfevqhCj$BSP27tD) z6VE4%2rWT$C?s1m5|>5?aR^j|)DuE@zTPmcyTOq-cf|77E)EP?+7#aIcL`cfp9x8R zb6vzzpB))1tjaZlP6U!md1CpPqy(nH*Z0|ca1qD8*X_wU(@|#Hpw=CEdBF@ zc&_zPzaLj5Adnb`yNCyRoG!=tJA-bM_|+|28lFX@e2qZ_%?>PGqX&c@q^#p%~L*nzPO z6p1?x} zi^_;b5;%YIL1H% zcyVVFAwr$XCz1mV!`dX$QxkG2Ou%5oEpl#1O}LsIo=hZIUKA8O4)~vpfe`>9$;0x* z=#*^=poj42<0Mi|4?MRtLv_-2^EaSphDKd|+K@D`p-)2Yd~X>*sXHU%`^Y#Uc=O$% zny(oSfZq>7^z(Yk^#;p6-N(}>31W0=-aoDDTf;$Y<3qCPutqbxPU;Vi6YS1NI1)_R z_xX&5Q^hFb?0osid_)wgB~`!g6fi;nm^4pW7`fd0VW3!qaeYSQtG-)+#cM9#xaBT(XNhgACyUb|C5r zqU#KrCdvSa=?#w|n=GE7k}-F?zVQSFKfo?v3Q9u|U?`d1YYc@UqDo!XH7DGX7n!Yb z!{v%VkUN8>yDN~L;2*Qjm|h9@q=eQpC;~|>q@ycc*{7VD!@vt@T-XL0i%|anJtGxF z?WoYanM<;1`Tg~a*gvIKb>M34xC2u4afKQQT<@K=X2xn8B;38uk!u=a#kmf zT>gDCQxoD&@O%7EoEEh{n7j1H^T)0WzdkdBc02a!CmsV{HywTF8GFBYtgG?w^~in~ z=g9tWCy$TQ{^abRPfk8DwhevwaqI_^?z+a3#}j{N+dD?kYJ2tg#$F)xpK8c&e>(pF zBdib=N(*fN06*?Pn6fml$6>pPW1-awA`0$}!3pbR+^%FB%5*t`<|7BWP0OfE%D_;` zgwQ5)8%hNVS1b%!A(wsi zZ0N3jIO71jXP;*Ens8*~ZGykG@sZ#pf}$S?=m!&8TZVVyYTt2R?~HK&C0JY=%gnv{5B-y4K353xGH z035S#8W@N-$BYXQN=o%{A2|kuM~?It5u?{5MhqfEolGGG?yNJF0<6$Vonc14PvX~0xvB36AmY7RNQ5M98> z0r>2^jF~WjX$WN5J}TxifNLlh0~O>CIRv&6pOk+0oD@^Nkkf2i0o?j$5l|2_x7qMY zUgdFkDU({Nj{g9T4x_a}L~MO5kMj}AoXLLPKHT6#W95&JIS5&NI-b+_VTLqKgFEir zc>G{cu9Z!`2mJDmO~ar=+?&_8ROX?}WT^MWwRg;@sOtflhCue{vJsGHTvj3p zhb)D_ARzMM0C2)%u~15goQxpVu`BIWvv?_$g}ni^sz8LZTfrTrjfDs(+Bf2|M$C2z zV8bIxk%o>;`Nh7OPU{AxjXeP zFMfyF$fngo{{S!ffFzBFx33riLU{YHzPWlG9{DXz1$O@c&p4({5I@=Y;}Rr#E7#L0 zJg7PS)(T{%-}#Ht$-e4KrJ z;^t#sYtQ+KLf)6nJ|7o?Qu!l4HKMWitcWHOyaH4 zwwNq|GvHdtE2bQzh|=o-kf5uRT@oH4a!f}&_%P?CseJCguY7tzfT{Z4TEvE%iQ~Bk zHQ*SPB?SrI+?~nkBpBL0J-u~{6wz#+*-(8r_QNwgfePI771zO%Cac-F`!n+5QKX!z z?t3@pIl!u*-ELuf0n3~KOE4iKh!F@}0~tu#L&%bXXp)r+iHygn(<)4L6$13&5`;iO zg#iepvnhC73aM$mM3gDq%UZ~YOTBc8tLYhb{*$v~5D00Td*i@Bj!4~t6bZgG$5If2 z0c{H$Ms9;`AS6WXKW;81RiR6cHClVfNkAlY-M?qX9nC?G{{ZTLv4JQ(;rp{rJmu5l`jy{A8&?N$~DXP5wH?fO4PWE(4%o=KvE5c$m9^aSJW1Falxd zq+3yCm6K@%ZxT_4?jAeFnt-UABQwy4vj-xUK`!2nlk{FRDiDDL&>hhs)02ucs6g?Sd z!3={6?MoTS0uTb5`>&pyffi+4JBjSh5KBp;);`SQbjbpV<}ALpZd|=%0c4(UsjGeP zE3!#WhLm*|PPLW7Eqw{`pXVn0*30I&T<8Fslh~$lM$=Ux3NYL;9hde?b)QAwiOy@rwHfd={Qkep zE_@%JJmnv5__>cpuiXo3PIy3&(2bVz~*@&Pd{23C*aNF0;6TUaE778=|bzuzwr;cyfQz=-7;bDTvL zg9(=~I|Orq&P3!`o{2xtT3`ac0%6Cw>i3;)qrmX{<E0wh~CR^K?)Bm^lTwkx`N@rd9;=2%2M>qo}S2Snj^#P7pS zN|)XHbYNlg>yF9Cl*c3F(odm^P{AkyCqziYM95k~TAeWAlAuoYN4a{$VTg-;1F0D? zpb$xEFZUY$a14tAk!&$maV1b{la`0kkm$go&knU7xj#clgW%>xn%6jbtr?XsF}O}2 z92%IS4+^VR{{S2|-S#F{l&PbCS)6whoq)WKwGqz{y%m~>Cy&1~o(w;L1jK!L!aE#( z5f!WFCyc}NYb3IT4yEpE?(#z@vjCL^lRiJ3le1W@cP&q1$&rwW2;97{zf&cN02GV{ zi<+h9AqXlNkzfHs*V`pBtWwa}Nft1!25Tcz3kp6FQ&6yGWF}29Vxxp?<=P}Wpg=P7 zDQ$?xQ8p{DCzu;E(y)V&gQ_V=lM5}aMs8&-z=+KEr-+^FC*qZ)sgrC8TAxmg=5l2` z3Q(fNk0gU6hdI>Fdz-pXq z&_WYUl7i7*a0)M?2S<|F`7`;268L|Q z^Db>S!+dXi!N(lqkeh^+TOON@;f|5Tf;|5Kp4e3J5)KYdtLAZ?=2Ue50D7M1S2*!773Q3dQy|J#fC%@Le_qR2mC!78r&iVSzR`ccH<^X$f-@3p;qO^O}m{Qz&~4 zRv?JL6Sf8`17E)xOf2;Zig^K49TGQ_r=%N}RfATuSVlKkGXFy&x1mtVBXeli4@ z+0l9kj@@-Q1O!BpM}d$6%@_u<77eU5Pg2A(O{yIQkd}g|p93=2zbaW%-?9@1Cn!*y zrbCF-Ns?Rp^@89zi zH(uJVSnr+W=9k_Yc=P+se2qm+pKxD9p?edrJCb;v=FfkG$rcIrTh!yaoqp zDP^5duJUU`MT=@QYTbh!a7YZ+SjaLGwT6PZPbG+yASEVWn;>Y}W^frgvtg%o8R3@n zyaF1+aFN}xDuQ}3E{8mso#{V6Do)dIyM%fqb;b&g^pX}j^h}B^RkE{{Gk22(h@p{l zZ{l)SP$C#^0ooa9RY^uQ6i1Kyf&xZX%k&e|`pr~Lu60kH`{v6CBD@ji5BrM5Fu#_L ziX(%U3@e(Pib2|5ca_8zs9R+v=-;06aARr+Z>V=3a7~LIO(7%MzkrcoPT4baQxx&> zh&xIN=@`$oXO1N_aiP_-esSnTpnrqqj8zms^rWn?O|Mdd;6Sw=CWktZujYt zY-v)xexsaNkSIQ!`+Ved^RPz$0EeCX+YvBE;4$R!VgEgzNzLsX}G zVwt2RaAEnTm?ukVKv-IyE+@=JVa$i*)7Jpw2gA5SB%P*Ku02@DdWBf>+Q(5Rms>)c zdQ@9a9#dC@k~feq4@0@1<+7I`N&s|^Pcg4dup2kw5#R9moVfr1j}a56Uo%`~D-bMJ z{XMrXMXIT0kEc0#b2Hwiz5f81dBM>iOY1w{DE9zh{D0Cg3ILKMG>DGAGFk@M!kDy; zdPG*RQAJ?xIEC}^))-XiyM8=>7}iaSSiNrX)OQtf@5+2*K_2@R(z!fmafr>NHLd~E>4OxSLfIbl@2rEg=!MXp zxO(J0pg2uTZjphg%igz3K^9pTHM1MYx(Ps9R}l_bcs52T;B+{sh%y$+2_{4vvZ-~G zbEa07eH2NH$Xw5`?msJ(@yi4t?Rhs%!z;_uxg3Crs(2M7a$b|D#pcThHEzk7&`aj( z3Iy~Tx)Crgxs}Phcpk1%Y?Z3;F`YpPMcO<Y0D|o z1_&lAYLp^n>A72$O-Sr?NktKZGYuRoFI7O6zyS6gt!FV9!iKX16hpoYXRw*1AHiPh z5prst1xuz991<9ow)OXW!28Sd{{S)si@&?ywh?|W)aU)kM(@*IPmeer&z^Vp_|Lxe zufEyYTbjMUzg+C)M0fskk=Kd;02s-K%=_NBeKIQY^$8zI`s7GM;mq-kx6iM(9vWX5 zfc!*%IL=Av)fqt(=+p1s5Jh{;)5z8>(1gSn5=aZY{?=Okliv{&o* zlze}mT#R;W_?n2Eu3TFAoCwFh!&{{Wdl^9>s(-&x3c~LKW%S;dou*DN|_umuy9o2Cud0guO@6e><#!5&IoH~;NLc=5!1cVZ2g zXm8#oa`V)~;hT!ICFqezg`~jB->1 zP{jWLKDaf5AOzAJX>wz82%u8KGI*@nD|Q%f#P&fE0y*&JdRXG~0xn==0ZBTXbr96wxiE%wm{o%E%1!HvT0Gc{JQqS>M{5*Cz7q|k|i zc_N!dA%bS80eT2UQw5Ae@?5oI2dAyb6d(>aEt8QHnD(rZfS3xwCP&S|7w;IX*23c& zilsIlv5JByl(TP0DQ$i2sDcC}lgx2^oK<3tFl+~M$|T^3Xn8G?4tuaAsgC$Dd{gmQiIdH(=2 zP4oKbe#TpO9^3x?YgrRK6|S5L_xrpSb$>m5>ky;!TAuRX**p9A#No|<+>JWi`1Si( z#6z?dL`$w z!-=*-oPwmFhJ2vbLZZ%(30x{F&DJGos|D0-#*75njo=w_F-eO9vE9}|$tRVua9|wJ zq~f5nxJRr)X09x66&OJz^S@2r5I1A*9OkJ500OkTpGTaMCQ07kBkf@$Y-#@hM4R!J z0)W>%^*Bk25ZYQb_pKWkpsGnxPOAzX4V7H{=GlD0 zqMJ;6iM)h5q_UQ7tx4;~9tuDbof7~Tm3Q7LB#8kmlxtO2h^h#n7o*c7h1olE+8}WL{b*Tbi=6auR z))pm4aPu)q_HgJ+c8SoZ>age`&Kpz^S@Nrg5_AGvirqS3y4N_$2zE}Vk<21_n#eIB za|6+I-(RdmJUeW@N#3L9P__#O#~VF0{{S-jH$yY$=lOD1;l#Nv!AspL;R1!s8?y6HhGkG(- z&`if{3Pu~OC6N=uI&_Uqfyw9w!zC*Cd5kO2q zpqgw4AnJ&+IU|Rrmz%&h(GkP4n71uY&Ig;0p#589YzG=B$91t)!X>=$efb9ps-$a`)aT(BoD$Ao|*pua%rKTx=z{t z4P?+D0NJLceiz0bM4~`9uVNE|@d=g2iw2>>s<8HvQ0OB%HaJ6w2&_}^d)%$a@W-<+ z+lL`)-)#XN=jZwR=0l5~Ch)RfvGd=r@q|pR7k~5PoSpU0oRU8L;r;$6JT_U+#ul%> zIR3Lm{g1Jb)X%lfN9WmnAHKM9nCD)3y3XH!zj?$aW@E?qgxN&L-*23~`%kCu?B~ZZ z%=0IwSsSo}hTQpOo2sev_xg*$f?+)EoL_`Z_PoBiCZ?WK{{VBd%zOF6y>-mI{cu?m zQ$BTGnF;|(5@CrB7?fgIHL>z$o>7FvLqQZqMr8#fd47ga(sEEDK+(y@(V|KP%+x@| z$ucFts=?PV8%mf$>70$RaZn6|Rgwl+AXyWz^kGYuTI8DiV!)>x`>a?i0U-7tn$|~B zNaWy>WBtiQAWEQ|&z@|=2V#K{95wc^2vC|3uil+}#&^Y}png;4YZxE%dZ3k#{&4V! zJ9OL%ql4*#c&=wx2xF>$j09NF5Wl^Mg@;{` zttBiIUm%3YXGf8G>#DMWuYUyL>q+Qm-F64@hNbIV!I&#sbRv#iJnA?)f=N` z2g5c&OM)OgYf%`Y8B$PY6gB*#mI% z)@UdX>IT`dBrp4JvOLg%5qNaa7F4*&923oSgeR;|I3<>l&=)rF8yV&>aSKLJfI@1` z#p0e|lrTdzgeZNhB?>bz7`=M`W@EWx?-C-1z7%?AMBn*77_f~=CrKy6-{*Y}a7JqK6UrG9f+KCQyE z%jrKDd36#-%|6EcFiVC8!9@kv@rN^Pn?%pM%vEYIVg~JnJh=PgCm^OHC>Nom-n}>& z%jDk@cZ@NpkdvjdN240FdHHCs^Me;={gMqgNGFWYMVp|3@D=CA83;@Yq2-D$>T&CA zWfvlepI2G9y`a(tO~Kk=^llhRwn#f801^UOq8LmtfQ{m6a21hhg>A2#f&v&M;nLTq zi}RArK_oqRAhN^>0LPZk3+`{T!MtWDNZpB4`aUk)mDC$ug%L|BZ-Wj-fHIPEC?H;@ z@^t%IWMgo4<*1yxovay1Cnge;=OhG2%+ubOW992Pu-XYiS^NH?guRf`)D@Mbc4X8s z0b>DOeg&H|Y8={4lPj~_cg+ta1z(;fdF1nemC!{?Wyo$g0UDW*V( z_+`gp(*&^H$I>)pojvxoZMhm52=Pt!P;Yr#I8 zX2K}%kG?Wck3V6(X3@zB&NOe=_k=OTvFWLOi~MKx`k%hIxQy{!`uk?&A+gUk{r>mDqkfC$=)~41|a8skK^~iKvqX4!T?F>7_`JC7*xHLBh z3w};~;RsSeLp7}{-yA^_BY9P~#xf!aDd?{wzg{ttMWhJQhCzzK zVfWD-Kh0x?WGqWevqK9ediXx?9pJ#Y0?F;?FQBlx8ey3d*Tr>}X) zicVi&&wfsF5;e^gI;gnEO*Ka)6$q2GKv4tJkhxmZvJ>3L@i8LDl>Y#%wneP&JnjDgvl%c|@P>(7Wb`s1(w<1X z{nwe!l*b#5MIYug%qgPdMN%d24dqZ?%fDCW1Q-h1=0qn`JY>z_$FS@uFSikiK>5@? zhL=&2c?Kae+*6A^dDWtkb)2Kn-(RB;aLTyyXnpY1(BTkfA!2AH$-E@#D75S3+uye! z5G+asdr&rhF(xCzgH6Kpqw`qorDO$&t7*@sHPg6SmEgI?KFF#Jbze1E5^&nLdh+%D zaD&yXPgmLL#pHk-xnW-1_&LIhB(|xN0X{zwi4eeHAV;hGT~0P3#2^#={hZewxbrE%v2w_YDb~XVr5q=UG z1u8BTI1*a&EBFMwNc2|BbPS`)%xrHIA2&vX~Wu`fwU67SA1C8&tMopv|HLm3LlArT|0 zb){k|acck!0Xkb_LF!HgOX*&j5nz~^116#&cCAk`%QYh+3NofvSS|XT;_c(l&#r#A z?}I4}L{ASp;|iH}{(~7K)9>Bn0XlvWKYrd+9PX^HKHeNxq0dv+G*wStYja+ei(Ox< z^~olEule=IlyCTde;7)m*8cDK$b)i!cI0u*o$Al?2@2=zpLdZW{CZ4Ge;GITkMACy zzdN5F=0LlJsJruoaPoEjJ>-*G)%U+_p2t7)jFYc_XN+d2w+f?}{{H|!Zy=Q`{dJrw zI##QP)@xt9A`n^lb@j(u+oCBQeY}+7l7tWuXkV-O#j9mp)L(iJoEfF<(Dxi?E$pc} zBPOrcSC0PxlVK~{ae`%`NPKJ{{&avdt5HO~T%5_(QU9cQW6V}pwz3~ZiG?em8e9AE2sDTOy zp~#i6X7H%afFbp#PhQy62>=l%(~0qh4V=)Fp|E<7e>rbMH>VZn?Pi&=BK-k~lHq~ zISUJmn;5T5jDbs&&ivM~l$DMXFTcJFNE!o}_4WS%eRG1d@d}#n^;T(}yD_7fuiu}X zofSh)tzho8=d49d)=-OS!RLP%+VU!9-5;62q71b#PxpMoI1!Tc{`=$X;xR#D&*9Ur zSipW3?-P9F8I5s%ell(W0~)3Nae+2&HD9b8#hNsiJZ}B`VPGP z(L|HU)0*8&FhZd_cOORpM(3mYy_{oOlwG!vzULfeEr8w;7KGSMndB0M)3P61!rWm6 zc`ZIG#}+t#0|G=f_nbzH%H=NHaqXVTAL(0+f`d{mdj($+KJM{Bqoe-0@5dNwr6otd zYK^{e#zwPl-gRGL$BV#Ej-Jh6D}x-nzVF1#4k#?wnGMFJ9}k?R0Uf*M_55e+xS&O1 zCqKqR)Wj{Kegx#z3bMrI-b$Vq*95LfO@g3%zkJSYsx2W3B049*lant~&ePGqiphXN zI?-TeBbQ^Mn!d8yn z=N-+UphtGSB0aA*M{iEKDs>S(Qo>O!*5$K;Wuj`Jk|3hbMj(39Q>{E?Vn*0D0gjY0 zR9)l>C%IJuq8JR)%4Hh{j{>RQM~oaVfgvE3(@u2Ayu8zw7Y1rGMbOwm5K0mm81+r7 z7bKGT1jJ4Ei||+*3)<3e+Oo=}1{EoUNc%H7Z!B|2l2E1zZjLen1dw89giu90z2x`O z)KUXP2-M1{##;!0+RYBdQ=`jn2p~~>6eYK6C*Gq$D1d2Aq?Z#D;S}q0?fm7os&CI8pM7gQJoo(l zj8*k95y$)c!L$DWKa&7W{rcq23k}77y2?GMYZKP~aJkz504DGLVkIZ~vw!mhRq-c$ zeeWl6dOf>-o_onHn)}8`@9$BQRmImmd*t)HnD>+8`pF&;J~_NYk89_@f4pJJBlkb% z5`OXb`oZY*`{T}A!r%L?xJmeW`{Kgq#LkN8#J`+wlbct! z?~FDqpd{nal)CHR0%{OK$+6ppHCAAjst_SplDL~0J)Az-lrg9?Le$efk9j#xP)6dZ zpIlg4h^)4G9v*(VBd>>fDyWCDvw$x$v_OR>Fsle_4lafy^hV=Cj~~`DP4FZ&Lmkei z9S~x}f1+e)ss_#V2h%DQv4PZ7d}Q4?=Nbig-tv49a9M`VEZMxR0MJI^6A`jE#!TG6 zN|OMAXCwKnQ;HB!!^)#O9Y;IOeE~{zl4VVt7z6?VJexQ(Xl{4Ux8Gdc>BPppa%fB4 z_wU5;VTR#_x0&_4j6I%4y?*|)oxtgT*RC330itWE_QeVi3;tiG9-s{Jm$m%!?S|6v zZMS`8@dVP03RqW(oVGx`9eRHM0PYke!ANh#Up51~ct2)(@{yf$`uR zzt%W~NZ@d6lfow!q?YOL?Yt!?&HVZ?4K-(Htnr+z++Lc+MEZSmVL3^meg;DAfFn6?d-Y=w2t<<7hLp|>;*DE3sBg$`X zLbg~>A=xFfP=6FQZxNM?u_DQG$BG%-r>k*AOu3DZjB;pvJFsBZb@Q2jXseL;aXzqG|jZq z^o5IrFueueP%R)_Q@(Oeke&zQee-!0M?mmXQ%w8MzE~vT324U$EUl*SCsylvs=}3k zawk1BqG3>zml8M8jf70^3HT;o0x%>Z-ygpj8CPrUcl6+@2k8 zB$NPl0H*GKFCw5K*9#4@o7b*R&I%10zK-h%{{YHNAbv0&0EGns- zX4bNc^!9QqL}t+U1K;(FHzE?#a3(!6R@wprQ6QeN2*{F3YDR5Lqt$niEU+HA`2(oq z0o8#aYgM)>*mo5T6d7SbTWBRR@)jYn5gyFpzzN$8H^-bbR%-7e#vd$kzCQDU*s}=Z z^S?Po6`Ji6u0QNx#i0ehl;SB#)xPWm2Bumll2@R)3L0%{_(Q5z11GAl++5%3l(IZ=a zHI1I}nGg>7FK6+RAu~G*mc0*N+&xola#{~$a$ShvBmm@x)XK9$NndI{HHz8^0Kx}F zucMJJViv}yP^VSvjYhn5e+*rR`!^kCES9F`5sTGCsHZNBZGZy1_V8%$cTcSP_1QS zc>MS}@z){FQ({F4XEpMY3ljVqq87wT3i2cM;{-&ibV!6)K|P-s$u(r#gcZ+`UWPK9 zfY~g>MDsm6iRqRDvV$bB@->G*Q+odZKI`Zw8=MdM`u_l!^4Glm@_(2n=g;E?NPT75Bbiq`T1j`+g{J`I!?EA(a%l>=hQqcYX05K((-|zK< znT~b$coyxk>l795lWJmJ@2zWJZv-GZ=186q$4I?F5&83wk6msU@cGJ~(pikpsH~WT znj0;Zp*CO)m1!m}k7QZK+;p0D5fIVulFwBgNzc9!U`fwS$ zu`wY7jaNqJ0tToXw&%B`;$e7peclTu#_smpC3(r7)f}t78<_2EUYDr7MnWOnN4wT_ z;|#tO_;n?mQdhwr(^Onz01zTf$gYXdVbzCWKBkf|{HJWjqdK}KLb6%g?&!>%$5isD3yG|&Th zFaYOVAR2ZMzI$BpcII!tZw2ZZF$jRcM?5|nVII4jrf|YuWF#QK44)710$oCU&I=W6vn-_9zGd~;&NiQIoU z@(m!$^pAX%D8Lb6HtkI0!jcg^5!W}0q;>YKqw0SKB0&s>#2xnMjG2Hagxc^1H@n8e zjXRM;!f}Ei4j_{-obIu?LPAOM^z`(?g1Msp{(W_lYm{|lJzJlAgfd8{M!hx3eB?yg zXepHO9O6J^0EEB*tkW3OfhM2;ELB8|o4YBimW}FP?9L5}5^TLpTD8ZF5Sm-`PC{xH zn1GGI00N_Mhbrr!5Q&A+qbQ}W!wfHg4e^6FBeq(5z#tkNw<{)yvg9-%4yfZE z0Kw)!sqD~$$MRc*jVXqYsqryQ5N-g z3L;RIVBnJsg}0x4STx*V9!GJwO#-6?INHNV^w{v3rK1_4EllFLM?`g+%DTP!50{V5 zaZtovg6L}aaAHq$+pd$I@Rnbh{rH@rQ~rMsrUUoajbeUi_3!>-H@4pui)!G4%k}&G zV5W-s%WdzD4C}u!->Lm(=e8rm_f86N>D^!@&b8US5E`y{mD6- zy=mmgkO1RA9KVJ+_WS;18i{K8<6rJ_<-u0;@^WRgofgpY?z+cNw$m0!_uc{9Z$5pp zBI8!RG9J#qy1^kNBs@1B-^N1vr`ALDKWS=hgNiVEh2LAxA+nZ1>r4^dY2Cc~AKnN} zKaF~1jA2rp#2sR4jBi4~Rfo#__v4%=aFCV~{sRy$CbL)jXE=ip+A%4M>LY@8UDk(A z0y2c7a`Wggwr8AJwP!5w3 zRn7z?CZ-8Ke~(Np&?lD{rYa2zDBGIn&Tl2Q)ktg6sCBDMDcY42@S9Amt|QbVeMEfu z2M}3@e{exY$&fBbmhfKaN0s1d-v!m=Tu>5RG>BiETGq(YJzR5#^BltQ@yLEF4cMdx zp5lm!3F(q3RMP!{97H~_NT)M=hPg2XB7E2rh1|MWdxyuYL3BhEUf5uJue&~C)x5P>P&!`us})S&I}nwvPSHr zPaCh>ggVCrG`fM~oN}TNY$BN=COZDHtSyBy+tgR91Y|aW)cg2&?x|Nkdz|ZO_0(y+ zHXekr?=45;x15%w&E3JjzCAJ^6C^CiY9vlLtI7fJ9)T$i@`5X3LxHAm`OP*GbX|h? zf1F+z1SFzFjH6%lB(MU4l_W0s!9l=`R89EQ;{rpqJVUBCFSbI=g;5j4GxhC+GGmKs zv4olXSOgTiT952{PP1*WjnT^R$cQ%AJpHVQZKhlV`s-iDu)T_t9@i(^tdR^Nmh>TZ zKYYH0qqNaDpcckWtx4Cptf#Rx$cRlp?^tAYy<2yEywoFdp6UJ5(_KPwJ9nC*%raDhn1nqL4 zE#&BoYN!n5jHpg821J$6gmsxW4YgO2tP92()Y@_?3B+_e(3O8t6;G~6kk%0)FBU{F z?ND$kEr@nGEuSgSUIa!&l=mEQrK#d26@`tM5}@sFBIIW4t(+JlP{JN(-H|aZfSXXT zph~gno+oFbJ6#4T&J&yz-2)$u`c4g55&&eV7<4_NSQ_M4axZ{rmRQgiF^&dXQ6;CG za)lZ~`SnV^xg5>DfyVUr=LW09e;5$Ge-Wwc-QEaTU|)Y9esW{Bk8={gpZ9l=4tUpm z9->_8!FFoveG*~3momhpyeemd5gZY>5oaSA zEDod^6*t<6xL$8$f>p92P^5%`h>gt05`H*BebOn~W4DsTiXfQcmvQKwO$y)0Aq<2y zDJa;QXswHKG^NK}96?Ee9?*ZPMD>nD1Q>{qzk0|v2xtSko%~?r7ZDrRSMBE*Y^0R@ zg9JL}dCw{*5@7&i-9B_37ocW0)$sbpT%ia|ACsh+*Q|i}tJ)cV+sPaXQPPVsrCN8a zJ*2ltrj86r-|glQ%XunvxY31KlW84_Jrx;LT|khFqOWhZP6B(?RLF+4@9QYkOa-91 zorg)rFIBSBWHdec!lW#aOxazTPyv_B~xn3N>F7t&UB z#Gcs5!gS7E$Z6I@Tqv7!1*3%&j6g6@9k98MJQy%D0SU(d(S$*%BC^Wc=A$uSmhgZh z<^rV-qg?oNpcT4^h-26+>nG4$0l(4yV-$u=LdoCvf~kYq(?cIWIH4(#NciTt{N)gP z-yTgzIl5*Hn?G;g>k%Tc5oB4vPsT;CcH>oepX)Dhhj5`XI*sw|jkPHd>Po7Hs&stA;Sh)PNXx!DVtFz~r60-T+@X0Fh@g1q?g!lIo>XO+1>m zSp-2ON)C~bcM38Vl#tef8Q7)Rv^GWoq}jAXptp`dy9+*@3mZ&ex`^QhgJz&zhl~pZtbo7|HOBp!Z+QrR8s5)FwU9LPA6zNVQ(ezpN7D`peF%?CWT}NW zzrk3N%DUg@0lq%Rrm_Qf_wRYa9lQK%(-83iZ@(OUoFc2A`r`)&<6nQgs6IaHSy3K+ zK0f^5iT?l?A?uxSmgf7&+kc7u-XY`oJmB{W>SA(W=+?hj2$}cm)cA}zvv1!gUbxeb zcSl~Gf0+rmYo7l5XXKy9+2c19_a5K8igWm%L->E(nhVy2B*&7PwxG^)8;ZQtb+_2QV|KfhJpm3SEU;_ z{9(t$;u{c2plELkK#B=BUmoR{5qSd5rVLK}%j0WUyl27aKVUM7ZDWqQ>f1EqQ z0Mb0V{O03ADSZl)pD!tlxH+VbNSr_tG@Yn`Ek>xx=Oy4moyMUyM#HQ{F98oE>FnHo zCdCJ3ZW8Hacj*%RM1WZlO~qj(04)unP4joZb2-cfg=f_0X!Wc_8W3LATtX)23chO8 zadTdBM49Ca=7$bD!lERAs?AN;lwZbOS~4>7i(#@jo^im&fW4g+#%k%%jaP*BVNndp zHcg4Kb>2s`BQgrkp_qOBvTly-%qyF2J-#qNF*!|M@Ms~;6y$6~b8k2axH7_=$gdGF zdfq*6iQLalhg{>SRJVihdH%9q(q%9sR}7V2BMQ_KYN62wC#7B~sVi>RM5NR4n)HBz z2FG4La<-w+LZHH%w7`>Zi)jT}K9kJ7VVjYC&a`G0uUTL_}L z6P|A-z$QfKWSN2!^VTFwP=s{5;ypK%TVLHm-Kna<1fBqrG-zMXcR3+T9of2rV>q;9 zmZT;~eMt{I))<>`c_5SfBT3#SONEXe$%!Z0;mEKSl4vcg5;VE2YeE#1>?_k8govB2 z@<0$gu=;?K!;x(fErH`v5GGJa8r>k}OI29A#IIvzJcyfWE^rE33>9iva@n-m_suv! zlS=Mj1xcq<3YFkf@I3oO^B9q*@aBzI;Ezs!c~d3+45YeCQkJkIvO)GF+bJgNywu!h*Z&Ppgs20A=?;mKXcC^M(;=Mpu-8LRwZmvBiRMXB?c<{WFuYAd&-g;UM7{XqObi5th70 z`NGEl6uY8;*W(FJ1Kd>2Vrh;M5M5+|6?kkU+Wr%X6$Hm^a(B&dPB7gSVUyHzsvH7f zN3N2Ia%uUTo^0#_{t5X0WI%9Inu*g`mxOO9CfP}R9AV4_NU^7tZNH2_oR3y&ihb{= z1vcqwC!icCNzpdwX8!=Z8=%n%$r0x8F~ES%Qx6`v&VzB2TqmCKgG3VuyOcQmafVLE z2#+Ffom}x4OdzEqb|fNuBNZtdfLoC~ETrqals7jPC6^A+g{L!-5E(2Tu&-Qnb;b~~ z(DV z29SaQboj{}G?&i}3|@Mjw(Q+{$EHuH+$@uU6T)zTHUi%mMOjpFoDvWx zuKse-prkhOzrO5eeN;*1B7Ht^%E;jcG?Lq;hawC{iY9K?dyi~+NgEeP3WTQnz`F}@ zf47X}&~Ib_(yeghpawwFl_-h#^})QbbO8qi(qFC+*g&Ge2XEF+LXC;D{V+EvCyGRg z`~78@fsb|d)SQ1gOF>Cvo*%!~DY{3@o2QA-&=iQ7pZ5$j7l2)hmSM>#F^U1Cv5!@} zRiY}^JVic>7uap^7@y2Wr#05z+lZvY+;zmnr*SL93D%l5WrVO5qICfnb_7c?6mBJ9 z_y>0g75U={7Y7l^5o9Mhf-*Zw9;Rnycm(3ZndNy_q2g|wPh2T2DcP%BqjJq9E5ZSO zc%vCjbVUbBGiUa2e&rI{)L4l13l0V36L3?HbRR=}dLn4vvm^6bTO z))sYK!4detk|#P`EIXf{&%O~C*NDptXyqPop_xrx`$@Cc0{$#K;Uz;*%mle79&f)(6GP(<`{yyt8m*cqc z@5Xua{qOIb7!Nm{o%5`vT6N(2{N%fjy?v}0wiOLY^Cs z7->VqLwJ41)`k3;CK+_ zk&>=QB9egVbWe{RW0an7-?vfz;i7yLJ0i%;?-I`ww>DmgdmzJEa+73iyi9sxF2Djt zyNa0mtXWYYE+C47kHHbe%Fs#=7urR$)^h>4Ufh?b6f)>2g{ zh<+OQ%LxEa$Z*UI))fc|X;U{R{j5nFEVB?A7NAn+z|QeL0ND|b4@~&;m3!KO9Z6vd z=DWg30J>?{A7@&`=)8kW`IPAM|iK?LR2IkbnVFg{koBB|r4ffBLP}ckl9~gk(On#KJNL;`A|MnbiX0r^n~(|hU7R;OVq=sw z`i>{q z{#2@yd=`0(!lV_X*zQz(`2)?;Y6)Jm{YvhsFR(CDIgrSlP}cLna8owyDOK z-UpHw1GyuQ?-iS?N_h8l{%#9(UWr8}Zp7!8cS~y|A8A4r5$+MJ@`?nqG7Gx#s3qja zAz5B{iH5{wt^`Do(1IfeV3kVx;Tqio>^3OLGvy$cJEufBi1O(P94Nq=2z`1Qdo?mv z2oKE&v7|wCX=Rb6P(-ApeuPEunZpbl0tg|gvOAe>MsTC*N2Hkbo?l$CN&cfz#LZ6& z&JhTbGXd|Qlwg~@sY_r{NCXyf1jlWisj$Y8XIKE~l_>Y;&I`DWr`2A#mG4r{2 zkNJpzbkXto_WuBKI_-zryzsx?G?~ExqkJtD0!?Wl7?lJ_YQU3rxtlqT#YwZ63 z)BsHH)_<&x$B)0}O>T1PyWd`Yez+6&Uwgs+e0qJ>FNlw~lhpqJ*Wadj2=e}MzBz}F zr`o`iUf->Kb7Ru(zZqqf793MJWmOC;hAiOXZ_f;6FFxznat zIsqQB=UEM4Bs!B){{VQgOH;t?{EAmN!sr4);x<9-;!vuBiWdcPJx(8LcjMJ_o`gl%eps0W)-qM`BElj67r>@FYn|hsEm@WvUXYeu?XRdf>?kM+%TH(2zU zoOKzGN0XcOoPbE=O{ZP{eezpkX(#kAPiolL~FPtWHfrJQL1o(4JMJ9UyEQ4<`{=hLIsYM^OAhWOXy#z4}lpN|0e$iFa> z;eF!-k($9A4FYU>>x?Tz!=(gF1c&)Ky#X{NYG799#yz7$p<{6)&w9w)SY%Y{0;}Q1 zOm0-~xj?e@+Ok%Gb~uSD{B6iGm?zlzP z5b`);q;Bbl1vS~P@@e{$To5LCH0n_1Sk*I;F99XEoo-aNF(;Vtp^$H60;e@da#{pR z2*}{%@lhDSt0ZDPmr|SVQZ8+VApuz+a#DB{Qx!;rsc)=ZiJgOG%yUkH2RQdulxS{_$8Q6XsvXpW_80R{HPK z{V;*nfb)shs(tnU0CJ#`{x#39wm3ltR16UA2i=s5Hlrp8*9n(+jP+(koDO@%P?ZW0 zWf9`1*F5rRUChS4XYrPonAopxu;zf{Ze@>l_wR;RNs0(gm-EP>mkjCm^_AfPF5f<% z);T3OC{Hk*`No%uz5ZsqkL?T{(6o~HnEvuGPhhjZHgnA3fB=TNcT_&Ot`?xC5fKdA zh@6NeI1F&DA{M!xu>y&v4oeLef2-b1x&*Bit)d*-L>@4b8zi%;HbWptupkUM9Fqs4 z&|0Irj^vpZOr%#NTeK=fd&3xL5@B2k*Q`=Fq(&U2n4zI26y}_tV~VCAZ`TDT&J^yP z8A^}@Gfs)huVqY3boIi*SCi%|UNR@aevk865?hVka{B)Od7udKnd&9>#)H6ztT)LI z>v#y6Y^a_lHvV#GBe~IT)O}c=F5>~9Y5>9?T%lZZ21tN0<;SpLAaK#R(55@flhvIL zNTV}h5@h&PlN5?n7>R-30UC5*s;SeI!_Ex5k#7`CzTM{M1o7{$-kHa2MI7pV zeBX-3>fz|#*`Gfg;lvTM9!ulbt@n`p?GPgEJ!9m5a@2CLr$?_CS%YWlrN1AHGziV# zL%y&4$i)aKCH%O&fkYAIc2CE6A0|ZRDiXx1EXYMpLXRu)r5}+0060EgO%m{x9OEP= zk+^yRblj7Z21d*rkrJXNFq#0q z=4rT#w?bTAL5&CmA>Nir5xHG}I8n20&r5qanZ~*yZ(0eSeUElcB(V6lXTcj^oG#QJ z5`UBLiZm8|mYdxe3$`G&5CcTl7e2AXlc6KC^87Z@CK5vuQ$7M&B5RoAB}A8_i~>rZ zUI&~omI?|I*a~?eiGX|Z!cMf>EGL%+z=7N<9ZgzolFmSvlkZO-?iO}Qt~|$o);6to z$KTJr=Oz5+-|8kEb@-Rt5P^X^{&JHqzAHs_`1riiJPg{^m9Q zXBQuzzl=~*--+>?XZ~vxsekA5l%ub;9Ovi$dEXynC41zD?~n8Ec%$auUeApA@9&J6 zYc2IJ{LU;n`ryMNtDKd_qxs{{-C+p6J%1c?oyBX8e|~q5pX=@a05)N|`upT;7l;-) z*M2&VObcRob^6!u5 zqvsrwCxr$FPvghVaW>QvXKccCuWW8|1jUjEDwa2h>FRk(ySi$!HAHWrttwx@&x}Y< zJBvMi_rLEDt%?)Xoqg*Wmpz{e{Cy7)xIBFvDL*;Y5oL8r0r4NKs9+l=pM&#*CeDWw zM-7t(YJ<0S$MtyOl>}U$-XRGNpyKz#$-E1ST^4~f9(Pd7L>~1q6h+=pw4#_t0YP{W zim;X(yxlW2s*r>bl1rpUQo$}n(x%HGM7(0y=8P7I{{T#XSoUr$5-GBjI$|m0$h>Sr z6$l-OM|F(SIr*l{J^b?+E+OJjnt85CjvNNi1Ok#XG#zft1Z2rb{dghsk!C}v42Xwb)g#~A_?&@|%J$hOD}9Tz?B^SnN`jldk7&ij=?k)mXotBplHV7YO*(2Abp ztQvWdN@nF2#F#rRi!#y|&DP^s{W?lWnNAbx1IHL}C4)^9vY-M>YUmAaT_u)~D}$by z5nG_GL1Wc76(FL-;UZd_xJw(Ll;(j9O0_l&D0aC?i8)!JT2nYwfpPNwJY+p4Gf6@6 zx}WWw6bG}G8PaD*t^)%>3@mqj=CYEp9Ue|2(+a2@377JIa4gUYIf{#Xdf+G!)?imC zFLlQ8!lqv@BlpH3VGD);+?Vg34=X5y6T@z5#HHepo^;L<VbU7tOk!if7y950(q_ zJk<=mz~MZUWd)7gY`=J{i0hjj*6uAp*BJb^&80+=A|wXnK!UzZ0gBDFfjEzVAc(jG z*Q)%OMm<#La9`h?2t6ZL_A;3N0GmG?_v?xH{eNG2n2mmQ_t5-C3(tz<_kQt~@SnQ- z`OEkt{`dOGgS&UvrWy4=p1zsG!;+v!XPd}9W;yE%@f!Q%`N6h)J>EaB_Y+L|_}3qN z;x#{a_A_7G_x0(VGvh}1`S-y@o8N=qalCFHQ-6KEaZido<%@#3`~ByCeG}|pB-?&& zxSf0CFnT|~p0K?pA^c%etNmuGWBtT?RGoWb$|7n`hak77;b)}a^O05OH`<890KsVFMN1?-711lxSECd5Q52qD#_B zZheV8=UK86yhja8!j>GdjH-xi9J6RU^tQ4rzfa0M@L5Dw1NM@GNA z8z>~%h~t#rp8ax73iJvi`b7KYh>?m{wnW_?Q5Hm`04PNli?BGNV@itApB=_CCBz$S zy?J#NgvbMT+wqa(2?QmNV*db8;~|%DkoM%jusV!R5UgB*?8<`SWZoed8k|`rbI&Ut z__IbQhLlT(2MGsiS%Oyp0Oib4`UGYqk2HDpy9Qt<8!HXI^Y)IA5;pDo7 z?*Q_ajCa7o;F)v!z5BVNzuj@o&-HmCHD%AQjy&fxsrrcg z;AvXp0W^2`^{moQpZT1A+OU2xjW_l?`|X1a`nvf0&Js2CdoUD77x&IQ7xB*hn#l>T zb=3a=4o~y<&)s3$- z@8bus7(E3407vnHbJLdtO}nN*T1})bc;s;vyf~}Hxbe5|rbNO6WB12jjFQSrhGANY z_kX-0bnY^#w7PODKoXv2HfYya@OLN>Nm}>92bhH#JRV~x%`DZX#C*Bluylp61O!KY za_NJC@aVV^5pjV1nj#hKgx`1t6%)bac4ZWlDfy^>UN@3}gJDyj!Uv3V?Y)(%4_J>^ zA`5~{B$8WX?(bL$R_VTZ9IMk$7`Q0_nNp~{E6PEFxoOFu0WyY7Jz*8WMw5j$=Zl_j zWJ==1npBig)O)*H+NZ%-!4&GmCTn0c@h@o(*9|qsFb_7e7^8XY|z0OLzNypJD)sZnJ?=p5lG4AtHWeizPiuRAx095EBrAAP^XD5hQ>I~EwO?xt9o+-n z&t7tFKy+dV2$t50OJ-zdmFQ9e?rfjfHZeS3ASphmRX3p!pb#t*LZo>LN zS1vi6mWhCPOLZi_j8)6*fgU#0eq#;O%jmz7hb{ohQ%GEgBSVNw&M{hwW*f)T@qM^K zX7Hqt$bb}YiNaW775eXFSwz+uQACR^gSJkYkH&Q)_;`Og->1tnUvC^9dYk+HVukbm z=Exp~e~flnd)1E3zDV@p$NZjxyqlPzvf?* z#r^7WHRIdkUw(275gR>E?F^Zbd@D|&(=|@`MLftJ6GM){Nj-J zA3bx5SoiqfTga;I{(NhA;L)$K&Mys~qfe}yV(92RBxB$6f{hL%-Y4&zj(Gq#$;TgK zB5WDpW+(Vu^@>1*QfdiXKVP5_48$@^Cm(-VsW8PzC&|eYNFtvPzmCjpBpU?k_`e?f z;;Riup?}5^$}>p8e8kt@?;$BgCY4UqEKfG!}>XA|ecrCnr z+YK-z5Sfinrc31H5X)X_3+_72H9~1bK$csB2ZNH#+|+9f`QZ|#MPLCQ&%$x>TE$mS z;wPT3!-aBT?96m^(SNDRbVFAo3Q3|zGbWwQs${QpO!}PHM9EE|3 zMN~nsRHv&#v~hRE=As6$l(e?J7hv!nDn-F)gD#dWZ#y1R+E_zaAinO`i}xp;gw7H( zXvrw6m)H2b10}^t^WXbx-bnJ}AQ zF!LmGf4-S%4FYCZ^6QLERsf#RcgDY*<2YHkU*q1ehaIMuuQ5d9?1+MdMabwsmMvqF zH7`f;ePe{2>g=L}^Zwxpq7n3W4=E@4mjR*{Q^}>E>N8bZ-8R^7##$7s6DS4gj%!{_ zo8Hw}r^y`l<>h<)M;?`a`54Uh-PAGJ6R7oCs2y3Nv*w5;?3lqLxVSwXdQAHBjY|lT zMQvB=RVsWTt_hpwU?pje=cdSn1+%n~9!U~P{J<~7ydOn3B%fX37E$sid92T?k|P8L<77uyMZ)cz=S3y0F{*0Qqw|H6a=I)-YuxU$SvSrp4t>7D2bpfL^~WD!7KM2 zo_PMfGuB(4KKs@pnT{{g@~5{~`u_mAEwjM%OvIaq2cxcj{rt5&{j3+iKjv?W`@dX0 zI&bls-y!pmTJd-2;`8cwHI3?@zMp;Zed}|_-`)?8%O8JOz=`wyo={p$+Au7oex?AeKt3<7s0`*V@E zeLi32LuE2}cCko0h;nd}N~`mXL&ZYc#${9nrjW*Y>7{+2^ z0iv#bwUCSvGr}F8XU616&vrU|WC1}|Bu}gR!chPwqnLhv_^io*wcS^eznq+9G9%hd zecoJo5=qLR*07?4%7BIKN{!Q5M{ct|^l;=Y^@u4|-BwRT)Wj4@a5}|;5{iVWG&g+A zL990rb|m-QFYwf1Nm5G)IALZX2h4Gi`9##d4b>kl?8sS;C)cMR*NMR~d!8e^uG3e1 zRMN>wFG!)1j{g9Yk=hg4IuBrOW5xo`;ngPz_*#dw|7zXFlAmHzaU$uck$pfw|OA*};(@+`wH^75BlB5(xni z?)f}_7&6Kh6GC`RZ;1B9+;WpLt8IOiiY@I!UQ{QoCv(mwX<9rr6Ebhs%+QMpotJS* ze%QT1bSB>-eapdUrkiGKdZ+k~vQYLrcSO^7X8m#@qA7y;)ieC%)A06R_xAH+Ln-Jz zFYQhv0b5BBaR)EgH8~j-P|xfBV5{O>jd^~##n36RHBjihw?Tz)BZ~d*BOoQQJPv)` zd*FaHnqoVy<~ZImQ7t8&HGE&=EJP$bPa1wVl#>zBg4f}NARJU@? z&28Pk$9b}XEKZN+Kw-F?94V7V?jZ9IPh$f@Bov@pE%_hS5l{e0lwQwmT$nzN!U^po zu%q=$NfRfG&pRm8`>BSTm9q4Mhf06eZ5TIpUr{!Nh@H$LI|9Ix2x(@Kx2hAijvIwC z3khY#b}m=l5#NRC1U#DZUWGvHG!AiV@d<&iPuQl%nGjv4aTGqgWb_wP7N z%-7#PoMfr{_Oef3zJ2muoOUrEoD6?A_A_!%kH1Va&-a3BljrXr8FecE0DG*6beDFx z#vb#=zI|{_zl_s7G>$xd)^J$$sK0kQ7J0b)=Q%&(@5TkqpU!R8Qkn0LxP87d2=ou% zzWA}ldd$vDv`OofQ@g%DQO~cOD34!%IX(t@ZS=?6n*QE8%a;M&@%sDdHP7b*QQMmH zT>8cwd-;NLleBtXZ_=ah-{&mn*XD8+z1JtX)7}UoCH4ORX93l7@chm*t<=OtbL)~o z*IfRwN&fz8?|A|~{+0Or`{Yu+N_jN@0Nf>Q{Lf$WC&z|$-{Tw&D2)|7GhZphs4Ih5 zvOIrSud*Z$B=Cy+II8^4zRL2jkPn>C!ui&Hg=P#<; z=;PJOg4d?4FMR5%}76>C!C>* zOKC|s@AysIK(5KiVc|7GPfK&ANLt= zQ6V!f`MUJVa79s2oOu4P7>*3=&b~hQ!W+hXO$NJsVr^y#@RFWCyf?WiW=q$-Ya9j^ zqchO+?UMIt*JfPfx26n|An_N`1N=@#{Exri=Xo`E0oSTK_{9%4BfhQInGWo8G=tQ( zAheSYKb%E&5$Nzw$86_F8i?`~!7Ba<4*{ylp)_wN03XOs2U^MYQe`~LHasQ5lEcZ`z%0Db)b0Nk;Beb!PV(-eSpufMDt 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%0Du1W}Z6GQQys^V6H2Io5&O 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

    wz26`ARzVTb$GPSo`3>JN_zzIdXd|H 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

    dt65VrwDo!a0M{|`0^}$YY#yHA>o2=J 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%0D&T%Mm9 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

    wO?fIO2|a2$>;vEyH_n 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%0Ay;A4UJ6Ne&oR;#m2;(9Dz#^m>qKDZ1oo6LX|8N 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

|6?9oS?>0%l~*0~XF0K!3>Y`wRD9>Hh#! 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

- + - + - + - + - + - + Date: Thu, 10 Oct 2019 11:44:21 +0200 Subject: [PATCH 166/980] NEW : Accountancy - List by account - Modify sortfield, nowrap on amount and sum of sous-total --- htdocs/accountancy/bookkeeping/listbyaccount.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php index d3dc9b4a190..2b9fc4fde29 100644 --- a/htdocs/accountancy/bookkeeping/listbyaccount.php +++ b/htdocs/accountancy/bookkeeping/listbyaccount.php @@ -71,7 +71,7 @@ $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; if ($sortorder == "") $sortorder = "ASC"; -if ($sortfield == "") $sortfield = "t.rowid"; +if ($sortfield == "") $sortfield = "t.doc_date"; if (empty($search_date_start) && empty($search_date_end)) { $sql = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear "; @@ -376,8 +376,8 @@ while ($i < min($num, $limit)) print strlen(length_accounta($line->subledger_account)) == 0 ? '' : ''; - print ''; - print ''; + print ''; + print ''; $accountingjournal = new AccountingJournal($db); $result = $accountingjournal->fetch('', $line->code_journal); @@ -400,18 +400,19 @@ while ($i < min($num, $limit)) // Affiche un Sous-Total du dernier compte comptable affiché print ''; print ''; -print "\n"; -print "\n"; +print '\n'; print ''; // Affiche le Total print ''; print ''; -print ''; -print ''; print ''; From 612c80b290ff2abc52bc9437ea80a227a071865b Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 10 Oct 2019 13:07:19 +0200 Subject: [PATCH 167/980] Update api_setup.class.php --- htdocs/api/class/api_setup.class.php | 66 +++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index dd0a08039ef..9552380f090 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -358,6 +358,70 @@ class Setup extends DolibarrApi } + $sql.= $this->db->order($sortfield, $sortorder); + + if ($limit) { + if ($page < 0) { + $page = 0; + } + $offset = $limit * $page; + + $sql .= $this->db->plimit($limit, $offset); + } + + $result = $this->db->query($sql); + + if ($result) { + $num = $this->db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + for ($i = 0; $i < $min; $i++) { + $list[] = $this->db->fetch_object($result); + } + } else { + throw new RestException(503, 'Error when retrieving list of events types : '.$this->db->lasterror()); + } + + return $list; + } + + /** + * Get the list of contacts types. + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Number of items per page + * @param int $page Page number (starting from zero) + * @param string $type To filter on type of contact + * @param string $module To filter on module contacts + * @param int $active Payment term is active or not {@min 0} {@max 1} + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)" + * @return array List of Contacts types + * + * @url GET dictionary/contact_types + * + * @throws RestException + */ + public function getListOfContactTypes($sortfield = "code", $sortorder = 'ASC', $limit = 100, $page = 0, $type = '', $module = '', $active = 1, $sqlfilters = '') + { + $list = array(); + + $sql = "SELECT rowid, code, element as type, libelle as label, source, module, position"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as t"; + $sql.= " WHERE t.active = ".$active; + if ($type) $sql.=" AND type LIKE '%" . $this->db->escape($type) . "%'"; + if ($module) $sql.=" AND t.module LIKE '%" . $this->db->escape($module) . "%'"; + // Add sql filters + if ($sqlfilters) + { + if (! DolibarrApi::_checkFilters($sqlfilters)) + { + throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); + } + $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; + $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } + + $sql.= $this->db->order($sortfield, $sortorder); if ($limit) { @@ -394,7 +458,7 @@ class Setup extends DolibarrApi * @param string $module To filter on module events * @param int $active Payment term is active or not {@min 0} {@max 1} * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)" - * @return array List of civility types + * @return array List of civility types * * @url GET dictionary/civilities * From 56b6223bba5149115b125d16d1a59c678e0f8880 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 10 Oct 2019 14:23:18 +0200 Subject: [PATCH 168/980] Update api_setup.class.php --- htdocs/api/class/api_setup.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 9552380f090..4ef09e5ae78 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -329,7 +329,7 @@ class Setup extends DolibarrApi * @param int $page Page number (starting from zero) * @param string $type To filter on type of event * @param string $module To filter on module events - * @param int $active Payment term is active or not {@min 0} {@max 1} + * @param int $active Event's type is active or not {@min 0} {@max 1} * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)" * @return array List of events types * @@ -393,7 +393,7 @@ class Setup extends DolibarrApi * @param int $page Page number (starting from zero) * @param string $type To filter on type of contact * @param string $module To filter on module contacts - * @param int $active Payment term is active or not {@min 0} {@max 1} + * @param int $active Contact's type is active or not {@min 0} {@max 1} * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)" * @return array List of Contacts types * @@ -456,7 +456,7 @@ class Setup extends DolibarrApi * @param int $limit Number of items per page * @param int $page Page number (starting from zero) * @param string $module To filter on module events - * @param int $active Payment term is active or not {@min 0} {@max 1} + * @param int $active Civility is active or not {@min 0} {@max 1} * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)" * @return array List of civility types * From 015d51c16994f1e605c67501d8c97f63d0b98e00 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 15:10:41 +0200 Subject: [PATCH 169/980] NEW Add column of module source and POS terminal in invoice list. --- htdocs/compta/facture/list.php | 124 ++++++++++++++++++++++----------- 1 file changed, 83 insertions(+), 41 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index c11d5796109..93d4e28d5c8 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -89,6 +89,8 @@ $search_montant_ttc=GETPOST('search_montant_ttc', 'alpha'); $search_status=GETPOST('search_status', 'intcomma'); $search_paymentmode=GETPOST('search_paymentmode', 'int'); $search_paymentterms=GETPOST('search_paymentterms', 'int'); +$search_module_source=GETPOST('search_module_source', 'alpha'); +$search_pos_source=GETPOST('search_pos_source', 'alpha'); $search_town=GETPOST('search_town', 'alpha'); $search_zip=GETPOST('search_zip', 'alpha'); $search_state=trim(GETPOST("search_state")); @@ -157,37 +159,39 @@ if (empty($user->socid)) $fieldstosearchall["f.note_private"]="NotePrivate"; $checkedtypetiers=0; $arrayfields=array( - 'f.ref'=>array('label'=>"Ref", 'checked'=>1), - 'f.ref_client'=>array('label'=>"RefCustomer", 'checked'=>1), - 'f.type'=>array('label'=>"Type", 'checked'=>0), - 'f.date'=>array('label'=>"DateInvoice", 'checked'=>1), - 'f.date_lim_reglement'=>array('label'=>"DateDue", 'checked'=>1), - 'p.ref'=>array('label'=>"ProjectRef", 'checked'=>1, 'enabled'=>(empty($conf->projet->enabled)?0:1)), - 'p.title'=>array('label'=>"ProjectLabel", 'checked'=>0, 'enabled'=>(empty($conf->projet->enabled)?0:1)), - 's.nom'=>array('label'=>"ThirdParty", 'checked'=>1), - 's.town'=>array('label'=>"Town", 'checked'=>1), - 's.zip'=>array('label'=>"Zip", 'checked'=>1), - 'state.nom'=>array('label'=>"StateShort", 'checked'=>0), - 'country.code_iso'=>array('label'=>"Country", 'checked'=>0), - 'typent.code'=>array('label'=>"ThirdPartyType", 'checked'=>$checkedtypetiers), - 'f.fk_mode_reglement'=>array('label'=>"PaymentMode", 'checked'=>1), - 'f.fk_cond_reglement'=>array('label'=>"PaymentConditionsShort", 'checked'=>1), - 'f.total_ht'=>array('label'=>"AmountHT", 'checked'=>1), - 'f.total_vat'=>array('label'=>"AmountVAT", 'checked'=>0), - 'f.total_localtax1'=>array('label'=>$langs->transcountry("AmountLT1", $mysoc->country_code), 'checked'=>0, 'enabled'=>($mysoc->localtax1_assuj=="1")), - 'f.total_localtax2'=>array('label'=>$langs->transcountry("AmountLT2", $mysoc->country_code), 'checked'=>0, 'enabled'=>($mysoc->localtax2_assuj=="1")), - 'f.total_ttc'=>array('label'=>"AmountTTC", 'checked'=>0), - 'dynamount_payed'=>array('label'=>"Received", 'checked'=>0), - 'rtp'=>array('label'=>"Rest", 'checked'=>0), + 'f.ref'=>array('label'=>"Ref", 'checked'=>1, 'position'=>5), + '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_lim_reglement'=>array('label'=>"DateDue", 'checked'=>1, 'position'=>25), + 'f.date_closing'=>array('label'=>"DateClosing", 'checked'=>0, 'position'=>30), + 'p.ref'=>array('label'=>"ProjectRef", 'checked'=>1, 'enabled'=>(empty($conf->projet->enabled)?0:1), 'position'=>40), + 'p.title'=>array('label'=>"ProjectLabel", 'checked'=>0, 'enabled'=>(empty($conf->projet->enabled)?0:1), 'position'=>40), + 's.nom'=>array('label'=>"ThirdParty", 'checked'=>1, 'position'=>50), + 's.town'=>array('label'=>"Town", 'checked'=>1, 'position'=>55), + 's.zip'=>array('label'=>"Zip", 'checked'=>1, 'position'=>60), + 'state.nom'=>array('label'=>"StateShort", 'checked'=>0, 'position'=>65), + 'country.code_iso'=>array('label'=>"Country", 'checked'=>0, 'position'=>70), + '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'=>0, 'enabled'=>($conf->cashdesk->enabled || $conf->takepos->enabled || $conf->global->POS_EXTERNAL_ENABLED), 'position'=>90), + 'f.pos_source'=>array('label'=>"Terminal", 'checked'=>0, 'enabled'=>($conf->cashdesk->enabled || $conf->takepos->enabled || $conf->global->POS_EXTERNAL_ENABLED), '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), + 'f.total_localtax2'=>array('label'=>$langs->transcountry("AmountLT2", $mysoc->country_code), 'checked'=>0, 'enabled'=>($mysoc->localtax2_assuj=="1"), 'position'=>120), + 'f.total_ttc'=>array('label'=>"AmountTTC", 'checked'=>0, 'position'=>130), + 'dynamount_payed'=>array('label'=>"Received", 'checked'=>0, 'position'=>140), + 'rtp'=>array('label'=>"Rest", 'checked'=>0, 'position'=>150), 'f.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), 'f.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500), - 'f.date_closing'=>array('label'=>"DateClosing", 'checked'=>0, 'position'=>500), 'f.fk_statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000), ); if($conf->global->INVOICE_USE_SITUATION && $conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY) { - $arrayfields['f.retained_warranty'] = array('label'=>$langs->trans("RetainedWarranty"), 'checked'=>0); + $arrayfields['f.retained_warranty'] = array('label'=>$langs->trans("RetainedWarranty"), 'checked'=>0, 'position'=>86); } // Extra fields @@ -236,6 +240,8 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', $search_status=''; $search_paymentmode=''; $search_paymentterms=''; + $search_module_source=''; + $search_pos_source=''; $search_town=''; $search_zip=""; $search_state=""; @@ -381,13 +387,10 @@ $sql = 'SELECT'; if ($sall || $search_product_category > 0) $sql = 'SELECT DISTINCT'; $sql.= ' f.rowid as id, f.ref, f.ref_client, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.fk_cond_reglement, f.total as total_ht, f.tva as total_vat, f.total_ttc,'; $sql.= ' f.localtax1 as total_localtax1, f.localtax2 as total_localtax2,'; -$sql.= ' f.datef as df, f.date_lim_reglement as datelimite,'; +$sql.= ' f.datef as df, f.date_lim_reglement as datelimite, f.module_source, f.pos_source,'; $sql.= ' f.paye as paye, f.fk_statut,'; $sql.= ' f.datec as date_creation, f.tms as date_update, f.date_closing as date_closing,'; -if($conf->global->INVOICE_USE_SITUATION && $conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY) -{ - $sql.= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final,f.situation_cycle_ref,f.situation_counter,'; -} +$sql.= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,'; $sql.= ' s.rowid as socid, s.nom as name, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta as code_compta_client, s.code_compta_fournisseur,'; $sql.= " typent.code as typent_code,"; $sql.= " state.code_departement as state_code, state.nom as state_name,"; @@ -475,8 +478,10 @@ if ($search_status != '-1' && $search_status != '') $sql.= " AND f.fk_statut IN (".$db->escape($search_status).")"; // When search_status is '1,2' for example } } -if ($search_paymentmode > 0) $sql .= " AND f.fk_mode_reglement = ".$db->escape($search_paymentmode); +if ($search_paymentmode > 0) $sql .= " AND f.fk_mode_reglement = ".$db->escape($search_paymentmode); if ($search_paymentterms > 0) $sql .= " AND f.fk_cond_reglement = ".$db->escape($search_paymentterms); +if ($search_module_source) $sql .= natural_search("f.module_source", $search_module_source); +if ($search_pos_source) $sql .= natural_search("f.pos_source", $search_pos_source); $sql.= dolSqlDateFilter("f.datef", $search_day, $search_month, $search_year); $sql.= dolSqlDateFilter("f.date_lim_reglement", $search_day_lim, $search_month_lim, $search_year_lim); if ($option == 'late') $sql.=" AND f.date_lim_reglement < '".$db->idate(dol_now() - $conf->facture->client->warning_delay)."'"; @@ -496,9 +501,10 @@ if (! $sall) { $sql.= ' GROUP BY f.rowid, f.ref, ref_client, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.fk_cond_reglement, f.total, f.tva, f.total_ttc,'; $sql.= ' f.localtax1, f.localtax2,'; - $sql.= ' f.datef, f.date_lim_reglement,'; + $sql.= ' f.datef, f.date_lim_reglement, f.module_source, f.pos_source,'; $sql.= ' f.paye, f.fk_statut,'; $sql.= ' f.datec, f.tms, f.date_closing,'; + $sql.= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,'; $sql.= ' s.rowid, s.nom, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,'; $sql.= ' typent.code,'; $sql.= ' state.code_departement, state.nom,'; @@ -591,6 +597,8 @@ if ($resql) if ($search_status != '') $param.='&search_status='.urlencode($search_status); if ($search_paymentmode > 0) $param.='&search_paymentmode='.urlencode($search_paymentmode); if ($search_paymentterms > 0) $param.='&search_paymentterms='.urlencode($search_paymentterms); + if ($search_module_source) $param.='&search_module_source='.urlencode($search_module_source); + if ($search_pos_source) $param.='&search_pos_source='.urlencode($search_pos_source); if ($show_files) $param.='&show_files='.urlencode($show_files); if ($option) $param.="&search_option=".urlencode($option); if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); @@ -804,17 +812,31 @@ if ($resql) // Payment mode if (! empty($arrayfields['f.fk_mode_reglement']['checked'])) { - print ''; } // Payment terms if (! empty($arrayfields['f.fk_cond_reglement']['checked'])) { - print ''; } + // Module source + if (! empty($arrayfields['f.module_source']['checked'])) + { + print ''; + } + // POS Terminal + if (! empty($arrayfields['f.pos_source']['checked'])) + { + print ''; + } if (! empty($arrayfields['f.total_ht']['checked'])) { // Amount @@ -923,6 +945,8 @@ if ($resql) if (! empty($arrayfields['typent.code']['checked'])) print_liste_field_titre($arrayfields['typent.code']['label'], $_SERVER["PHP_SELF"], "typent.code", "", $param, 'align="center"', $sortfield, $sortorder); if (! empty($arrayfields['f.fk_mode_reglement']['checked'])) print_liste_field_titre($arrayfields['f.fk_mode_reglement']['label'], $_SERVER["PHP_SELF"], "f.fk_mode_reglement", "", $param, "", $sortfield, $sortorder); if (! empty($arrayfields['f.fk_cond_reglement']['checked'])) print_liste_field_titre($arrayfields['f.fk_cond_reglement']['label'], $_SERVER["PHP_SELF"], "f.fk_cond_reglement", "", $param, "", $sortfield, $sortorder); + if (! empty($arrayfields['f.module_source']['checked'])) print_liste_field_titre($arrayfields['f.module_source']['label'], $_SERVER["PHP_SELF"], "f.module_source", "", $param, "", $sortfield, $sortorder); + if (! empty($arrayfields['f.pos_source']['checked'])) print_liste_field_titre($arrayfields['f.pos_source']['label'], $_SERVER["PHP_SELF"], "f.pos_source", "", $param, "", $sortfield, $sortorder); if (! empty($arrayfields['f.total_ht']['checked'])) print_liste_field_titre($arrayfields['f.total_ht']['label'], $_SERVER['PHP_SELF'], 'f.total', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['f.total_vat']['checked'])) print_liste_field_titre($arrayfields['f.total_vat']['label'], $_SERVER['PHP_SELF'], 'f.tva', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['f.total_localtax1']['checked'])) print_liste_field_titre($arrayfields['f.total_localtax1']['label'], $_SERVER['PHP_SELF'], 'f.localtax1', '', $param, 'class="right"', $sortfield, $sortorder); @@ -1107,14 +1131,14 @@ if ($resql) if (! empty($arrayfields['s.nom']['checked'])) { print ''; if (! $i) $totalarray['nbfield']++; } @@ -1186,6 +1210,24 @@ if ($resql) if (! $i) $totalarray['nbfield']++; } + // Module Source + if (! empty($arrayfields['f.module_source']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + + // POS Terminal + if (! empty($arrayfields['f.pos_source']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + // Amount HT if (! empty($arrayfields['f.total_ht']['checked'])) { From 9f12d229565cd096bbac0dacd8d6402d322ea81c Mon Sep 17 00:00:00 2001 From: Jimmy Date: Thu, 10 Oct 2019 15:18:24 +0200 Subject: [PATCH 170/980] Fix for NGINX --- htdocs/api/index.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/api/index.php b/htdocs/api/index.php index 2a734b9336d..318b47c6d36 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -38,6 +38,9 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page is p if (! empty($_SERVER['HTTP_DOLAPIENTITY'])) define("DOLENTITY", (int) $_SERVER['HTTP_DOLAPIENTITY']); +// Fix for NGINX +$url = $_SERVER["SCRIPT_URI"] !== null ? $_SERVER["SCRIPT_URI"] : $_SERVER['PHP_SELF']; + $res=0; if (! $res && file_exists("../main.inc.php")) $res=include '../main.inc.php'; if (! $res) die("Include of main fails"); @@ -67,7 +70,7 @@ if (empty($conf->global->MAIN_MODULE_API)) } // Test if explorer is not disabled -if (preg_match('/api\/index\.php\/explorer/', $_SERVER["PHP_SELF"]) && ! empty($conf->global->API_EXPLORER_DISABLED)) +if (preg_match('/api\/index\.php\/explorer/', $url) && ! empty($conf->global->API_EXPLORER_DISABLED)) { $langs->load("admin"); dol_syslog("Call Dolibarr API interfaces with module REST disabled"); @@ -91,7 +94,7 @@ if (preg_match('/api\/index\.php\/explorer/', $_SERVER["PHP_SELF"]) && ! empty($ $reg=array(); -preg_match('/index\.php\/([^\/]+)(.*)$/', $_SERVER["PHP_SELF"], $reg); +preg_match('/index\.php\/([^\/]+)(.*)$/', $url, $reg); // .../index.php/categories?sortfield=t.rowid&sortorder=ASC From d9a0dc2986a6a3bc01676b16d92a747eb0c848cd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 15:20:44 +0200 Subject: [PATCH 171/980] Fix trans --- htdocs/core/modules/modFacture.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/modFacture.class.php b/htdocs/core/modules/modFacture.class.php index b1b10f34ffb..fccc7f365e2 100644 --- a/htdocs/core/modules/modFacture.class.php +++ b/htdocs/core/modules/modFacture.class.php @@ -234,7 +234,7 @@ class modFacture extends DolibarrModules } if (! empty($conf->cashdesk->enabled) || ! empty($conf->takepos->enabled) || ! empty($conf->global->INVOICE_SHOW_POS_IN_EXPORT)) { - $this->export_fields_array[$r]['f.module_source']='POSModule'; + $this->export_fields_array[$r]['f.module_source']='Module'; $this->export_fields_array[$r]['f.pos_source']='POSTerminal'; } $this->export_TypeFields_array[$r] = array( From b34cbfad74a7d7dde02ca61461b43db8b7547c68 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 15:23:45 +0200 Subject: [PATCH 172/980] Rename const --- htdocs/compta/facture/list.php | 4 ++-- htdocs/core/modules/modFacture.class.php | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 93d4e28d5c8..77abac6e4d1 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -175,8 +175,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'=>0, 'enabled'=>($conf->cashdesk->enabled || $conf->takepos->enabled || $conf->global->POS_EXTERNAL_ENABLED), 'position'=>90), - 'f.pos_source'=>array('label'=>"Terminal", 'checked'=>0, 'enabled'=>($conf->cashdesk->enabled || $conf->takepos->enabled || $conf->global->POS_EXTERNAL_ENABLED), 'position'=>91), + 'f.module_source'=>array('label'=>"Module", 'checked'=>0, 'enabled'=>($conf->cashdesk->enabled || $conf->takepos->enabled || $conf->global->INVOICE_SHOW_POS), 'position'=>90), + 'f.pos_source'=>array('label'=>"Terminal", 'checked'=>0, 'enabled'=>($conf->cashdesk->enabled || $conf->takepos->enabled || $conf->global->INVOICE_SHOW_POS), '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), diff --git a/htdocs/core/modules/modFacture.class.php b/htdocs/core/modules/modFacture.class.php index fccc7f365e2..01c80265e46 100644 --- a/htdocs/core/modules/modFacture.class.php +++ b/htdocs/core/modules/modFacture.class.php @@ -232,7 +232,7 @@ class modFacture extends DolibarrModules $this->export_fields_array[$r]['f.multicurrency_total_tva'] = 'MulticurrencyAmountVAT'; $this->export_fields_array[$r]['f.multicurrency_total_ttc'] = 'MulticurrencyAmountTTC'; } - if (! empty($conf->cashdesk->enabled) || ! empty($conf->takepos->enabled) || ! empty($conf->global->INVOICE_SHOW_POS_IN_EXPORT)) + if (! empty($conf->cashdesk->enabled) || ! empty($conf->takepos->enabled) || ! empty($conf->global->INVOICE_SHOW_POS)) { $this->export_fields_array[$r]['f.module_source']='Module'; $this->export_fields_array[$r]['f.pos_source']='POSTerminal'; @@ -248,7 +248,7 @@ class modFacture extends DolibarrModules 'fd.special_code'=>'Numeric', 'fd.product_type'=>"Numeric", 'fd.fk_product'=>'List:product:label', 'p.ref'=>'Text', 'p.label'=>'Text', 'p.accountancy_code_sell'=>'Text' ); - if (! empty($conf->cashdesk->enabled) || ! empty($conf->takepos->enabled) || ! empty($conf->global->INVOICE_SHOW_POS_IN_EXPORT)) + if (! empty($conf->cashdesk->enabled) || ! empty($conf->takepos->enabled) || ! empty($conf->global->INVOICE_SHOW_POS)) { $this->export_TypeFields_array[$r]['f.module_source']='Text'; $this->export_TypeFields_array[$r]['f.pos_source']='Text'; @@ -314,7 +314,7 @@ class modFacture extends DolibarrModules $this->export_fields_array[$r]['f.multicurrency_total_tva'] = 'MulticurrencyAmountVAT'; $this->export_fields_array[$r]['f.multicurrency_total_ttc'] = 'MulticurrencyAmountTTC'; } - if (! empty($conf->cashdesk->enabled) || ! empty($conf->takepos->enabled) || ! empty($conf->global->INVOICE_SHOW_POS_IN_EXPORT)) + if (! empty($conf->cashdesk->enabled) || ! empty($conf->takepos->enabled) || ! empty($conf->global->INVOICE_SHOW_POS)) { $this->export_fields_array[$r]['f.module_source']='POSModule'; $this->export_fields_array[$r]['f.pos_source']='POSTerminal'; @@ -328,7 +328,7 @@ class modFacture extends DolibarrModules 'pj.ref'=>'Text', 'p.amount'=>'Numeric', 'pf.amount'=>'Numeric', 'p.rowid'=>'Numeric', 'p.ref'=>'Text', 'p.title'=>'Text', 'p.datep'=>'Date', 'p.num_paiement'=>'Numeric', 'p.fk_bank'=>'Numeric', 'p.note'=>'Text', 'pt.code'=>'Text', 'pt.libelle'=>'text', 'ba.ref'=>'Text' ); - if (! empty($conf->cashdesk->enabled) || ! empty($conf->takepos->enabled) || ! empty($conf->global->INVOICE_SHOW_POS_IN_EXPORT)) + if (! empty($conf->cashdesk->enabled) || ! empty($conf->takepos->enabled) || ! empty($conf->global->INVOICE_SHOW_POS)) { $this->export_fields_array[$r]['f.module_source']='POSModule'; $this->export_fields_array[$r]['f.pos_source']='POSTerminal'; From 3b56cf5e1938b4d515eed7ace261726bf5b421d3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 15:24:26 +0200 Subject: [PATCH 173/980] Trans --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index 0f4d3c30ddf..c8b7db19236 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,6 +23,7 @@ Following changes may create regressions for some external modules, but were nec * If you have developed your own emailing target selector and used parent::add_to_target(...), you must now use parent::addToTargets(...) * Removed function dol_micro_time. Use native PHP microtime instead. * The trigger BON_PRELEVEMENT_CREATE has been renamed into DIRECT_DEBIT_ORDER_CREATE. +* The constant INVOICE_SHOW_POS_IN_EXPORT has been renamed into INVOICE_SHOW_POS. ***** ChangeLog for 10.0.2 compared to 10.0.1 ***** From 060452ecf29771079ad19684bce9295e3fc13a0c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 15:29:27 +0200 Subject: [PATCH 174/980] Fix link --- htdocs/takepos/admin/setup.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/takepos/admin/setup.php b/htdocs/takepos/admin/setup.php index d891b88f775..6289f382273 100644 --- a/htdocs/takepos/admin/setup.php +++ b/htdocs/takepos/admin/setup.php @@ -165,14 +165,14 @@ print "\n"; // Use Takepos printing print '\n"; -if ($conf->global->TAKEPOSCONNECTOR){ +if ($conf->global->TAKEPOSCONNECTOR) { print ''; @@ -189,7 +189,7 @@ print "\n"; if ($conf->global->TAKEPOS_BAR_RESTAURANT && $conf->global->TAKEPOSCONNECTOR){ print ''; From e5cb9bc22eaa7f8e014aee1ae8bcd3b5e6b2fe2f Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 10 Oct 2019 15:56:36 +0200 Subject: [PATCH 175/980] Update api_setup.class.php --- htdocs/api/class/api_setup.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 4ef09e5ae78..1d4bb6a8cb7 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -442,7 +442,7 @@ class Setup extends DolibarrApi $list[] = $this->db->fetch_object($result); } } else { - throw new RestException(503, 'Error when retrieving list of events types : '.$this->db->lasterror()); + throw new RestException(503, 'Error when retrieving list of contacts types : '.$this->db->lasterror()); } return $list; From 2149b155d196a826e485b0b40526a16534df685e Mon Sep 17 00:00:00 2001 From: "ro@t.com" Date: Thu, 10 Oct 2019 15:57:26 +0200 Subject: [PATCH 176/980] ADD option MAIN_DONT_KEEP_NOTE_ON_CLONING to remove note on cloning --- htdocs/comm/propal/class/propal.class.php | 6 +++++- htdocs/compta/facture/class/facture.class.php | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index e9d969e5ab8..6babe8076a8 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1287,7 +1287,11 @@ class Propal extends CommonObject $object->datep = $now; // deprecated $object->fin_validite = $object->date + ($object->duree_validite * 24 * 3600); if (empty($conf->global->MAIN_KEEP_REF_CUSTOMER_ON_CLONING)) $object->ref_client = ''; - + if ($conf->global->MAIN_DONT_KEEP_NOTE_ON_CLONING==1) + { + $object->note_private = ''; + $object->note_public = ''; + } // Create clone $object->context['createfromclone']='createfromclone'; $result=$object->create($user); diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 09d3351fb4d..7f5432682ab 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -1046,6 +1046,11 @@ class Facture extends CommonInvoice $object->close_code = ''; $object->close_note = ''; $object->products = $object->lines; // For backward compatibility + if ($conf->global->MAIN_DONT_KEEP_NOTE_ON_CLONING==1) + { + $object->note_private = ''; + $object->note_public = ''; + } // Loop on each line of new invoice foreach($object->lines as $i => $line) From e2113c2f3342452852e6dbcbfb1a06c27558596f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 16:41:24 +0200 Subject: [PATCH 177/980] Fix sort lost after uploading a file --- htdocs/core/class/html.formfile.class.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 76eec464399..7f9ada37e7d 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -118,9 +118,11 @@ class FormFile if (empty($usewithoutform)) { $out .= ''; + $out .= ''; $out .= ''; $out .= ''; - $out .= ''; + $out .= ''; + $out .= ''; } $out .= '
'.$langs->trans("NetMeasure").''; + print ''; + print $formproduct->selectMeasuringUnits("net_measure_units", "net_measure", GETPOSTISSET('net_measure_units')?GETPOST('net_measure_units', 'alpha'):(empty($conf->global->MAIN_WEIGHT_DEFAULT_UNIT)?0:$conf->global->MAIN_WEIGHT_DEFAULT_UNIT), 0, 2); + print '
'.$langs->trans("Weight").''; print ''; print $formproduct->selectMeasuringUnits("weight_units", "weight", GETPOSTISSET('weight_units')?GETPOST('weight_units', 'alpha'):(empty($conf->global->MAIN_WEIGHT_DEFAULT_UNIT)?0:$conf->global->MAIN_WEIGHT_DEFAULT_UNIT), 0, 2); print '
'.$langs->trans("Length").' x '.$langs->trans("Width").' x '.$langs->trans("Height").''; @@ -1071,7 +1083,7 @@ else } if (empty($conf->global->PRODUCT_DISABLE_SURFACE)) { - // Surface + // Brut Surface print '
'.$langs->trans("Surface").''; print ''; print $formproduct->selectMeasuringUnits("surface_units", "surface", GETPOSTISSET('surface_units')?GETPOST('surface_units', 'alpha'):'0', 0, 2); @@ -1079,7 +1091,7 @@ else } if (empty($conf->global->PRODUCT_DISABLE_VOLUME)) { - // Volume + // Brut Volume print '
'.$langs->trans("Volume").''; print ''; print $formproduct->selectMeasuringUnits("volume_units", "volume", GETPOSTISSET('volume_units')?GETPOST('volume_units', 'alpha'):'0', 0, 2); @@ -1426,15 +1438,22 @@ else $statutarray=array('-1'=>' ', '1' => $langs->trans("Finished"), '0' => $langs->trans("RowMaterial")); print $form->selectarray('finished', $statutarray, $object->finished); print '
'.$langs->trans("NetMeasure").''; + print ' '; + print $form->selectUnits($object->net_measure_units, 'units'); + //print $formproduct->selectMeasuringUnits("net_measure_units", "weight", $object->net_measure_units, 0, 2); + print '
'.$langs->trans("Weight").''; print ' '; print $formproduct->selectMeasuringUnits("weight_units", "weight", $object->weight_units, 0, 2); print '
'.$langs->trans("Length").' x '.$langs->trans("Width").' x '.$langs->trans("Height").''; print 'x'; print 'x'; @@ -1444,7 +1463,7 @@ else } if (empty($conf->global->PRODUCT_DISABLE_SURFACE)) { - // Surface + // Brut Surface print '
'.$langs->trans("Surface").''; print ' '; print $formproduct->selectMeasuringUnits("surface_units", "surface", $object->surface_units, 0, 2); @@ -1452,7 +1471,7 @@ else } if (empty($conf->global->PRODUCT_DISABLE_VOLUME)) { - // Volume + // Brut Volume print '
'.$langs->trans("Volume").''; print ' '; print $formproduct->selectMeasuringUnits("volume_units", "volume", $object->volume_units, 0, 2); @@ -1833,8 +1852,19 @@ else print '
'.$langs->trans("Nature").''; print $object->getLibFinished(); print '
'.$langs->trans("NetMeasure").''; + if ($object->net_measure != '') + { + print $object->net_measure." ".measuring_units_string(0, "weight", $object->net_measure_units); + } + else + { + print ' '; + } - // Weight + // Brut Weight print '
'.$langs->trans("Weight").''; if ($object->weight != '') { @@ -1847,7 +1877,7 @@ else print "
'.$langs->trans("Length").' x '.$langs->trans("Width").' x '.$langs->trans("Height").''; if ($object->length != '' || $object->width != '' || $object->height != '') { @@ -1864,7 +1894,7 @@ else } if (empty($conf->global->PRODUCT_DISABLE_SURFACE)) { - // Surface + // Brut Surface print '
'.$langs->trans("Surface").''; if ($object->surface != '') { @@ -1878,7 +1908,7 @@ else } if (empty($conf->global->PRODUCT_DISABLE_VOLUME)) { - // Volume + // Brut Volume print '
'.$langs->trans("Volume").''; if ($object->volume != '') { From d77f7556d8f19f4f622083eebf771e75962a6acb Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Wed, 9 Oct 2019 16:00:14 +0200 Subject: [PATCH 150/980] NEW add parent category id or label in import category module --- .../modules/import/import_csv.modules.php | 6 +++++- .../modules/import/import_xlsx.modules.php | 6 +++++- htdocs/core/modules/modCategorie.class.php | 20 ++++++++++++++++--- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index de428900ba9..734f516fa78 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -459,10 +459,14 @@ class ImportCsv extends ModeleImports $error++; }*/ $param_array = array('', $newval, 0, $arrayrecord[0]['val']); // Param to fetch parent from account, in chart. + } elseif ($class == 'Categorie') { + if ($objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel') { + $param_array = array('', $newval, $arrayrecord[1]['val']); + } } call_user_func_array(array($classinstance, $method), $param_array); // If not found, try the fetch from label - if (! ($classinstance->id != '') && $objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel') + if (! ($classinstance->id != '') && $objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel' && $class!='Categorie') { $param_array = array('', '', $newval); call_user_func_array(array($classinstance, $method), $param_array); diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php index c4799ba557e..1a92062b15f 100644 --- a/htdocs/core/modules/import/import_xlsx.modules.php +++ b/htdocs/core/modules/import/import_xlsx.modules.php @@ -486,10 +486,14 @@ class ImportXlsx extends ModeleImports $error++; }*/ $param_array = array('', $newval, 0, $arrayrecord[0]['val']); // Param to fetch parent from account, in chart. + } elseif ($class == 'Categorie') { + if ($objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel') { + $param_array = array('', $newval, $arrayrecord[1]['val']); + } } call_user_func_array(array($classinstance, $method), $param_array); // If not found, try the fetch from label - if (! ($classinstance->id != '') && $objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel') + if (! ($classinstance->id != '') && $objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel' && $class!='Categorie') { $param_array = array('', '', $newval); call_user_func_array(array($classinstance, $method), $param_array); diff --git a/htdocs/core/modules/modCategorie.class.php b/htdocs/core/modules/modCategorie.class.php index c04a4d6b346..e8a1bd218cd 100644 --- a/htdocs/core/modules/modCategorie.class.php +++ b/htdocs/core/modules/modCategorie.class.php @@ -406,15 +406,29 @@ class modCategorie extends DolibarrModules $this->import_icon[$r]=$this->picto; $this->import_entities_array[$r]=array(); // We define here only fields that use another icon that the one defined into import_icon $this->import_tables_array[$r]=array('ca'=>MAIN_DB_PREFIX.'categorie'); - $this->import_fields_array[$r]=array('ca.label'=>"Label*",'ca.type'=>"Type*",'ca.description'=>"Description"); - + $this->import_fields_array[$r]=array( + 'ca.label'=>"Label*",'ca.type'=>"Type*",'ca.description'=>"Description", + 'ca.fk_parent' => 'Parent' + ); $this->import_regex_array[$r]=array('ca.type'=>'^[0|1|2|3]'); + $this->import_convertvalue_array[$r] = array( + 'ca.fk_parent' => array( + 'rule' => 'fetchidfromcodeorlabel', + 'classfile' => '/categories/class/categorie.class.php', + 'class' => 'Categorie', + 'method' => 'fetch', + 'element' => 'category' + ) + ); $typeexample=""; if ($conf->product->enabled) { $typeexample.=($typeexample?"/":"")."0=Product"; } if ($conf->fournisseur->enabled) { $typeexample.=($typeexample?"/":"")."1=Supplier"; } if ($conf->societe->enabled) { $typeexample.=($typeexample?"/":"")."2=Customer-Prospect"; } if ($conf->adherent->enabled) { $typeexample.=($typeexample?"/":"")."3=Member"; } - $this->import_examplevalues_array[$r]=array('ca.label'=>"Supplier Category",'ca.type'=>$typeexample,'ca.description'=>"Imported category"); + $this->import_examplevalues_array[$r] = array( + 'ca.label'=>"Supplier Category",'ca.type'=>$typeexample,'ca.description'=>"Imported category", + 'ca.fk_parent' => '0' + ); if (! empty($conf->product->enabled)) { From 04dc9e957f1dfc1f049b97d8fc5a89ebd1f99841 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 9 Oct 2019 16:33:57 +0200 Subject: [PATCH 151/980] Update new LDCompta Export --- .../class/accountancyexport.class.php | 202 +++++++++++------- 1 file changed, 121 insertions(+), 81 deletions(-) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index dac238f97d6..f90d5797d09 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -926,91 +926,131 @@ class AccountancyExport * * @return void */ - public function exportLDCompta($objectLines) - { + public function exportLDCompta($objectLines) + { - $separator = ';'; - $end_line = "\n"; + $separator = ';'; + $end_line = "\r\n"; - foreach ($objectLines as $line) { + foreach ($objectLines as $line) { - $date_document = dol_print_date($line->doc_date, '%Y%m%d'); - $date_creation = dol_print_date($line->date_creation, '%Y%m%d'); + $date_document = dol_print_date($line->doc_date, '%Y%m%d'); + $date_creation = dol_print_date($line->date_creation, '%Y%m%d'); - // TYPE - $type_enregistrement = 'E'; // For write movement - print $type_enregistrement . $separator; - // JNAL - print substr($line->code_journal, 0, 2) . $separator; - // NECR - print $line->id . $separator; - // NPIE - print $line->piece_num . $separator; - // DATP - print $date_document . $separator; - // LIBE - print $line->label_operation . $separator; - // DATH - print $line->date_lim_reglement . $separator; - // CNPI - if ($line->doc_type == 'supplier_invoice') { - if ($line->montant < 0) { - $nature_piece = 'AF'; - } else { - $nature_piece = 'FF'; - } - } elseif ($line->doc_type == 'customer_invoice') { - if ($line->montant < 0) { - $nature_piece = 'AC'; - } else { - $nature_piece = 'FC'; - } - } else { - $nature_piece = ''; - } - print $nature_piece . $separator; - // RACI - /* - if (! empty($line->subledger_account)) { - if ($line->doc_type == 'supplier_invoice') { - $racine_subledger_account = '40'; - } elseif ($line->doc_type == 'customer_invoice') { - $racine_subledger_account = '41'; - } else { - $nature_piece = ''; - } - print $racine_subledger_account . $separator; - } else { - print $separator; - } - */ - // MONT - print price(abs($line->montant)) . $separator; - // CODC - print $line->sens . $separator; - // CPTG - print length_accountg($line->numero_compte) . $separator; - // DATE - print $date_creation . $separator; - // CLET - print $line->lettering_code . $separator; - // DATL - print $line->date_lettering . $separator; - // CPTA - if (! empty($line->subledger_account)) { - print length_accounta($line->subledger_account) . $separator; - } - // CNAT - if ($line->doc_type == 'supplier_invoice' && ! empty($line->subledger_account)) { - print 'F'; - } elseif ($line->doc_type == 'customer_invoice' && ! empty($line->subledger_account)) { - print 'C'; - } else { - print ''; - } - print $end_line; - } - } + // TYPE + $type_enregistrement = 'E'; // For write movement + print $type_enregistrement . $separator; + // JNAL + print substr($line->code_journal, 0, 2) . $separator; + // NECR + print $line->id . $separator; + // NPIE + print $line->piece_num . $separator; + // DATP + print $date_document . $separator; + // LIBE + print $line->label_operation . $separator; + // DATH + print $line->date_lim_reglement . $separator; + // CNPI + if ($line->doc_type == 'supplier_invoice') { + if ($line->montant < 0) { + $nature_piece = 'AF'; + } else { + $nature_piece = 'FF'; + } + } elseif ($line->doc_type == 'customer_invoice') { + if ($line->montant < 0) { + $nature_piece = 'AC'; + } else { + $nature_piece = 'FC'; + } + } else { + $nature_piece = ''; + } + print $nature_piece . $separator; + // RACI + /* + if (! empty($line->subledger_account)) { + if ($line->doc_type == 'supplier_invoice') { + $racine_subledger_account = '40'; + } elseif ($line->doc_type == 'customer_invoice') { + $racine_subledger_account = '41'; + } else { + $nature_piece = ''; + } + print $racine_subledger_account . $separator; + } else { + print $separator; + } + */ + print $separator; // deprecated CPTG & CPTA use instead + // MONT + print price(abs($line->montant), 0, '', 1, 2) . $separator; + // CODC + print $line->sens . $separator; + // CPTG + print length_accountg($line->numero_compte) . $separator; + // DATE + print $date_creation . $separator; + // CLET + print $line->lettering_code . $separator; + // DATL + print $line->date_lettering . $separator; + // CPTA + if (! empty($line->subledger_account)) { + print length_accounta($line->subledger_account) . $separator; + } else { + print $separator; + } + // CNAT + if ($line->doc_type == 'supplier_invoice' && ! empty($line->subledger_account)) { + print 'F' . $separator; + } elseif ($line->doc_type == 'customer_invoice' && ! empty($line->subledger_account)) { + print 'C' . $separator; + } else { + print $separator; + } + // SECT + print $separator; + // CTRE + print $separator; + // NORL + print $separator; + // DATV + print $separator; + // REFD + print $line->doc_ref . $separator; + // CODH + print $separator; + // NSEQ + print $separator; + // MTDV + print '0' . $separator; + // CODV + print $separator; + // TXDV + print '0' . $separator; + // MOPM + print $separator; + // BONP + print $separator; + // BQAF + print $separator; + // ECES + print $separator; + // TXTL + print $separator; + // ECRM + print $separator; + // DATK + print $separator; + // HEUK + print $separator; + + print $end_line; + } + } /** * Export format : Charlemagne From db651a607d07c856e65ef9906828c97b0cc13e85 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 9 Oct 2019 17:33:46 +0200 Subject: [PATCH 152/980] Use fontawesome for img_warning --- htdocs/core/boxes/modules_boxes.php | 5 +++-- htdocs/core/lib/functions.lib.php | 14 +++++++++----- htdocs/theme/eldy/global.inc.php | 3 ++- htdocs/theme/eldy/theme_vars.inc.php | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/htdocs/core/boxes/modules_boxes.php b/htdocs/core/boxes/modules_boxes.php index d445c2f27c0..8cc8de94295 100644 --- a/htdocs/core/boxes/modules_boxes.php +++ b/htdocs/core/boxes/modules_boxes.php @@ -301,6 +301,7 @@ class ModeleBoxes // Can't be abtract as it is instantiated to build "empty" box $textwithnotags=preg_replace('/<([^>]+)>/i', '', $text); $text2=isset($contents[$i][$j]['text2'])?$contents[$i][$j]['text2']:''; $text2withnotags=preg_replace('/<([^>]+)>/i', '', $text2); + $textnoformat=isset($contents[$i][$j]['textnoformat'])?$contents[$i][$j]['textnoformat']:''; //$out.= "xxx $textwithnotags y"; if (empty($contents[$i][$j]['tooltip'])) $contents[$i][$j]['tooltip']=""; @@ -332,13 +333,13 @@ class ModeleBoxes // Can't be abtract as it is instantiated to build "empty" box if (! empty($contents[$i][$j]['maxlength'])) $maxlength=$contents[$i][$j]['maxlength']; if ($maxlength) $textwithnotags=dol_trunc($textwithnotags, $maxlength); - if (preg_match('/^ 'address-book', 'setup'=>'cog', 'companies'=>'building', 'products'=>'cube', 'commercial'=>'suitcase', 'invoicing'=>'coins', 'accountancy'=>'money-check-alt', 'project'=>'sitemap', 'hrm'=>'umbrella-beach', 'members'=>'users', 'ticket'=>'ticket-alt', 'generic'=>'folder-open', 'switch_off'=>'toggle-off', 'switch_on'=>'toggle-on', 'bookmark'=>'star', 'bank'=>'university', 'close_title'=>'window-close', 'delete'=>'trash', 'edit'=>'pencil', 'filter'=>'filter', 'split'=>'code-fork', 'object_list'=>'list-alt','object_calendar'=>'calendar-alt', 'object_calendarweek'=>'calendar-week', 'object_calendarmonth'=>'calendar-alt', 'object_calendarday'=>'calendar-day', 'object_calendarperuser'=>'table', + 'warning'=>'exclamation-triangle', 'title_setup'=>'tools', 'title_accountancy'=>'money-check-alt', 'title_bank'=>'university', 'title_hrm'=>'umbrella-beach', 'title_agenda'=>'calendar-alt' ); - - if ($pictowithouttext == 'switch_off') { + if ($pictowithouttext == 'warning') { + $facolor = ''; + $fakey = 'fa-'.$arrayconvpictotofa[$pictowithouttext]; + $marginleftonlyshort = 0; + } elseif ($pictowithouttext == 'switch_off') { $facolor = '#999'; $fasize = '2em'; $fakey = 'fa-'.$arrayconvpictotofa[$pictowithouttext]; @@ -3174,7 +3178,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ $moreatt=trim($moreatt); $enabledisablehtml = ''; + $enabledisablehtml .= ($morecss ? ' ' . $morecss : '') . '" style="' . ($fasize ? ('font-size: ' . $fasize . ';') : '') . ($facolor ? (' color: ' . $facolor . ';') : '') . ($morestyle ? ' ' . $morestyle : '') . '"' . (($notitle || empty($titlealt)) ? '' : ' title="' . dol_escape_htmltag($titlealt) . '"') . ($moreatt ? ' ' . $moreatt : '') . '>'; if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) { $enabledisablehtml.= $titlealt; } @@ -3510,7 +3514,7 @@ function img_warning($titlealt = 'default', $moreatt = '', $morecss = 'pictowarn if ($titlealt == 'default') $titlealt = $langs->trans('Warning'); //return '
'.img_picto($titlealt, 'warning_white.png', 'class="pictowarning valignmiddle"'.($moreatt ? ($moreatt == '1' ? ' style="float: right"' : ' '.$moreatt): '')).'
'; - return img_picto($titlealt, 'warning.png', 'class="valignmiddle'.($morecss?' '.$morecss:'').'"'.($moreatt ? ($moreatt == '1' ? ' style="float: right"' : ' '.$moreatt): '')); + return img_picto($titlealt, 'warning.png', 'class="'.$morecss.'"'.($moreatt ? ($moreatt == '1' ? ' style="float: right"' : ' '.$moreatt): '')); } /** diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index fe1d1f675e5..fd7a5670f8e 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1349,7 +1349,8 @@ div.nopadding { padding-: 3px; } .pictowarning { - vertical-align: text-bottom; + /* vertical-align: text-bottom; */ + color: #9f4705; } .pictomodule { width: 14px; diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 32fbeb37c1c..91b50b2a249 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -70,7 +70,7 @@ $colorbackbody='255,255,255'; $colortexttitlenotab='110,80,20'; $colortexttitle='0,0,0'; $colortext='0,0,0'; -$colortextlink='10, 10, 100'; +$colortextlink='10, 20, 120'; $fontsize='0.86em'; $fontsizesmaller='0.75em'; $topMenuFontSize='1.2em'; From 072a0a26d6014fbdee1a8102f5617c789bf3c819 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 9 Oct 2019 18:07:00 +0200 Subject: [PATCH 153/980] Use a font awesome icon to show "shippable" flag on orders. --- htdocs/commande/list.php | 16 +++------------- htdocs/core/lib/functions.lib.php | 13 +++++++------ htdocs/fourn/commande/list.php | 19 ++++++------------- htdocs/theme/eldy/global.inc.php | 1 + htdocs/theme/md/style.css.php | 1 + 5 files changed, 18 insertions(+), 32 deletions(-) diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 39844ce390f..115bc46813a 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -814,10 +814,7 @@ if ($resql) $generic_commande->lines=array(); $generic_commande->getLinesArray(); - print ''; - print ''; // Show shippable Icon (create subloop, so may be slow) if ($conf->stock->enabled) @@ -903,16 +900,15 @@ if ($resql) } } } - if ($notshippable==0) { - $text_icon = img_picto('', 'object_sending'); + if ($notshippable == 0) { + $text_icon = img_picto('', 'dolly', '', false, 0, 0, '', 'green paddingleft'); $text_info = $langs->trans('Shippable').'
'.$text_info; } else { - $text_icon = img_picto('', 'error'); + $text_icon = img_picto('', 'dolly', '', false, 0, 0, '', 'error paddingleft'); $text_info = $langs->trans('NonShippable').'
'.$text_info; } } - print ''; } // Warning late icon and note - print ''; - print ''; - print '
'; print $generic_commande->getNomUrl(1, ($viewstatut != 2?0:$obj->fk_statut), 0, 0, 0, 1); - print ''; if ($nbprod) { print $form->textwithtooltip('', $text_info, 2, 1, $text_icon, '', 2); @@ -920,11 +916,9 @@ if ($resql) if ($warning) { // Always false in default mode print $form->textwithtooltip('', $langs->trans('NotEnoughForAllOrders').'
'.$text_warning, 2, 1, img_picto('', 'error'), '', 2); } - print '
'; if ($generic_commande->hasDelay()) { print img_picto($langs->trans("Late").' : '.$generic_commande->showDelay(), "warning"); } @@ -934,15 +928,11 @@ if ($resql) print ''.img_picto($langs->trans("ViewPrivateNote"), 'object_generic').''; print ''; } - print ''; $filename=dol_sanitizeFileName($obj->ref); $filedir=$conf->commande->multidir_output[$conf->entity] . '/' . dol_sanitizeFileName($obj->ref); $urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->rowid; print $formfile->getDocumentsLink($generic_commande->element, $filename, $filedir); - print '
'; print '
'; - print ''; // Picto + Ref - print ''; - // Warning - //print ''; // Other picto tool - print '
'; print $objectstatic->getNomUrl(1); - print ''; - //print ''; $filename=dol_sanitizeFileName($obj->ref); $filedir=$conf->fournisseur->commande->dir_output.'/' . dol_sanitizeFileName($obj->ref); print $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir); - print '
'; print '
"; + print ''; if ($userstatic->id) print $userstatic->getNomUrl(1); - else print " "; print "'; + print ''; $thirdpartytmp->id = $obj->socid; $thirdpartytmp->name = $obj->name; + $thirdpartytmp->email = $obj->email; print $thirdpartytmp->getNomUrl(1, 'supplier'); print 'gxQ!fO_>&2z7}*L&&66U^h&fZ9TiPao0FMnu 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%0AbGpVXTuq8}h|B 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 PIRcd9p=DH1D6jw71(!Q7 literal 0 HcmV?d00001 diff --git a/htdocs/install/doctemplates/adherent/1/photos/thumbs/person5_mini.jpeg b/htdocs/install/doctemplates/adherent/1/photos/thumbs/person5_mini.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9cc8db56f702ab69f14c33a8cd5e08427d93de13 GIT binary patch literal 2103 zcmbW!X*Ao3769;nBob1C)E-MhN@FVxYH2ZwC^ZZj`!duLR7(&dB&L=kZ5dINXSB5x zt)=#*rL9^j)pk_uR4a;dXw*_m$F192JW;MjL3ud6R%S0EO^F`5{m!KNJRo3cy9-a6v)1xUh(jsFb+0w3N7{BvM`( zg_Om}NlKzM&={5Ds%ok-C{1lmthO>%75jY&2nK_}1>jz1;fe-J62?)ZE91b*z0(>Aam=6Nx=Z8QJr)h_M z0D|B@s(8{2D(2t|QzD7uu4LU6z?`jnCgC{9J*IOZB2f@7DJ3m~R8~2TRaMi~JEd=6 zXk>0-iMKjuZA19Q$=Su#&E3yGAdnao91A#KkMxfdw67YY<%LwENAZH{KDd=rL`~X8=G5S zw|92GyFdW=pRB)R|KUO$y7(XvFa-A91>%c2EHDDXuXqxA)XV|qOA=GUT@esJn{~JD znIJ~Tkt=Z_Vh}EQO!tHG+IQMNWd9v3@&A(j1^c&a0uTa&4xa}`0H(kcjN!?)Vb^?c z`dbDx1bDe-(h+voRmNYj%&*y?PdT%UGLzo)sKX{;eNIy&wVaDLhE;y8IO8`fNT$(l zbk19bsY!f`#Z2*ll$cJ@ZTjfQ+SJm;t9?gY*%fym7zO=IK6Qri=@iRlpSb7tfEtpV z?>6B&dPdvuSuK9l1nKGSC8KFV$!{f$esa}!{^0@=m$pX<2C(;#yWR<}UB5Ustbe$^;U%3uSBypA( zhQ1w7(6vY%Z$wOzz`G+~graJsILAJtQsSGAsk0t+^qrwoN_$%jv{HeJT(e2H@PY)-CDVjRkRL#eL%GrTB4 zZC7X3KD9dDJVb8tvHruPM5}jp988T-Ch7C9dR{+nwbcK}nYU6)fG?Mrkcn;cv#N21 zUZK>?E@Qub_NwmwID_)7TOm1NGyPjd4dFvJYWsZXZ^uowIg3HngMFHBiml`?Uf*sC z9Q77%^M^Fr*3*IY-N5#buTA#oWckg;m@Tmh&mRVDQ)CzMs?6A#E-$$y6VU>LK;}DQ zerM3@p)vBx+xC6ar?mkZ%zjcu#hEOP9q;M-$b!tSkv}Ppt8o^2QG|0tcfvlvwiDnJ z?083}oqk(JmlA||rSP_Wd3EfjKfA!H?JOdyL?uc+uwgN}xr6m(`c*{C0fc>7%a5tP zVh1HKxdZsMK6y&-Y0yaf=_jJWq_T?h+nh_c6n@pPe<&X^k~bTR&Z^eqpFE|HU%0Wn zyt!F5yW{q_a$Q|wV_IRsuEB||RkZ4JGS5~nj#F8CyHhim+gGbT-c`Z35>Yb4*p+f& zJ8@K0WXBY)K1THxq&%6d+1OxMYsKJKv}Bz~g$i@)1y#m7s~Pd`jFf!VwlFuCuGsv@ zf2OgXvm{VlP0_MJW;_v6OiKp^`WTDw0B^>Ih-$>9@fwwIb4W4|4KESXac#-CnC9*9 zrIs{0MYkCCvguuA%};Aw_K|dquc^0e%`m_~hsplQmT_K^SPNjVWSSL;9eJt~tD7U=W3C@kK2EIOO^n!2IpeC?(an`~s7(yp6JjhmjvBT8942lLcHujEJ%_py6! z7Nk1>cv8;6Yf?dn9j+KFN7q9ag4U7PswL}QeJi?K%2l=Ya)J+o#u~WRcBSk3{?Z&d zNi(A(I=4^3429zXVu;+(1JmD&8JviS;i4@fUOE6Cm6KZ)<*hj)E9!A4XO~ZWj&{-c zrQM^>9OCdjoFNa$_2FWR>x)u_Ru+dn4w;yC&QV~ry-qOl$ze~#{Uki Cb+cyx literal 0 HcmV?d00001 diff --git a/htdocs/install/doctemplates/adherent/1/photos/thumbs/person5_small.jpeg b/htdocs/install/doctemplates/adherent/1/photos/thumbs/person5_small.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..fce9527b378ae9810693cc162b15a2c00a93af53 GIT binary patch literal 5036 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 Zt0=b_tx{R@SKW8we+ literal 0 HcmV?d00001 diff --git a/htdocs/install/doctemplates/adherent/2/photos/pierrecurie.jpg b/htdocs/install/doctemplates/adherent/2/photos/pierrecurie.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ea6696ba455ccf12772436bfeecb8c699bd1596 GIT binary patch literal 5960 zcmb7IcQhMN)DMY>5n{#`yY@_N5>!PIvx8LaBB;?Ar8YHc*RIx#QCn=SSyYuMv8t_2 zb)jgD*5_O2eE)v;zCYf*@7~|L=bd}r`JH<{f4&TW85?2@0aR1~0M&&8&OZQR0d!zm zb~aXac2;%{PIfpaoQsQ-3l4|#adB{P!7p}P{5*V@5L|p>d~mpsqL7%Rw49tATu@m} zSw{7etei9zJv}`Q4Gq)9lICXPmi~Xsc^`lU0$2g80I7rl)GSm$7OL|h0N+K8G*tgt z>i-ImiW)=%2GBw-PBmcwDj+oo2&Mr7fgs>T2-QU@Pzc1Th^Db{1hWbIMP(?JH1+S& z>P?9_t*~3}afm8M>svWrB(wit)c;2RPcO^=x$A$tivUL8e*v=qbOC!R#bQ)yAVwko zFi|QX$}Dzy<}86{R#-7{+*8^%D#fXJ`Aq2W6VDX2L&r8dPMdWV&?!z^bM%aN;pBc* zTRL996yr-FOW2ptz#-pSeEYPs9rqvm5f!N*yuzO<-C@7tU;M%Wi#;37nU~uoqiUc@7}X`Bh0a4UvWj z(>rvwI&a>~{FKtTGLHTJ{FugmcMQ~%Q&R zzxY)`Jzhl{Hgn|CElq@YQ`2!zu)*kYgD>Z}=n^!|^dZ>_mSR#YlGA;lYSa}fvwsHvy4xvCT{@k<}V&8AOSFVr@w))Qei7HiUT=bjHj_TAxF!fRw{q;RmI$w&q*WfH z3(E$joNxiIZ^ie%)7n(6ynI$+#0-(+EwYJ+GtH7z+}X#x(Kbmdvx>wck zVPgx{-}KuGLoSiJg>8TCaBI3pXE85q&E5-kaC^UDwEjckvLWxFphxKK+qxa>atxLoNrK38i~r`hr5?wjPlR*HX4VY1UXeH_vNFW4=z zTatyB5ZNFg9VV{cucCf+$mR&OMPVsTvuvao3|Y4}?36~-z(xCXpO4Y5?y)pizqZM5 zo!G6=sMN94sA?5Z4ILCTy$~Ry4rEBF}OAa$tpp9zQNJhlwtylP=24dGO<0Iwu{6*5o!1cIJ zP!7mEcE~&?D+(j2M@?N+1SP&Lp&t7fo<5ClLh3(`FrKPr^V1?_$JsHzKPl<>@Y8hg zN6d_1{H%mII9HHxH>Oe`kiva{@;#b%6+y(Z?ykPU-Ee%Ds|{E>MNoiqZ}<<=GLw_S zEw#O(+qoG1fzPg}zOu`6wY84#n&V@SuF}M$V1I z9!<#8tlwYM=R}HWJWwl6;ozanv0`dXkbApdch&zi}`s7{&J@ zYsH^hMFh!|XXuVf&-S;5JOMSPKjEEx|B5AUh*C3d6`-c#0!o)x@*+&#@zd$kgg!2_ zqF?5+7pwRCgJGi$^}4Qku;2dolPT1Y6F55Rdm`^SGJPNRwY8U_QZMRHdmgPmK%m07 z^pxi2??+9s`4V3$f9+d!zkv3}g3keVPew>T*NgWArYNgsdzq8Z_j7FYW0%r^U>N>ZpMqlRqFT?d5zV1;ckaF z?i#S#I*Vx4epcR)LeMN~n{(lnq8Rj%A0k(jjC@GzhI zhsyitw(8WjhN&V6Hl!SjjSK(~kzAM%@B$$hgT}5IP zl|)CX?ScT3Y7@g}k8fSyO{Fo@9IKy)L1Tx{4$;YyJT{f?I|{Sfn;4wW!j)OM{E-fF_ELj7#HOMRFFa)WXFV$DR9xKGT7GbjIE%M>U}f z@3~&_EUmkN3lnks6%eBK%R7@ITtHiV5sSzd4-^)hbh_5&>IiVE+k?QOE&kGDsDuUE?o zfIMiPU(+?vO6Go*sXdZgqBi|tU>f6a>oP+>s0uUL1D^S#`gb#Lj~-`KWD~0(GK~U35Gl2?W-`Jy@X)*?MM9I&9wH2Ai$)5JMR+jT z8eDk;Al%BZ_%=WR_w~7d6?T4ae)p@6NjaU68i@WWH4nm{NsMZHLN5fR^&+zZ^}td4 zota9SXui4Po7hkhuuvxuVtT2TXf|5;XhvAyBm_}cXYn9nyIoLproUt8@xcY3`1HBt zx4lO~pEX=~Y5I@$0}@`Tf}4X&KWhKfE9Og&F7!u%K~{Cv#G+(}xuc6F+Xsm?0S_Ao zd?8l3cw*VV?d?rQ$RWxzyXz9gohP0#lKrXH&f}938fP_q9{q$&T@|bDci9oJRpGp> zs$*A1o<=LH2oF?2nQLmV6xjMcNLGT?iV|%fgZRNx7i8z#kyhiEr zt^>^bVHZB4AZBqSzNwBUE4=9qIP1XXP%y1#WjE-qt|d-sq{;sEb(j1lX7B5?2X+9- z*d#LX6HYz$A}E=BJn-( znLILPTgA4oxNa_b6J;~%;H12n0Gq>L%4Jf{zVU`WEyNPxDE7u+9}#lqn6aK zyg_jbj+1BU6y<$pAO7`9Vz9GlB;DMUv!~kc5kJ)(@d&MS%Ohf8q3tS&u~B&NPC@B| zgL<;>zjFXIFU*u`kbGw<_?&x@A@3^TGUQU`ByMZ#l8Zhvt!0Z%LNNACVTC>;M2y~&mqktQIg#x zA#IJl`^?#v_6M~FbcifLgF2gU&;!8`bYlpUszG9`w_PMjL85yYjsfMCgDT`f# z_5$tE=W);Q1h60fyy(|*YV|y89KMykTFIevIPf@s;o3?nN0=GsxY6_Pe@uM5HwaI@ zBWbPc>Aa@B08>2t9|a-|XovSAcTDkViRXYey3r43M^Q&MT#xZw7sPdKbaRP2AYqm% z@|KU9ICWZ}0dl!3%+hp3nV_0X9!R<}{1gVssx{0+qSp_a^b$FEjspq|usVLNB(p#* zil36L;0v^3K9NdSOevL@c1G3Z{2ai}5}?S9aR;zyxR+VD=aXF#DO=YL7DtgcUy05k>-}O% zvQEneuIjaXADpS$_841Pk$B4g2su&auw{bG0v{KOYwNZA)vYM{QS}qE7%>1<1+Pq2 zV8!$i3AEeroTFsm$Lj%xSt6qi4kOn`ZRe==RN6m=-0)IVZ$fHt9Z|r+v6M-Fy#po> zoE0#OxXtn=4U*V^7Jy5Pt@9G6#ZS)x4CVI%4)zU)6d=)ejoxqHyPL!;Nyh(1Eso>; zhdS7PS*Vqj8u7Jn)>dCec958E+uY-TBE@344$c8jV3#7n?W(GCrG+tGVR|17stCMH zuOmm(akq)e?2Dt?e3o@lnwI@b`cHm76abX6m#{Ago-D2 znpe&Sm_wIqCm+ck9d^+bJ4C&zETLe&y(~a){GvAqe)@5Qylw8P)+%D0ZP>Wc7>)E* z*7lw*s9Np-Ue8+E3JzyA9bO;)rHg70UgEX?kSM&i$cZ_ypS2mh%uTDX^`s*@Yz3^5 zayJ(+0+U!x2jAem=aJGSnX?gr7Zi^}-QoA@z-Oer5 zPOYY1d1&d|vF%*rBbMHNpi!b|-abUhnE?s9$+n-D?fAF?6A8e~xtz(d^#r^Bsl;R= zY|kRQvJ;n|DfR8iwtOs8&Je2G!V@kj6RJN!U;ov4ebaYGG#Zq_LYt>vx6S@cY~UK- z&vwIwezr7o1an;Q-}rXt$1<(duBd7C7@PvJx1eMNC{_K=IXZ_f0G^2!Ic^o;0hi(}Dw6DG)4^4{>IRnOec35_n3yqBx9^Cyw~DT^nF+3*E>{0B3YF+#!nvr?yWhK;dpzQZ`b1s$bt`ob{_HeEqJ z>YmdAZNWCTi~l0)66<&3UvN!_zD>{upq1nH6cbA<4*K0`Nb?uJ$eZpSjW(A`t3JlM zjKG&8n8#BM*I1M1bw(q~YtAU9hU+a(fUMfk(>kM-TTjiLXoUox7nz6rW-69kE11oR zT=WTe%*H(h&v&!zR<|POS;zlhFeRVK6SzHQVG9xe*Enfm-=MPC$%@qsvq9y zRm3{0z^LgxwZtntkfVF(x1=3x@4{_IUno(i4*1KuwjMN4v#J$Rn~`_t9Zj1E>+DV# z#Z0*s>RKrJL<-qk*h4loCS5{*nlP{~=^HxM7RH`kVqMa%on-iZ%!>3(dq z*vUHkoSA0aqs0$M(IV><#^kRmp@o?#SF?nzd+dNxY%lC3=A24z=tzHy$~H+;QB|E{ zQ@tik!Yz75i}UYp=)waZa(FustlVutEDtZA93yJvj-~Adhxz*KsNQLiMtTcg)Xq!% zvFZqd60SXGp#AX=ye$)akNZcH%GW6mM|`1UcSHcT;NaE!@QS7wIX<@#o^G_TlX`>V z(5oV$oILS;9O27GSM`v!gtb8D33jMvRcf_nCd4mZwK&tXQ{ITUFaGvzuRiu*4|h6z z=Nw@3<)`lxj^MUTmmQlZQHQC8}d z$LRFaPv1KLhg(xldwJi6HX4tMi|lxK)Sthz3HaKPiFv+qwLGK@Tr8`-E)hjnd-PiDOQ|2y9nD*f98P7V)FQ+Be0#(AUMKDjK5h2OjZ6D1E7d{b1SJ#`cBByM$ z-ekL7v=F^u5DnFCHbcQpr$u%+-9gi-m<~Tu@CrrBsOUi3T(xq%oLoN^*h7329)Q{z z@X2CEPw230jfPaKG!}Mjux#z?RpZWN5lniYw&^{rh;GW=^+`G+FwEH$v&`4~#C||4 zMRAoyKTbsglXbnE?hYzs${!t1uYq@L9Tsk5MnJ!2NdMxP|P3GpREVkBV z_d<^2*woO%bwL{EfLuNO@jTB|cjzS_<&M-)VTXA>le|c5fj6T*S}r&fGRBm#aaJ6l zkb1#u27h=Yak6j_;+w5v8a@ehRqS7(2yO@hwuR6OO>e=$~v$?2K} z9M~2AbwK#P#1j8?Xke8$u9K=-Qs4D$I(Grl`oh@Rwx;i@$Hip9#SMe*k@M B$e92D literal 0 HcmV?d00001 diff --git a/htdocs/install/doctemplates/adherent/2/photos/thumbs/pierrecurie_mini.jpg b/htdocs/install/doctemplates/adherent/2/photos/thumbs/pierrecurie_mini.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fcb7cbb0f7402b7bf880e6c0d6f34cd5ca1be5fc GIT binary patch literal 1940 zcmbW!c|6pM769e)+W z9la)QB}8^^at(1QC9)TqEYl;8_ul8e&*%Mh?>pyn{yOJ#KIi*6JEJ@A0WmvkTWbIU zfdGEH3G93aOis91nY%f<7~{{-wa!Kap20JThjs9Tn5f`$XYjUmB)pxI6$#HY)KSyK zGh+NhgQMf{$MJ?bsGV`(1b~3S5pWm+0Y@N_2qBah3MDLz!Wy8ODLtVfGX5k_I9q;WDThg1n_>iPypjv5*n zpRlyDCfV59xw@Tl_we-c4xk5~J`)stHYz%Xc|JBS{?g^twDc=iGuSz~H}Y=Y`dj{; zvb*>0mseC)aUa#y|NQvL(}ovq?H!$6-95d7yrJROBcs2KO@5e~{x~x`H@~p@h5vPJ zePdJbZO;V(z<;xTm;H|mz3YO)U?2>+=Yl}b?-q!L!G9nk#Lb7scAp2L0aHM5m8Plg_W1Zh z5VG$zr_%_A0(dJISYyjqLiI;m zcl`N*;g&7PLv7B2cePw~I5HcpRNbABgi+{kE*bQ*;W)8?uTa*ptafjO^srBXM}OvW z`e)QF`%^^&MvzSm;p)wEBFf`lL43#R-U6efIp5-{sAAG|$Xv46p&~_{#`+AW1nwp3 z`Rd>?a?Le{e?Z8-Qo}$hW35!QsJ?^mZJpPvA^T*LO&F>OPio5IWz3dmX%zCQ<*Opt z?@G~$c!Pe2MP3A}EtSR!jirO;f1y z4Fh%0E>;Q!)-`!*Ykf>3_l{qLJ6cFH^4Fd>bslBB^QTC;)qG!6tTn}?E&txDD;USRFz&>Y zSf1&`0?DEI#;laQ_|RbkOa6_iy3=oPp5kph)o%kZ>QSFlgUWgR{sg)p<4Bw;;KA;B zN~g!D_ePvb6M8@!);zSbmaCzMBOcyf9Ks`KW_bovU%L5ZM6*aK}&~FFO zC4i-yU`)kavG(J^u<7%UhQU4tNHCE^|6Q;YY4)MHfIq&(wZ%~BeZ_CLuf>vH6e#Tg z`y^bSoz(LVuE;1GE+lTlnax_m%UU_zbp<`{x9SQ;80f6Vtqb71nM|?f2%fvbGp~Ht zdf>KR;%Yh!znIl0*%zDa#I{eKSjy8X?NH2W6s@Q=?O1pAp?Z;nE04{5!o7Cn9xTkh zZuGV1)w$tU^G6?f`Sz^i3jAEWJj3MQ4}d=sC~w~^7wX9}ueUG@FL#+F%O|VzFB`d1 zdn&!mO7?3T>>JMcr76B0Je_ZQC6a9u2w*NnJ%8~L9C#rWALOkSSQ-dVam8i##jx8S)Z{f7imXP}p>MaB@kE;ywM; z@SwQx?Diz(UDkt|5^_p{z3rNsjBAMLXn^iy6g#qsTe<@jdi=ufIJUl8mB>Mlc^2+Z z3OU=?VcdB$AgX*mK6g=aQFRP=fznQAyos4!(}yfIY@~b+Y|Q)+5;yTiL-9^6)}X6b zPjJDg>PRtmFq-x)t!f?x4Wr+BEAP z#t9aAlG}_hgr&*>&?<^eC5s!LQ!90+gtObqAD+4WfKu@3^m;VsE?UJRzITRv5_6Z~p{iHchYq literal 0 HcmV?d00001 diff --git a/htdocs/install/doctemplates/adherent/2/photos/thumbs/pierrecurie_small.jpg b/htdocs/install/doctemplates/adherent/2/photos/thumbs/pierrecurie_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3595b041ca21eae281035c52279a5f62a7d53c74 GIT binary patch literal 4886 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 QUGM50QhPpC4zmB{U%6xOt^fc4 literal 0 HcmV?d00001 diff --git a/htdocs/install/doctemplates/adherent/3/photos/person9.jpeg b/htdocs/install/doctemplates/adherent/3/photos/person9.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..7aff8dccefe7e0ac8716ee66b25cc605bfc36732 GIT binary patch literal 1088931 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 r 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

rk+XsD>bG_?bTt1hQ|}X2jI_x6RE#u-!bA zE%UiU3?nf2B?iMZsb4=e_OQv`GrN{Zc3d)QF6UMKjvY?SxLxmG*+IL(VfHu$K=4={ zj|2y3d=?jE!T$hAaidvKVM7RSWP2tQPqh_vyWGCs939u9?imQ#2w?(oKK_W2M}CSx zOVi(a!wzfZ?xA5aLK`Rihk|%D7tIK;z>)C?L<#)pp~S<7H@+%3gjxA0b_to$JR3Fg zTTl=3@=-?wi}XS$E47u;7~!ai0|UO-lG=n)CAR_3z>Z4ne@D`h$(t$)cgd zz%awzF_L2MM9_c^!#{d2#kOIPj0k}4?L!nx`i~YY9>v-sfuR2YmOus=L5RX)a~F8X zyNEy#%*7MLd%y7K=s5ka`j54JTj~YK#gAd)hG6Y)dQ($IUtR4zpR-`&M1Kfy-(`hh zhw=bLuHA%pVXbV9pc&hu?S@#0RUy2an(nQ1i&w1h{X(uuJ&$P zc&PDU+9kA?=t_Y+E=j&Jxv4O7>FS;l%Z}{5`R1M$n_mUp9&QhshAcBye|Efr+Jvym zZ@c!kpaKxhrTQlfX}O2Dza%1r4tytfB=dQ1;B0v&?@{Q{ZWqQ_T&K2x?DXn)|JwL3eRU^S@QKA`IMTzx19RndwTF=_h-jiXgygzdmRY zJdN&HgK8a`%ZW6a|HJ@C5dZ-K1Ox;H0|NsC0tEvB2>}ry00J>V15sh{5^;f%1fj9P z(IVmT1rst5LQ)14Vk2@DGlG($7P8VLLsP;B;vhtH^8eZZ2mt~C0Y3qfPz0gA!2*VN zKxm6tL6GXX4#tH#-D8GOSah;voArVPz}o6^`w9=IO4sjafyi7PjN7~*%RIE}@719! z0wzM8FRx8gqG|`tyB=}${{Y6f(f!swkgAL_WEWpL=;&93WEW70PxzOq`$BTA_o6jp zgndB*W*?n$7kbg3gk3uzr%LB+ph^Hv)$9qVqpv+0$jGHej!VA{0RU!J2m+z0Y@DC* z9i3RTAR!S0jFR7tD)iydU)@;ryWJ}sBK+vLrgX5g3r7e_A-iuRSR5r-)hHP9MY}g; zkK0VWdoSDPfMhdHx+yP^_>K@i#A=Cu^3Cs42p{1ozQ;mg1(AKbZ#bHV?aR)#t)4tk z6;OeuP&PGK@lp@lssOw8j~k3k=`AyiLpTbi{bF29NtS7W?*qh6CNhHN@G&PcsU&xJ z@m?ZwNaE)h_}Ge2mOQ>7_@$Ovc!)Q0WA|qLrBZs4mQluL!v1qB{VIAq1B{$Td51E8 z20z@);%rHU9ZY|?WfK{-QyBgtY1mCLBCdJC#>4>qXPTN{ezA$-aSXvRCYD;1GpDKZ zFfp+wC2?j<-_kKL@eoTcB;_tRi&XXxT6xRjaiy3405)l*37AeKF3QC4trm>%F|n~Y zNyM0^I$J6|{{H~Ii~j)c4ubx)^Mi|x#k{~h z$^LT?u2ioo=d4ZQW)puokZNG#%`rb*!GE<@!1F?^QZVr`%%_5Kj`K{ERsKwLxhx$Z z<6_J8e&okASpNWVjVV!!Hw~)W(PRDgIN?di6JLo@?h!}Yl#D+giNbh^G{46Er}5a_ zU&!#(eNa4X^RE>13Q(^t=M(tcLoggf4rST-rSj?{3&u`3W#c3x)%wK#B5AQm6Ob+x z#F(=lFZz>rnU`EG@iU+Am>0ay`O@p83`|ihzqdTbzf#RbHYJ+TKZ>7?IHp%pOv76p`NX~}8~B4U z)n*Ezx_#pV7ZFP1Ox9EL5@QnlM5d%KoJ)_1DkQ}Kclo4$xW&X(C+XDtM7Wd7D@`{Q z)qUb`5sSn1DI&R{j6V_dhc(wfUXkIkr!x>{DB1Oo55YMSf_-1}9uox1{{SIS=i7Fy zew*Sjusj^W#MqNc4AQx2CrM1i6C|Xgju${C97s&_DLiwf1gdyt6hJHnRP7jUpU?jQ zafBj^zgPs`QQ9ZNGrA-n+`w6-o^e_n!YCY@Q3n=p7vaYo=5N~JLo<;qz=Yxj>=CCx zc&a1BN>KeuOaA~Gg|>-&#VDRP9N}>**28~$)<0A6#}a9rfV=sOJbBO3W+78ldh_Zl zXqIWE!%;HLcP+7%;P{+rkMl3BDfW*GE+CVO5__;$y|N54HdHAwoB~Y8fhOlf56%7~ zixE%NznI}7QN@UP5_6_~kGybksNx|mNvoPv?O@?eK{;f8B0W=eiAVVqm@KAVDVv)1 zs)TVv7{+N!VjfCw9C(WJkO*f#F^e`RnEgk&+O%NLk2);H9oN<1W8w*nqGE%b98775 z`pfkAgEZ=fa=i463Fk9_RJ~u=$LX_hP9+*&d-CuTO0uhq=brYsd?Hqtc`6ik(9#)v zxA^i%0B=svfaTvR@1+=~^Uyedj|- ze=Rfs-1JBu!(W1dVq~rV0FM>j0xo2uEmE=f>sb3#=!X5A=O3Ri*{)X1&_dFwZ5#?tHR1^w8*VF!5pmpSCxT2Y=#hmgZ}_lWKbf~ip=F4tN~lA+Ne9QSE5lU zp6}*Be=(J985jhI<^37c|?L}bdfl#v64MJI0*CZyD?xE8?g=N_9N{*@zUyWR3 zs|oW@Fmv9pCSR7e{MCd8(KHZO>7%gDy~&ufS2F#%Rfi&t9wOq4k{Wfp z_b+(ya+%~KiS9PB<1i%(SL*x3;QrW__G-kko)sd$F^PqQoM-{Acizkw!JC9VmN6xm z6}rYa69x;!#P5FdNF~JJw=DIEWh=vMzcDcwa?LPqCL*wAodC3AV9hk)&>JAMNrr!H zf=Yx$>k~=BPY_kQ#QbZ*D1D=ZJf>=@lWXhg?qEzLAQDSgL`3cBq)#-TQ3+NER%Zc_ z8s$w^5Pv25Z{0f9)_WMkmQW>@S)7HXKBkna4M_zM)j<(BB7r~1g*3hUwyzSICK~2x zHM$=pyFAKdl`?V}KeS}4*0KAXB!kto@0QvY%X%E(OhoS7yKeVLIGD0Z6n!P~TPVyZ zAeV59RWq!FXIJ=oUA>}YR3)iS{{Wqdl##*_Gc9GNdOuOc7(9Fl!lB0&a|;4;1TQeL zFqTS#>%FeB;z=*nDO}WK*XQX2_VEds9iET&`^1=|4ns2Vukr5n=d5vkODW=A(hfAT z;qY*|xX;=Q^Ag|7DzB7bG>`P1T{a?l$&m-uPWJmmzq({)1l4{bZZJ#A<4LwLm;NVYzp`o<0t0%fJ?zJ76qArnu|jq~}830TTPA!wOE`c+ZpfQr*0 zBfS^j&#nNMgkm5-p>svu2gnl7F~1U3Ef`Wtzqi9%*Itww)J7Hn;%dyvdsALdXz*SX znpVSqk0`i!v3UcJj(REZlfTT1z(%8aD`c6huZ}vdYsVx-mj-dp1JQ zW|mw*#Vu%626=pYM~C{Q24X;zP>upBq3VPX^`jV@6NP1!QNsTK5`{yJZXUN0`!dZn zDHym#B}yrOGCE)42>}Wx7xz1(c2#$xMAM58<-}EL*_~f9w<#aJB$z5(o*+A^=lb^-pO1I|T77niZsY93UkH!4y*8jXFK> ze~P*?S3ydJHYkkH7v{cM{8rK5d+o{z1L>gQHzS!{E>^i+^s82$%&kUNRvXjGGpOnE z#~{?9h5A(<)C;1huD9tG1UI7Te&Vjp07@7jOpz;28fL9i8Y57s49cZ!T8qdbfz{L} z*?Rz?j3>pYg(Ht(G>0swLl#Iq%5Hd@DA#Z49>MFH)N76Y>%^T@N{y*AEJ?1XC zl}_zY!Yh}3>)Er0>GtYqt$K4Idv^Q?LbmLdwv9^W$qMhQH_t5`QW5>plG)}tny_@P zm-MaJ64mC&RaV`XEa;r+3LPz>Bd5J-MJpFQ7Ot(T5SqXu*>BYsN-gT$uJba>;gDT+#`cfyBd8lbf#FZLj986j< zF!+xYyUsDCm>i=RtJK`lB1}o=luK*Pc%KbGb{&jy34WTttO|m~FV9a{!{DbAk3QS< zjB~^Mg71Hr#GeU1kO4R4YToT(XyP1IU2UDxkLn4&Ec0>jfW?)x(M3WYVQUlON&|=W zrT6Yc^N^@z3c-upesO_}ctrD)mO&V%wDKB6^T=lZ0F2rzhYV|F_r4neETLV9MY@DV zQd5U4im<2x^;S0Z-QsaEB+dP(1gOqf1PHgXy~~hNU=h%T1(A?ZSBb`gz{WT300J6U zKvQd^VPTv=MudsJ845ZCAy)Ax6qBQ^0vFH#-asM04zx(bn-G%i^xjmpQC~2~LKg`f zVR%cq;Vg1M8ohEBSi_V}Cls=tE@mgeo9Q(-U3a^F%)A2A7pX7PYMjKr6U0k55*PF2 z5O(}Tz7xb^0$l~TSKIJ>yg%u<*toy>b2S@9qAU;5{6ajl9XM^y2k0I#R$LODeRrfy z`X7ub{{T*B{{V^GdBFV(#Nm z==lC2C7TG6G(p`X7xYgPg)$5of-e+eeu?6Yf_@pm3;n&UBmI^jPAO*MqVT1!*v2n| zp9WJo4OHP(^53WXdGT=+;nZ&|zHE~CP8k3J53QFW-X-uHZYo~><_CrSv&2i3Zh7~3 zl2i3wQ+o^&`NxNp&pf(s zYaRm)f^T}qguqd^DjQwp7&06+3{V1pid9wZeqa?0xDw%FOTa<;kJD0snWg}7Fyeox zI-op22~7V0z2Rpe3KF03)eX~PFmZ+Ec>VX%4lp@K>KLqJ!(s`r=8u4@Wx|{DZ~g?U!>A* zAgf>Q4jfnMVBR8R@TeuQLXR`lUqYH|97K~W)}i7?4)j&C{{U?oJQgVZz7n-OC6csG zS6veEh(`j{)8dDt=h$LPETo|S0OYdrbo!h+-i%|5jGiB;0;;7Rt<41jqof%>>4~P8 zP^6BS)9hE)Fff%k zjV)O4GD|$bO-enZ!b>c?GRbK0hxmp;Z=})7U7nqs#Fi*#KnP?C6jhSzE=*RCyx!u9 z0j^q}P^UB>c13QPn^FV46n+Ic>2X-{H1j@HA#3FXpg$x!T%o?1RxENOp7*Q^W{Qk@ zjWueE#Sj94G|~F45y=Iv8kt*kePevCUb%M48mBtk5`x*CU_F9>Dl>1TnuR&!&@-q% zP(rIJY85D2{a{ghaVpa}pPKzoGK)oSD3?V!idySbYvpI98!8%TnxI(gQAQxQE9K;i z5BIet(>#`y6of3LQGJJT%-tf$e3e_hbJRtFBBF;(W?FUoL4zWM~xSlMl0N%BoeAQzoFx z^W_Ru`g9MYt1d^DAW(i6L`PbkIlN=BBhxy0YuK`QiO?6*C*Q<)tWZw~{A&|VC;CmJ z5b%(1zi7uo1k+w8;Z7>XDuGc-Ml9xIFf5epUGcFYwP;#+pt9{^@PK+9r|s zfvFbhaKCDZ!T~AFugpm#tHi0NZ(1~X$z>9O&Ek1@TE$em9MF7cq#3vg;WsXwwG{aQ z>dFW4Vyc04bh|VeNO@j_4$Iv6M6x=Pg%pl?A|STX4iKE0(T`I9 z0P=8`yi4JLG+fG_ggR+<=^wWvgjBg?<@IC(f5?O-3}Q|DVAL+G1Da}5?Ce%CCtfZg zH`1z$Qh{lj0#VvhRSZdytIc98mR3ze&|kyIC!Se&71NvhMi=P@d^u*rl?_!rqyGQ` z#h!jCq%(O&5BgWcVu^om2%ePQ#CTuymx-Qq#KPc}s*&Np(qHY`c|j9=$A|v_Okl~0 z#lR&MEV<+iN%}8@mY5=9GzoVszDttCzo+5<0Q;GEZ}jl_5Dr1crU!$;1wUp^vW;j! z$Y}Z7{f-33{{SXlWGbiMb%XkT5tsh}CR5BOq)+-!gvALq6t&CFoiZ7+M8BnYTsOn; z^3Wp%K3@wH{+HqAEBjKayDAgWqHof0Cd1+VnNpM*{3otaKl)d~PsU`BEX8R}tYd$o z@G)fJo73UqfAlU4pV&_O#NX(m0ZBv;^qkma@yMduUO)Ov_ddQ8prjx4iNlbCFCavJ z^t94~XOR+~(c!<-ONaHyNwj#M(I&$BWswJ0-6I3^dGNoroog6=8di`=OO|{4r?hw+ z6Nff>M}w6l3_HDJfFiq~t7`5qaMejnVd5pgD#FU0YV3--F_wHefc??LQ-pmhKL}dQ za0(EoiFm8V-XjkZLb!ZJP^bRx666V2>ESY!C;NaWkLehAZ<6prLybcfijuDi0-sa88YtChJWb~r-_uFDMGo-F=`b#2N8>jFq&x$)p>3;(Ml&k ztRP|>5mhJnhj68NCqn$1)%F z0gn))BC>(X1%9FEp_=HlqE-fDo7r{A$D}b)T`QDT@5G||;>>G!0g6(NO zuU>r<$W#a*wGM7`_*UtxICRgsOW6Y}8rG!^pPw;$uv7^2Wmx9=opC?v z4j1OU;~NZv#H?IKE-^Cj%s8bA^m~s#NXD9iK*w0dmxB_#Qu9dhIGi)3JI5F9$taez zHa^jZA($-T!UZJI4iFx|007CNeg&J5OyOmiJfiw>abYCoNaur<3v$B0dgw{Vu{SWsi zAGmm3c#HXJHe>e8b3rjYm5U=H%RU_6*)bWh=blf^GfpfuLN%9)`g}8VNHfbR`e&8Z7d@(u zbVuUEKie-3bX{3=7P&ys;A)Lvu;w0_?OxW$8CeIjW@&B6d+sCb`l7w`KLfU2c3M_ulR!>userfI)aSRNWx zc@e4yE?Jg+4u9=sGk zGyG^$FmU*OoS1KU#|Z^$O?9{o+Xx;dAcWy?yi}*6d6cUN6B$R;K9hgqR%A5^r`5!0 zb>YFBC)Sq*QIP2^$aHJiMmL4S#QLy>0uTv5_VcjG3YGvyG?4h z-SSw#JS#f?03rg1Vz69lKUBG2AStW$Q64zr@yxRZWI&`P zMbQB0b(%2oF*w~iktjL;0L2#9EFPb`Fa?>26I~Q!8C0i2Npn6j&n;T0<4lp!dFBe> zO*GPu8d#!VEn;$IkPaf%2;B&nt^A$i7aNG0gDM7bd)m#JG^8FQ!bm(TG86F zIzTU!cp>HI=N=3%RM0mp+$zu%U*i%m{{SOwkJD0R%~qe}j8-KXA{XYpiupUO%(rrT zd)1TdsX_k$A~LDw$pEi*qoM*zP^yH|(EB|!bIH0n&hDBDu?we{P~)J|+wGix#UIN2 zy0EKg)LQzwnj&UVI*}aIGpc>U*r!E{5M6VkQ1=vFL+(&x1HT3TYr2!T`e9KM3#8aFF{{Xh#S43Z2#TT{o2!9$2xvO&oZB(!i z)Y_y{>aLmj(JEV7!9eEeok|8!att}73i)J!aeP-y+b8x2eRJ4pnwAaD=#^$uNB>91@%(##Hu5$CwO6MTun`EGqn2M~ISM5QHzA zYj1eP!{RO!=eLd-WJE>vgCyZf)F`A3NsPry%jW>7JYUO~po|Fz0hv?RwTvj@Ns6T# zVlj-w0;)Mv(mY&%pjN5(q;M*kOK;u?S##BC^1(8L!~~>EqJp1_A3Lgv*M@K7Lrt{G zDl8)kQBhX&jvT{Zx7%p~Qf3zq_U4xd?*NGke{rZIP5Wv4+%k`)?PaxY7>m3UH2g#; zFT}T3?Wa|+{k%yK%uLfM?Z_!NwpWZ9JVetJl$i>IG63FgMS6!*9vi^nB-ohZY34QJ z8aoBLim9toKTQ2DS@A#VV2~7f^KXd#BlK~FB$$(7eOcdbk%5LKl_i#0br0T=`()`? z*FRf?=Rx$Usq)YAd-A$~T|Vpg=rbHEVa$y>^NtXHk-}!Fd(}d#Ei#97mietYXqtM* z?S(9p6I!te>dBN0BXYSAnO{}iqkxLIX6>KYz>`GYS(9J7K*4uWkd|&8ZL1~vn3`FF zWpaMm^7dXCZUWsFy@#^oFDRB$2%C^5s?^^_f@PVOtVnSEfwIlY(Qo6c*B?T#QbDMyI4h3cf?R{Tj z2k!uqfN%91Es=edIYi?SyzWA^w% zjv>=Q$o0>p5hX|RxkKKG?@_F9@XIM_=u?VXO>v>psLvcMP$r65>L@6v=x(TBR)~cc z$xd{)l%bU-;shnZx*9gMKLK#26bd+iCo1lWGFD#`hbAnjd9ng%4R6ws;_!eoWD3ws z@|6r#)f3pkNpMM{%tv`sTdS>W6HK!k4SIfl>mRAeW*(_&hQDEB&M>r}=Q6CmbTAE|!~$JXSOCNF^+ke!8s-vleKa099-J zke{hS6??k#Hi_`Cz)5Th?@XVpONcQ40OSi2Ysf06ub4ASFAaE>>GgJ3DPn5QVWpdl zI7*&b6hBQeBqP!%Af&>Y1O6b^ik7qvGC#CRYv-n)+Mx(iumKW%C#Lq?p(grnGo%rT zA>x!1omjx0Y(N4$wXrMl-t-aSa7aQLUjF{k;DK3P6ts9jKzFUZJmbO2QCtl(f4}Af z9ToHlpv=Ny^(~4KX8=%SO^^^j%B}zaa&rNku=-KCpv}n*s%ITFO6a1tT~AnIsuqV; zc0^`Eib)e9K+JDA9hpM8w-TBPOZ~(b$ztEg+lz(GiXl+q$f$moFkYG!b9Wx8)re6D zO&cZT9D)Sdw{ok&?-Mw&5ETc;wa%wyKx(lo~x85X-chJujNS{)KS!PMa>z#Yu|mT&6m}q?{bu7 z&v#gQg|gN30?M@mofv?5pN&_M{^1u_`jHsr#ghvE0Cx)2%0N|dL`rWf3PG)AMd3zs za&+Y7Xkk-2xkU#{-1>xt$vxJBwr$cHhJ!vNk{M+mPdLPuWa8pl z-jHYFn<;^RNSx0s-{lz7O+1p=i*I#|E){X~op-wk;h179uS~ro3{O=gWnl+}czAe@ zZy2dA9X_Jmm+|QyCPMF9@5&`SD(v9uGEtab@IguVT3Na%P+SGL1v5;e_RQ9xve(?) zreSg%5{rFS4^4fNJS3biG^#3Pq0avRceG5lmd+s(Vo^lQ04F3>Ra@k?MuUOJGQSdK zc$30-j9K__}Lzlgy72lWg|TMvbQxkr+3qbBKKlS3-yaH9RqH4(*RCwZp&vID0!SS)Jyb=yLU*QWL$@SCBnwi7;2 z94KCw8Ke0aGJ=Wy!=f=>Dl0N`vceF-+o#9802As^0;y(YsNQh0Iv=M!++_-?7;;AM z@zMwKBV5~;G070tslpfH05X6Bwa|ASsh=n%Nm7X3ZSzP;g~=Me`l))rQXG~pWg00r zYao4Qju}V+Z278muP4YXf7g_K1WXN&)IhcQ>PAl!9w1glIuZ)g*UVaxETkW#AN^9H z}hnRY;g-5ra_j zQr2}(FeH$=4~s0OWpMn7>sH;cu_u~SEa0_Nf(bM}3BtP{Cm}j20Jd`t7n8z~AW#OWdZIc!1um1pQ zUSfW(5UInJ*FHv>_6BWHnuY4%!9(S3^z@6`nQOYjI?=kIptCtO1Rk;2H=j{N z%T^Zwfe50_*@Z8ds*uK>-+HfKynl!wu+c0Wb)Zl#iXdBTJM-meKF7bWR3^(BoIb{^x0*m!sQt1gq03rtAYB!KxkzT4U_L?oL1Fa;3H-iknCG@wciVENe6qYf>T((_T{@FpV39?7RRY)2-{RJRIi$d2s%)uZB+CsS~4_RD_MaC=&f$?-yn>% z1zK7^`DdW19ZxsDs_ou7Wte?BWkf>eE)We#@~v`FezDPk%Hoyi2X!h82kf~W6eg6L z+9veP{rAx$5VtS1jD8Tjj?+5zcaIiSlnS)<-pqKeCy)f|60EbCXU-;?Q7RjZ z;~nJTl-4H2#FkDIMTO%@Nu{0d`HW(JbO`jN=tJijSrx!Iox}tlfR!N^sOn z^D{>o63k_0rGC*VcPTNC6EK$yso&Z$r{k7sCakHw-X)Xi%`2P#0O`raL-UE|NoEX8 zx@z0Xtr&A2CjQ||ujZO-7&sW1q$G(ly}LD&HF{-%`gSb*HI<9R{swj7BFuwj z7s&bqb<;90qWj;^GLU5`9CrJ){E;GA=9IckEfM)uY6|we z3FRj8^P%3kv^3Qtrv4!0bE5BlTqLR@6v_KhxnA5qEdkpsPuota7|R7`$F+bc&qhOBg9mx{{RqcEU12x!n);Z zOXgg;SkOx`6KBa)2+y1xU)z^8QjKrO&^06VS!TzWO)E;}fUd%Gpeq>Th0RTL=|-UR zj~Rj$ytd z25um?vqbZx#1mhBa3(WKB~_{w*7oP^5=uD0Q2BjVM|MMLqY7W!naaud?O5;zV>1M$ z_q}7n58__Dx4vV-GCwDm{{TuUvZJNKx%H!}c_dR{PMq zR=wb@S2Yz1P%1kNlwJX^)GtG+4cM-uNcFX7bsM&@Ij2soRX|afQm}Q^2PfO7BSHD? zy{Lx;(xoifc@E2<1(B`D-Kv8qeft%yI~Jjb1Ls}nr_O41MO42krjAEgR<#PvQ5Aifg(N#k_f|tyMD?}`T`LJ8(W=lfar!735qP}z< z!~X!rnsUfloY5}1jFa7ItaL@nl)CD!g3*nYseeE>qQ*I^uV22$DDfpOGp!>Z5qP5- zV5^lN%{<^#C1V(l8Yvp0dd46PXqi+@t}UERDaHDc2r)FtD^ye71j=7WiRPG2*Wa(4 zVN50~J*(~31mV%;e<22WC3Ga@k&Gpq4GB*;#tAYGTiu`}s+l)v7)EktnuX)TcquU_ zl__>tp|#V{N9n($$%=>(E$TrB(_@2+=;#z!!T>-Vh>RP0=0Jx1>!eY?jSxa^7%y zu8Vf^sZMz*A5|AVx-VACI`FFil(O`T)qeco;Z6Og^POY( zlg0G`*Z}7I(&?H+_#8%FAE&L_gS(}jj7j_0U^_SRbHa`pm3f4@R{BcKAW5$&6{z{v zKevYYWR`+x5cw>t+%o1vUXkM^Wdr+jeA6y(K&CuwpG@Btepipw&+UoK$^gk#6l(mu z;~yB#COk?ClP~eQb*%!|oJd5u{{R&U{iQ`hI5MpYJg&xA@e}<3wDP7wYW_>D*cKAV zaV4XPrr}_Cvf_2L!~)@E2|P=RaKy41oT8U`S3Ix$NmnB*N#&UmzhJB9vS5^$wN6W* z7wlL8a?n;u{{ZQf;{H;H6HxyE5Xhh&6h;e31k4HH`kP9A5;2lV_=QbF=jNB^Ls$|C zB`5jKHB*G494W!Vey0-!JW?T0=wlXfG|23(R{XEutFH{pFA4@)_gC8_Va#|`xf`u) z5K=KFCSZ(BO%{{Sl-(J4a8Yam3aYnN6~md&-8QdpFS4$3Nue~sL84D~Joglx^6lj!Pv z%zubfCq>MoQI!n=0;P`?KgIMaEs|AwATSSG=SR1d$arKeXH5co0Ro7^-c|>rxU^YI z4?rs3^ha3uy7{lqq#9&(BJ4U6Q<=05LqE1#EeMz2+Nz`HP5uf;w{K0LfRtZH*2`Su z=Pa~7T05*d(!;y2FFVrU(?03VQik;CL67HcNtqbiS(KB`b z0J&@*O1h%JsD zq%#6ZSe|))p;zAh;}Tj-O3PHsX&9+6QS_y&3-qkB^JpQ(Y4bKyV;2eB&pw zxnpp-PmQ|Lo|u> zs52vSKgo4v2e)vflawvrx5c zzNq_H#0x5y$frg7l;rW_{4~L4kbOpr(SAYXqCZ^0o>^x4P&=SjRH`>4u2GFBmUdFQ z_1Lhy5j?-z6e9ls6q3F%`8sXfZ?D*CgD>v z(6L!uF{*_B0F+O~B+@CUa7X-p_K8uMW+ea$Zkeui1nHF0sZ|tVmSudoMB{bw6 zUZ~64)<*tUzMfj3Cbt3t1R}Yvr&EzozcJwE;vk!K%dO+Uxm$WigZ|p@Snz+wtQC+N z)9DXoAv9NsZFXd=#)|Vb>a`E_kYy@5adUrOB+zMUFu7dYGuJMO9A7?-O6A(ni(Qpb zqWk3)3Jt*&q6Tr#QKUL_>Zi*)Kao`ujNQY1Bt3%^OWX{DO;%)Usapa5JcU3~O1-K+ zKy?)_(&-9UPPydUs4Ep*^5wsLkUvWT!j01J?*N76X7;n(`avT~<}>*7YDY}7t(0hj zg-@$%%d7OaEmjJtnFDbDaa@)`Piu&gPsV_tdOpc#ntM@2IfbwDfT zRkg0IDvo+&UAkti`Lfqh?zMG{l&?Yp2M(vYzoMp;sANp;;-$seAShhO6sA}CwJb$i z_Q`IClOlJIzs+bW&z)Sv#LcvN#>L!g*A+0HC8ckiNXLC@`5Me;uM7$pniVaCD#(TC3dKTE^^0I4VL4iH|a&OcAVpA>)kV@uHzFlO=id@`Y(6RYx!A^L>%lt?*0 zsQHW;ag-#cX}`*9b>ije0|b-BKL`GrdJ)^C96j&j)#a5(x2dl|&XK~IZ|@v~-H)1b z&b;6ylF!x9kQd%Rjn4PGs@p?H2nyda5cWtz_tFVYr5{b6(Zw{@^zYy0Zv;)BctuVi z6Le3%q$IMmzep7S02yTz0?Fyp0hj!jMH?`M%*FJe<+Jm|W=0i7-+#SC*^1Nb6W019 zacWarkj&*JIk!mTC>B*r%M){S84yorfx@g1u$9Rq3yP>zRaCpdtzX^@;#8CgvTh~$ z>aAFsY+2urf>cfp5Jbp`?JzvOk{2f1*O%Kl4B59wP>W5p1eZnlUHn2BuJ^Pg(%hce z(|)j&95f7;LFLQu6H7^eR9e&;Fie%#y2S%;I&Yi=3EdOa@2pNp{{WE&h&knLye}8h zWt1MJc`$SosB};XiKUuc&sO=;w}Fl&DK`-=gd$r|{!c*h$0WfN%Ibs}Q4Po>BREvf zsRs{<+G~O)^B1M{$i&!zIB2GYNg;Be9Y&(j!e>vVnQczH(l`X7&?c5&jdEM>rTCBA zV{b``Gqo7>u13-0Fu3Jp2a6>XHrc6<^#_H<{j5R5#Z;Jix~| zT&a{|OTNtB%t!@UU5O)Q`TC?wOlx+dxoB6-C4r2&-p zB~k*+j;Wy4wjnsC`a&l2j{_pm@(J#KW5O{9DzBfnqfPkTq>hEnNfv5K(whZ=FXccZ4tbT4~cO=?Tw%SIHqd z^IE+r%a)a?Y8s(+`cj%ys}8USwX)wstT*4cwo%Jliri@fQc2{Bp3m~J)1_GU^fyb! z{xW7g-PFTnk(2B${MpfSBe(Xd`VOX$wkWSl9u_%@+c-HbS&0VyyMtVz z>tWK|vm0e8T-xZpdS%W5RAxOGif^Q9+~^sfmfRuKkF%#*>?BV8(1D_yl)X~RaTB5x zb+Y!lWzsR`P9c{iJqGfR7dpCb@s1_MGn7MZV;2T)VkW|xSq#Y8c}5^fHOet(k<>Zn zo7>V3A(~zpXnh25iDpu3XyJ7NyV!#`GQUVOBA};Uu_W_VRM*YdUdAWI;*@LCoJ>hl z5T8gqMOXPY{qp3{CL&WRmEW9TcvCuXvF~9}Ui^!t6%&~l$2EDHBA~g&=WXO!Vef=9l^2zLw==yaX}IqC25)_ zyLgsm1dmUHV!YL$6T)b^9`#=N#Iwycew>#tE%${aAq*Q{w(^c31E@^$%~!9)0tr?7 zQGFt8liW8=Aq7vk)||!uK}kz`Z=@L=ra2(_ubgmeb<=y&Csz)NJvmY)!V}FYlnGj# zAfa`cYV`JlgP2pFmL~wc6_K?W9M`5$R#B&?eWKO`!jrX7_Dcih_r(5Fk_QZk zNnWkb?1f{-cwyoWB&qc9py~iEr@}|-zvUZWEsp zl?Az4_eY7rKnt050WRKWnWC365ib|i_Ho585dI|)mZ@cw-2`z;B_R`rs;<4md}|Lh z#7cOO`iB9mMRd=5PqDC2PFNbOvGpaUV!LQ%aXv zXpbtb5KMx>R#lY*VDV0d$N*x7l|z!69R&!)KUyi6gHk#S>@&0m0&d6G%@PzDg^aZ! z5W3o>(bW+Z0uK#0@!^?P+tNG&s3wDEvEYCxCI0HR^!Kv(FnC?oWK^gAzvSqIr}DLk zR#j9gKqle91f4)#DiS4RadfSDu4DMU6G*d?YREbcY{)<_WP;@7)1I%)d%`YR*+oLO zoSVo4$+fEfZbvw^ZB!KW-mnS;sRPr`D_)clW%gyWDp&JpG`?yx9I{F%QpT`=gklKh zs^qN-s@xmGD*d~A^+%0zp!dyCBJ^=p&9n1NlVY)$<eQoNfxg=y6X!OhDq5!oQG*Ib!GS^VI6e$Jj%5y`nklMF; zSD%{Ia#NIS3*X>%L}3J?n=04-MM*XtTJ?Im(f7G2&&IVjdvHV-`ck!nBM` zEJ6}mn`$pd-qt4Yvk90J zTV1{&_-XhE0N3eIhu%NhVoW7kjSK0$UI&H>Wt0;(?-PEPh!B|=(?}nqW8x`vN~Y{L zd>_#!o_-W1&=W0{u6rr#9v}TL#$OG5s}g^t{1mcr&50%n{{RwEP@(P9NboG?Jl0P*Q{3@04NTi9>mI_>Kn%6oA@tT`TVr0VQ9b#-8ys<7K+FtnoVk z0Bp~a{Wq?DsiY_&Dg|8ZuC=67-4xU{`-_{V+Ddxv{Kq1Q5Cz;)R%9)C+ zvVvx*RSlHC1|GTj-zwQXEE`7cx6*L@70mZTg{ z6Ewg{CltBNW%N44xSl9tB*za78htZN4b3R94kr*Yu^!+qR zm=jTx=GGv93W-2RAKbbdjfH5#{veChPvHANFOuHtmj3`DLaLWwS-pmzh$@*IfOPJW zBDWbQ{{T~Y*G@?q{$M+A<_%nwY`fB?{Sa0K72Bu4?otHWeY9;oLZqYE|l3)N* zhcjITD}GTn5uRQa1o_pf2bN7iAL>8QFnnMGE!+cNi}NneoJ2D1}O+f z{iS(<6H0&t`X&UArd}hPlruc3DwG9yLa2@tEX6;NAiew6*~T9PxKa!4BNk!%oFEQd z{W`?6AQGAopjPSfJfcDgBhEZ847>$YujV`y;&uZk&O8`kY3XZpB!}{k3W7;p%Z4-v zfkFCsNIXI2xk#3o0e`3{WSE{+TAwL7J@qDixjWuPfX#VK%9Nk>! zbJ3E4*Q`>-6lI!T!n~9-C6`Z5Ux*JwkxnN}%c=T;7eXr*=6O~2FL*U9zIUo-E30S* zN~f=@)(BI7Y_8+thOt`H((2{VhGmz$Am-P#XebI3%vFRUb?5v+)0s|pMTh)*XW1&b zK@>uj0*I!af`QG{qzmS!*G{N%a_S)Rds905uDQ`kDfKt0w?SJ`%fm2NW&ui-Lql~c zfx&c8YFLt7CP>FldNE%k-6(R5?k$xGdi$+oDikF$S}4l&e3|3;unI}Yi@%vX z)H)S|tJM<{6fo%#aW{9)4;~=o=`X$!;q}BBrNDqed?c(R|LdpyYdq z$KrG~B{#De&o)HWgP*^oPlxp*4R^alo)&X5*C?03Vq#2qf{QoAf8mP62GTJUOk<3x`FB_=H!P7&QS$by0Rm76wWS<~MPOS%Y@rGG70=u5L`&Uz z?^X`vDwr8jPgo%kSq;;b^~&6$RTm3?B}(=>J3$RggUJuFH+U>jGw$Div~K&~SW+^A zMUM$*>vi+LREga~nM|m5h9#AeOQ3xdD?Re$VtELrf5%g=$Do3sEc0j<{{V`*UO#SY zKXScbWLK59^ApQFxF`y1_*(7KKWG_vr=F@@Wn7tWPEq?a@R_idVh(rf68`t?kKT}V z1B<(Y@T!TxrT9_MGKV{&qi{cU<&-ATW1v>63mDnS13dS)*|q9v7Uw^{%fCsLPENiw0O zLMxqP>1@xqtJY@b0?txj_%hosE>@mW%Oo9wQ7+XP77UvVR^B?7qC?#o+$riThyl4vkvhZ6B`wiabsp zKheW54BnCc+J6m+iHD335;#F>U$jhk0G4UKj%0vJx&^mX5#l5$Cc_^}@d8M;sE4v> zjUE?>iKLoz04NhygqOGkB}Wq=1hyv@9N_St0#;fR!$I{XO++b1X=Q0& z5iUQ{vxNJ&YIYE2TthV%sY@^8nlu^D44@7!O`SgJ9CJ!X()abs+Q)>Kh{$dI-M6+r z1WPFZ6SmvOg8thC=sCxPAjqHO$W;pET7XF|>GdgCl>lq<1mtT(3I0SSUIXSB2Vius zD=;JiV}w&bM7b498u`GuAq6x8*l@KP{8Gge`4#J`ucx6{$?hwc-%IHLeJsK6>tC9# zp@8K1?>qB^S*YG@s$AxQgI)r@eQ2jGC~uIY3L6=UoYetLno&idQm#wTk1V!hHy7ga zuONuF?-|v%*0$*D0M(G*)<9G>5%R4P54q%tUA=7sTBV61xu8A9aC!E9`Q;3~4cQj! zLYao3qQV{}WUh6~s=7EtFy{Ln_sNEcPj;POK5tk)Iq)fR3lRY0WXla{_@5#Ye9@pza8WT$qQ)H+q>D8ix%$#$^=bkM&$M~O9-S_=N9Zz%A%Qng7oYVW3M(S?D< zrfr>6UW|t@3oJ|F!21vIbs zDNQ5&ytyJ-70MOOS*=wRAozJsSyJ|IyC7H?5&`@}JqDyx%Q06i`#4Er$hw_IdKKv( zvn^BX0ezS{V&s!KYslqlV-Vl9{%ED3p~ga@Y^j3L9rYcpjT|Z;33nj zOD<_rh&kul*R&w>HS+D{00evAw)KG`W$@gghqH)RDt7hLc_OWiGOqeZ-6E>Rze=xWE_1{P&7r3g7`W}tS@jA^i2bBpHah%>` zrm-=aSz9IPYUOk2u(Hi4011hy__s4hxJPJkWDg?dVP#>%`ibQ9RQ4D;wd1MYxI}fk7)2`9AWw#y zvfi&tqZ;Zj1w|YOOzPIszi z?7sZ}00*_4=GonVfHOwP#*NtBEKOh`8uHuqT%gt_m2XU`O0(^)AG8Abzba50JxqiL=k)Ib66B7x=Wk89%qxCP*{6~kK$&|}enAdvR zG3K68z^o00*-f=(8rm=>6Ui*ZqEsVg%Y7pfZ>#CV)e?!5Ro9|ah>-BA5iq3$!r`m` z0H*6h2NVe=`h`A#Sj>2X0Q9S%KtiiVE6%JwnghhYPZf!Dau4yDSBLn);}aK5z)+5X zI9W(0tb~SfTJ!aYo44|XUUKPfa%ltr4M|NnvE6@(rV7CbUE_t zk@}Ka16;CmP=I&&a!M*GwE|Y9TD(6>nx$AL2uf5YzN)(C9ZQ;W=74le`IArM-8Six zttlBWTj<98`nsdTt?cKq3Qdttnw2>K!dnE${Vhu!D5NNdOtr3yYd_6ln?sV>awsTj zEHpZ*TF6)3lgS;Cf4OeAeL{a}vxXwk&#D7fA)MuZC_}H3(Durpdz0&(M@q8w7rA97 z&K!#tOtgIJA;}p9>Qx4Gs_|-z0UlOB#@9JEp0r5eLdZGQNq1ZHHd+`bO4CpdYB|er z9`a5TB1P%xrnTSW2pWvhA**IzUUc_w2tBG?^bk zP5EgP&pe0eGfcMPRB_JjPlyv7)eR~5-B>}KttC^NIwE>=x+F*@SARifp<9*BsRdOQ z`8Dgmcv7SSdY@0Y=LTX*O5v1|^rx3kJfJ-f_df_-O1al2V1?i)BtMq+vBZbpy}ue{ zIM$W!Q!Ay7e%wv1a)mSYcNzEdj;xkGd#Hdi8C!XCioU*A=#R9F(xdEtAe2f~E-b8- z@<6#f(-T8Vvli+@mFXY3n;f0WzmwAUiDpU?wNP34B8-*I-WFm@gRIW^RcWil!cZ+L z<95RV{{Xm@gkbInF@^O?gsElw zuCax}BtQXut83&liI#rkA~z2p^tXJV;RhtFvZA7#nwt6&m5DedllYdVt4g=9tbXv4 z)TWhloJos@T&}4r3%Rh(U@Bz0tRJYjaYIV!^Kqkb0CxWXn`;~(pIDkym`fz!lv%>M zCjUbRp>)pv zcJo*z6hx?&-;@EL2`EDRWIEV6iKQZDR8=R4>Tj?1u*TGj?*>&< z#8>G+j8mmfodf`S>dQ(N9P{N9UqH|O%5-agaT)}9oaZ;S7na^JygajqskOSVCoNak z_3!lVABn=4$Oj)M?QdxPXZ<_kJU<-xfS=^|CpFva7?Wf8WWxG{q@8YxMHkW~#Fj>! z8G#QmK<m z(Fv53%@n|t&mbYDlp+a0B=K>5L;$rXi18K@e-ufj5|x3>no1dvBY1+DwRsKBuybOwHtJ8Y4 zexEtRM#yh2(csaKF8#xG^+@o8>6O7iexRrON?mB^sO(}Jw9OOFFlZL7(#+e@V0m+Wb2d#TOstWPK_^$@Jx`*Uklz`_bqnzcT3gCOc)VXpJP znz!W&2G0KghVoc)b+eHDGW!_eQ}u9~o|ke5tN>etvb}a2r$~8dwp#goHzKjbYgNCM z7vr29Lg)cH(&^R1xbD(02Zh7l{{H}Y=QEUA^+!?MqzC1%e%6GdW$DYx`alA^<;wdj zM^9IY<}&?ALeMJJEuL4`KinjL6V{$wy|O_x=QIm!*&J6R-idYaov>+0L)D!0hSxNd>n=72iO-LOh z9}ZP=h~yws+u9A}k)6o<^XH^tJh}GK(Bzvj{6J-x&@ti6lT}9K1bsMoWd8sum4Yow z`&D{CQWoi`=mk9c2$zH-K5g&m$)Fs*+vV2KCOq9M3OdIQMd4KNnrM4@Y}O~057NBp z#B$=PH)mr@@hyATO>WLwImcQmttkd+ZVKi#EQ#6jQfgxAssbP^tgve_Duj%hpPi&X zJ#6p=PH3H~TDC7h5Q;+T2+pVyp+4Ed39rdVH_dFls$mjhK_-oB^?UNvz$5t9OaB1I z{{W3Lq!B}68H~K@hp$*BS0pVtTH~Qh){!bqXT;_7lmse;9*xcjKi%~CdJAVyC7MtA ziYHo7(L&KE+5JwTM6rp7G}V8|DQ@Y`KU?q;c&sCaWdH{LDCblhqxJs)^wuYaClXmc zg5qkB>lo6{EVE%u7Mv>1sQg3SC{;p65A9+O6*5gBSpk$!b_eMKWe6xl#mEp0^M3TE zVKlrleOxE$L;$OxQYC+(NaAn^#WZE{{Su}3jY8}1QHP) zNOHuE7f@6Q3Ss{M9w0{Y(@N-Kb z23oXu30h1`dg=C$0;h($^Hl3t@Pz{>5`A3$p_wdKpk|n-6`Ty!*R8d2Y?n)Uk0&aR znqC3Ebtb<}HN6W8go{uhL|oZzQAXtz`c)4%70ewOJHq60{{WYg++4NDVj)khSaLNz zg^;4a{vi6befmQ3P}QRRwQc5|e6AS~nm8VCsn)7~>@)A21Vv)1;+OAQ^@iX9C>m6v z1^@>0>R^zlu9x*UfGJXbOO|DSR6t27ld$iZnCWWsSh>^UhgV)vDjFt4D&`YMZiqlM zU%ifLW%PWE5}#b>e*3pP>C_Ig(FnVrMhzG3#b18E~U}^ zND6NNtpx%iI5|3dBWD9cku2`7qMZc{4$7_%n_A&{Bf{Rm<}`c;G@xhbutL=$@rZoe-)A1l)>h*6vaPPD`oHZqD}!fVV@I%;5+bt*dZ$Za83wrta|HWwqi!AV@*7R)&n zZLB1!OrP;Nt59-@u%#+)+(xCdTXM{i2`q=|H9u_NFiCRdmik1ppW+Hr>QygWa~6Rt zqEW|j%HX0`W1vARJ<~hYB2cv*FQW3VT;PxyTvSx`NEnTkd77@<-X)rH899%VBaVBP zqgPV2^0O=njKLf|li66;H?@$CyXy(X_Gq~ra02fcocu!=n(Ly(xA!!Pir4rz%+`c2m_i2XfgL?|V;`p1G}D))67gy)h9 zXC4kw!W07FvL`b>?9!P`sG@({BRYy*?W+nZtrZlK(@~{So~_}5k)Nd4n_jqE{$(Kz4VGD za?h5$&z<8!>s@j*@<0S9v-0$~FgB~R^9m>(5p`Sn9i%H+0BLnus6vz^abrz zhq{j0t+<>9Tfsp4+AnC)X-Y?;$X$!kHGe7xYGRUqONFN7W!{nG~h0nRd9O0E~zSXLP+8 z?9z%PThyBEpppEn)==L0BldyKS#9e|(?bb&>E&t+i+`2Y+93GT<|cJSM7z2Tkm(`_qjcdsTn1mXxn`S0$L!;{k}E3Yxtv$leO zDS!&qX7j)fgn$bNy5D%m(0v=^GNsGB< zMIxx3pU zG~XyF8|~YEaAxhV&AGugJ^uhI>+Q-ARZ@XXl@ZQyLdsLiZ|7*5dBId|LA8EsQum3c zAL2)vR*Kp5XfveWLmbg}-X`&QfSw|t(X|`vAMP;c0ao0+qFJT?0QZ@)(^NBo6t`=*m1a11Xe)b&b=Jf{r&Tfjx(Int=Hz*~ieLD3Y?hS~i z_KWxuUGU~uOX?=p0q|z zNVeAN&h@RD&=!K?&6T=zpsX6Voh$xGP`;{`a|D6KmU#qzP!#gzrQ7WY#RG5YzfO=t z>2Gz<^H?40RZ9J#0`xq$zEeo0LMix7ubV&s1{|yyrb8ypxJo#jO5j%{PvuQ(<_t^! z03^+S9JPeuc?yYDO>6#6q^Yg$iukyHxg_Rb6otz`4eyns$M{i(4ByIGhtv^M@gJ-H zgW>!@GvUsYIpIXCey89uyb{VLb)d6~J#~*8i;0Ci(wQcggN9nuiBu(n%(|DXVJ0RF zq(AabDNBDFrwImPPy$oxQAP0b;{Mqa&ZwXQ57MTT%#w^1bBt-kxU+DY5pb%YQ;1D) zLM_dvkJ4vM52{rKQ_o28AGiCUBb9x5g$G@j@K|6OIySrKAE$&ewNdhC-!4bM*-fg5 zjhUm-2D!(B3x*vCqSTiNUs`c7W~47{@?dTfhcnq>YAaScHJA*Q7t)8NO#vvHsVCh< zBfp-M9ID|6G5yu3qEMs#UW-|{Q*lkziuub2J%#vdA9!?krk8VmgYOnzcjxwm zw(9!)TPSmtt-TM!M|N%NudN_3OoB5G*0Wj`*H1)VVvEl+2vyBkXo9r9W+>HFD81~b z-CRPG{l00S?j6WLnV_$eDyLPp>l1qUW>rD+rLO^W&Ah6c=pirf(HkW0V1Y(dN2@)K zw$8PJDak`W-JWF$Im7I3XilK{`C9>zA zG^V}6v?#Nc0G(_*L8=V~!_elNR6$D<_iD!_H;)u${y`ou% z_GuDMO;hjf25gJ-(*1XmlhZdn$F*#499q!ttFpE85sD?7^UVCj##IQN;!p@YEO(yF zOePYq7jT>H7)8=@W_!1juodpnF9Qm4-&Cqc?W#Yj7zG^3cj1&wT9M(%0%0hYNtRL&P5erp7c&YJJh*AZ z2;!1Sc&6eLSRy@WSkVGMK^`vxX|dQDLd(R)!-xBn0`HNcBz~8LESMmlsYNM4yGAkN zoPUTUh6`YRs-rNVasraR2uz>}lcLAz^AL=*3)(ydwIa%>t*=Fo4g3^~1q)SR0;H;V zi2hE-rGk`lgo>(2*dFHn%*7_=|hSdF3rs z-SbPc9E>spUK_SqxuLgoF7CpOpDv$0W&SeenYFh_8l}C}J7=9>e;#|@f)}P**4y|V zo2K(fHYuM^&pe@B6%^8ozFNqvD(NXqe3D!j4B1Yn>ZtR7yy4^z zh&n5p`2fSo_teE$dqmQSYDaMZnS&5{rs!c1FAG$lCB{QjVG@`2W^$kVy_w*bH>bYW z(iA0y(=^V$R4{{uS1$Q;^M~Kh+pKXN=NfhQ-@-*zg%Gu!yv!0+Emd|^O%@fFnwT@m zs^$WxcjlS%Pu-WV-u<6C=s$b`LR!QN=)3bc@*aO72r6I7(LOw*m_Ye?iaQF{KYI?- zi`9uf`{f*9-Bh|Knr@La%utWaO+50_Vb%9-qce9L?Z( zoG_%MN#bzpCs)dmFN&7s5cKOG@36rlQN%?{CjFvM5>M5`B%tYD_T?Y$O!BBL*t{HB zKe$aXD2}PmFP_i=oFD^LeQ(;G;}ecVEQ2cdYiaKo9wBH+)AFdAQz#P~5(_c%^7tkt znq^f!fOI+ZZjebMCAhaJ;uR%BBlWhL(c-i>T^;MylhP(B%h4Zy5CwAl?`s5BT|E6724@@{8Yi>N@=!U;tZcnot;Z1!KqyNt)gi|`IhHsnoryM z0wZK(SOOIahH;11McxK_8IRz05ARfSf7DNxn#WGHlOfEF? ze!=IMM@uYq z=Wf|1ZwY=EHS(!IGUx#1Pz{)|xS|$Ndl1wmY*M9pQK{17L^Vbp-axYrS=n4fv{$Vc zA{eewl_-ZhXG_&=RNqg(e3qkPAClKSG^g@xouPclyJzuBA>_eVn$x*ARlHDoG9cK$ zkZ3_+U(Wi+p0qUcE0R?#VJK;$3#zX*=DkEEytx3&YUZ(^kbz$GQ-{AT^s!{huiDQiC>Jqs0IwA5YZr;W#G5lom1IYMQ`P<)i?fUVHO|DOzuny8AK)FLEwTytxi{F*LH2KD4%}k{AIg_K66Y zt(o0+Vrf99zRvoR9G@j8+~|NmSmMr_g(}xxVO?4CpAu0dpnXd*jv-5o+REA%qb{O2 zkru!G)ob%4BlQs}1rX(0qNU!qE~$8;sy<{7U$eoOSvj`~RaJJ@crTGpx7DEjOqOyl zGAk!1L#VOdQ8)^sWOvt_Y{cXi`+9xeCM=4pqx|U;22f9SUb{Wx5^1DkFDa@XC-H{} zxqQaNVfgtm6YE*52^nkmykleH%QCu6%hD(D7?VupqZ1g)%FuDa8|@grBucKDYajT8 z#iTFzXu|P?w8RnHq<^}@4ha!A>T}Xb(~$#OMi1&(hxyLG_Yo6*q7Tx-)%(Q$I1(ij zdHcuvwn=6}Jm7f1h)bnjv4`TwEiwzn4~qs-DKa*9%{xHxB$O11am@%qNAd;xgA(|O zu;xjrWq&%xE+p8pF&+5`!X6@7{)fGvykKIV?rFDMcC>L2ig}y$PFCpAEWyw6dM|K{ z68emf zytswsHMG@q^VrS|ilE>B09Cy7_j4btewBgZ!Z4UB%^$9QoO}?PX#$5*2K^(&&x`xB z%qB%BshRuVM~Qqa^Wt%wLn#H);M8cLjg<6{)286T#FWg)g<}*1RaAECf|KH&oRNFU%FUKD|>_6>V5$U@6_agSk~<0-bg98CNlQu~MFXx9I@? z02XwrS(lThOVPFT&AZTS$5#B+d)WxBqpfeX=?pnDmvCyNlDtj+OPebcYbw?L%gOUd zuBfT6Cv*&_U*ZgRHSR3vo{FXwjCS5^Ksp(`1- z_qK{=`YIb$++-@G!dz~;jjR?-=)Zcp1sM)XZiNnxlt0G(?$w2>KGD!qzg8+nOr22u ze@RdUs%n0#z$BV>tzBsDP-!!ji&3q9T=G?}gl{lgrPhcgPe1=77dn9-6rc&u)S%|&eMRidGe5=8)IOy+y4gQpE9u?3?I7=av_1Rm>Foff-`mrh!I?sjTjWuyQIrIQLXUc$ zT~7H&R~(mi>jZKcQVfgz%jAdGddC7cBtL|v?;0+IxVCvAs4P|x)G@ItdL@`z@AU}d znp6uf5*I$U(kH}MB+cn(YhDcCAXQ6q*@>~`9!i-h-qt3@l-tp(`16cO#L7bSKAGEX z6Jm#3ZQ~Ods>+BhXg(wzGj;Qcv1K6rVCb>q$l)_0Yrni75sDMaF#iBi#QrnPNYv0o z-aLI=CD+n1Jb7g=&L;74aIt?_@jf(6LYExiW0FkDiL6QE60@AXZxi^rrXNiHL(fQ` z#^Oo*yZh|G{YrHDPD}9z$4xi@P0u)!#7-(!CGn;}Z!xC+(TC$FnAJI$!|_RRzg_ge z@ebYN3mnfV5|SXd6IL){{YFpVsnculO)|Jy2cJZAq6HTW@2)W z4dPNjF-O(AM;V#arA|$z#7RD18gKApiEiDm)phresG7u{lsw4Dy8CtS(gduwq4pgL{oxAq%k9s+AbEi_ z0Tzi^BZwiWxFlHQpO-~|I}Xa(bq{`#Fa`VDIBI#Kkm<{BM#Q*u2$N}DV+vs~uhuDb z7FZIg0WmNS&_B-mIhsx8XoU){sGQ7CD$3;@cDah>AIpeJ5C)j<(_|p>$HWP!J|UXLbtuSu#rGass*QlO^NU z{k!}VcQN+OKHb}-D|Jq{73<0!RqLlfiRo~Dtj4V1K6K&T;0&tFso#>SXU--7eOhNl zN-w@lAucilAZjb|POvSzuiDLI5MJ-5y1NR(XOj7n%;lE3Hh)qVO61mFHeSyL0+Y9o~4LiD+tD<$IyB?^bz91hP|wu z&zGRKJ{g$IK=Y5&aMEEh38Z*g3w}K!P|du(AwaeM*E+q=I3OrHq34;2mC-zdnwIPW zSe>YF72o51Rt@x}9HO_FbiJZtfwH(gn(NQr8&AV!WP>uez3fGML$alpv7k>Z zuVbR!koi;9dD00yvOjO~2fw7)jr@g2tBYBeRd~e4B|?Q!t8440{jC_jGHC)YB^e`D zu{Y{7%*vg1WB&jX;i>$OI6tb(X#W7j)$J4b@iL^*H;WTWK$r=Jp?AF_6U59{>T#@p zyg>7Gc%K{hC5ffOKT)X6U^UTadS+f zNx%|`OU4!)<<+CZiLGSclz+Gqju}uK_9A~1i6~W%3FBv$c};6d2p%UB7!D9aJw9WD z8cBq~z2aXHG?M=S)eGv|?HE2ch|85Zz{J)+cZTiPd*v7tf-H&OcdP>}g>AcTrqMj( zE~=RkXXL5p63z$&5VlK%r#+>hOsmj8XU-{on!a4%OypRhZhIehj%PY#zY#@tKOIZy z^AeEZ*yYtijcdv?`;N8NCYOcnz1kAneAjs_PBrIFmgpWN`dJ@k{PfNQ-%h1E?|LF>OROCP7sPYAYjP5kqZ(xqtwKT$F})Y;Ie{?ScL-Fd7i?=akLJrPuYDpQQ<(6MeUW5<%T^gFMRz$pKTBT@nwpFTX zV2l3%ab?SwfU1qX(lI}m3O08<{o}yk%q9+t%X-I$L=MQj zz2EL3a^%(1FS10$C~(|QgyUzW0Xjoszwd0FhE493{x2$n7BU-K6iW!xYn0PaG zHt)Q-L7HD%1<$3tsRm8^xJj zePb8KOjXTU_vaJ%nXA0^v5AgroK4~gEjPp;7G*4bxxn#lSG&RSlBjoy{Ajt1ZxMur z`wv%)KNJ4|HjHl+44+KTsf<#gNrH;6&3E$JMA)-erhdGeB#CE5JV)y2oA>Se=`qND zcWk0r)KZGK&W%Jp?jVCa#PJ>$$aB8^FvkJ0)px$pJc40MRDDr|D^qN%ciITX!!l4R z*=f4Opr8QmuoO%c^NA3BRqeea26?3hW#l%y>lk>6lNif404;6&!l@40?|y=5 zOIpKC8{Q@V0H-(k2$pUqOrLvbWYL$?(j}Iv5dZ?dwOrhr#Ok&CAC2h~%Qfq1lvC5o zoMF_taaZ(SnbCi?3W{~zG)0JYEXV#Z`c&ap5h_B-E@e$j>quX^X5HkO6W79x1U^+ z2Pd_;YkJBJj3E}eQ+>T?g3JfsU|#%k#8C?@D0_G!KAH|cP{5a zC?wm@moG#_iRw!~KAkqPh$`9j5BJaK$4sE`)GT9S&L_!ylkpx4$6|4jJa|tR#u@3Q zuM$pMGxton)bc{Gyd&!*&>_yNOJ-TS@el0*{{ZeR)Emkrl#1`JaF7A~Z{sJtA}U_K zkV+D)sQI~U*}BaID&-wMJ{V^JH@Dbt(g;L-GOGakpc=5OOb2JKSzg^k7@W7~TA>{^ zjwZ?1c2`^I$rEBP%9KK=dFf@XB7YJkZZFSvj9(gx1l^cK{{W}}3L2MwtE^AsMBm(0 z?|!k3<5KZIj-GOgP;QYwi73&D;%8gNFN`2>w12oW6;|6s*pr*I9~HtXVq9ecW#oBp zNSnlJ@r&Xn%#4fu(hrK@mzrOGkbGbHW!j$k^2$GSaILcEy&_4BzzZ)uUzXM*v~;9~Iu#a$BGr{6duh!$S90>6x)q?UY=f-pF^iGWp!AS>$KgmVAU&s~Bs~oTY z01*AChV-y_AU`J>@1|l9Bc=LTbZ){JD>B!eb2RM%DVRmo?*9M^jc6xB435HCnNy4M@+fA zcyL637JJu2QYtF$0y?a&PU__qK?b*Qi=}*%SW&PHhU5-{H9{QVpqld;4}M3>%8Bch0H^il@)# zV$36cv0p!h3GxwOj@fMI(#4=JZ*a2mwNfu~T!7RF3KstWB>IZ;5x;J?yeHdBGXs;8 zThbk`cO)Z=Ba|k$2pEzy_UE#;$`KEGmK6RdJ|H*KyVskSckaGwRT+pCqu5lwu~anb z;Ie{@U5#Hm7DT&sE{87S!l@Nda>4px3TJVOLdPJ0uw~1ruJhTOT{pm7RE3K{X&i-!b$sBV4``x z^p6T=!~mAH{kG6kGtpYzuh}aYcwwgU%c@qr&Tu7UP5fz-QW$oGI-cFFu;(_WNoHpo zwvogsck-!9qMtFCiH*;al3l2u{{T-Xg_OEeyNV@sLNX}A0p>e=)NNh~8M5tnqSQp> zKFcqX`^3|Qa?4fA+qkb;{6wQ;%WW9mFv`DDb$Ia}J0g4Q7``n30F+|*&3<>Zf#S}7 ze|W_43JTX#y|fHu)qJ9SdAM|gIV!P@`--7bFy<=z-{wDck$u~y?HGtry(SY(Ln9%HC71&(3SF|#@~xyK^2;d=dn)>m zPe`8{Z{mqZO8LZx=yW^ZwcvuhR0(hUiYT%CxpOI=R#ssCno(2QIC!OcQFq=B47B~p zxhDJP5@5?JCNW)Q+3ga_l$cG=(wo*M#hSqgyB#lF)5;{Cd_wQi*{JvU5U5a5Q>}YJ zoK5}QDO>&GPpEx1c<|FqT4F04a*4j9_=#nfbMy{xxg$9J0xV4SvyuFqtxs z78|U1Kup>V=>ln`oB@=6;guY`VB>-l60N4~5`o69HTyx~;bKnyV+M08A8z;A=Mx3H zqL=k2ez7kX-+BANJS9ixRNu_Alc%NfO}tMx@};l+sQPR`85-;5%X&rlR>^LD{rsl{ zQGx|6&hQ#m`jJAymFUy`N$(S3QqAc}U? z-zOz@Agvd!T!!^nmT6DYQCN>Uj*N5VAI8iF#VNaiQoRfEpg`S9skIACoFj$qn#YNk zj|+gx5P}H4(PQ<`&?oS?xc)Q4{{Z_$CQvGo;>_66&n(}}Y403gvoRB|38y&y9898O zPYSblkJ6@KRTw*Io94nW6oo(HK9(#;)P;s#OHh)#^_GIi`4F{vf4fJDpy{Xa(Dqfi zMvrn-^={|}U?XHg3lNS{qdbZ?PH|dh>Ikh>H(kw0K=B{h^NKNU#I4xcG*OXg+`{@m&Z0BP1Gi~&njm~6w_sB z2PAC5tPO2Sa$hn#!lxyZbE5gx_he}CXNFhlsgE1PCnU#(!82mYQKQ3Pju}729L5rGf#ohpEdKyLaUkO& zg1pKFXMWwFWGFiww$=$E!%gYBwO=TxLwbuu^i9^g^owU`BV9DI6LZjpFPs6x=-CB8 zi{sp<0`BgUfqq2J~_M~fw1 zF?>>myiej({{SeT7l`k?aTL>>Vop*f@d0W=M7Xl>@e&B+@#1_|9Ig)tU1DDqB=S{y zMkL{H>DczuNH~)suSe&qwq_Kt7PZ&@php{{X1vTxFjtSgcL^Q%EHf zR>{9?qH@6rCPi)^PsXu^WFYa%_C8eR-2C`}97HBvce5Y7CR?yWossfR9J)vC%4G)r zd->%OVoC=JxJz?YdWJxqjD08xBF2D=Hc(KY6DED?Y7^ie`9}*>?!H`?$|ja$GKsFi z50aa8fq^{V%McAyK4+B&+;~}l{{YQfqF=mz$}uNZmHBU8Q8<=aSp7w6#wX(|!f5I4 zyRURm>`hlRyZ$=}!Qz+m`1rhGC}~Eg;y7h4YQYR(%w_w09rTHYIhW}hXu$o!AQMzA z{i6j^SjGT?yJ+z8$4=JNSo`mJz>B(w%gVW z#1E-7>ec&bkP4M|Uf+Ks40GPz2+Pq#eFQAkKpA;A$7ufmwNDfMOr0vBxlwWoc!6#c z^rD6QZ!%`#WBx2je$eEo-h0)c@hwjZCjkK$F)$14)U0H$#5&M2FQg-$3WfrfYZml6 z!Ier(tyR}CAE4t|azYe|q~9`+8m2-E-uqXL96{{XdIg+K{c zLd_DQfa5}(Mu3+pf`+Tuz~-ig?j1banx$h*i(S;_ruU&lW zrzX}kS4`b@zYsr&bLV}sv<>flqq)wAh3LmYQ=A^TUo`uwT~!_)wJ4nGj*RPWR*z#< z`}ZDMyQNss`wapE7e2J}H6H8Gg{{*{Z?piNIqccq`9Wd__M+c1&R`(&x;z9! zLDJ@==JnS1gj$P_Z0-oIjTO(b7aX~5q3oy8IjFPMZUKzcdecY61D5=zHuOG z`TgQz2TxS^fVb!c2StE;z^zFLKBAdAC6>DAkV0KxoqBpL=s6eYrB}(i9U$T)O^8a& zTF7(1KAq#l_>n68PeG=BU3tfd@g$S=c8?W|#Y@EgB)S$6J~t3M5ydDjVW#EpKxkBa0D$-+iXBE-8>d(sTAoLB}&noIF!nC&ijpGN8?OzLA5A z^plY9&7b8u&x!~nTn6>!zES&lvrRV(hx1=U7*b3W&Ja+0-M2!xwCZX zmT*BM={wdX6P1>8ND@k)&BlE-j5Q?|l-~6>jv$5KUH7C;IFyrp?7@|qWGQ4XzMfGm zvz6j11Yq!jg4Z9I!k>h3A8quBakz^iN>VuSE5BcEv4P@g#HU4xJVb_OXUSs*U}Xdr zbhHT$B)yH|Od*EHUMM(j6J4GAMmgarpnqNVNK-ee$Az45N~K!$`@o)1^LbhX($6iO zISlpRNR#SoP!Qg2`H76u&OVdQ&9l?Zas}_TDRN0_@&-~}0c|R&ndPXCKkb+?qUy;{ zBW_W^81)O9TY16yOXv6Pu@eAXCrf(>m+2&ON3G5MUExZMviaZK1}C`bbfg0+A@g4% zopcUh)w!-+<1%#T*d#p8dvxi29zVI8iO;d*Hi#evZ#y?E#8E(F%Q$c34S011gOkEe zIHsJEEl)xDFl6K6oRlODESolu^;hXX?mRTupggrG`$+NFLkAp=7gD->G=7aB1Qq@y z5Ht7Qar#?JDaQ4hGuW5dhEB&4}-?sl0)KjaN6h(NRgQE0A zxuIoP7A(U}>&g%zD^qqhzaT2Ltxb{5I==N9R_pYKXV02(($?dpn@ zg?r|#_BUUq{VPcGaDF4Ae6PFxqsV7Yf17kZsV9ur(CmlfGM}=okApL zI)&S%{a^&SKOE2U=H<;Tf6h(Hu3fJRf~tWXJm{TG5R~cWtr$}MKzZnh)%aL1%nA$gfBxhd zy#h)ZXoL>^z&3I$ewcMaEn6;EE7FiSWsuH)v=Jy%^;4g8QD{|jTBg@+3HasPVkZ1^ z)1vvto8IpWucmwUD-+D#YIZ!iM~(4fPiRB6O_0}n8iLn!Y(TU;+a;s>bdFBDy@ifx0QN8Y`5dQ$uSwi*-`r0uk#QnwL z;U7N@1k6K*Pp5szu34CrALOaed(g%&)(9bf+Qh0jWtZtUiN^s^IWgh5Ny%&Z*{F5h9xs_)2v|2gTuqc^;yX2tVxMHj4TN} zN8{oLh?;rO?$9Sn0r#Y1@y=F;FhN(mV2Nar$Yt*zx~Kb6WG-M;3>-yY8e!vs`?@KjmGpp&?Yd`XCY#KA@m(`)H{<-$aGsLPIx2 zqJfpuDDn6|y@5QOBkGikYUv;9Pt$QcFOJ0Gk!9i~X}ZVhz93;@%PlCI-f{XSB-5uB zh%_R)M}?FOF~n@DdDx%;2SlQ$)53)jNDhcD?3{>UP#>9zXoUG~s)c%#jMxA(RjFEm zbV3W(!U_;AR&2SYhL*e#xrEv}r9}|0H(pxTRDNjbba<|NR;#AXU^pE0<$-BV8O<^$JDx3jG+ZtbEitFOol8_LG@{gKT|;t6OtLR~WZjYImMnV&^sY68Snj$EPxU6||KE1UC zBOQS$?0or0085STu_8#-y{o zn!uF_bL-FW8%RYRa@nj(Kcv*A?aA*2pEq^#T5Fb16XF6qsrKJt9xui4%U%4(iN!N3 z=e_$zJ|xOe#x5y|xTb+D($v8^#v&8HXyNM^*jG*Oc8&}~DF~YHpQH>jpiF6^Z&;Y{ z%foATU3R*`{{XExZ>3yPF(mpBTkW+^XqXg0H8F)Sl%WnUlz!-yz~_DT z%yTJ-71cg>q)GHYyL;~OE!C5josRU0d%#&+lz+LJPy+ppnFrC7|#horA3mmJ) z9zEsxq+$4}iE=$72OeT6*I$dA+COsBOxjheZh7>Hz~SPT@p_EXzOgLd@n*|9no_yM zy$>)FkS1x6t-CWT9<2v3DUoV(_AyNm4p}CM*5t5Ve1_|>SdmdL)0ta7%9zh9Fgd8s z&&{5KQCo&bPm2pRkU?6~zPoQ)lUudz*6g-V3dBJ_3t0+pVNPH4s2-x6cih1@cdHv zprIYF>Ad6g3P{e(wxWJx!^{5wN>$2;JoOpVQeFaF2M^MVP;1oohgWo>W&Bj+Qig@m z=`GCxe;_YPI0!FQUYT;MrP&q27I^c|qp;?juNrM%Zyd7gM%#0MR0|z@(Q2KG(jAa0 zi?y#>(S~;bP1{~$N2UI<6m{O%uBtUK*86*UxJob5$Mx0K|5cC<8#rUr+d#VxbkT zmns$#yAHs0^NVz=DK6Bpq#s{xt*E)HC>y_(YRZ6G9ZlFGvXwka#i^f|h5C~BWFPyk zi$`*Gg0|x3y)TjnOS49sI+}mm`GjoM6wyN}vA2CKKvK*+lPj_-=?8CGQ1sDY2QO5z zt9x|yB?U5c)FKqqS~0ML%7VEC_s}6SqQYCas_UL~y~zmz>8BR?GJ?+P5(8IMWMgE0 zR$QSK->A-ks$9J42d%A=XS|J32Rz>81D@c~ zRk1^rrkeA;qFgY_yXkKH*+v24;sHQ(-^58J0Sk1Sl%5jfgRcF`-0979Hv;pG}=3#dx8H3Rjv@MvJo^C&cm1 zF<9|9>aQ4>y2DLf?c#r;49c-T;udAk%lc0#C@iCBD;y~*t(sk%&kL>aP6ko_^o;(~4W~^AjHs zCLBYVZDR`xd4lI$`bHd+$fSkqlukc%0E~6-6L@tiDr4z5TX%%^@(K|VF)_1 zxKZxnm&!Qhm6S@E5bx*Aen-_SI^OX<7Z^eqYfnA;%i+fgRW6&~oR~Z}3a+c@Z_*`| zK_0EYv`&I<6hcVg0ZcvYDUctIqnO)k}s4UZ-oa26mV zv|{+IPrG`={{XDxVbA=FFmV`PsZWjdVoXV3oYt|2j#On5;wfZaQH|oIl2o1AqONz& zF#Jq~Qs>Wqi2d^_a2nMwf8KP>tc&aK z&H*oB%XHEJAO{&ZR-#*NlnI=_z^T%-x|AF_gURdC$Q@J2UKJE0cA?f6LdaFKwe+CU z1K~k?p8ZW1jSV2lwgHooIRr7@5B&jNa z!&w=Ro?w_|Kx>>V*#x{G;!+%d_t&K@XP|_Xs%;#0g5fW{L`}milS#tlWp1^n&cChr z8GK)Y#uH2R5Tjk>Mta2F8xsS?nRs}m<2{16%zlL-231sQ+Avr4z|K}GwMvjjlVvp^ zDlmT8T1Wsb$iwUgS2g-uKB(D0>lTI`rzz&fNM!icx6kZz?k@Dl{V2z&+OX zY6QJ##t?A5$0M0Vb-rN+Q7r+|&-XesRegRNXz|ad;u}P|(KohpTT`!fr7fGhQON*n zOO`7SrFYhg&ZU$-{{WAz`Zs#|Z><~ABfV-G>whyt2fq1@v^jUBIp0JU^(g|1hJhD~ zjEcX+=YDAxIf;_TB?qFKl&XJh2Dc%g9-nK)9G^0SHPAXVzX;l&TOzY^FKBnl+a7=~ zbOlhO8ZCyo6kbM#@Y4bYqNwto7d6esMGB;EUdaRCuJ32Nl`5p<4oAw0jP<2a%sQnn ztzDCrbwfoz_hnO=>>SfQW0zjVEmc9*?FCQ`^+xhaM8~rERY~*9kwx0ytJDS0IG8EB z9jNlw%+Vx(ieI*Hpi=#o_wxfI6yZ3iK6e$I8pk5 z0;78VB39S&1^%j4IW@ENiO9{g?ldvtF~4jPDgyLpSMGf49w!{BGdk|k;xT|!zOjuz z8o!iG6oVA!6BRqzgE!eCV+NJ$?T2GP@!cQuX|0%U`B2C7Ba@OT$ep z8A(4&XGp-O1wA7V9!v>9y4I$!d_eSY zGxo?f2W!7*lf-d6rl}H7a&}@|Nr76gCXP9ZWtRJT#+4Cisvnrgj7uq?XK21S}8w7 ze{C8026jNO@(H1D|wKkb;^rF`*RE zfI9b;WjEgMAIW~3TjM_bqaO>7S*0)Zk=~s{bE+~A*6`2izp76p;bfX(TzS&b`W`3l z%_4sr&~og?FoH^|tkibqC7U%IBFBUX05D$6!EOK*6k$=E3Km5@`I@3;nHV`xkTfZK z>va09nyX}TRXTMwa1vq2v)}0o&+p#murK67=KP;uNYqi+U2{29GUO6cpdwHf*UI^y zNH*t8^!yh@jnzWeCT#mgw@&8Easts&`o~?QFQ~6i$INeE!ep0KgPrKNMW{RcHe(M2O)d4`;sywC1$8=keV}2L^4rEX9NZwvpaoVHI-;Xd;$AR6wZG#^ zJso?C#wYF-1gyTDHnE2+ye&~s&Ch;OG{^X#tDHJ;)$|w4h{6k5L9*|5kE9Q6>}wMe zTpxeE){!?C8gT{XyTpB1t1xKuj943#M1ubkxc9BvlyIMZj?}~+$?GntKBAI%`(;;&4 z;OCc!%QLO$nLK0oL>zJj6+fH7l)STcqE|97#m$934CO+N zn83#qaM2Hx5}{;6bc{S(ci#1hCzTq#S26e$=Mv4Uwn4u4K2W_qJHSN9^xE!_N;4~8 zlR-RA9CFS2^jhT-W;=3dMphoVb%W;!>%Yg^1j#hn39}bODX%xSP$v41Bu$^ZW$1kg`#m1+sY7qb|2f4aEo-HM%2gp-}LS|CGj#!SxJxd zwD^;dih!ig7%Tg7=7F6RhJ>YbI?ERpR%JP!Lcvcgp*5j7+)({bTjiKoBKP{L6g|)( zG@|D4Tc@UHcTHfAlT=Yuauq{|A!=(CLt%GEL~Hv62m7Nov2-^QPQI5m=K%TN0m2x&-EqS`jls?t}sWw?#=sR*F?~ zTBoPG3&(KXs|m;z9cZin0Hl6kJNsAUKX-)6h&{cL3_Y*u9UkeT_0b=-dR;9=O#&xW zu`L8-%E~K}u3-klE2Gn)CTL|25Q%5EuDPvpyCajLR)T+{A(Un{Zdh(%Ej>ckaF zikekWdKXtkXf*>Mid3~bu(4AUoVUrd?snj4!!NsheAXID8Xs2V%J4Fi`D?&-+r)8_n(wIUK9lR=kIUCOu>4-{?Utyfi&lF z);vx#8hQC|IPqA{L5~rLLHbNhI@Ts2u5k27pZPRTh;kN%Flh?}WFWMsG^YCV&H)RZ zx>I4}5CE=~8$tmwnH9I?=LIG|`C{dGn&$Vt9 zRmueEtW7DSCz{0bN+rzGFKcg9JW3TCUwq*40EARATQAk{*Mo^Pvmz9#?(GxJ`->@q zfik_#S9(OFhD23r_G&epdBtW9%U^cOzm!TrPriJ-qDj!A?zM@r6ehupIp+TU@r61X z)jXhhf&wdVZ6EY!`sU$YklbHR{G<0wlAvbUjC@I_RP}>4VDV*S=NJZT5)y?~VoX7d z(+c^)!Z=fLO4?d5u@pIQ%N`TPO(PIfonyoJ&M|QYWqE2N!}x`3-0PO8MYK$t5^ zWdRw2H4rzE4WufDp?Y;Kt#yFs>^J8LRW1plt@*2Fp=c=vo8M@9SGR87S;0^zCV@Wc zRI~p8#+f;rhw5UiLTSG!m;4b~{@uS3`saflC&6OKg`_rWFMRptss5One+~MMKZlx} zYztp~+VO+@B~S`*riR7nh3LG@2ERg#7%OLN?&}4U<(yYEWO4QsbfGT5aT~vwV^w!6 zW#rbi4t_~SC6U7P3-sM?mCM6`-Q(H8n3>s*6Ix$WTDFX3@I5 zm2}?z>tDwD`a(Z9M`U1M%pmrFg5d=ofLi+WV@R%5e@*Pf*#`BuwSN&hBI&z&Cs2{% zjNBvz*Wu&B$Yz}tGmI$%X+e_gECQ5(hb{fS(1}gnIeBk&))KGw3G>z_-RZhPp92{#57%Zqbo<`1Jk?m4)<0-D-u50QD575bt3<`jOtGPffgN|R&%ETP zNC9_{Uuc~0gAyVGeZKzDHT;!2AN{AZ#HZe+7o%ZG*Z z@erQ-^gYlEq2$B1`-u9LrUY`&X#^4|mDl0C;!rLZ%KD7t01N##>8T~>jUwO8*1zFglUzswngpbF4f@3%NrHe@sdUP;Z5Sdvr&d)~22^4+70 zeJGw?bcEuS`^Se8{UWKZ_VJG}619Y3VofyaXgaUvF!3_cI?&7;eoj`Q$FBN9xyikVr%-@0n3R5LGkKxmv^K+KcL$Gp9v~onKWy z{Ax5>=bC^{OW&_d{{WUx3>s8r9KC7zfa9m$DEDQ){{R|7YP|WWp}!;ojL|n$PF`#d z=>t>euCd6!Exp}-Hg~;m8ZxI=EuM9v+R#HNwOl@Ih)ZaW0S_95sm|wItz@NPU&@>K z);n)|q#AoJR$6W0ThgN2&y*^Q=W$NWp{UG4>AjAI^o1yfv|_i-J%?n5E6ESAKl_yy zhAZ#W^YIizKtGW-)UoAIE0k@6dg$E#nwSHXSJ2DMgdaJTcj(6Fk)iTy@n?`Kq>|Z+ zrzLk9f$wy#fp0(!5nR+;mGU{d_q)Z7Y@SVUO>MeUZUbo;YLKh%5D zJT#mxE1Y4VRI?s+L|t+f8p9(cUz+-je4@=14ZNXOd-Q-Ro2Am}woV(&$xOn4*Yb(+ zCU6H$JJvjAA(S2~x<8*xz3CW3iKb*Wv-$kQ(uZ-n#u(vQQ3F->GU)e=KmwEeZQG^x(IS9mHvt60 zuRF9$GM7fr-kzfIEyp;VI8pU)%Qjy)#KJR7sZDc?IRKH!QMBJU;Nt7{-$j8h3KD5_ z+gc3ZgcCO}hyqhzsb4LJjtrF!-kE8w;0kN_gDM&`?>!^-ZdI%=&hCnia_BergEG^5NOsowMZ_(~&DXMjj-jiAAfwj&U@>2AkhFn;9h)-`Xadin><2?b0O=%inf@ zKz*3QoRS4ZVoW$*Fmb1neIvtSNsS_psu)QFC zD2wX)lD4@$$%PeN>jb*4@1y=27P(z03PAo&{=tdQpJr&MsBcZ*SWWq6+s+iJ@CnWZBe~yB4D7+p7oCz;iNd+L@8ouOR!)Y(A!TA(t#*zC)lp4iDP)m zy(}9oe3lNqn`|4Ev%JPoo=yRk!k9e^ETE(v1LHZ|AfSl+${rcrw#|@Q4q+7kkW7CjKaS`uW8F07xd)w~$55 zsm%2KPZT;A>lo9hFim&Am@@=#>4+AwIXma+26Vh}!YmnKGwr?75x$!9-us!2eKyyy z$}qwOzkB)j_kuATt6l(@%JKVdvmd78Ye-}QR9iqQYtt`i93-lh_xyGAkK5uO$Qy6( z0|@^BlJwcm1|D12Vh{`P*RRK~?5x)y1-c9QUU`I|}dnR8lzRSFz5O24MNRj-lYl5!%d9>KOONbNk6q&mAiDltDLvOpm zCI{{CAub*Fw}U2BDYyLEDNDgnH~906JV}*HJ$LqrzPvLur|J)7-t&n8o?uI77(j4? zC3o@8Ffk4w;GM;z00rSUj}P=_==@P3Sze?lH*Q2|sB+901Q9S6Z>FH9kv$?=xVXDp zD|5<=5|ZIwwofh+bMjh1O+G&@w}K^F(HmU!iMv}q+tw*WP2{l2wWwan=@gqnJw3i- zg*#T_ZbH5OV?)zEVmI#oP|d>5A4LM_t-F=V4ehSFE!Nz*LaOye{5Di5s6wcQI@ex$=L|zS=0Q=KdR3az^Wk7rkVRHLTu*R3LyIziEOp8OuG=S)+=R#sq6XsMDuXIWeGgD+VP52TU~PL zs2t*V`d6RhesSRfJt&KoLtPD&xCIm-HYu1nk2Xt^kea{cAZ_9Iz1biiUs^>ge|_%w zlOPwdJ81DZvWX8}qOoZ6oAE|V_%<0o@7{>aQ=N_VhjmWSapX6 z45DJa>v))Oj&Urcm9g}z`oJ0@U(-&+bINp<^(#+JjKjpBj$YJe`7t*cl>#HzC8+Y+ zMjio{rnUAJ^?`;Zl(OsSVp&L;%Pv~z_U{suUY~OpQS~lWT>AT0C9CuAzIw##f2;GR zox((>LBgRmtMBcUeLOt>03NM(f~~@P?_#Y0o1T7M&r3wXNAgac#p@qbltan9z2a%f z0?EoIaEN)2hUa(&VN$55wp@o*=gth%BkilViRK2qHXzNaeYX6vRh+0${Mk8sbTDxy z7Ee8xILC<&{?}+iL!}q*65-ja@ur@!Jd*IRahKX9KqxuGe{zhOO4{S?lpIL{y3l$) z^R*xecvKpUpMJVQ#Ywn*w|IHNx23yT?n%5zM78MxbVq}T!3Av-aZRLP&osYD9e2}6 zn}q0M%3vvg5>izo0&lPWB<|jkC(<{)^Nb8co>R}tJU;hXrI zsSQI-v<(L~=G652#uje=yq|hk>Rwc9>-p)J{{Svu2B`et%!I29&%dsa6)vYxQTRnm z9Rl9v`Hia`(IbT$oqb*vCKPka*ldHO0;5m78=!N^%4$YQ+Rq7kl+7r%C^i<*dnHbs z{LCP&j#QXE`tbxkYZC<>Ieo-SW_qJ5s~Xcwike0!SE7b(FZbnm!k>p16N~};K>E3c zR&@w6iAY@ifx6|Ddjf<5#1yWI2;#_xw{gx0(}~3_Tk1k|)@uMv1-(t1F`~DeMgmR@Bm_K8J$t%a#l_bXNCIrLo7^Rb~vF+-yw4_e*q$3=?0n6H~<+Wn5S z-g+GD!aHx@Y_O@nzuzp0y5vP|_k(XQ$J!RFZ}A44f|b;E6pc=+OI@0QbkXBr@0sDoV9-zKNRu0PaHuja}{6k)&PRUDSQk}*ZQ=Ukb2 zb5#Nc2$-|duh&I8+f z{J|`nXq^)|nF3n(r7Y3o=S5_${Ua6DF~PC+&N!|1+rq@#5sLXl;T8-jgEv?N*Dq#= z&wJe=O$~SR5*4qLZ34u}{il0vtYR6KUaGsie)38>u>!uiWgKgmIoEl{5HEexdFd0Z zs#CH1#Itd)KDyt&rjabHxBITz1fcWK=SEO+JmZCe`t#@M>k}zCX|A{OcjP#b7k^}Y z`N!`8DF``%yrYem`ERD$0=LJUPsEMcE!G6f)1Lj}S(FVCnx~elSM3v4zFeYZm}Z(K z`>b&RUD>y2Jh|_`bIv81JrJ;_nSO5*D7UO2m=wF6+brN=%f-Z>S37GQK)sI1VxLTA^1dWgc8jD0nX z0%m`yaDbho4skftif)mCHKqlqB1xzpeReuTqT`h;s^7;X$^iyY zbNm=!2)Rny(RbeWc+CeD$7E|b)N0EGM`6oIP*hN<`)@-N3UilxUwD>)9j`wj7q#x} z{{VXY#R{4pdhim=OFOCIDd zp#;jAxw;a>U5eA{HGlg+6;in)fnT}KmI47~$QI#GEY)`LRQrB@RuAKT{;>VEw{6kk zOJDMrx8>nz?Y2v(Ir14gs-5SU(6GIeQPnQrhku2!(|sVSwwhAsP~>09WW>629fA!!O!W_6=ADt_+4S4_HlUdKSOes;@0Y9x1| zY8qw{IkGk5Qny^b=q`O)ADQNXNzD#VT?L^KHIai*C92JFM4*H8`kL9R^Y)463YT-X z{3elxl?e3IDSll$#Da=>w%cCt9a-9%w<7$~^>CowJ`0k`am~;-^aW4G&UeuwQ3v@~ zk?*HonncVFXg&AuAE*#$a_Yjdi!gZc3QHK6eOun&PhIbvO*LZ|5j9wxlj-H_%keV} zVp+9={HyT+x84;xblstgrkDHnfU=Hz?cNm8Q&{v>Ce-*;bANeOvSfcj!`VE<#a~gRD);r@483w2u|tmoJ%1804CB?=D&zN*zd3A z5E{z+-f=v$kNbDK#Gs?P_kus;pT2{iH-J=>vU%>D(xxXO&FF1@^^f8a!6SL^STY%k zk@$%uK}%g3$3I?|3H3S-M|;u4}~k;f}WiqB%o$O*}ge7 ztdLLz`}%T$!--0b@9z>08m2?G(8uvH#Iz7Ns!31G39bsnhmKs5KXi%HE$qh^()DN7 z5&1y=KJkLbCF{NA5@#3_3Vve>S|dgpfT2`YJT&}bl(b1p>IVK|QS{`A{{X3z%c1Ct zB{cH;d%>>Xd%OxER_RK2V_gWSg?%sOy7#h_PG+iAY0*ZUm_c43+BZ_CEW1MWjw9U` zQEskFtNq{vxqmI^SExXWpo(N+Y6!Pa&rV8)0_H7RXI!;%D)fQ~J^hgEa!7UF>jg~Q z!6B(?=6Jnh#Di?#=8sJ|v|+v+x!<$Z0&H3mojJ9|`PF;Ec_%TKOR27+B`Ufv@(J#U z)z+~!&9Y3EiJhzM7pB7YWdgknEqNcuPO4R)8gj|^Mn*#BkU%w|wueVmp|Ku+IY49r z=ghhEB)n3#T!M$>7qwLYkH-C4-J*(0HArEpN(xJJaMwzjE8e;J1gAHIr=jo5*G+5F ze%?`klgrECM(Mv%4U;CCwtUw_QnB{0HT509i}n}v>i+-`NiF83dW0Ik6;X{L`I@GF z{dH6^r{>$!s|K&WcGGPY1-TUkU6Y$vHY~6J2p>Z+Rck3OmFt?uU?QBeVa|w|UtVKB zFTK6WL8vrd5V_Q$N()NvW<>u0BHweKRpu#NQ>l2Imc_55gOQ$_+ z&9=_id|bJ6(tzC9FY!f*XG<2aL2Ye&78RDDs`}aa7?%6D$GEg~`^UU9H$4&6^%}Z0 z#OEyDCqzv?bN7$b0aB6T4snb`+ot~j5I}f3#NiJ(#0p~)R%oAk!|{Jb?UGS{0wsEH zdk{q9-Js4D8MmZNO0TCsJ(!kmuSXrS=@Nw*FFos=acZ0M?FSExu^iU5pyjtn;W8rc z=Qt9S>*-Z~R(I|i<576wof@m9Vtyk~JdL?)?@%I9r(e$f**CV` zV38_l9!ox40Ux+wVa@I`yXX$8~Rzw`&3m-mv z?ELAQOH#nL3&%X zaLp;JWxT%;HutgT97!<*7DMpecSu7rkG|Jp1gXg>zep~AH}`-u-?sV30Az`!P=PnS zv`Z)fH`*mxLX zu+5P3_3Z*;fG6cqA3We6q&8dKBTW6ZiHaMR2n99M-z9iPa+G}cNF#;sp=Y_Kn!>r4 zx~R)e+4^XFv%e?Q!*8T8H$=C`w`Yk0IqBQ;m4pz5Qu6XB>*khwB0(T=oQMUkLiH$D z)+Qv6TPG$k`^(-6pskPOCU0U6k>Vx#Nw+1;Ds8K#0SAm_l6zef$j28n@6GgHjnmuR za(u1xA4;lyNQyFS`W}#e3hGoc(4fe5aS7LxWa0b&0Nq##_i*B_Km=8(recB3+dJL) zX=+1`Km>C2z3pCVVbj$dHErlD?U0T6`abUd`Q?4+V7n$qY?U3IVN_TaCgM}hjngn;e;R63sjoif zGb($qTBEavYzlXEnREL zpFXj^OZnP=Md!V&9(1zRQmxyW(k7u4T(`b)`h=tso%XShFA~NkP}LtXINr=pQydqG zrVoAZ$}tI8GJ=Np=eMBuJfnx{Ui`PZM5&ibucqBZ5O?ceTO8t?-8K6}xM4Zzz4U_9 z0FLzEGjC{;Q#HN5{WFQM=1N;M^aIq^C0R~McjN<}+exM~7cNovyG9-x6-sx{@dN=i zb7#&GokvRVUx)!sSqCVZP$}?tyT=G2E6mnEZfRao*xQrun+5*>BiGM;;&CtcOqqQu z{SmW{0IH2pd3o-aiFqCG(g^%}Mivn|6Vzs(3lm8+v@4t$N^N}Ofc0-ZWA=rDYx(>^ zzy{Budfqr!r7d@OG9|UIE&2#A@GIYaEF^AQ^5vL`rk9I`shOhrEO~FNFjH6LI$v)S zshxrk@)<;>H@$g5IcmG}_k&j7UpP>XcfBG>)}kF*xA7lR!c37Y$Y4$M?c!Ouid*Nr z1h)G|2m#Clw|MZ_j)X*`ichB?k>KVih9s0!M5GFu{rdJ?pdPxHweDRCGTGw{mKJ_u z_SY-YBtnOwdNSsm{?RcehxtqpRV9{XId7~TGIXE=&2$0<-q%#SzpeR405cLfd;TFV z`|0w$z=120&fTrLDdtg)nz=_8(ssjpu^&JWRsR6wy|l1uMBe!w1!$|bSd=%t{MXJ4 z6n(DRjX?lRauiUi5p1I_AbyoBID;6RHurdxq|=1SJB!!5l9|9wdmOKwo81r$0`GVwgbOv}iv`GA|s1}FtO2Ryd%E+qopw^u9Ylm#M)pj|6v z6v?zJ{V%!^RVhQ9DpsPc=9(@i{{#y?OcPdLSlPvl1TyTtOKR#=|!YViKi`*n<2 z5w(Y;3?iSMH_{}OC2hU?JOlM7P3_4uO$+#L@s6 z?eHnSvBISvdd4OW+b#3*gCY$&Jv-2Lj9E|a0vXWuOZq|^7er?C(Q1s^MAGttq_-sn zE2RLkWssl=Zjh<-z4T#AEKE3yS|lTT-*{5H+d!33;Ta5m+rX4>eIUwZT!P5n;Z5w~PQRL;UYzCBsDDw@8x@h-RC=%@!pH$*#tJc~US( z)l8^)x^GO3fwE6G^g<5IaIDi#`2u-ZGYDH|X|eATf5QuiS%MRoI7MU!> zYPF@{p_k{D`$6I}WKgBjWj5j;NeOUJ{{U>tU{G+O{{RtZS`?}+7tFxZlm1q@R{6yj z@O$}e#K?@PoTyDQb?sc}R_fifZB3lnvrcX{DQar#a~V~&OvC1tOwulHz-EV6tr3^J z5~>h})n6nl*$7ThYh@a`8d`-9P|F$(JwuBB03OGyGN47ibe6YN;jNP~1atDM=DFu= zmN_u`t#$dUR`I=e^9iS-Z$BtcEP>a&XmTo#LKIzcEKhL?ioj7hg|T&@-ZqJZ|*2TaTuU*i!U+d-`+n^k#yPR9wC%L3j{JI z_u4UJ0w!*|_=))H78L`;((yfWjs!XD3B(XY(s0z*+kbk**m*7cc8M5=BQk#4~TNFH_iJ0V5q^QS~i%(=R&2pb<^K zZEhpWmhTg3L8MG)<4TP_H_A8_)1Fq^?1@Myp65PDH>8*XXCr&%2Mr2KtbWIBx$SOo zAeKc0b=Q9J`#gAwEf?}53&U`IGi1Eh`$!U^f&p~+H`wnk1gH50Uc*x4rM6=m2^F6I z06d^dR4)5R?R`APT5oioR8`*ECzODQs>qxBG)sm-u56Jov2lHLj8L+m_Ka^2i8Rz@ zkJ%tg>AgPjJ{b-qUU@{gN=Z&)Kid^EQ-7HKnBnsLJP`3H2GBl{tO8)p+jy2?ddCsz ztV=me_ehm^R0QA8-X$cBb^OK@&W138AI|sIFoBq5*L05tNI^A{FsD+Hhr*nyiJi7v zq7VW4Lu-|Q(GMuX2ZhI}`0G$=%Mz&pNUD=Y8C4E`(LCix{{R_ubtgS3&Lyjm{{Wv) zD6sa)R_nS#f=FSPAdBnLk^5>kXo>Smq85WA5CC)sqjZS?ap=`6-!pRY#I&cM zZRrxf7*z;$aJ>Fjv1xtl=KlG@zb8GRc$e2AJB0*ykL|ur=OtyR@~TJo@>}M6jXO2M zft%>+hd{YoHLPgn)eX*tyYpo36wr6517jtMp%>w(N~lyfO3QCilJPTg2(5iisbCZSS;K zKm9_*T8Q0Rt5_|dzJk5E@<`6~QYwPSH(u$SaT0VsS9Wj4Y`SUayVJP}+4Azt-PQo+ zidLGvMeDASRtZEDu0j6*;#6s&gbEmzP=Cch&E094<%}vld48r&#@jV zS&WJr#WFWUZR-+vd4Uv|RokVyZ82U{79FB&HLv0h6dW{CL&VaP{{U~K3>uoSM2WCx zBlzDa7#W9&aDikIiG#x6L(Iv_44)A`8@BX`Fu0y(9uX$En{GAGmPv*i;S>+tF4$`#XT1n|u$U*+($CQMH#@V9aL0= zN=1h*zEt+_392m}A1`jE7s{@Pz?Dn;I_A0sqVKO>aoW6|pw~3jUXV$(td6PW?zTr< z&9i6s%GHJ6piSGH6GNAw1Tj(F^s8p4+BdJtck+bSmRAxbA8-qnO{c6#fQ#{Hlm9Ggb+ zZzvSWb2mNnL{bFGB^ejQ777tbl%&t5|RVLsy!C@x0sARGc?uHlwr!C9&M#gp|yc0)Ov5)pD-m!W<0utzazUx zhrkm|grfE~Mf3c`%OvJOSu=2XatRnfV-mC#)WrCy{{T(6P$rh4{CA0Xc#b5$#`R(u ztRLnvF=PT{BFeQVdb~?Gm=cwsrK`V`o=J-z?iWjQ^o|=Vi^THr12UZh*hJC5C?&~P+N z;%qrW#waNSl}f)&?7*E7-^xF5#Dq_ja91zKluiO5j5$Ks@*}ixO)V+;fr&C()6yk$ zO6K+a$AvaI$A*dtu_YxdPX7SI*CRAnv|U zDc5gyeDsN4YP0&F0qliY%2JSrhseI(FRUI&p=ja##UlCqCqOy@qywt0dYD7ZbAFXw zTyl;S3hJD%%dKSE-`++3#4i$)NN0e>fpSWOREzpZ1@V zexfQ#=dYri(zTtOHf1EI zx|3iNHY^mRJvn?-r(y0RHKG<@RVbYNqo6sPC!6_eA3Hv}uP0@)lzyr?qozyWM>7lazkgWw zrzGnF;R7C-`Z>syQiR52p;X}sOI1qe-#8<>X+`q&>Lb0k=j9GgR_8CEe5fuai>KeN z->d~)EB5?;cwK0D+3o3jGMGTUA9dM|wzxT8)!{WI3omx%PM=Y{C08obHBdlJGlr&4 z1LkOHl_}If2|=o|mO$<2ol+5zw*BwU32mR9`C{=Q^V3zOi91{=6cab{vAAlAj_hLy zHy1mqgz_s|++AUb$nxai-zHkdnQzVsuXY)F_Fw3f&EPZ8keAfwsX(;68ZVT7p*?|# z!83JIJO_~bT7kuOP_<$L2-X-wkLz=8l zhg%HWl`p<=`v8x6L6%SnMWjk5U*TAr4pX6tutJeC78~ER96lDBzlfK^iHElL?~CDp zA4{B$?*{}*99MgI@i<>s(ms)0^o(nSkJ|dH2MJ!{CLAFRce{MNpU2iDo@s)fS;3UA zIFO-5>k>>Q@~goCOw$nTovji}A_1H0`0o;)0+pnAY;F_=hQ0Yl5&D!2qXteOqVa^u z%G$PDyF5x%G@`53QHV*pe^tG=$RZ{%PnZ&b}FI`d*6+u0~pKRgAB^AAe&z|;R)UtxiQpfE_Q(*91Z#PZoBN|{OH%2;hT?pq;BgbQL&VtJrSbRo`yR;kx zm1*$@jTB0BD3bMGILGlkCx`hL6lEDk7?NP(ENU0CoT%|W{D=^ zJ2cxIvx%lMyt;3_qIH-rQWsua#40KuqtDb=D3cq6)~VR%-)RRB4lnR-a3+|%qkUtF zbt|A6kBE?P%fxDW>B=R;`i$ikzTF^6`=3m=-Qr&jETjHT=p%y?Q81QEu~4Q2n4CXU z(#a{RJjFlb5)27P453^36%#IkC-Blt^Kk=ZXqUqHiGHbN`d{kfmeDcCk&qSLqFhp( zGXxhXqPf-%1hdLGPgtM8%n*ROtNg+6;!qWmCc!1-EG-jZ8G?`G+t`65(@1!wd1LqH z!<&TBe%i#JxjD>h)+WIJ04hc|giuU~LH_{V9xubqDzXTcRi0yE+mpoeF-qPi#FWg1 z4LWH~yr4)p7khXhgsJJj%o&oN@FtaYjwTP*kO-~${Kg(9)Jd`3Ht{6lXz@W=gH%Z#2_2 z+Q4zhED`h@)|H~Ok5L@@XbM8X24Vw?s$2fzICQzmKadz`1y4UN)Xy@pq)dd4b%`Ze zl=7h4vn`;a$S5V{ad3W?0YI2{tQI^~Eh`SIPzVp2DL|^VsPj!Kt}Bx=M*ZBl12{`M zFEgk~h5G1YC*EFM>Y8QKLIKj(tJtX#S`o9pM>;}R+oqi;Pbi}LdC&%OGq!N7`ksTE z)7}Usg%6hUHY1oMG7PF*gJw0=Pumaz%4lc>x>UZMV9A&AezvV0ug;B!&2sLizriSW4b z4fkm9o)->TNt(9xP1-RLND`)duIm`#LNC&r^ke4|cz+CLNu{mO`zV9qz&u!BGrbdf zM7(pq46=z(D0kfyRwR;g6wbY6OH+gd)EnM0u;rOnRa#6>M$0I|7?^1&oDnjS#wnT_ z^inbri~EZ-vr4j_XUfsSl5ouO(&ZlQ=jk7)_;Q5d_sTFlHZaG;oS&p4XIPsI@TdwI z`YyGMc?Ep>Ml`4SXg1NrWEq);zR@(rH%Jp(ee;RJpT{T@8AEd0hvf!km*O$;43cpI znT-+S55Et(9kvI^Q4XKPYL&iSnFq<2OP;RMayT&ZsAtXtP1OEUK&+=eTImG_}t1<;2#4koLC6&nfhQ9Eaau*AG z*GL#r&%r#zq96KdlATI}-^wt2H-MSCi0MD7~)K)3=^nkpI5&EhVPdCxy!eau9rT5k_ zPZyM6Orn}z&8MPR8W@$1`!>F?tjJR{%oHh-`ZBB_M#;Ys#ZYd8sJg#A)3h^^&0LdG z-_U8M{o{}OMIOF&3tovvNL}vL{1{Qlu=5mKTRx%((#x7V)!Ri)7)KBtKn(Ra7JBH0 zZ4m}%g$&dsKP57Pst_)@GHdu(q$k%?{6|Kzvh#Y?8e{b!C^St9Q0gmu(88a;O&E3q zAp&Bw*OeG5DKG9tAtkCRP_QXNYycHEZ3HfSyM<0&tSeL%4&eM(ZD`#=3w(=o1!*)wq`NT{MikAhopcXsI%e8!;Pcjn7=;}{Zs`tDTQOaWf)M5^BF(QVqtuL#BM$1C zC-}FywUJ{&chh{K1(0Md(=JiF!Kvt}TM?4`tHlDP0-&o_h1V!P&#q3xnDn`-{w-F6 zpzPV(nkyQvX#I<&O|EQRR>+XgdN$oQ0Evcl^6l^Ugx@sw>la2|R-<*OX2+YK*jHW6j_OMKu{MnW_pb$}VUS3)w=ZV>j&Fs?hd79$llz=dUI18Ltl3 z^Ub{we%vfrs?r8Rs&UD>Uk<&ITAnPAV#@YtPm(CL9vU!zq+E z)&0Di)hP)jR8atM$keJ?{NSURHBf2KojLLm;&>)utz*RaY+tYTf|Ufgq)Yq1v%xU4 zfKeiG^rn4WMm&IF%28PN5ilW3K_sjdjv*~e{&pf`#55bJ4ft+{798g{AM&J)aw|S z5*6cfK&GX1LEb;uU`h2%Wdz^%DbOj2{5Be%3~`wHL6~(RJL?l+NyEZKxP$zfQ`i6u zc)ttb=fwIzlRV(~No1Fc!{Zs*!6=>DCGj332%IV8DU`$>$Rb(19LxKY3_0jmh(eow)4}M?VVnl1u{8zBfp$f$sjc%Ll&jphC>KRX^JyIxBHKmcM?zOP6eNdUmG8-r9`TJ#<*L>*X zOLOz<+zx2TW*GqM6}1j}kf9e;9SS@NT@>8CLf9p=wt!0%ZL$kDo5QUyodR+hdFdO! zJAH?wDtvVVMFC&t6&$69a+f^5RvP4dWgGmy>lLDN$ds_>m_61vNb9f@%X-r;v~Fdy zsP&4AF?9NzS#+B~;UQ1eQ0T)>xw)5x!YfB|t)BkJ}Am-%*mx?-_4p#eT6OxNCPNho<>c979uLSWF{{SGW z5Nf&oSJ$Kj1<)}dAyZX*I$K&8pAey#B#coM%!0s^S{pA&7?^x~Sd$r*z?_xp2DY`< z(|Df_(vBc*KuKyDLHnmT81jl10D&n~%}vAPi+DaLOq^UIr|B(vlW#g%U}MR_{GA!t z3Mu&bi9A67lQ@{EVht#0bA#flX_7P_7dP?Ko%ih@?zm*(nGs@XzLUT}qbR$^G|T+0 zr${v~z3B%GO~ojo4tmFmz&s>NFjlWMO}r2g%0lqUe8X>~W8TF1M5l#}6b}U}^90Q4 zNcykN+uFqDlGAtvNuRP)1?@02)EWnq>O8 zbziHXiKfEDlY(Ky5G=)2i&uHZ2Z#gylW>Mx0p$FWF+6Vv(h)z3phNdNq)FpS@d7xD zAuK(cU$OrHbY+@pu{cDjDGC);k%1IA%vm6A~E)an!M81tY1 z0Aq-mf|FURPEr2=UT>(*COXRARD*@$GD0YSF(JbQ9}<)El?dg+;xX{N8Cj&5aGN5$4sQg+1YWyfJ4?io|Kt|u^Xa`}Rzm>J zF$$xOsH?(F(N7IsQm_#Tuo`kf43Mv0S$C&MC%x>#4K8_vaqHDZX#g9UG{c zwsm(Bsk)n^!&^G)dE3(33k1(vYWrG6*O#h$zb?Z?xT^{=3s%XJV9G>her#+Sx$;E` z51^lh)&XpzhyrxIrjMynjVsk@FTGiUK^-8C9qHwhk?`OwC4*LjO1S%HlqHQ364xDm z&_`p%#&1iCz*|od)5(?`0FbmbVeb9 zRh7g7pdN+b+l|vNn19Aw)8;81KcN}= z_S9*V4|RV^t+@pVpd<=Z^X`^UdMdFc`b9IpmF={%!O6AzL*%vWFGHon6*Nf3UIopD zd9Tb>85^0k#_q8>Nm0l4^i_U=smh`;Wy3#7#F$g*kj>@*C#mMqJ{*{TRF&qXwI^mK z@d4Ii%lv@NYnOPN^&SPF9pL__gELDi*@5qrP2*>tZHz{<4OBJBvTwN@7I$uAQE%XX&3V-K&k`o;=nl4Pdb z;|6I!OZJQ-!nqxH_Kp=%YQ`8=Jz_yDpe!hqD5<J1&R$}XhvG$6qj!ViVEDQ; zNsg$5YTfr}{{V3>@mGobS;AkbXu-cQd{N;BW36>=vHt31Q#wn}SpNXT6d6HY&}T!M`&X0+#XY?uX}qt! z_l_ccARZd;D8MCOK8?S;NjtHsH_yJrcsza-1jmK(fFM*2_YvXzM6;)#IF%-o{^0)i zUp-z0M*Ovb%i;b#DHWoIY`wj06E?Z>y)PA(sGx@&Kvs_~i=aT2fb^w1DBjfNeA34+ z&q@eI56`h(8{Ga8{nMt~Y2u#HIJ|1rZKH2}wyTkDWa2){&1l*Dx(`R8ds1 zN+5eHJYcWV$wyVOQAY3a13#T?ifqy4ucrCZ5zf$L6TAISTS33c&$|4ehAtCRa1l{z z7_N&0_^lf%CV~4dmyWyH=M;3U_BDnZ$$oZ`#l7>_+82=^zdWkUh0O@6!YAEdsV~)Q zSnQqhUPi3>!}(Ku^GYyN98QVn=2-z+dbBNlTYbe=$s3?bw@{mCRNL%rOe^;D$mgbB zd{zf7cWTxN-*Ma0?HOjRM`AguTzV`kmNq(G*@V#PmPG#mZ!D7~7Xb|kg|hVT28gJ= zI{CsN&=%y35Cm#UGD4)st&UXRxM&$=?@x=rC(g&Pm2u5eV?=)_Wrjp zBYU{#Xh@i4$-Q&z{;~f676xf(xfdXH{z9tuj8X<0*#I2VoHCakavo{cF>z2mnKK@~ zk&WUAn4^s^mbu>a%M-;K4ewmz8^ldF5N+~|d_kQmgva}&p&)3l68O=dJ?@b=iUl4H zI1fVy#Fhl8iF`XJhY*U}`%Dpq5C{6zjR z1DqcdJlm^8-YkLy=8B+K%X-1aGog`yq#qJrjQv!u>jxasQc`_0Seq4P`cKpS*`ASy zI8%}K=O6A)gSPfy__?JmFh!*VVfcx0F5#ChUznP32lH-PudjH)@sof=rDfeM+9k#~ zm+pNd3{5P{Jj$m30BD*?SAMa=f4W-TRyjb8In8(BZ@{0z{}-a`**HT7k=Ug z(=E-~q}IqDrqxz}eRsO9jT0f2!|@R+f5=qSAS&b_{{R+J(@KXU#0p-=-#8@)BrKhu zK7D_ppyj=76Cb46i__J%@K4ja{BMwcg%g+Iv@nL*@>MU^`kJ!A4oJOvbmh=SA`hE3 zXPRVMF~~TiR4HXoT9QV28?0b3bfXj5-`}GBdzI>Nr4Z5-Q&Wbq~gi4mHh6zXc_KuzJL_e2N)-Tg8ccJ*^AhWp@ zx%Vreuw=LNHt+22_3rH(<-S3TS0wnZinaNVHFAnBKjb@HH!>ZOQ+rQ?*VFCFkVf{K z?H#`R-G8M$$?NC5gdlg-)4L*n9POBj^d<^7ROVZ{7SNcdQ`xnpC^@3W&h+++6b@?L z6oQLSM@NB|+}Qg2M*RCh-rJ=j{{WhLX6=*_8I$OIv)7k2k5yZYyK9-}1%WN6H|5H? z^^}9P`#|5cAwQp1&grT`8V>d7p0uihvErs21D}_^xz!?kNo6S6^JMz1mu+LjW0U>e z0H<4yv5Sh5>zk}%W6taA@e^auGN9h~oZLmp-uAF$Qr7p0i3H`d0&SR@V>Ju{cb1#H z5^G)aiDo8PmURgdc!`ACM7|`D=0A8IQ89Hk-u+`261i_k#Yu!BIzcZJ1tk6xyh=br zz4X=wC`4kqW~&|}jE|*3w)%9gv4bHK6Ea!SB~YfE;Nx)Axhn$^X)qb@C>ZEm{i1wP z{ieBWK%RQR#4?pwn-z8-W7#fuNaIKCSd$wPm1r|fQbThztF_DzQA}e~;Cf zMD&S7;#&l@y&`f+c{+)Ldv$32xsrtq7vpOOib)zJoRX5X8Kxx((V7IjH(qZNtff?@ z_K_s~R8CVrqz);5!Z7h?7o*U8!0|-ZVsww+B1^^|IhcXIS;3ZRzqF?@9wWno2$ryX zJkK5{!{->1p>6f~jx-#$?eh}P^>6PIPsb@-zdOn>_ltb>KrBE)QkK%#+Y!eavp~CDE8+QMNN<>;UW>jLcS?{{SF{>Y7l(YM+k%q4O1G{Dr*{vv^0RR?&X+rjSDY zn_n^?Ivc{M4bbfQ-Wz8v*$NE+gim((ssNeM;N6vU&o$pDtum0zi#^G$Ng zJHR5xuv;iIbQQV)wv7hs)ceI#qS#*C$i0VKnydc+Y~6t%OXk-R{{V6YMpnzKmRq9O zLLDyq7rTWZS%v#Mof+HvY?Z60=9zEfPhCwysUR=>vdYNk>>iu^+f80%BrJUK5`8x_

getNomUrl(1); ?>getNomUrl(1); ?> ref_client; ?> date, 'day'); ?> $objectlink) trans("CustomerOrder"); ?> global->MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES) print ' getNomUrl(1); ?>getNomUrl(1); ?> ref_client; ?> date, 'day'); ?> $objectlink) break; } ?>getNomUrl(1); ?>getNomUrl(1); ?> ref_client; ?> date, 'day'); ?> $objectlink) ?>
trans("RepeatableInvoice"); ?>getNomUrl(1); ?>getNomUrl(1); ?> date_when, 'day'); ?> $objectlink) trans("Reception"); ?> global->MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES) print ' getNomUrl(1); ?>getNomUrl(1); ?> date_delivery, 'day'); ?> $objectlink) trans("Ticket"); ?> global->MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES) print ' getNomUrl(1); ?>getNomUrl(1); ?> ref_client; ?> datec, 'day'); ?> ' . $line->label_operation . '' . $line->label_operation . '
(' . length_accounta($line->subledger_account) . ')
' . ($line->debit ? price($line->debit) :''). '' . ($line->credit ? price($line->credit) : '') . '' . ($line->debit ? price($line->debit) :''). '' . ($line->credit ? price($line->credit) : '') . '
'.$langs->trans("SubTotal").':'.price($sous_total_debit).''.price($sous_total_credit).'  '; +print price($sous_total_debit - $sous_total_credit); +print '
'.$langs->trans("Total").':'; +print ''; print price($total_debit); print ''; +print ''; print price($total_credit); print ''; + print ''; $form->select_types_paiements($search_paymentmode, 'search_paymentmode', '', 0, 1, 1, 10); print ''; + print ''; $form->select_conditions_paiements($search_paymentterms, 'search_paymentterms', -1, 1, 1); print ''; + print ''; + print ''; + print ''; + print ''; - if ($contextpage == 'poslist') - { - print $thirdpartystatic->name; - } - else - { - print $thirdpartystatic->getNomUrl(1, 'customer'); - } + if ($contextpage == 'poslist') + { + print $thirdpartystatic->name; + } + else + { + print $thirdpartystatic->getNomUrl(1, 'customer'); + } print ''; + print $obj->module_source; + print ''; + print $obj->pos_source; + print '
'; -print $langs->trans("DolibarrReceiptPrinter").' ('.$langs->trans("TakeposConnectorNecesary").')'; +print $langs->trans("DolibarrReceiptPrinter").' ('.$langs->trans("TakeposConnectorNecesary").')'; print ''; print $form->selectyesno("TAKEPOSCONNECTOR", $conf->global->TAKEPOSCONNECTOR, 1); print "
'; - print $langs->trans("IPAddress").' ('.$langs->trans("TakeposConnectorNecesary").')'; + print $langs->trans("IPAddress").' ('.$langs->trans("TakeposConnectorNecesary").')'; print ''; print ''; print '
'; - print $langs->trans("OrderPrinters").' ('.$langs->trans("Setup").')'; + print $langs->trans("OrderPrinters").' ('.$langs->trans("Setup").')'; print ''; print $form->selectyesno("TAKEPOS_ORDER_PRINTERS", $conf->global->TAKEPOS_ORDER_PRINTERS, 1); print '
'; From a8676e63c8d69e500c7810708842074e991d4a21 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 16:46:50 +0200 Subject: [PATCH 178/980] CSS --- htdocs/comm/card.php | 4 +--- htdocs/core/class/html.formfile.class.php | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php index 3f50c6ab6c8..576851b7e2e 100644 --- a/htdocs/comm/card.php +++ b/htdocs/comm/card.php @@ -403,7 +403,7 @@ if ($object->id > 0) print '
'; if ($user->rights->societe->creer && !$user->societe_id > 0) { - print ''.img_edit($langs->trans("Modify")).''; + print ''.img_edit($langs->trans("Modify")).''; } print '
'; print ''; @@ -425,8 +425,6 @@ if ($object->id > 0) print ''; $limit_field_type = (! empty($conf->global->MAIN_USE_JQUERY_JEDITABLE)) ? 'numeric' : 'amount'; print $form->editfieldval("OutstandingBill", 'outstanding_limit', $object->outstanding_limit, $object, $user->rights->societe->creer, $limit_field_type, ($object->outstanding_limit != '' ? price($object->outstanding_limit) : '')); - //if (empty($object->outstanding_limit)) print $langs->trans("NoLimit"); - print ''; print ''; } diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 7f9ada37e7d..8a0341135c7 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -115,7 +115,7 @@ class FormFile if (empty($title)) $title=$langs->trans("AttachANewFile"); if ($title != 'none') $out.=load_fiche_titre($title, null, null); - if (empty($usewithoutform)) + if (empty($usewithoutform)) // Try to avoid this and set instead the form by the caller. { $out .= ''; $out .= ''; From 9a2fabff6fb77949be0ec027d82ed424f71dde58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 10 Oct 2019 18:42:29 +0200 Subject: [PATCH 179/980] doxygen --- .../modules/security/generate/modGeneratePassPerso.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php b/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php index 5a7d22670c7..8abcc41c263 100644 --- a/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php +++ b/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php @@ -177,7 +177,7 @@ class modGeneratePassPerso extends ModeleGenPassword * Validate a password * * @param string $password Password to check - * @return int 0 if KO, >0 if OK + * @return bool false if KO, true if OK */ public function validatePassword($password) { From ebf73c857c325c931a32b93d55bcbd574b44622a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 10 Oct 2019 21:09:08 +0200 Subject: [PATCH 180/980] get relative path for favicon --- htdocs/main.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 2d612f5808d..aa778a111bc 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1224,7 +1224,7 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr print ''."\n"; // Favicon - $favicon = DOL_MAIN_URL_ROOT . '/theme/'.$conf->theme.'/img/favicon.ico'; + $favicon = dol_buildpath('/theme/'.$conf->theme.'/img/favicon.ico', 1); if (! empty($conf->global->MAIN_FAVICON_URL)) $favicon=$conf->global->MAIN_FAVICON_URL; if (empty($conf->dol_use_jmobile)) print ''."\n"; // Not required into an Android webview //if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) print ''."\n"; From 3bf6fac505bf6bbe8f0b96f14f25bb338ca2f52b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 22:05:34 +0200 Subject: [PATCH 181/980] NEW Can filter on label on invoice in accounting vendor binding pages --- htdocs/accountancy/supplier/lines.php | 9 ++++----- htdocs/accountancy/supplier/list.php | 10 +++++----- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index 97f1c771122..a815e5b858b 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -192,12 +192,12 @@ if ($search_lineid) { if (strlen(trim($search_invoice))) { $sql .= natural_search("f.ref", $search_invoice); } +if (strlen(trim($search_label))) { + $sql .= natural_search("f.libelle", $search_label); +} if (strlen(trim($search_ref))) { $sql .= natural_search("p.ref", $search_ref); } -if (strlen(trim($search_label))) { - $sql .= natural_search("p.label", $search_label); -} if (strlen(trim($search_desc))) { $sql .= natural_search("l.description", $search_desc); } @@ -300,14 +300,13 @@ if ($result) { print ''; print ''; print ''; - print ''; + print ''; print ''; if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; print ''; $formother->select_year($search_year, 'search_year', 1, 20, 5); print ''; print ''; - //print ''; print ''; print ''; print ''; diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index 6ba3e244582..fc453a94250 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -234,12 +234,12 @@ if ($search_lineid) { if (strlen(trim($search_invoice))) { $sql .= natural_search("f.ref", $search_invoice); } +if (strlen(trim($search_label))) { + $sql .= natural_search("f.libelle", $search_label); +} if (strlen(trim($search_ref))) { $sql .= natural_search("p.ref", $search_ref); } -if (strlen(trim($search_label))) { - $sql .= natural_search("p.label", $search_label); -} if (strlen(trim($search_desc))) { $sql .= natural_search("l.description", $search_desc); } @@ -317,6 +317,7 @@ if ($result) { if ($search_year) $param.='&search_year='.urlencode($search_year); if ($search_invoice) $param.='&search_invoice='.urlencode($search_invoice); if ($search_ref) $param.='&search_ref='.urlencode($search_ref); + if ($search_label) $param.='&search_label='.urlencode($search_label); if ($search_desc) $param.='&search_desc='.urlencode($search_desc); if ($search_amount) $param.='&search_amount='.urlencode($search_amount); if ($search_vat) $param.='&search_vat='.urlencode($search_vat); @@ -362,14 +363,13 @@ if ($result) { print ''; print ''; print ''; - print ''; + print ''; print ''; if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; print ''; $formother->select_year($search_year, 'search_year', 1, 20, 5); print ''; print ''; - //print ''; print ''; print ''; print ''; From f82f4162c3abffe3bac4e15693dc37d4cb9de65a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 22:42:23 +0200 Subject: [PATCH 182/980] NEW Look and fill v11: Introduce CSS "trforbreak" --- htdocs/accountancy/bookkeeping/balance.php | 4 ++-- htdocs/theme/eldy/global.inc.php | 4 +++- htdocs/theme/md/style.css.php | 4 +++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/balance.php b/htdocs/accountancy/bookkeeping/balance.php index 3c04548d7c6..7d48790348d 100644 --- a/htdocs/accountancy/bookkeeping/balance.php +++ b/htdocs/accountancy/bookkeeping/balance.php @@ -279,8 +279,8 @@ if ($action != 'export_csv') print ''; } - // Affiche le compte comptable en debut de ligne - print ""; + // Show first line of a break + print ''; print '' . $line->numero_compte . ($root_account_description ? ' - ' . $root_account_description : '') . ''; print ''; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 69865d7ab1b..ddd865cbbb2 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -2942,7 +2942,9 @@ td.evenodd, tr.nohoverpair td, #trlinefordates td { background: # !important; } .trforbreak td { - background-color: # !important; + font-weight: bold; + border-bottom: 1pt solid black !important; + /* background-color: # !important; */ } table.dataTable td { diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 8c6bd8d4d77..dc666d77a02 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3046,7 +3046,9 @@ td.evenodd, tr.nohoverpair td { background: # !important; } .trforbreak td { - background-color: # !important; + font-weight: bold; + border-bottom: 1pt solid black !important; + /* background-color: # !important; */ } table.dataTable td { From 5dc6e7d1a09de22b7d0d6cd63c1993323f3fcdc6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 22:45:04 +0200 Subject: [PATCH 183/980] CSS --- htdocs/theme/md/info-box.inc.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index fafa2978865..95e057e68f1 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -6,6 +6,11 @@ if (! defined('ISLOADEDBYSTEELSHEET')) die('Must be call by steelsheet'); ?> * Component: Info Box * ------------------- */ + +span.info-box-icon-text { /* hide box text number due to problems */ + display: none; +} + .info-box { display: block; min-height: 90px; From fce07cf8ca195c5ccd8594dba0bffcc34e4abcf6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 22:52:11 +0200 Subject: [PATCH 184/980] CSS --- htdocs/theme/md/style.css.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index dc666d77a02..93f71d3a47e 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1782,7 +1782,7 @@ div.mainmenu { position : relative; background-repeat:no-repeat; background-position:center top; - height: px; + height: px; margin-left: 0px; min-width: 40px; } @@ -3973,7 +3973,7 @@ table.cal_event td.cal_event_right { padding: 4px 4px !important; } .cal_peruserviewname { max-width: 140px; height: 22px; } .topmenuimage { - background-size: 28px auto; + background-size: 24px auto; } /* ============================================================================== */ @@ -5684,7 +5684,7 @@ border-top-right-radius: 6px; } .menuhider { - width: px; + width: px; } /* nboftopmenuentries = , fontsize= */ @@ -5703,7 +5703,7 @@ border-top-right-radius: 6px; font-size: 12px; } .topmenuimage { - background-size: 26px auto; + background-size: 24px auto; margin-top: 0px; } li.tmenu, li.tmenusel { From e7f56b67d84f2ab6d7a382a7329bf6ed1a2ac463 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 10 Oct 2019 23:00:33 +0200 Subject: [PATCH 185/980] Look and feel v11 --- htdocs/core/lib/usergroups.lib.php | 2 +- htdocs/theme/md/style.css.php | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index ef875675ed7..b4140ba90a7 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -399,7 +399,7 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false) print ''; if ($subdir == $conf->global->MAIN_THEME) $title=$langs->trans("ThemeCurrentlyActive"); else $title=$langs->trans("ShowPreview"); - print ''.$title.''; + print ''.$title.''; print '
'; if ($subdir == $selected_theme) { diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 93f71d3a47e..72974ded51f 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3215,6 +3215,10 @@ tr.liste_sub_total, tr.liste_sub_total td { -webkit-box-shadow: 0px 0px 0px #f4f4f4 !important; box-shadow: 0px 0px 0px #f4f4f4 !important; } +.shadow { + -webkit-box-shadow: 2px 2px 5px #CCC !important; + box-shadow: 2px 2px 5px #CCC !important; +} div.tabBar .noborder { -webkit-box-shadow: 0px 0px 0px #f4f4f4 !important; From c80d055af31d21131c1fe02c19889f2ef45017f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 10 Oct 2019 23:51:54 +0200 Subject: [PATCH 186/980] fix search by roles --- htdocs/core/lib/company.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 36657d48dbc..76606c4a54e 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -1052,12 +1052,12 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center'; if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap'; if ($key == 'status' || $key == 'statut') $align.=($align?' ':'').'center'; - if (! empty($arrayfields['t.'.$key]['checked'])) + if (! empty($arrayfields['t.'.$key]['checked']) || ! empty($arrayfields['sc.'.$key]['checked'])) { print ''; if (in_array($key, array('statut'))){ print $form->selectarray('search_status', array('-1'=>'','0'=>$contactstatic->LibStatut(0, 1),'1'=>$contactstatic->LibStatut(1, 1)), $search_status); - }elseif (in_array($key, array('role'))) { + } elseif (in_array($key, array('role'))) { print $formcompany->showRoles("search_roles", $contactstatic, 'edit', $search_roles); } else { print ''; From 9194eb4bec9bb95e1afb4b96b631f60df50f9617 Mon Sep 17 00:00:00 2001 From: John Botella Date: Fri, 11 Oct 2019 09:14:10 +0200 Subject: [PATCH 187/980] Fix block title height if no button --- htdocs/core/lib/functions.lib.php | 6 +++--- htdocs/theme/eldy/global.inc.php | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index b9e6d17ccf5..450afe47a65 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -4120,9 +4120,9 @@ function load_fiche_titre($titre, $morehtmlright = '', $picto = 'generic', $pict if ($picto == 'setup') $picto='generic'; $return.= "\n"; - $return.= ''; // maring bottom must be same than into print_barre_list - if ($picto) $return.= ''; - $return.= '
'.img_picto('', $picto, 'class="valignmiddle widthpictotitle pictotitle"', $pictoisfullpath).''; + $return.= ''; // maring bottom must be same than into print_barre_list + if ($picto) $return.= ''; + $return.= ''; if (dol_strlen($morehtmlcenter)) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index ddd865cbbb2..8d1b73080de 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3587,6 +3587,10 @@ div.titre, .secondary { color: rgb(); } +table.table-fiche-title .col-title div.titre{ + line-height: 40px; +} + #dolpaymenttable { min-width: 320px; font-size: 16px; } /* Width must have min to make stripe input area visible. Lower than 320 makes input area crazy for credit card that need zip code */ #tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; } #tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; } From 535a09e85699229d9b1d9e9d5de52e431cd1b3a1 Mon Sep 17 00:00:00 2001 From: John Botella Date: Fri, 11 Oct 2019 09:17:17 +0200 Subject: [PATCH 188/980] Fix block title height if no button MD --- htdocs/theme/md/style.css.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 72974ded51f..75c47ebe6f0 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3625,6 +3625,10 @@ div.titre, .secondary { color: rgb(); } +table.table-fiche-title .col-title div.titre{ + line-height: 40px; +} + #dolpaymenttable { min-width: 320px; font-size: 16px; } /* Width must have min to make stripe input area visible. Lower than 320 makes input area crazy for credit card that need zip code */ #tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; } #tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; } From af88f44fd9ab99fc1b62ae1f3144cd230bef7618 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Fri, 11 Oct 2019 09:51:17 +0200 Subject: [PATCH 189/980] fix some translations --- htdocs/core/class/commondocgenerator.class.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index 74253a19f51..cd117f3ca07 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -316,7 +316,7 @@ abstract class CommonDocGenerator // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Define array with couple subtitution key => subtitution value + * Define array with couple substitution key => substitution value * * @param Translate $outputlangs Language object for output * @return array Array of substitution key->code @@ -445,7 +445,7 @@ abstract class CommonDocGenerator $array_key.'_already_payed_all_locale'=>price(price2num($already_payed_all, 'MT'), 0, $outputlangs), $array_key.'_already_payed_all'=> price2num($already_payed_all, 'MT'), - // Remain to pay with all know infrmation (except open direct debit requests) + // Remain to pay with all know information (except open direct debit requests) $array_key.'_remain_to_pay_locale'=>price(price2num($object->total_ttc - $remain_to_pay, 'MT'), 0, $outputlangs), $array_key.'_remain_to_pay'=>price2num($object->total_ttc - $remain_to_pay, 'MT') ); @@ -479,7 +479,7 @@ abstract class CommonDocGenerator $totalUp = 0; foreach ($object->lines as $line) { - // $line->tva_tx format depends on database field accuraty, no reliable. This is kept for backward comaptibility + // $line->tva_tx format depends on database field accuraty, no reliable. This is kept for backward compatibility if (empty($resarray[$array_key.'_total_vat_'.$line->tva_tx])) $resarray[$array_key.'_total_vat_'.$line->tva_tx]=0; $resarray[$array_key.'_total_vat_'.$line->tva_tx]+=$line->total_tva; $resarray[$array_key.'_total_vat_locale_'.$line->tva_tx]=price($resarray[$array_key.'_total_vat_'.$line->tva_tx]); @@ -868,7 +868,7 @@ abstract class CommonDocGenerator /** - * uasort callback function to Sort colums fields + * uasort callback function to Sort columns fields * * @param array $a PDF lines array fields configs * @param array $b PDF lines array fields configs @@ -907,7 +907,7 @@ abstract class CommonDocGenerator // Positionning $curX = $this->page_largeur-$this->marge_droite; // start from right - // Array witdh + // Array width $arrayWidth = $this->page_largeur-$this->marge_droite-$this->marge_gauche; // Count flexible column @@ -915,10 +915,10 @@ abstract class CommonDocGenerator $countFlexCol = 0; foreach ($this->cols as $colKey =>& $colDef) { - if(!$this->getColumnStatus($colKey)) continue; // continue if desable + if(!$this->getColumnStatus($colKey)) continue; // continue if desabled if(!empty($colDef['scale'])){ - // In case of column widht is defined by percentage + // In case of column width is defined by percentage $colDef['width'] = abs($arrayWidth * $colDef['scale'] / 100); } From 13115a55a209d7fb70f5d6f6dbdde10d4e69a8cc Mon Sep 17 00:00:00 2001 From: John Botella Date: Fri, 11 Oct 2019 10:02:59 +0200 Subject: [PATCH 190/980] Fix logo background and hidden conf --- htdocs/core/menus/standard/eldy.lib.php | 9 ++++++++- htdocs/theme/eldy/global.inc.php | 10 ++++++---- htdocs/theme/md/style.css.php | 10 ++++++---- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index dbf56429086..878d7e13cd1 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -480,6 +480,12 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout = { $mysoc->logo_mini=(empty($conf->global->MAIN_INFO_SOCIETE_LOGO_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI); $mysoc->logo_squarred_mini=(empty($conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI); + + $logoContainerAdditionalClass = 'backgroundforcompanylogo'; + if(!empty($conf->global->MAIN_INFO_SOCIETE_LOGO_NO_BACKGROUND)){ + $logoContainerAdditionalClass = ''; + } + if (! empty($mysoc->logo_squarred_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini)) { $urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_squarred_mini); @@ -497,7 +503,8 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout = print "\n".''."\n"; print_start_menu_entry('companylogo', 'class="tmenu tmenucompanylogo"', 1); - print ''."\n"; + + print ''."\n"; print_end_menu_entry(4); } diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index ddd865cbbb2..2fef266ab2e 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1085,19 +1085,21 @@ div.blockvmenulogo { border-bottom: 0 !important; } -.backgroundforcompanylogo { +.menu-logo-container { margin: px; margin-left: 8px; margin-right: 8px; - background-color: rgba(255,255,255,0.7); padding: 0; - border-radius: 5px; height: px; /* width: 100px; */ max-width: 100px; vertical-align: middle; } -.backgroundforcompanylogo img.mycompany { +.backgroundforcompanylogo { + background-color: rgba(255,255,255,0.7); + border-radius: 5px; +} +.menu-logo-container img.mycompany { object-fit: contain; width: inherit; height: inherit; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 72974ded51f..9ee1f3d56e7 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2253,19 +2253,21 @@ div.blockvmenulogo { border-bottom: 0 !important; } -.backgroundforcompanylogo { +.menu-logo-container { margin: px; margin-left: 12px; margin-right: 6px; - background-color: rgba(255,255,255,0.7); padding: 0; - border-radius: 5px; height: px; /* width: 100px; */ max-width: 100px; vertical-align: middle; } -.backgroundforcompanylogo img.mycompany { +.backgroundforcompanylogo { + background-color: rgba(255,255,255,0.7); + border-radius: 5px; +} +.menu-logo-container img.mycompany { object-fit: contain; width: inherit; height: inherit; From 4873cbd071664e3a2f9d735c7f39a9c3afe88ad8 Mon Sep 17 00:00:00 2001 From: John Botella Date: Fri, 11 Oct 2019 10:10:12 +0200 Subject: [PATCH 191/980] Fix css name --- htdocs/core/menus/standard/eldy.lib.php | 2 +- htdocs/theme/eldy/global.inc.php | 4 ++-- htdocs/theme/md/style.css.php | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 878d7e13cd1..d1ec07a2152 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -504,7 +504,7 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout = print_start_menu_entry('companylogo', 'class="tmenu tmenucompanylogo"', 1); - print ''."\n"; + print ''."\n"; print_end_menu_entry(4); } diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 2fef266ab2e..fe4dcd376f2 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1085,7 +1085,7 @@ div.blockvmenulogo { border-bottom: 0 !important; } -.menu-logo-container { +.menulogocontainer { margin: px; margin-left: 8px; margin-right: 8px; @@ -1099,7 +1099,7 @@ div.blockvmenulogo background-color: rgba(255,255,255,0.7); border-radius: 5px; } -.menu-logo-container img.mycompany { +.menulogocontainer img.mycompany { object-fit: contain; width: inherit; height: inherit; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 9ee1f3d56e7..87d39529e92 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2253,7 +2253,7 @@ div.blockvmenulogo { border-bottom: 0 !important; } -.menu-logo-container { +.menulogocontainer { margin: px; margin-left: 12px; margin-right: 6px; @@ -2267,7 +2267,7 @@ div.blockvmenulogo background-color: rgba(255,255,255,0.7); border-radius: 5px; } -.menu-logo-container img.mycompany { +.menulogocontainer img.mycompany { object-fit: contain; width: inherit; height: inherit; From bcb7365a5a371142af6db2d4ae08117568ed3fc7 Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 11 Oct 2019 10:13:21 +0200 Subject: [PATCH 192/980] Update commondocgenerator.class.php --- htdocs/core/class/commondocgenerator.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index cd117f3ca07..84f49bafe3f 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -915,7 +915,7 @@ abstract class CommonDocGenerator $countFlexCol = 0; foreach ($this->cols as $colKey =>& $colDef) { - if(!$this->getColumnStatus($colKey)) continue; // continue if desabled + if(!$this->getColumnStatus($colKey)) continue; // continue if disabled if(!empty($colDef['scale'])){ // In case of column width is defined by percentage From 25b9be9de7b6db279a0797e2a9429f53c1c32d76 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Fri, 11 Oct 2019 10:19:58 +0200 Subject: [PATCH 193/980] update code --- htdocs/core/modules/propale/doc/pdf_cyan.modules.php | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php index c678f0380fd..3049214679e 100644 --- a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php @@ -198,13 +198,9 @@ class pdf_cyan extends ModelePDFPropales if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1'; - - $outputlangs->load("main"); - $outputlangs->load("dict"); - $outputlangs->load("companies"); - $outputlangs->load("bills"); - $outputlangs->load("propal"); - $outputlangs->load("products"); + + // Translations + $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "propal")); $nblines = count($object->lines); From de107fb02e93431ecfad06f8e8606767124d572b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 11:27:05 +0200 Subject: [PATCH 194/980] NEW Can set a squarred icon on your company setup --- htdocs/admin/company.php | 212 ++++++++++++------ .../install/mysql/migration/10.0.0-11.0.0.sql | 2 + htdocs/install/mysql/tables/llx_societe.sql | 1 + htdocs/langs/en_US/admin.lang | 3 + htdocs/societe/class/societe.class.php | 16 +- htdocs/theme/eldy/global.inc.php | 16 +- htdocs/theme/md/style.css.php | 4 + 7 files changed, 182 insertions(+), 72 deletions(-) diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index a3534d3bc5a..9da2e550501 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -105,69 +105,79 @@ if ( ($action == 'update' && ! GETPOST("cancel", 'alpha')) dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOTE", GETPOST("note", 'none'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_INFO_SOCIETE_GENCOD", GETPOST("barcode", 'alpha'), 'chaine', 0, '', $conf->entity); - $varforimage='logo'; $dirforimage=$conf->mycompany->dir_output.'/logos/'; - if ($_FILES[$varforimage]["tmp_name"]) + $dirforimage=$conf->mycompany->dir_output.'/logos/'; + + $arrayofimages = array('logo', 'logo_squarred'); + + foreach($arrayofimages as $varforimage) { - if (preg_match('/([^\\/:]+)$/i', $_FILES[$varforimage]["name"], $reg)) + if ($_FILES[$varforimage]["tmp_name"]) { - $original_file=$reg[1]; - - $isimage=image_format_supported($original_file); - if ($isimage >= 0) + $reg = array(); + if (preg_match('/([^\\/:]+)$/i', $_FILES[$varforimage]["name"], $reg)) { - dol_syslog("Move file ".$_FILES[$varforimage]["tmp_name"]." to ".$dirforimage.$original_file); - if (! is_dir($dirforimage)) - { - dol_mkdir($dirforimage); - } - $result=dol_move_uploaded_file($_FILES[$varforimage]["tmp_name"], $dirforimage.$original_file, 1, 0, $_FILES[$varforimage]['error']); - if ($result > 0) - { - dolibarr_set_const($db, "MAIN_INFO_SOCIETE_LOGO", $original_file, 'chaine', 0, '', $conf->entity); + $original_file=$reg[1]; - // Create thumbs of logo (Note that PDF use original file and not thumbs) - if ($isimage > 0) + $isimage=image_format_supported($original_file); + if ($isimage >= 0) + { + dol_syslog("Move file ".$_FILES[$varforimage]["tmp_name"]." to ".$dirforimage.$original_file); + if (! is_dir($dirforimage)) { - // Create thumbs - //$object->addThumbs($newfile); // We can't use addThumbs here yet because we need name of generated thumbs to add them into constants. TODO Check if need such constants. We should be able to retreive value with get... - - // Create small thumb, Used on logon for example - $imgThumbSmall = vignette($dirforimage.$original_file, $maxwidthsmall, $maxheightsmall, '_small', $quality); - if (image_format_supported($imgThumbSmall) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbSmall, $reg)) - { - $imgThumbSmall = $reg[1]; // Save only basename - dolibarr_set_const($db, "MAIN_INFO_SOCIETE_LOGO_SMALL", $imgThumbSmall, 'chaine', 0, '', $conf->entity); - } - else dol_syslog($imgThumbSmall); - - // Create mini thumb, Used on menu or for setup page for example - $imgThumbMini = vignette($dirforimage.$original_file, $maxwidthmini, $maxheightmini, '_mini', $quality); - if (image_format_supported($imgThumbMini) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbMini, $reg)) - { - $imgThumbMini = $reg[1]; // Save only basename - dolibarr_set_const($db, "MAIN_INFO_SOCIETE_LOGO_MINI", $imgThumbMini, 'chaine', 0, '', $conf->entity); - } - else dol_syslog($imgThumbMini); + dol_mkdir($dirforimage); + } + $result=dol_move_uploaded_file($_FILES[$varforimage]["tmp_name"], $dirforimage.$original_file, 1, 0, $_FILES[$varforimage]['error']); + if ($result > 0) + { + $constant = "MAIN_INFO_SOCIETE_LOGO"; + if ($varforimage == 'logo_squarred') $constant = "MAIN_INFO_SOCIETE_LOGO_SQUARRED"; + + dolibarr_set_const($db, $constant, $original_file, 'chaine', 0, '', $conf->entity); + + // Create thumbs of logo (Note that PDF use original file and not thumbs) + if ($isimage > 0) + { + // Create thumbs + //$object->addThumbs($newfile); // We can't use addThumbs here yet because we need name of generated thumbs to add them into constants. TODO Check if need such constants. We should be able to retreive value with get... + + // Create small thumb, Used on logon for example + $imgThumbSmall = vignette($dirforimage.$original_file, $maxwidthsmall, $maxheightsmall, '_small', $quality); + if (image_format_supported($imgThumbSmall) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbSmall, $reg)) + { + $imgThumbSmall = $reg[1]; // Save only basename + dolibarr_set_const($db, $constant."_SMALL", $imgThumbSmall, 'chaine', 0, '', $conf->entity); + } + else dol_syslog($imgThumbSmall); + + // Create mini thumb, Used on menu or for setup page for example + $imgThumbMini = vignette($dirforimage.$original_file, $maxwidthmini, $maxheightmini, '_mini', $quality); + if (image_format_supported($imgThumbMini) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbMini, $reg)) + { + $imgThumbMini = $reg[1]; // Save only basename + dolibarr_set_const($db, $constant."_MINI", $imgThumbMini, 'chaine', 0, '', $conf->entity); + } + else dol_syslog($imgThumbMini); + } + else dol_syslog("ErrorImageFormatNotSupported", LOG_WARNING); + } elseif (preg_match('/^ErrorFileIsInfectedWithAVirus/', $result)) { + $error++; + $langs->load("errors"); + $tmparray=explode(':', $result); + setEventMessages($langs->trans('ErrorFileIsInfectedWithAVirus', $tmparray[1]), null, 'errors'); + } + else + { + $error++; + setEventMessages($langs->trans("ErrorFailedToSaveFile"), null, 'errors'); } - else dol_syslog("ErrorImageFormatNotSupported", LOG_WARNING); - } elseif (preg_match('/^ErrorFileIsInfectedWithAVirus/', $result)) { - $error++; - $langs->load("errors"); - $tmparray=explode(':', $result); - setEventMessages($langs->trans('ErrorFileIsInfectedWithAVirus', $tmparray[1]), null, 'errors'); } else { $error++; - setEventMessages($langs->trans("ErrorFailedToSaveFile"), null, 'errors'); + $langs->load("errors"); + setEventMessages($langs->trans("ErrorBadImageFormat"), null, 'errors'); } } - else - { - $error++; - $langs->load("errors"); - setEventMessages($langs->trans("ErrorBadImageFormat"), null, 'errors'); - } } } @@ -247,7 +257,7 @@ if ( ($action == 'update' && ! GETPOST("cancel", 'alpha')) } } -if ($action == 'addthumb') // Regenerate thumbs +if ($action == 'addthumb' || $action == 'addthumbsquarred') // Regenerate thumbs { if (file_exists($conf->mycompany->dir_output.'/logos/'.$_GET["file"])) { @@ -256,15 +266,20 @@ if ($action == 'addthumb') // Regenerate thumbs // Create thumbs of logo if ($isimage > 0) { + $constant = "MAIN_INFO_SOCIETE_LOGO"; + if ($action == 'addthumbsquarred') $constant = "MAIN_INFO_SOCIETE_LOGO_SQUARRED"; + + $reg = array(); + // Create thumbs - //$object->addThumbs($newfile); // We can't use addThumbs here yet because we need name of generated thumbs to add them into constants. TODO Check if need such constants. We should be able to retreive value with get... + //$object->addThumbs($newfile); // We can't use addThumbs here yet because we need name of generated thumbs to add them into constants. TODO Check if need such constants. We should be able to retreive value with get... // Create small thumb. Used on logon for example $imgThumbSmall = vignette($conf->mycompany->dir_output.'/logos/'.$_GET["file"], $maxwidthsmall, $maxheightsmall, '_small', $quality); if (image_format_supported($imgThumbSmall) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbSmall, $reg)) { $imgThumbSmall = $reg[1]; // Save only basename - dolibarr_set_const($db, "MAIN_INFO_SOCIETE_LOGO_SMALL", $imgThumbSmall, 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, $constant."_SMALL", $imgThumbSmall, 'chaine', 0, '', $conf->entity); } else dol_syslog($imgThumbSmall); @@ -273,7 +288,7 @@ if ($action == 'addthumb') // Regenerate thumbs if (image_format_supported($imgThumbSmall) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbMini, $reg)) { $imgThumbMini = $reg[1]; // Save only basename - dolibarr_set_const($db, "MAIN_INFO_SOCIETE_LOGO_MINI", $imgThumbMini, 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, $constant."_MINI", $imgThumbMini, 'chaine', 0, '', $conf->entity); } else dol_syslog($imgThumbMini); @@ -297,24 +312,37 @@ if ($action == 'addthumb') // Regenerate thumbs } } -if ($action == 'removelogo') + +if ($action == 'removelogo' || $action == 'removelogosquarred') { + $constant = "MAIN_INFO_SOCIETE_LOGO"; + if ($action == 'removelogosquarred') $constant = "MAIN_INFO_SOCIETE_LOGO_SQUARRED"; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - $logofile=$conf->mycompany->dir_output.'/logos/'.$mysoc->logo; - if ($mysoc->logo != '') dol_delete_file($logofile); - dolibarr_del_const($db, "MAIN_INFO_SOCIETE_LOGO", $conf->entity); - $mysoc->logo=''; + $logofilename = $mysoc->logo; + if ($action == 'removelogosquarred') $logofilename = $mysoc->logo_squarred; + $logofile=$conf->mycompany->dir_output.'/logos/'.$logofilename; + if ($logofilename != '') dol_delete_file($logofile); + dolibarr_del_const($db, $constant, $conf->entity); + if ($action == 'removelogosquarred') $mysoc->logo_squarred=''; + else $mysoc->logo=''; - $logosmallfile=$conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small; - if ($mysoc->logo_small != '') dol_delete_file($logosmallfile); - dolibarr_del_const($db, "MAIN_INFO_SOCIETE_LOGO_SMALL", $conf->entity); - $mysoc->logo_small=''; + $logofilename = $mysoc->logo_small; + if ($action == 'removelogosquarred') $logofilename = $mysoc->logo_squarred_small; + $logosmallfile=$conf->mycompany->dir_output.'/logos/thumbs/'.$logofilename; + if ($logofilename != '') dol_delete_file($logosmallfile); + dolibarr_del_const($db, $constant."_SMALL", $conf->entity); + if ($action == 'removelogosquarred') $mysoc->logo_squarred_small=''; + else $mysoc->logo_small=''; - $logominifile=$conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini; - if ($mysoc->logo_mini != '') dol_delete_file($logominifile); - dolibarr_del_const($db, "MAIN_INFO_SOCIETE_LOGO_MINI", $conf->entity); - $mysoc->logo_mini=''; + $logofilename = $mysoc->logo_mini; + if ($action == 'removelogosquarred') $logofilename = $mysoc->logo_squarred_mini; + $logominifile=$conf->mycompany->dir_output.'/logos/thumbs/'.$logofilename; + if ($logofilename != '') dol_delete_file($logominifile); + dolibarr_del_const($db, $constant."_MINI", $conf->entity); + if ($action == 'removelogosquarred') $mysoc->logo_squarred_mini=''; + else $mysoc->logo_mini=''; } @@ -434,7 +462,7 @@ if ($action == 'edit' || $action == 'updateedit') // Logo print ''; + // Logo (squarred) + print ''; + // Note print ''; @@ -829,7 +874,7 @@ else // Logo - print ''; + // Logo (squarred) + print ''; + + // Note print ''; print '
'.img_picto('', $picto, 'class="valignmiddle widthpictotitle pictotitle"', $pictoisfullpath).''; $return.= '
'.$titre.'
'; $return.= '
'; print '
'; - print ''; + print ''; print ''; if (! empty($mysoc->logo_mini)) { print ''.img_delete($langs->trans("Delete")).''; @@ -448,6 +476,23 @@ if ($action == 'edit' || $action == 'updateedit') print '
'; print '
'; + print '
'; + print ''; + print ''; + if (! empty($mysoc->logo_squarred_mini)) { + print ''.img_delete($langs->trans("Delete")).''; + if (file_exists($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini)) { + print '   '; + print ''; + } + } else { + print ''; + } + print '
'; + print '
'; print '
'.$langs->trans("Logo").''; + print '
'.$form->textwithpicto($langs->trans("Logo"), $langs->trans("LogoDesc")).''; $tagtd='tagtd '; if ($conf->browser->layout == 'phone') $tagtd=''; @@ -854,7 +899,34 @@ else print '
'.$form->textwithpicto($langs->trans("LogoSquarred"), $langs->trans("LogoSquarredDesc")).''; + + $tagtd='tagtd '; + if ($conf->browser->layout == 'phone') $tagtd=''; + print '
'; + print $mysoc->logo_squarred; + print '
'; + + // It offers the generation of the thumbnail if it does not exist + if (!is_file($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini) && preg_match('/(\.jpg|\.jpeg|\.png)$/i', $mysoc->logo_squarred)) + { + print '  '; + } + elseif ($mysoc->logo_squarred_mini && is_file($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini)) + { + print ''; + } + else + { + print ''; + } + print '
'; + + print '
'.$langs->trans("Note").'' . (! empty($conf->global->MAIN_INFO_SOCIETE_NOTE) ? nl2br($conf->global->MAIN_INFO_SOCIETE_NOTE) : '') . '
'; diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 1948ce28a57..a857898f5dc 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -76,6 +76,8 @@ ALTER TABLE llx_holiday_extrafields ADD INDEX idx_holiday_extrafields (fk_object ALTER TABLE llx_societe_rib MODIFY label varchar(200); +ALTER TABLE llx_societe ADD COLUMN logo_squarred varchar(255); + insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('USER_SENTBYMAIL','Email sent','Executed when an email is sent from user card','user',300); create table llx_entrepot_extrafields diff --git a/htdocs/install/mysql/tables/llx_societe.sql b/htdocs/install/mysql/tables/llx_societe.sql index 4db88defc68..f312015a662 100644 --- a/htdocs/install/mysql/tables/llx_societe.sql +++ b/htdocs/install/mysql/tables/llx_societe.sql @@ -107,6 +107,7 @@ create table llx_societe supplier_order_min_amount double(24,8) DEFAULT NULL, -- min amount for supplier orders default_lang varchar(6), -- default language logo varchar(255) DEFAULT NULL, + logo_squarred varchar(255) DEFAULT NULL, canvas varchar(32) DEFAULT NULL, -- type of canvas if used (null by default) fk_entrepot integer DEFAULT 0, -- if we need a link between third party and warehouse webservices_url varchar(255), -- supplier webservice url diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index afce2e4fa34..b34ca99013d 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1070,6 +1070,9 @@ CompanyCountry=Country CompanyCurrency=Main currency CompanyObject=Object of the company Logo=Logo +LogoDesc=Main logo of company. Will be used into generated documents (PDF, ...) +LogoSquarred=Logo (squarred) +LogoSquarredDesc=Must be a squarred icon (width = height). This logo will be used as the favorite icon or other need like for the top menu bar (if not disabled into disaply setup). DoNotSuggestPaymentMode=Do not suggest NoActiveBankAccountDefined=No active bank account defined OwnerOfBankAccount=Owner of bank account %s diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index c4c702bc73b..2b4ae2bb7a0 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -465,6 +465,9 @@ class Societe extends CommonObject public $logo; public $logo_small; public $logo_mini; + public $logo_squarred; + public $logo_squarred_small; + public $logo_squarred_mini; public $array_options; @@ -1072,6 +1075,7 @@ class Societe extends CommonObject $sql .= ",barcode = ".(! empty($this->barcode)?"'".$this->db->escape($this->barcode)."'":"null"); $sql .= ",default_lang = ".(! empty($this->default_lang)?"'".$this->db->escape($this->default_lang)."'":"null"); $sql .= ",logo = ".(! empty($this->logo)?"'".$this->db->escape($this->logo)."'":"null"); + $sql .= ",logo_squarred = ".(! empty($this->logo_squarred)?"'".$this->db->escape($this->logo_squarred)."'":"null"); $sql .= ",outstanding_limit= ".($this->outstanding_limit!=''?$this->outstanding_limit:'null'); $sql .= ",order_min_amount= ".($this->order_min_amount!=''?$this->order_min_amount:'null'); $sql .= ",supplier_order_min_amount= ".($this->supplier_order_min_amount!=''?$this->supplier_order_min_amount:'null'); @@ -1266,7 +1270,7 @@ class Societe extends CommonObject $sql .= ', s.webservices_url, s.webservices_key'; $sql .= ', s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur, s.parent, s.barcode'; $sql .= ', s.fk_departement as state_id, s.fk_pays as country_id, s.fk_stcomm, s.remise_supplier, s.mode_reglement, s.cond_reglement, s.fk_account, s.tva_assuj'; - $sql .= ', s.mode_reglement_supplier, s.cond_reglement_supplier, s.localtax1_assuj, s.localtax1_value, s.localtax2_assuj, s.localtax2_value, s.fk_prospectlevel, s.default_lang, s.logo'; + $sql .= ', s.mode_reglement_supplier, s.cond_reglement_supplier, s.localtax1_assuj, s.localtax1_value, s.localtax2_assuj, s.localtax2_value, s.fk_prospectlevel, s.default_lang, s.logo, s.logo_squarred'; $sql .= ', s.fk_shipping_method'; $sql .= ', s.outstanding_limit, s.import_key, s.canvas, s.fk_incoterms, s.location_incoterms'; $sql .= ', s.order_min_amount, s.supplier_order_min_amount'; @@ -1420,6 +1424,7 @@ class Societe extends CommonObject $this->modelpdf = $obj->model_pdf; $this->default_lang = $obj->default_lang; $this->logo = $obj->logo; + $this->logo_squarred = $obj->logo_squarred; $this->webservices_url = $obj->webservices_url; $this->webservices_key = $obj->webservices_key; @@ -2110,6 +2115,12 @@ class Societe extends CommonObject $label.= Form::showphoto('societe', $this, 0, 40, 0, 'photowithmargin', 'mini', 0); // Important, we must force height so image will have height tags and if image is inside a tooltip, the tooltip manager can calculate height and position correctly the tooltip. $label.= '
'; } + elseif (! empty($this->logo_squarred) && class_exists('Form')) + { + /*$label.= '
'; + $label.= Form::showphoto('societe', $this, 0, 40, 0, 'photowithmargin', 'mini', 0); // Important, we must force height so image will have height tags and if image is inside a tooltip, the tooltip manager can calculate height and position correctly the tooltip. + $label.= '
';*/ + } $label.= '
'; @@ -3522,6 +3533,9 @@ class Societe extends CommonObject $this->logo=empty($conf->global->MAIN_INFO_SOCIETE_LOGO)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO; $this->logo_small=empty($conf->global->MAIN_INFO_SOCIETE_LOGO_SMALL)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_SMALL; $this->logo_mini=empty($conf->global->MAIN_INFO_SOCIETE_LOGO_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI; + $this->logo_squarred=empty($conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED; + $this->logo_squarred_small=empty($conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_SMALL)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_SMALL; + $this->logo_squarred_mini=empty($conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI; // Define if company use vat or not $this->tva_assuj=$conf->global->FACTURE_TVAOPTION; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index ddd865cbbb2..1e69bdf1ecc 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -902,6 +902,17 @@ table[summary="list_of_modules"] .fa-cog { font-size: !important; } + div#login_left, div#login_right { + min-width: 150px !important; + max-width: 200px !important; + padding-left: 5px !important; + padding-right: 5px !important; + } + + div.login_block { + height: 64px !important; + } + .divmainbodylarge { margin-left: 20px !important; margin-right: 20px !important; } .tdoverflowonsmartphone { @@ -923,11 +934,14 @@ table[summary="list_of_modules"] .fa-cog { padding-bottom: 5px; } + .login_table .tdinputlogin { + min-width: unset !important; + } input, input[type=text], input[type=password], select, textarea { min-width: 20px; } .trinputlogin input[type=text], input[type=password] { - max-width: 180px; + max-width: 140px; } .vmenu .searchform input { max-width: 138px; /* length of input text in the quick search box when using a smartphone and without dolidroid */ diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 72974ded51f..ba97c329073 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1061,6 +1061,10 @@ table[summary="list_of_modules"] .fa-cog { font-size: px !important; } + .login_vertical_align { + padding-left: 0; + } + .divmainbodylarge { margin-left: 20px; margin-right: 20px; } .tdoverflowonsmartphone { From fc886b9950b03088597a58dc16825d08835fc021 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 11:29:39 +0200 Subject: [PATCH 195/980] css --- htdocs/theme/eldy/global.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 1e69bdf1ecc..22515f9a76f 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1105,7 +1105,7 @@ div.blockvmenulogo margin-right: 8px; background-color: rgba(255,255,255,0.7); padding: 0; - border-radius: 5px; + border-radius: 4px; height: px; /* width: 100px; */ max-width: 100px; From ab8199f71aa00a2e4b32d7130f84c2a2f877fa00 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 11:38:49 +0200 Subject: [PATCH 196/980] Fix avoid deletion of file if we still need it --- htdocs/admin/company.php | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index 9da2e550501..46bd2352b46 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -321,25 +321,43 @@ if ($action == 'removelogo' || $action == 'removelogosquarred') require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $logofilename = $mysoc->logo; - if ($action == 'removelogosquarred') $logofilename = $mysoc->logo_squarred; + $logofilenamebis = $mysoc->logo_squarred; + if ($action == 'removelogosquarred') + { + $logofilename = $mysoc->logo_squarred; + $logofilenamebis = $mysoc->logo; + } + $logofile=$conf->mycompany->dir_output.'/logos/'.$logofilename; - if ($logofilename != '') dol_delete_file($logofile); + if ($logofilename != '' && $logofilename != $logofilenamebis) dol_delete_file($logofile); dolibarr_del_const($db, $constant, $conf->entity); if ($action == 'removelogosquarred') $mysoc->logo_squarred=''; else $mysoc->logo=''; $logofilename = $mysoc->logo_small; - if ($action == 'removelogosquarred') $logofilename = $mysoc->logo_squarred_small; + $logofilenamebis = $mysoc->logo_squarred_small; + if ($action == 'removelogosquarred') + { + $logofilename = $mysoc->logo_squarred_small; + $logofilenamebis = $mysoc->logo_small; + } + $logosmallfile=$conf->mycompany->dir_output.'/logos/thumbs/'.$logofilename; - if ($logofilename != '') dol_delete_file($logosmallfile); + if ($logofilename != '' && $logofilename != $logofilenamebis) dol_delete_file($logosmallfile); dolibarr_del_const($db, $constant."_SMALL", $conf->entity); if ($action == 'removelogosquarred') $mysoc->logo_squarred_small=''; else $mysoc->logo_small=''; $logofilename = $mysoc->logo_mini; - if ($action == 'removelogosquarred') $logofilename = $mysoc->logo_squarred_mini; + $logofilenamebis = $mysoc->logo_squarred_mini; + if ($action == 'removelogosquarred') + { + $logofilename = $mysoc->logo_squarred_mini; + $logofilenamebis = $mysoc->logo_mini; + } + $logominifile=$conf->mycompany->dir_output.'/logos/thumbs/'.$logofilename; - if ($logofilename != '') dol_delete_file($logominifile); + if ($logofilename != '' && $logofilename != $logofilenamebis) dol_delete_file($logominifile); dolibarr_del_const($db, $constant."_MINI", $conf->entity); if ($action == 'removelogosquarred') $mysoc->logo_squarred_mini=''; else $mysoc->logo_mini=''; From 4db57f53f9e77d831351c94820ab2ea8200e3c1c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 11:39:33 +0200 Subject: [PATCH 197/980] typo --- htdocs/langs/en_US/admin.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index b34ca99013d..93bf4b90f94 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1072,7 +1072,7 @@ CompanyObject=Object of the company Logo=Logo LogoDesc=Main logo of company. Will be used into generated documents (PDF, ...) LogoSquarred=Logo (squarred) -LogoSquarredDesc=Must be a squarred icon (width = height). This logo will be used as the favorite icon or other need like for the top menu bar (if not disabled into disaply setup). +LogoSquarredDesc=Must be a squarred icon (width = height). This logo will be used as the favorite icon or other need like for the top menu bar (if not disabled into display setup). DoNotSuggestPaymentMode=Do not suggest NoActiveBankAccountDefined=No active bank account defined OwnerOfBankAccount=Owner of bank account %s From 2fb776ee347e3e051ff0a9e52f93773aa46cd6af Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Fri, 11 Oct 2019 11:57:11 +0200 Subject: [PATCH 198/980] NEW add new rule fetchidfromcodeandlabel for categories import --- .../modules/import/import_csv.modules.php | 49 +++++++++++++++++-- .../modules/import/import_xlsx.modules.php | 49 +++++++++++++++++-- htdocs/core/modules/modCategorie.class.php | 11 +++-- 3 files changed, 94 insertions(+), 15 deletions(-) diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index 734f516fa78..cb3ae176026 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -381,6 +381,11 @@ class ImportCsv extends ModeleImports //dol_syslog("Table ".$tablename." check for entity into cache is ".$tablewithentity_cache[$tablename]); } + // array of fields to column index + $arrayfield = array(); + foreach($sort_array_match_file_to_database as $key => $val) { + $arrayfield[$val] = ($key-1); + } // Loop on each fields in the match array: $key = 1..n, $val=alias of field (s.nom) foreach($sort_array_match_file_to_database as $key => $val) @@ -459,14 +464,10 @@ class ImportCsv extends ModeleImports $error++; }*/ $param_array = array('', $newval, 0, $arrayrecord[0]['val']); // Param to fetch parent from account, in chart. - } elseif ($class == 'Categorie') { - if ($objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel') { - $param_array = array('', $newval, $arrayrecord[1]['val']); - } } call_user_func_array(array($classinstance, $method), $param_array); // If not found, try the fetch from label - if (! ($classinstance->id != '') && $objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel' && $class!='Categorie') + if (! ($classinstance->id != '') && $objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel') { $param_array = array('', '', $newval); call_user_func_array(array($classinstance, $method), $param_array); @@ -489,6 +490,44 @@ class ImportCsv extends ModeleImports } } } + elseif ($objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeandlabel') + { + $isidorref='id'; + if (! is_numeric($newval) && $newval != '' && ! preg_match('/^id:/i', $newval)) $isidorref='ref'; + $newval=preg_replace('/^(id|ref):/i', '', $newval); + + if ($isidorref == 'ref') { + $file = (empty($objimport->array_import_convertvalue[0][$val]['classfile']) ? $objimport->array_import_convertvalue[0][$val]['file'] : $objimport->array_import_convertvalue[0][$val]['classfile']); + $class = $objimport->array_import_convertvalue[0][$val]['class']; + $method = $objimport->array_import_convertvalue[0][$val]['method']; + $codefromfield = $objimport->array_import_convertvalue[0][$val]['codefromfield']; + $code = $arrayrecord[$arrayfield[$codefromfield]]['val']; + if ($this->cacheconvert[$file . '_' . $class . '_' . $method . '_' . $code][$newval] != '') { + $newval = $this->cacheconvert[$file . '_' . $class . '_' . $method . '_' . $code][$newval]; + } else { + $resultload = dol_include_once($file); + if (empty($resultload)) { + dol_print_error('', 'Error trying to call file=' . $file . ', class=' . $class . ', method=' . $method . ', code=' . $code); + break; + } + $classinstance = new $class($this->db); + // Try the fetch from code and ref + $param_array = array('', $newval, $code); + call_user_func_array(array($classinstance, $method), $param_array); + $this->cacheconvert[$file . '_' . $class . '_' . $method . '_' . $code][$newval] = $classinstance->id; + if ($classinstance->id > 0) // we found record + { + $newval = $classinstance->id; + } else { + if (!empty($objimport->array_import_convertvalue[0][$val]['dict'])) $this->errors[$error]['lib'] = $langs->trans('ErrorFieldValueNotIn', $key, $newval, 'scale', $langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$val]['dict'])); + else $this->errors[$error]['lib'] = 'ErrorFieldValueNotIn'; + $this->errors[$error]['type'] = 'FOREIGNKEY'; + $errorforthistable++; + $error++; + } + } + } + } elseif ($objimport->array_import_convertvalue[0][$val]['rule']=='zeroifnull') { if (empty($newval)) $newval='0'; diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php index 1a92062b15f..c5fcc1441e3 100644 --- a/htdocs/core/modules/import/import_xlsx.modules.php +++ b/htdocs/core/modules/import/import_xlsx.modules.php @@ -408,6 +408,11 @@ class ImportXlsx extends ModeleImports //dol_syslog("Table ".$tablename." check for entity into cache is ".$tablewithentity_cache[$tablename]); } + // array of fields to column index + $arrayfield = array(); + foreach($sort_array_match_file_to_database as $key => $val) { + $arrayfield[$val] = ($key-1); + } // Loop on each fields in the match array: $key = 1..n, $val=alias of field (s.nom) foreach($sort_array_match_file_to_database as $key => $val) @@ -486,14 +491,10 @@ class ImportXlsx extends ModeleImports $error++; }*/ $param_array = array('', $newval, 0, $arrayrecord[0]['val']); // Param to fetch parent from account, in chart. - } elseif ($class == 'Categorie') { - if ($objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel') { - $param_array = array('', $newval, $arrayrecord[1]['val']); - } } call_user_func_array(array($classinstance, $method), $param_array); // If not found, try the fetch from label - if (! ($classinstance->id != '') && $objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel' && $class!='Categorie') + if (! ($classinstance->id != '') && $objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeorlabel') { $param_array = array('', '', $newval); call_user_func_array(array($classinstance, $method), $param_array); @@ -516,6 +517,44 @@ class ImportXlsx extends ModeleImports } } } + elseif ($objimport->array_import_convertvalue[0][$val]['rule']=='fetchidfromcodeandlabel') + { + $isidorref='id'; + if (! is_numeric($newval) && $newval != '' && ! preg_match('/^id:/i', $newval)) $isidorref='ref'; + $newval=preg_replace('/^(id|ref):/i', '', $newval); + + if ($isidorref == 'ref') { + $file = (empty($objimport->array_import_convertvalue[0][$val]['classfile']) ? $objimport->array_import_convertvalue[0][$val]['file'] : $objimport->array_import_convertvalue[0][$val]['classfile']); + $class = $objimport->array_import_convertvalue[0][$val]['class']; + $method = $objimport->array_import_convertvalue[0][$val]['method']; + $codefromfield = $objimport->array_import_convertvalue[0][$val]['codefromfield']; + $code = $arrayrecord[$arrayfield[$codefromfield]]['val']; + if ($this->cacheconvert[$file . '_' . $class . '_' . $method . '_' . $code][$newval] != '') { + $newval = $this->cacheconvert[$file . '_' . $class . '_' . $method . '_' . $code][$newval]; + } else { + $resultload = dol_include_once($file); + if (empty($resultload)) { + dol_print_error('', 'Error trying to call file=' . $file . ', class=' . $class . ', method=' . $method . ', code=' . $code); + break; + } + $classinstance = new $class($this->db); + // Try the fetch from code and ref + $param_array = array('', $newval, $code); + call_user_func_array(array($classinstance, $method), $param_array); + $this->cacheconvert[$file . '_' . $class . '_' . $method . '_' . $code][$newval] = $classinstance->id; + if ($classinstance->id > 0) // we found record + { + $newval = $classinstance->id; + } else { + if (!empty($objimport->array_import_convertvalue[0][$val]['dict'])) $this->errors[$error]['lib'] = $langs->trans('ErrorFieldValueNotIn', $key, $newval, 'scale', $langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$val]['dict'])); + else $this->errors[$error]['lib'] = 'ErrorFieldValueNotIn'; + $this->errors[$error]['type'] = 'FOREIGNKEY'; + $errorforthistable++; + $error++; + } + } + } + } elseif ($objimport->array_import_convertvalue[0][$val]['rule']=='zeroifnull') { if (empty($newval)) $newval='0'; diff --git a/htdocs/core/modules/modCategorie.class.php b/htdocs/core/modules/modCategorie.class.php index e8a1bd218cd..eb9e2c6b4a1 100644 --- a/htdocs/core/modules/modCategorie.class.php +++ b/htdocs/core/modules/modCategorie.class.php @@ -413,11 +413,12 @@ class modCategorie extends DolibarrModules $this->import_regex_array[$r]=array('ca.type'=>'^[0|1|2|3]'); $this->import_convertvalue_array[$r] = array( 'ca.fk_parent' => array( - 'rule' => 'fetchidfromcodeorlabel', - 'classfile' => '/categories/class/categorie.class.php', - 'class' => 'Categorie', - 'method' => 'fetch', - 'element' => 'category' + 'rule' => 'fetchidfromcodeandlabel', + 'classfile' => '/categories/class/categorie.class.php', + 'class' => 'Categorie', + 'method' => 'fetch', + 'element' => 'category', + 'codefromfield' => 'ca.type' ) ); $typeexample=""; From 5801d09dbeb7480e59bb59d6b31249e1f6fe7390 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 12:28:13 +0200 Subject: [PATCH 199/980] NEW Use the squarre logo as favicon of pages --- ChangeLog | 1 + htdocs/core/lib/security2.lib.php | 5 +++- htdocs/core/menus/standard/eldy.lib.php | 6 ++-- htdocs/main.inc.php | 37 ++++++++++++------------- htdocs/public/test/test_arrays.php | 1 - htdocs/theme/eldy/manifest.json.php | 10 +++---- 6 files changed, 31 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index c8b7db19236..ede0e10a89f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24,6 +24,7 @@ Following changes may create regressions for some external modules, but were nec * Removed function dol_micro_time. Use native PHP microtime instead. * The trigger BON_PRELEVEMENT_CREATE has been renamed into DIRECT_DEBIT_ORDER_CREATE. * The constant INVOICE_SHOW_POS_IN_EXPORT has been renamed into INVOICE_SHOW_POS. +* If your logo was visible on the menu bar, you must upload a new logo into 'Home-Setup-Company/Organization' to have it visible agin in menu. ***** ChangeLog for 10.0.2 compared to 10.0.1 ***** diff --git a/htdocs/core/lib/security2.lib.php b/htdocs/core/lib/security2.lib.php index 07eecf0f352..c81ea9d98d7 100644 --- a/htdocs/core/lib/security2.lib.php +++ b/htdocs/core/lib/security2.lib.php @@ -282,8 +282,11 @@ if (! function_exists('dol_loginfunction')) // Set jquery theme $dol_loginmesg = (! empty($_SESSION["dol_loginmesg"])?$_SESSION["dol_loginmesg"]:''); - $favicon=dol_buildpath('/theme/'.$conf->theme.'/img/favicon.ico', 1); + + $favicon = DOL_URL_ROOT.'/theme/common/dolibarr_logo_256x256.png'; + if (! empty($mysoc->logo_squarred_mini)) $favicon = DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_squarred_mini); if (! empty($conf->global->MAIN_FAVICON_URL)) $favicon=$conf->global->MAIN_FAVICON_URL; + $jquerytheme = 'base'; if (! empty($conf->global->MAIN_USE_JQUERY_THEME)) $jquerytheme = $conf->global->MAIN_USE_JQUERY_THEME; diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index dbf56429086..0bfc9f9b7b9 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -478,16 +478,16 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout = // Show logo company if (empty($conf->global->MAIN_MENU_INVERT) && empty($noout) && ! empty($conf->global->MAIN_SHOW_LOGO) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) { - $mysoc->logo_mini=(empty($conf->global->MAIN_INFO_SOCIETE_LOGO_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI); + //$mysoc->logo_mini=(empty($conf->global->MAIN_INFO_SOCIETE_LOGO_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI); $mysoc->logo_squarred_mini=(empty($conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI); if (! empty($mysoc->logo_squarred_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini)) { $urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_squarred_mini); } - elseif (! empty($mysoc->logo_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini)) + /*elseif (! empty($mysoc->logo_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini)) { $urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_mini); - } + }*/ else { $urllogo=DOL_URL_ROOT.'/theme/dolibarr_logo_squarred.png'; diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 2d612f5808d..33c0e289aed 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1195,7 +1195,7 @@ function top_httphead($contenttype = 'text/html', $forcenocache = 0) */ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arrayofjs = '', $arrayofcss = '', $disablejmobile = 0, $disablenofollow = 0) { - global $db, $conf, $langs, $user, $hookmanager; + global $db, $conf, $langs, $user, $mysoc, $hookmanager; top_httphead(); @@ -1224,9 +1224,11 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr print ''."\n"; // Favicon - $favicon = DOL_MAIN_URL_ROOT . '/theme/'.$conf->theme.'/img/favicon.ico'; + $favicon = DOL_URL_ROOT.'/theme/common/dolibarr_logo_256x256.png'; + if (! empty($mysoc->logo_squarred_mini)) $favicon = DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_squarred_mini); if (! empty($conf->global->MAIN_FAVICON_URL)) $favicon=$conf->global->MAIN_FAVICON_URL; if (empty($conf->dol_use_jmobile)) print ''."\n"; // Not required into an Android webview + //if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) print ''."\n"; //if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) print ''."\n"; //if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) print ''."\n"; @@ -1614,9 +1616,6 @@ function top_menu($head, $title = '', $target = '', $disablejs = 0, $disablehead print '
'; - print '
'; - print ''; - print '     '; - print ''; - print '
'; - print '
'; +print '
'; +print ''; +//print '     '; +//print ''; +print '
'; +//print '
'; - print ''; -} -else -{ - /* - * Show parameters - */ +print ''; - // Actions buttons - //print '
'; - //print ''.$langs->trans("Modify").''; - //print '

'; - - print '
'; - print ''; - print ''; - - - print ''; - - - print ''; - - - print ''; - - - print ''; - - - print ''; - - - if (! empty($conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT)) print ''; - - print ''; - - print ''; - - print ''; - - print ''; - - print ''; - - print ''; - - print '
'.$langs->trans("CompanyInfo").''.$langs->trans("Value").'
'.$langs->trans("CompanyName").''; - print $conf->global->MAIN_INFO_ACCOUNTANT_NAME; - print '
'.$langs->trans("CompanyAddress").'' . nl2br(empty($conf->global->MAIN_INFO_ACCOUNTANT_ADDRESS)?'':$conf->global->MAIN_INFO_ACCOUNTANT_ADDRESS) . '
'.$langs->trans("CompanyZip").'' . (empty($conf->global->MAIN_INFO_ACCOUNTANT_ZIP)?'':$conf->global->MAIN_INFO_ACCOUNTANT_ZIP) . '
'.$langs->trans("CompanyTown").'' . (empty($conf->global->MAIN_INFO_ACCOUNTANT_TOWN)?'':$conf->global->MAIN_INFO_ACCOUNTANT_TOWN) . '
'.$langs->trans("CompanyCountry").''; - if (! empty($conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY)) - { - $code = getCountry($conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY, 2); - $img=picto_from_langcode($code); - print $img?$img.' ':''; - print getCountry($conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY, 1); - } - print '
'.$langs->trans("Region-State").''; - else print '
'.$langs->trans("State").''; - if (! empty($conf->global->MAIN_INFO_ACCOUNTANT_STATE)) print getState($conf->global->MAIN_INFO_ACCOUNTANT_STATE, $conf->global->MAIN_SHOW_STATE_CODE, 0, $conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT); - else print ' '; - print '
'.$langs->trans("Phone").'' . dol_print_phone($conf->global->MAIN_INFO_ACCOUNTANT_PHONE, $mysoc->country_code) . '
'.$langs->trans("Fax").'' . dol_print_phone($conf->global->MAIN_INFO_ACCOUNTANT_FAX, $mysoc->country_code) . '
'.$langs->trans("Mail").'' . dol_print_email($conf->global->MAIN_INFO_ACCOUNTANT_MAIL, 0, 0, 0, 80) . '
'.$langs->trans("Web").'' . dol_print_url($conf->global->MAIN_INFO_ACCOUNTANT_WEB, '_blank', 80) . '
'.$langs->trans("AccountantFileNumber").'' . $conf->global->MAIN_INFO_ACCOUNTANT_CODE . '
'.$langs->trans("Note").'' . (! empty($conf->global->MAIN_INFO_ACCOUNTANT_NOTE) ? nl2br($conf->global->MAIN_INFO_ACCOUNTANT_NOTE) : '') . '
'; - print "
"; - - print ''; - - // Actions buttons - print '
'; - print ''; - print '
'; -} llxFooter(); diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index 46bd2352b46..dde962fe9bc 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -383,919 +383,423 @@ $head = company_admin_prepare_head(); dol_fiche_head($head, 'company', $langs->trans("Company"), -1, 'company'); -print ''.$langs->trans("CompanyFundationDesc", $langs->transnoentities("Modify"), $langs->transnoentities("Save"))."
\n"; +print ''.$langs->trans("CompanyFundationDesc", $langs->transnoentities("Save"))."
\n"; print "
\n"; -if ($action == 'edit' || $action == 'updateedit') + +/** + * Edit parameters + */ +print "\n".''."\n"; + +print '
'; +print ''; +print ''; + +print ''; +print ''."\n"; + +// Name + +print ''."\n"; + +// Addresse + +print ''."\n"; + + +print ''."\n"; + + +print ''."\n"; + +// Country + +print ''."\n"; + + +print ''; +} +// ProfId5 +if ($langs->transcountry("ProfId5", $mysoc->country_code) != '-') +{ + + print ''; +} + +// ProfId6 +if ($langs->transcountry("ProfId6", $mysoc->country_code) != '-') +{ + + print ''; +} + +// TVA Intra + +print ''; + +// Object of the company + +print ''; +print ''; + +print '
'.$langs->trans("CompanyInfo").''.$langs->trans("Value").'
'; +print '
'; +print '
'; +print '
'; +print '
'; +//if (empty($country_selected)) $country_selected=substr($langs->defaultlang,-2); // By default, country of localization +print $form->select_country($mysoc->country_id, 'country_id'); +if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); +print '
'; +$state_id=0; +if (! empty($conf->global->MAIN_INFO_SOCIETE_STATE)) { - /** - * Edition des parametres - */ - print "\n".''."\n"; - - print ''; - print ''; - print ''; - - print ''; - print ''."\n"; - - // Name - - print ''."\n"; - - // Addresse - - print ''."\n"; + $tmp=explode(':', $conf->global->MAIN_INFO_SOCIETE_STATE); + $state_id=$tmp[0]; +} +$formcompany->select_departement($state_id, $mysoc->country_code, 'state_id'); +print ''."\n"; - print ''."\n"; +print ''."\n"; - print ''."\n"; - - // Country - - print ''."\n"; +print ''; +print ''."\n"; - print ''; +print ''."\n"; + + +print ''; +print ''."\n"; + +// Web +print ''; +print ''."\n"; + +// Barcode +if (! empty($conf->barcode->enabled)) { + + print ''; + print ''; +} + +// Logo +print ''; + +// Logo (squarred) +print ''; + +// Note +print ''; +print ''; + +print '
'.$langs->trans("CompanyInfo").''.$langs->trans("Value").'
'; - print '
'; - print '
'; - print '
'; +print $form->selectCurrency($conf->currency, "currency"); +print '
'; - print '
'; - //if (empty($country_selected)) $country_selected=substr($langs->defaultlang,-2); // By default, country of localization - print $form->select_country($mysoc->country_id, 'country_id'); - if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); - print '
'; +print '
'; - $state_id=0; - if (! empty($conf->global->MAIN_INFO_SOCIETE_STATE)) +print '
'; +print '
'; +print '
'; +print '
'; + print '
'; +print '
'; +print ''; +print ''; +if (! empty($mysoc->logo_mini)) { + print ''.img_delete($langs->trans("Delete")).''; + if (file_exists($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini)) { + print '   '; + print ''; + } +} else { + print ''; +} +print '
'; +print '
'; +print '
'; +print ''; +print ''; +if (! empty($mysoc->logo_squarred_mini)) { + print ''.img_delete($langs->trans("Delete")).''; + if (file_exists($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini)) { + print '   '; + print ''; + } +} else { + print ''; +} +print '
'; +print '
'; +print '
'; + +print '
'; + +// IDs of the company (country-specific) +print ''; +print ''; + +$langs->load("companies"); + +// Managing Director(s) + +print ''; + +// GDPR contact + +print ''; + +// Capital + +print ''; + +// Juridical Status + +print ''; + +// ProfID1 +if ($langs->transcountry("ProfId1", $mysoc->country_code) != '-') +{ + + print ''."\n"; - - - print ''."\n"; - - - print ''; - print ''."\n"; - - - print ''; - print ''."\n"; - - - print ''; - print ''."\n"; - - // Web - print ''; - print ''."\n"; - - // Barcode - if (! empty($conf->barcode->enabled)) { - - print ''; - print ''; - } - - // Logo - print ''; - - // Logo (squarred) - print ''; - - // Note - print ''; - print ''; - - print '
'.$langs->trans("CompanyIds").''.$langs->trans("Value").'
'; +print '
'; +print $form->textwithpicto($langs->trans("GDPRContact"), $langs->trans("GDPRContactDesc")); +print ''; +print '
'; +print '
'; +if ($mysoc->country_code) { + print $formcompany->select_juridicalstatus($conf->global->MAIN_INFO_SOCIETE_FORME_JURIDIQUE, $mysoc->country_code, '', 'forme_juridique_code'); +} else { + print $countrynotdefined; +} +print '
'; + if (! empty($mysoc->country_code)) { - $tmp=explode(':', $conf->global->MAIN_INFO_SOCIETE_STATE); - $state_id=$tmp[0]; + print ''; } - $formcompany->select_departement($state_id, $mysoc->country_code, 'state_id'); - print '
'; - print $form->selectCurrency($conf->currency, "currency"); - print '
'; - print '
'; - print '
'; - print '
'; - print '
'; - print '
'; - print '
'; - print ''; - print ''; - if (! empty($mysoc->logo_mini)) { - print ''.img_delete($langs->trans("Delete")).''; - if (file_exists($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini)) { - print '   '; - print ''; - } - } else { - print ''; - } - print '
'; - print '
'; - print '
'; - print ''; - print ''; - if (! empty($mysoc->logo_squarred_mini)) { - print ''.img_delete($langs->trans("Delete")).''; - if (file_exists($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini)) { - print '   '; - print ''; - } - } else { - print ''; - } - print '
'; - print '
'; - print '
'; - - print '
'; - - // IDs of the company (country-specific) - print ''; - print ''; - - $langs->load("companies"); - - // Managing Director(s) - - print ''; - - // GDPR contact - - print ''; - - // Capital - - print ''; - - // Juridical Status - - print ''; - - // ProfID1 - if ($langs->transcountry("ProfId1", $mysoc->country_code) != '-') - { - - print ''; - } - - // ProfId2 - if ($langs->transcountry("ProfId2", $mysoc->country_code) != '-') - { - - print ''; - } - - // ProfId3 - if ($langs->transcountry("ProfId3", $mysoc->country_code) != '-') - { - - print ''; - } - - // ProfId4 - if ($langs->transcountry("ProfId4", $mysoc->country_code) != '-') - { - - print ''; - } - - // ProfId5 - if ($langs->transcountry("ProfId5", $mysoc->country_code) != '-') - { - - print ''; - } - - // ProfId6 - if ($langs->transcountry("ProfId6", $mysoc->country_code) != '-') - { - - print ''; - } - - // TVA Intra - - print ''; - - // Object of the company - - print ''; - print ''; - - print '
'.$langs->trans("CompanyIds").''.$langs->trans("Value").'
'; - print '
'; - print $form->textwithpicto($langs->trans("GDPRContact"), $langs->trans("GDPRContactDesc")); - print ''; - print '
'; - print '
'; - if ($mysoc->country_code) { - print $formcompany->select_juridicalstatus($conf->global->MAIN_INFO_SOCIETE_FORME_JURIDIQUE, $mysoc->country_code, '', 'forme_juridique_code'); - } else { + else + { print $countrynotdefined; } print '
'; - if (! empty($mysoc->country_code)) - { - print ''; - } - else - { - print $countrynotdefined; - } - print '
'; - if (! empty($mysoc->country_code)) - { - print ''; - } - else - { - print $countrynotdefined; - } - print '
'; - if (! empty($mysoc->country_code)) - { - print ''; - } - else - { - print $countrynotdefined; - } - print '
'; - if (! empty($mysoc->country_code)) - { - print ''; - } - else - { - print $countrynotdefined; - } - print '
'; - if (! empty($mysoc->country_code)) - { - print ''; - } - else - { - print $countrynotdefined; - } - print '
'; - if (! empty($mysoc->country_code)) - { - print ''; - } - else - { - print $countrynotdefined; - } - print '
'; - print ''; - print '
'; - print '
'; - - - // Fiscal year start - print '
'; - print ''; - print ''; - print ''; - print "\n"; - - print ''; - - print "
'.$langs->trans("FiscalYearInformation").''.$langs->trans("Value").'
'; - print $formother->select_month($conf->global->SOCIETE_FISCAL_MONTH_START, 'SOCIETE_FISCAL_MONTH_START', 0, 1, 'maxwidth100') . '
"; - - - // Fiscal options - print '
'; - print ''; - print ''; - print ''; - print ''; - print "\n"; - - - print ""; - print '\n"; - - - print ""; - print '\n"; - - print "
'.$langs->trans("VATManagement").''.$langs->trans("Description").' 
'; - print ""; - print ""; - if ($mysoc->country_code == 'FR') print "\n"; - print "
".$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."
"; - print "
'; - print ""; - print ""; - if ($mysoc->country_code == 'FR') print "\n"; - print "
".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."
"; - print "
"; - - /* - * Local Taxes - */ - if ($mysoc->useLocalTax(1)) - { - // Local Tax 1 - print '
'; - print ''; - print ''; - print ''; - print ''; - print "\n"; - - // Note: When option is not set, it must not appears as set on on, because there is no default value for this option - print ""; - print '\n"; - - - print ""; - print '\n"; - print "
'.$langs->transcountry("LocalTax1Management", $mysoc->country_code).''.$langs->trans("Description").' 
global->FACTURE_LOCAL_TAX1_OPTION == '1' || $conf->global->FACTURE_LOCAL_TAX1_OPTION == "localtax1on")?" checked":"")."> ".$langs->transcountry("LocalTax1IsUsed", $mysoc->country_code)."'; - print ''; - print ""; - $example=$langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code); - print ($example!="LocalTax1IsUsedExample"?"\n":""); - if(! isOnlyOneLocalTax(1)) - { - print ''; - } - - $opcions=array($langs->trans("CalcLocaltax1").' '.$langs->trans("CalcLocaltax1Desc"),$langs->trans("CalcLocaltax2").' - '.$langs->trans("CalcLocaltax2Desc"),$langs->trans("CalcLocaltax3").' - '.$langs->trans("CalcLocaltax3Desc")); - - print ''; - print "
".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code)."
: '; - $formcompany->select_localtax(1, $conf->global->MAIN_INFO_VALUE_LOCALTAX1, "lt1"); - print '
'.$langs->trans("CalcLocaltax").': '; - print $form->selectarray("clt1", $opcions, $conf->global->MAIN_INFO_LOCALTAX_CALC1); - print '
"; - print "
global->FACTURE_LOCAL_TAX1_OPTION) || $conf->global->FACTURE_LOCAL_TAX1_OPTION == "localtax1off")?" checked":"")."> ".$langs->transcountry("LocalTax1IsNotUsed", $mysoc->country_code)."'; - print ""; - print ""; - $example=$langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code); - print ($example!="LocalTax1IsNotUsedExample"?"\n":""); - print "
".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code)."
"; - print "
"; - } - if ($mysoc->useLocalTax(2)) - { - // Local Tax 2 - print '
'; - print ''; - print ''; - print ''; - print ''; - print "\n"; - - - // Note: When option is not set, it must not appears as set on on, because there is no default value for this option - print ""; - print '\n"; - - - print ""; - print '\n"; - print "
'.$langs->transcountry("LocalTax2Management", $mysoc->country_code).''.$langs->trans("Description").' 
global->FACTURE_LOCAL_TAX2_OPTION == '1' || $conf->global->FACTURE_LOCAL_TAX2_OPTION == "localtax2on")?" checked":"")."> ".$langs->transcountry("LocalTax2IsUsed", $mysoc->country_code)."'; - print ''; - print ""; - $example=$langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code); - print ($example!="LocalTax2IsUsedExample"?"\n":""); - if(! isOnlyOneLocalTax(2)) - { - print ''; - } - print ''; - print "
".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code)."
: '; - $formcompany->select_localtax(2, $conf->global->MAIN_INFO_VALUE_LOCALTAX2, "lt2"); - print '
: '; - print $form->selectarray("clt2", $opcions, $conf->global->MAIN_INFO_LOCALTAX_CALC2); - print '
"; - print "
global->FACTURE_LOCAL_TAX2_OPTION) || $conf->global->FACTURE_LOCAL_TAX2_OPTION == "localtax2off")?" checked":"")."> ".$langs->transcountry("LocalTax2IsNotUsed", $mysoc->country_code)."'; - print ""; - print ""; - $example=$langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code); - print ($example!="LocalTax2IsNotUsedExample"?"\n":""); - print "
".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code)."
"; - print "
"; - } - - - print '
'; - print ''; - print '     '; - print ''; - print '
'; - print '
'; - - print ''; } -else + +// ProfId2 +if ($langs->transcountry("ProfId2", $mysoc->country_code) != '-') { - /* - * Show parameters - */ - // Actions buttons - //print '
'; - //print ''.$langs->trans("Modify").''; - //print '

'; - - print '
'; - print ''; - print ''; - - - print ''; - - - print ''; - - - print ''; - - - print ''; - - - print ''; - - - if (! empty($conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT)) print ''; - - - print ''; - - - print ''; - - - print ''; - - - print ''; - - // Web - - print ''; - - // Barcode - - if (! empty($conf->barcode->enabled)) - { - print ''; - } - - // Logo - - print ''; +} - // Logo (squarred) +// ProfId3 +if ($langs->transcountry("ProfId3", $mysoc->country_code) != '-') +{ - print ''; +} - // Note - print ''; +// ProfId4 +if ($langs->transcountry("ProfId4", $mysoc->country_code) != '-') +{ - print '
'.$langs->trans("CompanyInfo").''.$langs->trans("Value").'
'.$langs->trans("CompanyName").''; - if (! empty($conf->global->MAIN_INFO_SOCIETE_NOM)) print $conf->global->MAIN_INFO_SOCIETE_NOM; - else print img_warning().' '.$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CompanyName")).''; - print '
'.$langs->trans("CompanyAddress").'' . nl2br(empty($conf->global->MAIN_INFO_SOCIETE_ADDRESS)?'':$conf->global->MAIN_INFO_SOCIETE_ADDRESS) . '
'.$langs->trans("CompanyZip").'' . (empty($conf->global->MAIN_INFO_SOCIETE_ZIP)?'':$conf->global->MAIN_INFO_SOCIETE_ZIP) . '
'.$langs->trans("CompanyTown").'' . (empty($conf->global->MAIN_INFO_SOCIETE_TOWN)?'':$conf->global->MAIN_INFO_SOCIETE_TOWN) . '
'.$langs->trans("CompanyCountry").''; - if ($mysoc->country_code) + print '
'; + if (! empty($mysoc->country_code)) { - $img=picto_from_langcode($mysoc->country_code); - print $img?$img.' ':''; - print getCountry($mysoc->country_code, 1); - } - else print img_warning().' '.$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CompanyCountry")).''; - print '
'.$langs->trans("Region-State").''; - else print '
'.$langs->trans("State").''; - if (! empty($conf->global->MAIN_INFO_SOCIETE_STATE)) - { - $tmp=explode(':', $conf->global->MAIN_INFO_SOCIETE_STATE); - $state_id=$tmp[0]; - print getState($state_id, $conf->global->MAIN_SHOW_STATE_CODE, 0, $conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT); - } - print '
'.$langs->trans("CompanyCurrency").''; - print currency_name($conf->currency, 0); - print ' ('.$conf->currency; - print ($conf->currency != $langs->getCurrencySymbol($conf->currency) ? ' - '.$langs->getCurrencySymbol($conf->currency) : ''); - print ')'; - print ' - '.$langs->trans("PriceFormatInCurrentLanguage", $langs->defaultlang).' : '.price(price2num('99.333333333', 'MT'), 1, $langs, 1, -1, -1, $conf->currency); - print '
'.$langs->trans("Phone").'' . dol_print_phone($conf->global->MAIN_INFO_SOCIETE_TEL, $mysoc->country_code) . '
'.$langs->trans("Fax").'' . dol_print_phone($conf->global->MAIN_INFO_SOCIETE_FAX, $mysoc->country_code) . '
'.$langs->trans("Mail").'' . dol_print_email($conf->global->MAIN_INFO_SOCIETE_MAIL, 0, 0, 0, 80) . '
'.$langs->trans("Web").''; - $arrayofurl = preg_split('/\s/', $conf->global->MAIN_INFO_SOCIETE_WEB); - foreach($arrayofurl as $urltoshow) - { - if ($urltoshow) print dol_print_url($urltoshow, '_blank', 80); - } - print '
'.$langs->trans("Gencod").'' . $conf->global->MAIN_INFO_SOCIETE_GENCOD . '
'.$form->textwithpicto($langs->trans("Logo"), $langs->trans("LogoDesc")).''; - - $tagtd='tagtd '; - if ($conf->browser->layout == 'phone') $tagtd=''; - print '
'; - print $mysoc->logo; - print '
'; - - // It offers the generation of the thumbnail if it does not exist - if (!is_file($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini) && preg_match('/(\.jpg|\.jpeg|\.png)$/i', $mysoc->logo)) - { - print '  '; - } - elseif ($mysoc->logo_mini && is_file($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini)) - { - print ''; + print ''; } else { - print ''; + print $countrynotdefined; } - print '
'; - print '
'.$form->textwithpicto($langs->trans("LogoSquarred"), $langs->trans("LogoSquarredDesc")).''; - - $tagtd='tagtd '; - if ($conf->browser->layout == 'phone') $tagtd=''; - print '
'; - print $mysoc->logo_squarred; - print '
'; - - // It offers the generation of the thumbnail if it does not exist - if (!is_file($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini) && preg_match('/(\.jpg|\.jpeg|\.png)$/i', $mysoc->logo_squarred)) + print '
'; + if (! empty($mysoc->country_code)) { - print '  '; - } - elseif ($mysoc->logo_squarred_mini && is_file($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini)) - { - print ''; + print ''; } else { - print ''; + print $countrynotdefined; } - print ''; - print '
'.$langs->trans("Note").'' . (! empty($conf->global->MAIN_INFO_SOCIETE_NOTE) ? nl2br($conf->global->MAIN_INFO_SOCIETE_NOTE) : '') . '
'; - print "
"; + print '
'; + if (! empty($mysoc->country_code)) + { + print ''; + } + else + { + print $countrynotdefined; + } + print '
'; + if (! empty($mysoc->country_code)) + { + print ''; + } + else + { + print $countrynotdefined; + } + print '
'; + if (! empty($mysoc->country_code)) + { + print ''; + } + else + { + print $countrynotdefined; + } + print '
'; +print ''; +print '
'; +print '
'; + + +// Fiscal year start +print '
'; +print ''; +print ''; +print ''; +print "\n"; + +print ''; + +print "
'.$langs->trans("FiscalYearInformation").''.$langs->trans("Value").'
'; +print $formother->select_month($conf->global->SOCIETE_FISCAL_MONTH_START, 'SOCIETE_FISCAL_MONTH_START', 0, 1, 'maxwidth100') . '
"; + + +// Fiscal options +print '
'; +print ''; +print ''; +print ''; +print ''; +print "\n"; + + +print ""; +print '\n"; + + +print ""; +print '\n"; + +print "
'.$langs->trans("VATManagement").''.$langs->trans("Description").' 
'; +print ""; +print ""; +if ($mysoc->country_code == 'FR') print "\n"; +print "
".$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."
"; +print "
'; +print ""; +print ""; +if ($mysoc->country_code == 'FR') print "\n"; +print "
".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."
"; +print "
"; + +/* + * Local Taxes + */ +if ($mysoc->useLocalTax(1)) +{ + // Local Tax 1 print '
'; - - - // IDs of the company (country-specific) - print '
'; - print ''; - - print '
'; - print ''; - print ''; - - // Managing Director(s) - - print ''; - - // GDPR Contact - - print ''; - - // Capital - - print ''; - - // Juridical Status - - print ''; - - // ProfId1 - if ($langs->transcountry("ProfId1", $mysoc->country_code) != '-') - { - - print ''; - } - - // ProfId2 - if ($langs->transcountry("ProfId2", $mysoc->country_code) != '-') - { - - print ''; - } - - // ProfId3 - if ($langs->transcountry("ProfId3", $mysoc->country_code) != '-') - { - - print ''; - } - - // ProfId4 - if ($langs->transcountry("ProfId4", $mysoc->country_code) != '-') - { - - print ''; - } - - // ProfId5 - if ($langs->transcountry("ProfId5", $mysoc->country_code) != '-') - { - - print ''; - } - - // ProfId6 - if ($langs->transcountry("ProfId6", $mysoc->country_code) != '-') - { - - print ''; - } - - // VAT - - print ''; - print ''; - print ''; - - - print ''; - - print '
'.$langs->trans("CompanyIds").''.$langs->trans("Value").'
'.$langs->trans("ManagingDirectors").''; - print $conf->global->MAIN_INFO_SOCIETE_MANAGERS . '
'.$langs->trans("GDPRContact").''; - print $conf->global->MAIN_INFO_GDPR . '
'.$langs->trans("Capital").''; - print $conf->global->MAIN_INFO_CAPITAL . '
'.$langs->trans("JuridicalStatus").''; - print getFormeJuridiqueLabel($conf->global->MAIN_INFO_SOCIETE_FORME_JURIDIQUE); - print '
'.$langs->transcountry("ProfId1", $mysoc->country_code).''; - if (! empty($conf->global->MAIN_INFO_SIREN)) - { - print $conf->global->MAIN_INFO_SIREN; - $s = $mysoc->id_prof_url(1, $mysoc); - if ($s) print ' - '.$s; - } else { - print ' '; - } - print '
'.$langs->transcountry("ProfId2", $mysoc->country_code).''; - if (! empty($conf->global->MAIN_INFO_SIRET)) - { - print $conf->global->MAIN_INFO_SIRET; - $s = $mysoc->id_prof_url(2, $mysoc); - if ($s) print ' - '.$s; - } else { - print ' '; - } - print '
'.$langs->transcountry("ProfId3", $mysoc->country_code).''; - if (! empty($conf->global->MAIN_INFO_APE)) - { - print $conf->global->MAIN_INFO_APE; - $s = $mysoc->id_prof_url(3, $mysoc); - if ($s) print ' - '.$s; - } else { - print ' '; - } - print '
'.$langs->transcountry("ProfId4", $mysoc->country_code).''; - if (! empty($conf->global->MAIN_INFO_RCS)) - { - print $conf->global->MAIN_INFO_RCS; - $s = $mysoc->id_prof_url(4, $mysoc); - if ($s) print ' - '.$s; - } else { - print ' '; - } - print '
'.$langs->transcountry("ProfId5", $mysoc->country_code).''; - if (! empty($conf->global->MAIN_INFO_PROFID5)) - { - print $conf->global->MAIN_INFO_PROFID5; - $s = $mysoc->id_prof_url(5, $mysoc); - if ($s) print ' - '.$s; - } else { - print ' '; - } - print '
'.$langs->transcountry("ProfId6", $mysoc->country_code).''; - if (! empty($conf->global->MAIN_INFO_PROFID6)) - { - print $conf->global->MAIN_INFO_PROFID6; - $s = $mysoc->id_prof_url(6, $mysoc); - if ($s) print ' - '.$s; - } else { - print ' '; - } - print '
'.$langs->trans("VATIntra").''; - if (! empty($conf->global->MAIN_INFO_TVAINTRA)) - { - $s=''; - $s.=$conf->global->MAIN_INFO_TVAINTRA; - $s.=''; - if (empty($conf->global->MAIN_DISABLEVATCHECK) && $mysoc->isInEEC()) - { - $s.=' - '; - if (! empty($conf->use_javascript_ajax)) - { - print "\n"; - print ''; - print "\n"; - $s.=''.$langs->trans("VATIntraCheck").''; - $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1); - } - else - { - $s.='id_country).'" target="_blank">'.img_picto($langs->trans("VATIntraCheckableOnEUSite"), 'help').''; - } - } - print $s; - } - else - { - print ' '; - } - print '
'.$langs->trans("CompanyObject").'' . (! empty($conf->global->MAIN_INFO_SOCIETE_OBJECT) ? nl2br($conf->global->MAIN_INFO_SOCIETE_OBJECT) : '') . '
'; - print "
"; - - print '
'; - - /* - * fiscal year beginning - */ - print '
'; - - print '
'; print ''; print ''; - print ''; + print ''; + print ''; print "\n"; + // Note: When option is not set, it must not appears as set on on, because there is no default value for this option + print ""; + print '\n"; - /* - * tax options - */ + + print ""; + print '\n"; + print "
'.$langs->trans("FiscalYearInformation").''.$langs->trans("Value").''.$langs->transcountry("LocalTax1Management", $mysoc->country_code).''.$langs->trans("Description").' 
global->FACTURE_LOCAL_TAX1_OPTION == '1' || $conf->global->FACTURE_LOCAL_TAX1_OPTION == "localtax1on")?" checked":"")."> ".$langs->transcountry("LocalTax1IsUsed", $mysoc->country_code)."'; + print ''; + print ""; + $example=$langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code); + print ($example!="LocalTax1IsUsedExample"?"\n":""); + if(! isOnlyOneLocalTax(1)) + { + print ''; + } - print ''; + $opcions=array($langs->trans("CalcLocaltax1").' '.$langs->trans("CalcLocaltax1Desc"),$langs->trans("CalcLocaltax2").' - '.$langs->trans("CalcLocaltax2Desc"),$langs->trans("CalcLocaltax3").' - '.$langs->trans("CalcLocaltax3Desc")); + print ''; print "
".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code)."
: '; + $formcompany->select_localtax(1, $conf->global->MAIN_INFO_VALUE_LOCALTAX1, "lt1"); + print '
'.$langs->trans("FiscalMonthStart").''; - $monthstart=(! empty($conf->global->SOCIETE_FISCAL_MONTH_START)) ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1; - print dol_print_date(dol_mktime(12, 0, 0, $monthstart, 1, 2000, 1), '%B', 'gm') . '
'.$langs->trans("CalcLocaltax").': '; + print $form->selectarray("clt1", $opcions, $conf->global->MAIN_INFO_LOCALTAX_CALC1); + print '
"; - print ""; + print "
global->FACTURE_LOCAL_TAX1_OPTION) || $conf->global->FACTURE_LOCAL_TAX1_OPTION == "localtax1off")?" checked":"")."> ".$langs->transcountry("LocalTax1IsNotUsed", $mysoc->country_code)."'; + print ""; + print ""; + $example=$langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code); + print ($example!="LocalTax1IsNotUsedExample"?"\n":""); + print "
".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code)."
"; + print "
"; +} +if ($mysoc->useLocalTax(2)) +{ + // Local Tax 2 print '
'; - print '
'; print ''; print ''; - print ''; + print ''; print ''; print "\n"; - print '"; + // Note: When option is not set, it must not appears as set on on, because there is no default value for this option + print ""; print '\n"; - print '"; + print ""; print '\n"; - print "
'.$langs->trans("VATManagement").''.$langs->trans("Description").''.$langs->transcountry("LocalTax2Management", $mysoc->country_code).''.$langs->trans("Description").' 
'; - print "global->FACTURE_TVAOPTION)?"":" checked")."> ".$langs->trans("VATIsUsed")."
global->FACTURE_LOCAL_TAX2_OPTION == '1' || $conf->global->FACTURE_LOCAL_TAX2_OPTION == "localtax2on")?" checked":"")."> ".$langs->transcountry("LocalTax2IsUsed", $mysoc->country_code)."'; - print ""; - print ""; - if ($mysoc->country_code == 'FR') print "\n"; + print '
".$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."
'; + print ""; + $example=$langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code); + print ($example!="LocalTax2IsUsedExample"?"\n":""); + if(! isOnlyOneLocalTax(2)) + { + print ''; + } + print ''; print "
".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code)."
: '; + $formcompany->select_localtax(2, $conf->global->MAIN_INFO_VALUE_LOCALTAX2, "lt2"); + print '
: '; + print $form->selectarray("clt2", $opcions, $conf->global->MAIN_INFO_LOCALTAX_CALC2); + print '
"; print "
'; - print "global->FACTURE_TVAOPTION)?" checked":"")."> ".$langs->trans("VATIsNotUsed")."
global->FACTURE_LOCAL_TAX2_OPTION) || $conf->global->FACTURE_LOCAL_TAX2_OPTION == "localtax2off")?" checked":"")."> ".$langs->transcountry("LocalTax2IsNotUsed", $mysoc->country_code)."'; print ""; - print ""; - if ($mysoc->country_code == 'FR') print "\n"; + print ""; + $example=$langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code); + print ($example!="LocalTax2IsNotUsedExample"?"\n":""); print "
".$langs->trans("VATIsNotUsedDesc")."
".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."
".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code)."
"; print "
"; - print "
"; - - /* - * Local Taxes - */ - if ($mysoc->useLocalTax(1)) // True if we found at least on vat with a setup adding a localtax 1 - { - // Local Tax 1 - print '
'; - print '
'; - print ''; - print ''; - print ''; - print ''; - print "\n"; - - - print ""; - print '\n"; - - - print '"; - print '\n"; - - print "
'.$langs->transcountry("LocalTax1Management", $mysoc->country_code).''.$langs->trans("Description").' 
"; - print "global->FACTURE_LOCAL_TAX1_OPTION == '1' || $conf->global->FACTURE_LOCAL_TAX1_OPTION == "localtax1on")?" checked":"")."> ".$langs->transcountry("LocalTax1IsUsed", $mysoc->country_code)."'; - print ""; - print ""; - $example=$langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code); - print ($example!="LocalTax1IsUsedExample"?"\n":""); - if($conf->global->MAIN_INFO_VALUE_LOCALTAX1!=0) - { - print ''; - } - print ''; - print "
".$langs->transcountry("LocalTax1IsUsedDesc", $mysoc->country_code)."
".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code)."
'.$langs->trans("LTRate").': '. $conf->global->MAIN_INFO_VALUE_LOCALTAX1 .'
'.$langs->trans("CalcLocaltax").': '; - if($conf->global->MAIN_INFO_LOCALTAX_CALC1==0) - { - print $langs->trans("CalcLocaltax1").' - '.$langs->trans("CalcLocaltax1Desc"); - } - elseif($conf->global->MAIN_INFO_LOCALTAX_CALC1==1) - { - print $langs->trans("CalcLocaltax2").' - '.$langs->trans("CalcLocaltax2Desc"); - } - elseif($conf->global->MAIN_INFO_LOCALTAX_CALC1==2){ - print $langs->trans("CalcLocaltax3").' - '.$langs->trans("CalcLocaltax3Desc"); - } - - print '
"; - print "
'; - print "global->FACTURE_LOCAL_TAX1_OPTION) || $conf->global->FACTURE_LOCAL_TAX1_OPTION == "localtax1off")?" checked":"")."> ".$langs->transcountry("LocalTax1IsNotUsed", $mysoc->country_code)."'; - print ""; - print ""; - $example=$langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code); - print ($example!="LocalTax1IsNotUsedExample"?"\n":""); - print "
".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code)."
"; - print "
"; - print "
"; - } - if ($mysoc->useLocalTax(2)) // True if we found at least on vat with a setup adding a localtax 1 - { - // Local Tax 2 - print '
'; - print '
'; - print ''; - print ''; - print ''; - print ''; - print "\n"; - - - print ""; - print '\n"; - - - print ""; - print '\n"; - - print "
'.$langs->transcountry("LocalTax2Management", $mysoc->country_code).''.$langs->trans("Description").' 
"; - print "global->FACTURE_LOCAL_TAX2_OPTION == '1' || $conf->global->FACTURE_LOCAL_TAX2_OPTION == "localtax2on")?" checked":"")."> ".$langs->transcountry("LocalTax2IsUsed", $mysoc->country_code)."'; - print ""; - print ""; - $example=$langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code); - print ($example!="LocalTax2IsUsedExample"?"\n":""); - if($conf->global->MAIN_INFO_VALUE_LOCALTAX2!=0) - { - print ''; - } - print ''; - print "
".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code)."
'.$langs->trans("LTRate").': '. $conf->global->MAIN_INFO_VALUE_LOCALTAX2 .'
'.$langs->trans("CalcLocaltax").': '; - if($conf->global->MAIN_INFO_LOCALTAX_CALC2==0) - { - print $langs->trans("CalcLocaltax1").' - '.$langs->trans("CalcLocaltax1Desc"); - } - elseif($conf->global->MAIN_INFO_LOCALTAX_CALC2==1) - { - print $langs->trans("CalcLocaltax2").' - '.$langs->trans("CalcLocaltax2Desc"); - } - elseif($conf->global->MAIN_INFO_LOCALTAX_CALC2==2) - { - print $langs->trans("CalcLocaltax3").' - '.$langs->trans("CalcLocaltax3Desc"); - } - - print '
"; - print "
global->FACTURE_LOCAL_TAX2_OPTION) || $conf->global->FACTURE_LOCAL_TAX2_OPTION == "localtax2off")?" checked":"")."> ".$langs->transcountry("LocalTax2IsNotUsed", $mysoc->country_code)."'; - print ""; - print ""; - $example=$langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code); - print ($example!="LocalTax2IsNotUsedExample"?"\n":""); - print "
".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code)."
"; - print "
"; - print "
"; - } - - - // Actions buttons - print '
'; - print ''; - print '
'; } + +print '
'; +print ''; +print '
'; + +print ''; + + // End of page llxFooter(); $db->close(); diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php index edf3e4dbe86..df8929fd8fe 100644 --- a/htdocs/admin/ihm.php +++ b/htdocs/admin/ihm.php @@ -224,219 +224,217 @@ print load_fiche_titre($langs->trans("GUISetup"), '', 'title_setup'); print ''.$langs->trans("DisplayDesc")."
\n"; print "
\n"; -if (1 == 1) // Edit +//WYSIWYG Editor +require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; + +print '
'; +print ''; +print ''; + +clearstatcache(); + +print '
'; +print ''; +print ''; +print ''; +print ''; + +// Default language +print ''; +print ''; +print ''; + +// Multilingual GUI +print ''; +print ''; +print ''; + +print '
'.$langs->trans("Language").' 
'.$langs->trans("DefaultLanguage").''; +print $formadmin->select_language($conf->global->MAIN_LANG_DEFAULT, 'MAIN_LANG_DEFAULT', 1, 0, 0, 0, 0, 'minwidth300', 2); +print ' 
'.$langs->trans("EnableMultilangInterface").''; +print $form->selectyesno('MAIN_MULTILANGS', $conf->global->MAIN_MULTILANGS, 1); +print ' 

'."\n"; + +// Themes and themes options +showSkins(null, 1); +print '
'; + +// Other +print ''; +print ''; +print ''; +print ''; + +// Disable javascript and ajax +print ''; +print ''; +print ''; + +// Max size of lists +print ''; +print ''; +print ''; + +// Max size of short lists on customer card +print ''; +print ''; +print ''; + +// show input border +/* + print ''; + print ''; + print ''; + */ + +// First day for weeks +print ''; +print ''; +print ''; + +// DefaultWorkingDays +print ''; +print ''; +print ''; + +// DefaultWorkingHours +print ''; +print ''; +print ''; + +// Firstname/Name +print ''; +print ''; +print ''; + +// Hide unauthorized button +print ''; +print ''; +print ''; + +// Hide version link +/* + +print ''; +print ''; +print ''; +*/ + +// Show bugtrack link +print ''; +print ''; +print ''; + +// Hide wiki link on login page +$pictohelp=''; +print ''; +print ''; +print ''; + +// Message of the day on home page +$substitutionarray=getCommonSubstitutionArray($langs, 0, array('object','objectamount')); +complete_substitutions_array($substitutionarray, $langs); + +print ''."\n"; + +print '
'.$langs->trans("Miscellaneous").' 
'.$langs->trans("DisableJavascript").''; +print $form->selectyesno('MAIN_DISABLE_JAVASCRIPT', isset($conf->global->MAIN_DISABLE_JAVASCRIPT)?$conf->global->MAIN_DISABLE_JAVASCRIPT:0, 1); +print ' 
'.$langs->trans("DefaultMaxSizeList").' 
'.$langs->trans("DefaultMaxSizeShortList").' 
'.$langs->trans("showInputBorder").''; + print $form->selectyesno('main_showInputBorder',isset($conf->global->THEME_ELDY_SHOW_BORDER_INPUT)?$conf->global->THEME_ELDY_SHOW_BORDER_INPUT:0,1); + print ' 
'.$langs->trans("WeekStartOnDay").''; +print $formother->select_dayofweek((isset($conf->global->MAIN_START_WEEK)?$conf->global->MAIN_START_WEEK:'1'), 'MAIN_START_WEEK', 0); +print ' 
'.$langs->trans("DefaultWorkingDays").''; +print ''; +print ' 
'.$langs->trans("DefaultWorkingHours").''; +print ''; +print ' 
'.$langs->trans("FirstnameNamePosition").''; +$array=array(0=>$langs->trans("Firstname").' '.$langs->trans("Lastname"), 1=>$langs->trans("Lastname").' '.$langs->trans("Firstname")); +print $form->selectarray('MAIN_FIRSTNAME_NAME_POSITION', $array, (isset($conf->global->MAIN_FIRSTNAME_NAME_POSITION)?$conf->global->MAIN_FIRSTNAME_NAME_POSITION:0)); +print ' 
'.$langs->trans("ButtonHideUnauthorized").''; +print $form->selectyesno('MAIN_BUTTON_HIDE_UNAUTHORIZED', isset($conf->global->MAIN_BUTTON_HIDE_UNAUTHORIZED)?$conf->global->MAIN_BUTTON_HIDE_UNAUTHORIZED:0, 1); +print ' 
'.$langs->trans("HideVersionLink").''; +print $form->selectyesno('MAIN_HIDE_VERSION',$conf->global->MAIN_HIDE_VERSION,1); +print ' 
'.$langs->trans("ShowBugTrackLink", $langs->transnoentitiesnoconv("FindBug")).''; +print $form->selectyesno('MAIN_BUGTRACK_ENABLELINK', $conf->global->MAIN_BUGTRACK_ENABLELINK, 1); +print ' 
'.$langs->trans("DisableLinkToHelp", $pictohelp).''; +print $form->selectyesno('MAIN_HELP_DISABLELINK', isset($conf->global->MAIN_HELP_DISABLELINK)?$conf->global->MAIN_HELP_DISABLELINK:0, 1); +print ' 
'; +$texthelp=$langs->trans("FollowingConstantsWillBeSubstituted").'
'; +foreach($substitutionarray as $key => $val) { - //WYSIWYG Editor - require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - - print ''; - print ''; - print ''; - - clearstatcache(); - - print '
'; - print ''; - print ''; - print ''; - print ''; - - // Default language - print ''; - print ''; - print ''; - - // Multilingual GUI - print ''; - print ''; - print ''; - - print '
'.$langs->trans("Language").' 
'.$langs->trans("DefaultLanguage").''; - print $formadmin->select_language($conf->global->MAIN_LANG_DEFAULT, 'MAIN_LANG_DEFAULT', 1, 0, 0, 0, 0, 'minwidth300', 2); - print ' 
'.$langs->trans("EnableMultilangInterface").''; - print $form->selectyesno('MAIN_MULTILANGS', $conf->global->MAIN_MULTILANGS, 1); - print ' 

'."\n"; - - // Themes and themes options - showSkins(null, 1); - print '
'; - - // Other - print ''; - print ''; - print ''; - print ''; - - // Disable javascript and ajax - print ''; - print ''; - print ''; - - // Max size of lists - print ''; - print ''; - print ''; - - // Max size of short lists on customer card - print ''; - print ''; - print ''; - - // show input border - /* - print ''; - print ''; - print ''; - */ - - // First day for weeks - print ''; - print ''; - print ''; - - // DefaultWorkingDays - print ''; - print ''; - print ''; - - // DefaultWorkingHours - print ''; - print ''; - print ''; - - // Firstname/Name - print ''; - print ''; - print ''; - - // Hide unauthorized button - print ''; - print ''; - print ''; - - // Hide version link - /* - - print ''; - print ''; - print ''; - */ - - // Show bugtrack link - print ''; - print ''; - print ''; - - // Hide wiki link on login page - $pictohelp=''; - print ''; - print ''; - print ''; - - // Message of the day on home page - $substitutionarray=getCommonSubstitutionArray($langs, 0, array('object','objectamount')); - complete_substitutions_array($substitutionarray, $langs); - - print ''."\n"; - - print '
'.$langs->trans("Miscellaneous").' 
'.$langs->trans("DisableJavascript").''; - print $form->selectyesno('MAIN_DISABLE_JAVASCRIPT', isset($conf->global->MAIN_DISABLE_JAVASCRIPT)?$conf->global->MAIN_DISABLE_JAVASCRIPT:0, 1); - print ' 
'.$langs->trans("DefaultMaxSizeList").' 
'.$langs->trans("DefaultMaxSizeShortList").' 
'.$langs->trans("showInputBorder").''; - print $form->selectyesno('main_showInputBorder',isset($conf->global->THEME_ELDY_SHOW_BORDER_INPUT)?$conf->global->THEME_ELDY_SHOW_BORDER_INPUT:0,1); - print ' 
'.$langs->trans("WeekStartOnDay").''; - print $formother->select_dayofweek((isset($conf->global->MAIN_START_WEEK)?$conf->global->MAIN_START_WEEK:'1'), 'MAIN_START_WEEK', 0); - print ' 
'.$langs->trans("DefaultWorkingDays").''; - print ''; - print ' 
'.$langs->trans("DefaultWorkingHours").''; - print ''; - print ' 
'.$langs->trans("FirstnameNamePosition").''; - $array=array(0=>$langs->trans("Firstname").' '.$langs->trans("Lastname"), 1=>$langs->trans("Lastname").' '.$langs->trans("Firstname")); - print $form->selectarray('MAIN_FIRSTNAME_NAME_POSITION', $array, (isset($conf->global->MAIN_FIRSTNAME_NAME_POSITION)?$conf->global->MAIN_FIRSTNAME_NAME_POSITION:0)); - print ' 
'.$langs->trans("ButtonHideUnauthorized").''; - print $form->selectyesno('MAIN_BUTTON_HIDE_UNAUTHORIZED', isset($conf->global->MAIN_BUTTON_HIDE_UNAUTHORIZED)?$conf->global->MAIN_BUTTON_HIDE_UNAUTHORIZED:0, 1); - print ' 
'.$langs->trans("HideVersionLink").''; - print $form->selectyesno('MAIN_HIDE_VERSION',$conf->global->MAIN_HIDE_VERSION,1); - print ' 
'.$langs->trans("ShowBugTrackLink", $langs->transnoentitiesnoconv("FindBug")).''; - print $form->selectyesno('MAIN_BUGTRACK_ENABLELINK', $conf->global->MAIN_BUGTRACK_ENABLELINK, 1); - print ' 
'.$langs->trans("DisableLinkToHelp", $pictohelp).''; - print $form->selectyesno('MAIN_HELP_DISABLELINK', isset($conf->global->MAIN_HELP_DISABLELINK)?$conf->global->MAIN_HELP_DISABLELINK:0, 1); - print ' 
'; - $texthelp=$langs->trans("FollowingConstantsWillBeSubstituted").'
'; - foreach($substitutionarray as $key => $val) - { - $texthelp.=$key.'
'; - } - print $form->textwithpicto($langs->trans("MessageOfDay"), $texthelp, 1, 'help', '', 0, 2, 'tooltipmessageofday'); - - print '
'; - - $doleditor = new DolEditor('main_motd', (isset($conf->global->MAIN_MOTD)?$conf->global->MAIN_MOTD:''), '', 142, 'dolibarr_notes', 'In', false, true, true, ROWS_4, '90%'); - $doleditor->Create(); - - print '
'."\n"; - - print '
'; - - // Other - print ''; - print ''; - print ''; - print ''; - - // Message on login page - $substitutionarray=getCommonSubstitutionArray($langs, 0, array('object','objectamount','user')); - complete_substitutions_array($substitutionarray, $langs); - print ''."\n"; - - // Hide helpcenter link on login page - print ''; - print ''; - print ''; - - // Background - print ''; - - print '
'.$langs->trans("LoginPage").' 
'; - $texthelp=$langs->trans("FollowingConstantsWillBeSubstituted").'
'; - foreach($substitutionarray as $key => $val) - { - $texthelp.=$key.'
'; - } - print $form->textwithpicto($langs->trans("MessageLogin"), $texthelp, 1, 'help', '', 0, 2, 'tooltipmessagelogin'); - print '
'; - $doleditor = new DolEditor('main_home', (isset($conf->global->MAIN_HOME)?$conf->global->MAIN_HOME:''), '', 142, 'dolibarr_notes', 'In', false, true, true, ROWS_4, '90%'); - $doleditor->Create(); - print '
'.$langs->trans("DisableLinkToHelpCenter").''; - print $form->selectyesno('MAIN_HELPCENTER_DISABLELINK', isset($conf->global->MAIN_HELPCENTER_DISABLELINK)?$conf->global->MAIN_HELPCENTER_DISABLELINK:0, 1); - print ' 
'; - print '
'; - $disabled = ''; - if (! empty($conf->global->ADD_UNSPLASH_LOGIN_BACKGROUND)) $disabled = ' disabled="disabled"'; - print ''; - if ($disabled) - { - print '('.$langs->trans("DisabledByOptionADD_UNSPLASH_LOGIN_BACKGROUND").') '; - } - if (! empty($conf->global->MAIN_LOGIN_BACKGROUND)) { - print ''.img_delete($langs->trans("Delete")).''; - if (file_exists($conf->mycompany->dir_output.'/logos/'.$conf->global->MAIN_LOGIN_BACKGROUND)) { - print '   '; - print ''; - } - } else { - print ''; - } - print '
'; - print '
'."\n"; - - - print '
'; - print '
'; - print ''; - print '
'; - - print ''; + $texthelp.=$key.'
'; } +print $form->textwithpicto($langs->trans("MessageOfDay"), $texthelp, 1, 'help', '', 0, 2, 'tooltipmessageofday'); + +print '
'; + +$doleditor = new DolEditor('main_motd', (isset($conf->global->MAIN_MOTD)?$conf->global->MAIN_MOTD:''), '', 142, 'dolibarr_notes', 'In', false, true, true, ROWS_4, '90%'); +$doleditor->Create(); + +print '
'."\n"; + +print '
'; + +// Other +print ''; +print ''; +print ''; +print ''; + +// Message on login page +$substitutionarray=getCommonSubstitutionArray($langs, 0, array('object','objectamount','user')); +complete_substitutions_array($substitutionarray, $langs); +print ''."\n"; + +// Hide helpcenter link on login page +print ''; +print ''; +print ''; + +// Background +print ''; + +print '
'.$langs->trans("LoginPage").' 
'; +$texthelp=$langs->trans("FollowingConstantsWillBeSubstituted").'
'; +foreach($substitutionarray as $key => $val) +{ + $texthelp.=$key.'
'; +} +print $form->textwithpicto($langs->trans("MessageLogin"), $texthelp, 1, 'help', '', 0, 2, 'tooltipmessagelogin'); +print '
'; +$doleditor = new DolEditor('main_home', (isset($conf->global->MAIN_HOME)?$conf->global->MAIN_HOME:''), '', 142, 'dolibarr_notes', 'In', false, true, true, ROWS_4, '90%'); +$doleditor->Create(); +print '
'.$langs->trans("DisableLinkToHelpCenter").''; +print $form->selectyesno('MAIN_HELPCENTER_DISABLELINK', isset($conf->global->MAIN_HELPCENTER_DISABLELINK)?$conf->global->MAIN_HELPCENTER_DISABLELINK:0, 1); +print ' 
'; +print '
'; +$disabled = ''; +if (! empty($conf->global->ADD_UNSPLASH_LOGIN_BACKGROUND)) $disabled = ' disabled="disabled"'; +print ''; +if ($disabled) +{ + print '('.$langs->trans("DisabledByOptionADD_UNSPLASH_LOGIN_BACKGROUND").') '; +} +if (! empty($conf->global->MAIN_LOGIN_BACKGROUND)) { + print ''.img_delete($langs->trans("Delete")).''; + if (file_exists($conf->mycompany->dir_output.'/logos/'.$conf->global->MAIN_LOGIN_BACKGROUND)) { + print '   '; + print ''; + } +} else { + print ''; +} +print '
'; +print '
'."\n"; + + +print '
'; +print '
'; +print ''; +print '
'; + +print ''; + // End of page llxFooter(); diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 93bf4b90f94..58cd78e102b 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1118,7 +1118,7 @@ LogEventDesc=Enable logging for specific security events. Administrators the log AreaForAdminOnly=Setup parameters can be set by administrator users only. SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only. SystemAreaForAdminOnly=This area is available to administrator users only. Dolibarr user permissions cannot change this restriction. -CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page. +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" button at the bottom of the page. AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. AccountantFileNumber=Accountant code DisplayDesc=Parameters affecting the look and behaviour of Dolibarr can be modified here. From c21224ef96932cd86a3fdcbd70800b25749c19b8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 14:24:47 +0200 Subject: [PATCH 205/980] Align code of auguria menu handler with new architecture --- htdocs/core/menus/standard/auguria.lib.php | 115 ++++++++++---------- htdocs/core/menus/standard/auguria_menu.php | 27 ++++- htdocs/core/menus/standard/eldy.lib.php | 2 +- htdocs/core/menus/standard/eldy_menu.php | 4 +- 4 files changed, 81 insertions(+), 67 deletions(-) diff --git a/htdocs/core/menus/standard/auguria.lib.php b/htdocs/core/menus/standard/auguria.lib.php index 66f4dac2a44..39e2150280e 100644 --- a/htdocs/core/menus/standard/auguria.lib.php +++ b/htdocs/core/menus/standard/auguria.lib.php @@ -39,10 +39,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php'; */ function print_auguria_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout = 0, $mode = '') { - global $user,$conf,$langs,$dolibarr_main_db_name; + global $user,$conf,$langs,$mysoc; + global $dolibarr_main_db_name; - $mainmenu=$_SESSION["mainmenu"]; - $leftmenu=$_SESSION["leftmenu"]; + $mainmenu=(empty($_SESSION["mainmenu"])?'':$_SESSION["mainmenu"]); + $leftmenu=(empty($_SESSION["leftmenu"])?'':$_SESSION["leftmenu"]); $id='mainmenu'; $listofmodulesforexternal=explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL); @@ -53,17 +54,17 @@ function print_auguria_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout if (empty($noout)) print_start_menu_array_auguria(); - global $usemenuhider; - $usemenuhider = 1; + global $usemenuhider; + $usemenuhider = 1; - // Show/Hide vertical menu - if ($mode != 'jmobile' && $mode != 'topnb' && $usemenuhider && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) + // Show/Hide vertical menu. The hamburger icon for .menuhider action. + if ($mode != 'jmobile' && $mode != 'topnb' && $usemenuhider && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) { $showmode=1; $classname = 'class="tmenu menuhider"'; $idsel='menu'; - $menu->add('#', '', 0, $showmode, $atarget, "xxx", '', 0, $id, $idsel, $classname); + $menu->add('#', (! empty($conf->global->THEME_TOPMENU_DISABLE_IMAGE) ? '' : ''), 0, $showmode, $atarget, "xxx", '', 0, $id, $idsel, $classname); } $num = count($newTabMenu); @@ -125,20 +126,44 @@ function print_auguria_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout $menu->liste = dol_sort_array($menu->liste, 'position'); // Output menu entries - foreach($menu->liste as $menkey => $menuval) + // Show logo company + if (empty($conf->global->MAIN_MENU_INVERT) && empty($noout) && ! empty($conf->global->MAIN_SHOW_LOGO) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) { - if (empty($noout)) print_start_menu_entry_auguria($menuval['idsel'], $menuval['classname'], $menuval['enabled']); - if (empty($noout)) print_text_menu_entry_auguria($menuval['titre'], $menuval['enabled'], ($menuval['url']!='#'?DOL_URL_ROOT:'').$menuval['url'], $menuval['id'], $menuval['idsel'], $menuval['classname'], ($menuval['target']?$menuval['target']:$atarget)); - if (empty($noout)) print_end_menu_entry_auguria($menuval['enabled']); + //$mysoc->logo_mini=(empty($conf->global->MAIN_INFO_SOCIETE_LOGO_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI); + $mysoc->logo_squarred_mini=(empty($conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI); + if (! empty($mysoc->logo_squarred_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini)) + { + $urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_squarred_mini); + } + else + { + $urllogo=DOL_URL_ROOT.'/theme/dolibarr_logo_squarred.png'; + } + $title=$langs->trans("GoIntoSetupToChangeLogo"); + + print "\n".''."\n"; + print_start_menu_entry_auguria('companylogo', 'class="tmenu tmenucompanylogo"', 1); + + print ''."\n"; + + print_end_menu_entry_auguria(4); + } + + if (empty($noout)) { + foreach($menu->liste as $menuval) + { + print_start_menu_entry_auguria($menuval['idsel'], $menuval['classname'], $menuval['enabled']); + print_text_menu_entry_auguria($menuval['titre'], $menuval['enabled'], ($menuval['url']!='#'?DOL_URL_ROOT:'').$menuval['url'], $menuval['id'], $menuval['idsel'], $menuval['classname'], ($menuval['target']?$menuval['target']:$atarget)); + print_end_menu_entry_auguria($menuval['enabled']); + } } $showmode=1; - if (empty($noout)) print_start_menu_entry_auguria('', 'class="tmenuend"', $showmode); - if (empty($noout)) print_end_menu_entry_auguria($showmode); - - if (empty($noout)) print_end_menu_array_auguria(); - - print "\n"; + if (empty($noout)) { + print_start_menu_entry_auguria('', 'class="tmenuend"', $showmode); + print_end_menu_entry_auguria($showmode); + print_end_menu_array_auguria(); + } return 0; } @@ -193,16 +218,16 @@ function print_text_menu_entry_auguria($text, $showmode, $url, $id, $idsel, $cla if ($showmode == 1) { - print ''; + print ''; print '
'; print '
'; - print ''; + print ''; print ''; print $text; print ''; print ''; } - if ($showmode == 2) + elseif ($showmode == 2) { print '
'; print ''; @@ -244,17 +269,18 @@ function print_end_menu_array_auguria() /** * Core function to output left menu auguria + * Fill &$menu (example with $forcemainmenu='home' $forceleftmenu='all', return left menu tree of Home) * * @param DoliDB $db Database handler - * @param array $menu_array_before Table of menu entries to show before entries of menu handler - * @param array $menu_array_after Table of menu entries to show after entries of menu handler + * @param array $menu_array_before Table of menu entries to show before entries of menu handler (menu->liste filled with menu->add) + * @param array $menu_array_after Table of menu entries to show after entries of menu handler (menu->liste filled with menu->add) * @param array $tabMenu If array with menu entries already loaded, we put this array here (in most cases, it's empty) * @param Menu $menu Object Menu to return back list of menu entries * @param int $noout Disable output (Initialise &$menu only). * @param string $forcemainmenu 'x'=Force mainmenu to mainmenu='x' - * @param string $forceleftmenu 'all'=Force leftmenu to '' (= all) + * @param string $forceleftmenu 'all'=Force leftmenu to '' (= all). If value come being '', we change it to value in session and 'none' if not defined in session. * @param array $moredata An array with more data to output - * @return int Nb of entries + * @return int Nb of menu entries */ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$tabMenu, &$menu, $noout = 0, $forcemainmenu = '', $forceleftmenu = '', $moredata = null) { @@ -268,35 +294,6 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t global $usemenuhider; $usemenuhider = 0; - // Show logo company - if (empty($noout) && ! empty($conf->global->MAIN_SHOW_LOGO) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) - { - $mysoc->logo_mini=(empty($conf->global->MAIN_INFO_SOCIETE_LOGO_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI); - $mysoc->logo_squarred_mini=(empty($conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI); - if (! empty($mysoc->logo_squarred_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini)) - { - $urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_squarred_mini); - } - elseif (! empty($mysoc->logo_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini)) - { - $urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_mini); - } - else - { - $urllogo=DOL_URL_ROOT.'/theme/dolibarr_logo_squarred.png'; - } - $title=$langs->trans("GoIntoSetupToChangeLogo"); - print "\n".''."\n"; - print ''."\n"; - } - if (is_array($moredata) && ! empty($moredata['searchform'])) // searchform can contains select2 code or link to show old search form or link to switch on search page { print "\n"; @@ -355,9 +352,9 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t $db->free($resql); } - if (! empty($conf->accounting->enabled) && !empty($user->rights->accounting->mouvements->lire) && $mainmenu == 'accountancy') // Entry in accountancy journal for each bank account + if (! empty($conf->accounting->enabled) && !empty($user->rights->accounting->comptarapport->lire) && $mainmenu == 'accountancy') // Entry in accountancy journal for each bank account { - $newmenu->add('', $langs->trans("Journalization"), 0, $user->rights->accounting->comptarapport->lire, '', 'accountancy', 'accountancy'); + $newmenu->add('', $langs->trans("RegistrationInAccounting"), 1, $user->rights->accounting->comptarapport->lire, '', 'accountancy', 'accountancy'); // Multi journal $sql = "SELECT rowid, code, label, nature"; @@ -390,7 +387,7 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t if ($objp->nature == 9) $nature="hasnew"; // To enable when page exists - if (! empty($conf->global->ACCOUNTANCY_SHOW_DEVELOP_JOURNAL)) + if (empty($conf->global->ACCOUNTANCY_SHOW_DEVELOP_JOURNAL)) { if ($nature == 'various' || $nature == 'hasnew' || $nature == 'inventory') $nature=''; } @@ -399,7 +396,7 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t { $langs->load('accountancy'); $journallabel=$langs->transnoentities($objp->label); // Labels in this table are set by loading llx_accounting_abc.sql. Label can be 'ACCOUNTING_SELL_JOURNAL', 'InventoryJournal', ... - if (empty($leftmenu) || preg_match('/accountancy/', $leftmenu)) $newmenu->add('/accountancy/journal/'.$nature.'journal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal='.$objp->rowid, $journallabel, 2, $user->rights->accounting->comptarapport->lire); + $newmenu->add('/accountancy/journal/'.$nature.'journal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal='.$objp->rowid, $journallabel, 2, $user->rights->accounting->comptarapport->lire); } $i++; } @@ -444,7 +441,7 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t */ } - if ($conf->ftp->enabled && $mainmenu == 'ftp') // Entry for FTP + if (! empty($conf->ftp->enabled) && $mainmenu == 'ftp') // Entry for FTP { $MAXFTP=20; $i=1; diff --git a/htdocs/core/menus/standard/auguria_menu.php b/htdocs/core/menus/standard/auguria_menu.php index c4622f2d6ee..b3c5814240c 100644 --- a/htdocs/core/menus/standard/auguria_menu.php +++ b/htdocs/core/menus/standard/auguria_menu.php @@ -111,15 +111,18 @@ class MenuManager $tabMenu=array(); $menuArbo = new Menubase($this->db, 'auguria'); $menuArbo->menuLoad($mainmenu, $leftmenu, $this->type_user, 'auguria', $tabMenu); - $this->tabMenu=$tabMenu; - } + //var_dump($tabMenu); + + //if ($forcemainmenu == 'all') { var_dump($this->tabMenu); exit; } + } /** * Show menu + * Menu defined in sql tables were stored into $this->tabMenu BEFORE this is called. * - * @param string $mode 'top', 'left', 'jmobile' (used to get full xml ul/li menu) + * @param string $mode 'top', 'topnb', 'left', 'jmobile' (used to get full xml ul/li menu) * @param array $moredata An array with more data to output * @return int 0 or nb of top menu entries if $mode = 'topnb' */ @@ -138,9 +141,18 @@ class MenuManager require_once DOL_DOCUMENT_ROOT.'/core/class/menu.class.php'; $this->menu=new Menu(); - if ($mode == 'top') print_auguria_menu($this->db, $this->atarget, $this->type_user, $this->tabMenu, $this->menu, 0, $mode); - if ($mode == 'left') print_left_auguria_menu($this->db, $this->menu_array, $this->menu_array_after, $this->tabMenu, $this->menu, 0, '', '', $moredata); - + if (empty($conf->global->MAIN_MENU_INVERT)) + { + if ($mode == 'top') print_auguria_menu($this->db, $this->atarget, $this->type_user, $this->tabMenu, $this->menu, 0, $mode); + if ($mode == 'left') print_left_auguria_menu($this->db, $this->menu_array, $this->menu_array_after, $this->tabMenu, $this->menu, 0, '', '', $moredata); + } + else + { + $conf->global->MAIN_SHOW_LOGO=0; + if ($mode == 'top') print_left_auguria_menu($this->db, $this->menu_array, $this->menu_array_after, $this->tabMenu, $this->menu, 0); + if ($mode == 'left') print_auguria_menu($this->db, $this->atarget, $this->type_user, $this->tabMenu, $this->menu, 0, $mode); + } + if ($mode == 'topnb') { print_auguria_menu($this->db, $this->atarget, $this->type_user, $this->tabMenu, $this->menu, 1, $mode); @@ -315,5 +327,8 @@ class MenuManager } unset($this->menu); + + //print 'xx'.$mode; + return 0; } } diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 0bfc9f9b7b9..5d9a637de58 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -629,7 +629,7 @@ function print_end_menu_array() * @param string $forcemainmenu 'x'=Force mainmenu to mainmenu='x' * @param string $forceleftmenu 'all'=Force leftmenu to '' (= all). If value come being '', we change it to value in session and 'none' if not defined in session. * @param array $moredata An array with more data to output - * @return int nb of menu entries + * @return int Nb of menu entries */ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabMenu, &$menu, $noout = 0, $forcemainmenu = '', $forceleftmenu = '', $moredata = null) { diff --git a/htdocs/core/menus/standard/eldy_menu.php b/htdocs/core/menus/standard/eldy_menu.php index d8a47d45c68..8389db029be 100644 --- a/htdocs/core/menus/standard/eldy_menu.php +++ b/htdocs/core/menus/standard/eldy_menu.php @@ -64,6 +64,8 @@ class MenuManager */ public function loadMenu($forcemainmenu = '', $forceleftmenu = '') { + global $conf, $user, $langs; + // On sauve en session le menu principal choisi if (isset($_GET["mainmenu"])) $_SESSION["mainmenu"]=$_GET["mainmenu"]; if (isset($_GET["idmenu"])) $_SESSION["idmenu"]=$_GET["idmenu"]; @@ -117,7 +119,7 @@ class MenuManager /** * Show menu. - * Module defined in sql tables were stored into $this->tabMenu BEFORE this is called. + * Menu defined in sql tables were stored into $this->tabMenu BEFORE this is called. * * @param string $mode 'top', 'topnb', 'left', 'jmobile' (used to get full xml ul/li menu) * @param array $moredata An array with more data to output From 7ce01c5ceb917f10dc3696055705d04b872a2e3d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 14:42:55 +0200 Subject: [PATCH 206/980] Look and feel v11 --- htdocs/admin/boxes.php | 2 +- htdocs/admin/delais.php | 4 +- htdocs/admin/ihm.php | 1 - htdocs/admin/limits.php | 2 +- htdocs/admin/menus.php | 143 ++-- htdocs/admin/pdf.php | 672 ++++++------------ htdocs/admin/security_other.php | 2 +- htdocs/admin/sms.php | 2 +- htdocs/admin/translation.php | 2 +- .../box_accountancy_suspense_account.php | 8 +- htdocs/core/menus/standard/eldy.lib.php | 2 +- 11 files changed, 285 insertions(+), 555 deletions(-) diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index 58c07b5ca3e..ca90c836929 100644 --- a/htdocs/admin/boxes.php +++ b/htdocs/admin/boxes.php @@ -222,7 +222,7 @@ llxHeader('', $langs->trans("Boxes")); print load_fiche_titre($langs->trans("Boxes"), '', 'title_setup'); -print $langs->trans("BoxesDesc")." ".$langs->trans("OnlyActiveElementsAreShown")."
\n"; +print ''.$langs->trans("BoxesDesc")." ".$langs->trans("OnlyActiveElementsAreShown")."
\n"; /* * Search for the default active boxes for each possible position diff --git a/htdocs/admin/delais.php b/htdocs/admin/delais.php index 47f668f69c3..d69a14deb2e 100644 --- a/htdocs/admin/delais.php +++ b/htdocs/admin/delais.php @@ -174,8 +174,8 @@ llxHeader(); print load_fiche_titre($langs->trans("DelaysOfToleranceBeforeWarning"), '', 'title_setup'); -print $langs->transnoentities("DelaysOfToleranceDesc", img_warning()); -print " ".$langs->trans("OnlyActiveElementsAreShown", DOL_URL_ROOT.'/admin/modules.php')."
\n"; +print ''.$langs->transnoentities("DelaysOfToleranceDesc", img_warning()); +print " ".$langs->trans("OnlyActiveElementsAreShown", DOL_URL_ROOT.'/admin/modules.php')."
\n"; print "
\n"; $countrynotdefined=''.$langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')'; diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php index df8929fd8fe..dfbb548f5e0 100644 --- a/htdocs/admin/ihm.php +++ b/htdocs/admin/ihm.php @@ -222,7 +222,6 @@ $formadmin=new FormAdmin($db); print load_fiche_titre($langs->trans("GUISetup"), '', 'title_setup'); print ''.$langs->trans("DisplayDesc")."
\n"; -print "
\n"; //WYSIWYG Editor require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; diff --git a/htdocs/admin/limits.php b/htdocs/admin/limits.php index c9e69cc469e..ea19b7034a6 100644 --- a/htdocs/admin/limits.php +++ b/htdocs/admin/limits.php @@ -90,7 +90,7 @@ llxHeader(); print load_fiche_titre($langs->trans("LimitsSetup"), '', 'title_setup'); -print $langs->trans("LimitsDesc")."
\n"; +print ''.$langs->trans("LimitsDesc")."
\n"; print "
\n"; if ($action == 'edit') diff --git a/htdocs/admin/menus.php b/htdocs/admin/menus.php index b334ccadf45..4187c4d3eb4 100644 --- a/htdocs/admin/menus.php +++ b/htdocs/admin/menus.php @@ -159,116 +159,63 @@ print ''.$langs->trans("MenusDesc")."
\n"; print "
\n"; -if ($action == 'edit') -{ - clearstatcache(); +clearstatcache(); - // Gestionnaires de menu - print ''; - print ''; - print ''; - print ''; - print ''; +// Gestionnaires de menu +print '
'.$langs->trans("Menu").''; - print $form->textwithpicto($langs->trans("InternalUsers"), $langs->trans("InternalExternalDesc")); - print ''; - print $form->textwithpicto($langs->trans("ExternalUsers"), $langs->trans("InternalExternalDesc")); - print '
'; +print ''; +print ''; +print ''; +print ''; - // Menu top - print ''; - print ''; - print ''; - print ''; +// Menu top +print ''; +print ''; +print ''; +print ''; - // Menu smartphone - print ''; - print ''; - print ''; - print ''; +// Menu smartphone +print ''; +print '
'.$langs->trans("Menu").''; +print $form->textwithpicto($langs->trans("InternalUsers"), $langs->trans("InternalExternalDesc")); +print ''; +print $form->textwithpicto($langs->trans("ExternalUsers"), $langs->trans("InternalExternalDesc")); +print '
'.$langs->trans("DefaultMenuManager").''; - $formadmin->select_menu(empty($conf->global->MAIN_MENU_STANDARD_FORCED)?$conf->global->MAIN_MENU_STANDARD:$conf->global->MAIN_MENU_STANDARD_FORCED, 'MAIN_MENU_STANDARD', $dirstandard, empty($conf->global->MAIN_MENU_STANDARD_FORCED)?'':' disabled'); - print ''; - $formadmin->select_menu(empty($conf->global->MAIN_MENUFRONT_STANDARD_FORCED)?$conf->global->MAIN_MENUFRONT_STANDARD:$conf->global->MAIN_MENUFRONT_STANDARD_FORCED, 'MAIN_MENUFRONT_STANDARD', $dirstandard, empty($conf->global->MAIN_MENUFRONT_STANDARD_FORCED)?'':' disabled'); - print '
'.$langs->trans("DefaultMenuManager").''; +$formadmin->select_menu(empty($conf->global->MAIN_MENU_STANDARD_FORCED)?$conf->global->MAIN_MENU_STANDARD:$conf->global->MAIN_MENU_STANDARD_FORCED, 'MAIN_MENU_STANDARD', $dirstandard, empty($conf->global->MAIN_MENU_STANDARD_FORCED)?'':' disabled'); +print ''; +$formadmin->select_menu(empty($conf->global->MAIN_MENUFRONT_STANDARD_FORCED)?$conf->global->MAIN_MENUFRONT_STANDARD:$conf->global->MAIN_MENUFRONT_STANDARD_FORCED, 'MAIN_MENUFRONT_STANDARD', $dirstandard, empty($conf->global->MAIN_MENUFRONT_STANDARD_FORCED)?'':' disabled'); +print '
'.$langs->trans("DefaultMenuSmartphoneManager").''; - $formadmin->select_menu(empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED)?$conf->global->MAIN_MENU_SMARTPHONE:$conf->global->MAIN_MENU_SMARTPHONE_FORCED, 'MAIN_MENU_SMARTPHONE', array_merge($dirstandard, $dirsmartphone), empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED)?'':' disabled'); - print ''; - $formadmin->select_menu(empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)?$conf->global->MAIN_MENUFRONT_SMARTPHONE:$conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED, 'MAIN_MENUFRONT_SMARTPHONE', array_merge($dirstandard, $dirsmartphone), empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)?'':' disabled'); - print '
'.$langs->trans("DefaultMenuSmartphoneManager").''; +$formadmin->select_menu(empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED)?$conf->global->MAIN_MENU_SMARTPHONE:$conf->global->MAIN_MENU_SMARTPHONE_FORCED, 'MAIN_MENU_SMARTPHONE', array_merge($dirstandard, $dirsmartphone), empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED)?'':' disabled'); - print '
'; -} -else -{ - // Gestionnaires de menu - print ''; - print ''; - print ''; - print ''; - print ''; - - - print ''; - print ''; - print ''; - print ''; - - - print ''; - print ''; - print ''; - print ''; - print ''; - - print '
'.$langs->trans("Menu").''; - print $form->textwithpicto($langs->trans("InternalUsers"), $langs->trans("InternalExternalDesc")); - print ''; - print $form->textwithpicto($langs->trans("ExternalUsers"), $langs->trans("InternalExternalDesc")); - print '
'.$langs->trans("DefaultMenuManager").''; - $filelib=preg_replace('/.php$/i', '', (empty($conf->global->MAIN_MENU_STANDARD_FORCED)?$conf->global->MAIN_MENU_STANDARD:$conf->global->MAIN_MENU_STANDARD_FORCED)); - print $filelib; - print ''; - $filelib=preg_replace('/.php$/i', '', (empty($conf->global->MAIN_MENUFRONT_STANDARD_FORCED)?$conf->global->MAIN_MENUFRONT_STANDARD:$conf->global->MAIN_MENUFRONT_STANDARD_FORCED)); - print $filelib; - print '
'.$langs->trans("DefaultMenuSmartphoneManager").''; - $filelib=preg_replace('/.php$/i', '', (empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED)?$conf->global->MAIN_MENU_SMARTPHONE:$conf->global->MAIN_MENU_SMARTPHONE_FORCED)); - print $filelib; - if (! empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED) && preg_match('/smartphone/', $conf->global->MAIN_MENU_SMARTPHONE_FORCED) +if (! empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED) && preg_match('/smartphone/', $conf->global->MAIN_MENU_SMARTPHONE_FORCED) || (empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED) && ! empty($conf->global->MAIN_MENU_SMARTPHONE) && preg_match('/smartphone/', $conf->global->MAIN_MENU_SMARTPHONE))) - { - print ' '.img_warning($langs->transnoentitiesnoconv("ThisForceAlsoTheme")); - } - print ''; - $filelib=preg_replace('/.php$/i', '', (empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)?$conf->global->MAIN_MENUFRONT_SMARTPHONE:$conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)); - print $filelib; - if (! empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED) && preg_match('/smartphone/', $conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED) - || (empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED) && ! empty($conf->global->MAIN_MENU_SMARTPHONE) && preg_match('/smartphone/', $conf->global->MAIN_MENUFRONT_SMARTPHONE))) - { - print ' '.img_warning($langs->transnoentitiesnoconv("ThisForceAlsoTheme")); - } - print '
'; +{ + print ' '.img_warning($langs->transnoentitiesnoconv("ThisForceAlsoTheme")); } +print ''; +print ''; +$formadmin->select_menu(empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)?$conf->global->MAIN_MENUFRONT_SMARTPHONE:$conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED, 'MAIN_MENUFRONT_SMARTPHONE', array_merge($dirstandard, $dirsmartphone), empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)?'':' disabled'); + +if (! empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED) && preg_match('/smartphone/', $conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED) + || (empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED) && ! empty($conf->global->MAIN_MENU_SMARTPHONE) && preg_match('/smartphone/', $conf->global->MAIN_MENUFRONT_SMARTPHONE))) +{ + print ' '.img_warning($langs->transnoentitiesnoconv("ThisForceAlsoTheme")); +} + +print ''; +print ''; + +print ''; + dol_fiche_end(); - -if ($action == 'edit') -{ - print '
'; - print ''; - print '       '; - print ''; - print '
'; -} +print '
'; +print ''; +print '
'; print ''; - -if ($action != 'edit') -{ - print '
'; -} - // End of page llxFooter(); $db->close(); diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index a8c1aa41b5f..e9346f49a3a 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -123,460 +123,244 @@ print "
\n"; $noCountryCode = (empty($mysoc->country_code) ? true : false); -if ($action == 'edit') // Edit +print '
'; +print ''; +print ''; + +clearstatcache(); + + +// Misc options +print load_fiche_titre($langs->trans("DictionaryPaperFormat"), '', ''); + +print '
'; +print ''; +print ''; + +$selected=$conf->global->MAIN_PDF_FORMAT; +if (empty($selected)) $selected=dol_getDefaultFormat(); + +// Show pdf format + +print ''; + +print ''; +print ''; +print ''; +print ''; + +print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("DictionaryPaperFormat").''; +print $formadmin->select_paper_format($selected, 'MAIN_PDF_FORMAT'); +print '
'.$langs->trans("MAIN_PDF_MARGIN_LEFT").''; +print ''; +print '
'.$langs->trans("MAIN_PDF_MARGIN_RIGHT").''; +print ''; +print '
'.$langs->trans("MAIN_PDF_MARGIN_TOP").''; +print ''; +print '
'.$langs->trans("MAIN_PDF_MARGIN_BOTTOM").''; +print ''; +print '
'; +print '
'; + +print '
'; + + +// Addresses +print load_fiche_titre($langs->trans("PDFAddressForging"), '', ''); + +print '
'; +print ''; +print ''; + +// Hide VAT Intra on address + +print ''; + +// Show prof id in address into pdf +for($i=1; $i<=6; $i++) { - print ''; - print ''; - print ''; - - clearstatcache(); - - - // Misc options - print load_fiche_titre($langs->trans("DictionaryPaperFormat"), '', ''); - - print '
'; - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("ShowVATIntaInAddress").''; +print $form->selectyesno('MAIN_TVAINTRA_NOT_IN_ADDRESS', (! empty($conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS))?$conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS:0, 1); +print '
'; - print ''; - - $selected=$conf->global->MAIN_PDF_FORMAT; - if (empty($selected)) $selected=dol_getDefaultFormat(); - - // Show pdf format - - print ''; - - print ''; - print ''; - print ''; - print ''; - - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("DictionaryPaperFormat").''; - print $formadmin->select_paper_format($selected, 'MAIN_PDF_FORMAT'); - print '
'.$langs->trans("MAIN_PDF_MARGIN_LEFT").''; - print ''; - print '
'.$langs->trans("MAIN_PDF_MARGIN_RIGHT").''; - print ''; - print '
'.$langs->trans("MAIN_PDF_MARGIN_TOP").''; - print ''; - print '
'.$langs->trans("MAIN_PDF_MARGIN_BOTTOM").''; - print ''; - print '
'; - print '
'; - - print '
'; - - - // Addresses - print load_fiche_titre($langs->trans("PDFAddressForging"), '', ''); - - print '
'; - print ''; - print ''; - - // Hide VAT Intra on address - - print ''; - - // Show prof id in address into pdf - for($i=1; $i<=6; $i++) - { - if (! $noCountryCode) - { - $pid=$langs->transcountry("ProfId".$i, $mysoc->country_code); - if ($pid == '-') $pid=false; - } - else - { - $pid = img_warning().' '.$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CompanyCountry")).''; - } - if ($pid) - { - print ''; - } - } - - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("ShowVATIntaInAddress").''; - print $form->selectyesno('MAIN_TVAINTRA_NOT_IN_ADDRESS', (! empty($conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS))?$conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS:0, 1); - print '
'.$langs->trans("ShowProfIdInAddress").' - '.$pid.''; - $keyforconstant = 'MAIN_PROFID'.$i.'_IN_ADDRESS'; - print $form->selectyesno($keyforconstant, isset($conf->global->$keyforconstant)?$conf->global->$keyforconstant:0, 1, $noCountryCode); - print '
'; - print '
'; - - - print '
'; - - - // Localtaxes - $locales =''; - $text=''; - if ($mysoc->useLocalTax(1) || $mysoc->useLocalTax(2)) - { - if ($mysoc->useLocalTax(1)) - { - $locales = $langs->transcountry("LT1", $mysoc->country_code); - $text ='' . $langs->trans("HideLocalTaxOnPDF", $langs->transcountry("LT1", $mysoc->country_code)) . ''; - $text.= $form->selectyesno('MAIN_PDF_MAIN_HIDE_SECOND_TAX', (!empty($conf->global->MAIN_PDF_MAIN_HIDE_SECOND_TAX)) ? $conf->global->MAIN_PDF_MAIN_HIDE_SECOND_TAX : 0, 1); - $text .= ''; - } - - if ($mysoc->useLocalTax(2)) - { - $locales.=($locales?' & ':'').$langs->transcountry("LT2", $mysoc->country_code); - - $text.= '' . $langs->trans("HideLocalTaxOnPDF", $langs->transcountry("LT2", $mysoc->country_code)) . ''; - $text.= $form->selectyesno('MAIN_PDF_MAIN_HIDE_THIRD_TAX', (!empty($conf->global->MAIN_PDF_MAIN_HIDE_THIRD_TAX)) ? $conf->global->MAIN_PDF_MAIN_HIDE_THIRD_TAX : 0, 1); - $text.= ''; - } - } - - $title = $langs->trans("PDFRulesForSalesTax"); - if ($mysoc->useLocalTax(1) || $mysoc->useLocalTax(2)) - { - $title.=' - '.$langs->trans("PDFLocaltax", $locales); - } - - print load_fiche_titre($title, '', ''); - - print ''; - print ''; - - // Hide any information on Sale tax / VAT - - print ''; - - // Locataxes - print $text; - - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("HideAnyVATInformationOnPDF").''; - print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT', (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT))?$conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT:0, 1); - print '
'; - print '
'; - - - // Other - print load_fiche_titre($langs->trans("Other"), '', ''); - - print '
'; - print ''; - print ''; - - //Desc - - print ''; - - //Ref - - print ''; - - //Details - - print ''; - - //Invert sender and recipient - - print ''; - - // Place customer adress to the ISO location - - print ''; - - - print ''; - - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("HideDescOnPDF").''; - print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_DESC', (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC))?$conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC:0, 1); - print '
'.$langs->trans("HideRefOnPDF").''; - print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_REF', (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF))?$conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF:0, 1); - print '
'.$langs->trans("HideDetailsOnPDF").''; - print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS', (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS))?$conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS:0, 1); - print '
'.$langs->trans("SwapSenderAndRecipientOnPDF").''; - print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0, 1); - print '
'.$langs->trans("PlaceCustomerAddressToIsoLocation").''; - print $form->selectyesno('MAIN_PDF_USE_ISO_LOCATION', (! empty($conf->global->MAIN_PDF_USE_ISO_LOCATION))?$conf->global->MAIN_PDF_USE_ISO_LOCATION:0, 1); - print '
'.$langs->trans("ShowDetailsInPDFPageFoot").''; - print $form->selectarray('MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS', $arraydetailsforpdffoot, $conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS); - print '
'; - print '
'; - - print '
'; - print ''; - print '   '; - print ''; - print '
'; - - print '
'; - print '
'; -} -else // Show -{ - // Misc options - print load_fiche_titre($langs->trans("DictionaryPaperFormat"), '', ''); - - - print '
'; - print ''; - print ''; - - // Show pdf format - - print ''; - - print ''; - print ''; - print ''; - print ''; - - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("DictionaryPaperFormat").''; - - $pdfformatlabel=''; - if (empty($conf->global->MAIN_PDF_FORMAT)) - { - include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; - $pdfformatlabel=dol_getDefaultFormat(); - } - else $pdfformatlabel=$conf->global->MAIN_PDF_FORMAT; - if (! empty($pdfformatlabel)) - { - $sql="SELECT code, label, width, height, unit FROM ".MAIN_DB_PREFIX."c_paper_format"; - $sql.=" WHERE code LIKE '%".$db->escape($pdfformatlabel)."%'"; - - $resql=$db->query($sql); - if ($resql) - { - $obj=$db->fetch_object($resql); - $paperKey = $langs->trans('PaperFormat'.$obj->code); - $unitKey = $langs->trans('SizeUnit'.$obj->unit); - $pdfformatlabel = ($paperKey == 'PaperFormat'.$obj->code ? $obj->label : $paperKey).' - '.round($obj->width).'x'.round($obj->height).' '.($unitKey == 'SizeUnit'.$obj->unit ? $obj->unit : $unitKey); - } - } - print $pdfformatlabel; - print '
'.$langs->trans("MAIN_PDF_MARGIN_LEFT").''; - print empty($conf->global->MAIN_PDF_MARGIN_LEFT)?10:$conf->global->MAIN_PDF_MARGIN_LEFT; - print '
'.$langs->trans("MAIN_PDF_MARGIN_RIGHT").''; - print empty($conf->global->MAIN_PDF_MARGIN_RIGHT)?10:$conf->global->MAIN_PDF_MARGIN_RIGHT; - print '
'.$langs->trans("MAIN_PDF_MARGIN_TOP").''; - print empty($conf->global->MAIN_PDF_MARGIN_TOP)?10:$conf->global->MAIN_PDF_MARGIN_TOP; - print '
'.$langs->trans("MAIN_PDF_MARGIN_BOTTOM").''; - print empty($conf->global->MAIN_PDF_MARGIN_BOTTOM)?10:$conf->global->MAIN_PDF_MARGIN_BOTTOM; - print '
'; - print '
'; - - print '
'; - - print load_fiche_titre($langs->trans("PDFAddressForging"), '', ''); - - print '
'; - print ''; - print ''; - - // Hide Intra VAT on address - - print ''; - - // Show prof id in address into pdf - for ($i=1; $i<=6; $i++) + if (! $noCountryCode) { - if (! $noCountryCode) - { - $pid=$langs->transcountry("ProfId".$i, $mysoc->country_code); - if ($pid == '-') $pid=false; - } - else - { - $pid = img_warning().' '.$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CompanyCountry")).''; - } - if ($pid) - { - print ''; - } - } - - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("ShowVATIntaInAddress").''; - print yn($conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS, 1); - print '
'.$langs->trans("ShowProfIdInAddress").' - '.$pid.''; - $keyforconstant = 'MAIN_PROFID'.$i.'_IN_ADDRESS'; - print yn($conf->global->$keyforconstant, 1); - print '
'."\n"; - print '
'; - - print '
'; - - // Localtaxes - $locales =''; - $text=''; - if ($mysoc->useLocalTax(1) || $mysoc->useLocalTax(2)) - { - if ($mysoc->useLocalTax(1)) - { - $locales = $langs->transcountry("LT1", $mysoc->country_code); - $text ='' . $langs->trans("HideLocalTaxOnPDF", $langs->transcountry("LT1", $mysoc->country_code)) . ''; - $text .= yn($conf->global->MAIN_PDF_MAIN_HIDE_SECOND_TAX, 1); - $text .= ''; - } - - if ($mysoc->useLocalTax(2)) - { - $locales.=($locales?' & ':'').$langs->transcountry("LT2", $mysoc->country_code); - - $text.= '' . $langs->trans("HideLocalTaxOnPDF", $langs->transcountry("LT2", $mysoc->country_code)) . ''; - $text.= yn($conf->global->MAIN_PDF_MAIN_HIDE_THIRD_TAX, 1); - $text.= ''; - } - } - - // Sales TAX / VAT information - $title=$langs->trans("PDFRulesForSalesTax", $locales); - if ($mysoc->useLocalTax(1) || $mysoc->useLocalTax(2)) $title.=' - '.$langs->trans("PDFLocaltax", $locales); - - print load_fiche_titre($title, '', ''); - - print ''; - print ''; - - print ''; - - print $text; - - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("HideAnyVATInformationOnPDF").''; - print yn($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT, 1); - print '
'; - print '
'; - - - // Other - print load_fiche_titre($langs->trans("Other"), '', ''); - - print '
'; - print ''; - print ''; - - // Encrypt and protect PDF - - print ''; - print ''; - print ''; - print '"; - - print ""; - print ''; - - // Hide Desc - - print ''; - - // Hide Ref - - print ''; - - // Hide Details - - print ''; - - // Invert sender and recipient - print ''; - - // Use French location - print ''; - - - print ''; - - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; - $text = $langs->trans("ProtectAndEncryptPdfFiles"); - $desc = $form->textwithpicto($text, $langs->transnoentities("ProtectAndEncryptPdfFilesDesc"), 1); - print $desc; - print ''; - if($conf->global->PDF_SECURITY_ENCRYPTION == 1) - { - print img_picto($langs->trans("Active"), 'tick'); - } - print ''; - if (empty($conf->global->PDF_SECURITY_ENCRYPTION)) - { - print ''.$langs->trans("Activate").''; + $pid=$langs->transcountry("ProfId".$i, $mysoc->country_code); + if ($pid == '-') $pid=false; } else { - print ''.$langs->trans("Disable").''; + $pid = img_warning().' '.$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CompanyCountry")).''; } - print "
'.$langs->trans("HideDescOnPDF").''; - print yn($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC, 1); - print '
'.$langs->trans("HideRefOnPDF").''; - print yn($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF, 1); - print '
'.$langs->trans("HideDetailsOnPDF").''; - print yn($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS, 1); - print '
'.$langs->trans("SwapSenderAndRecipientOnPDF").''; - print yn($conf->global->MAIN_INVERT_SENDER_RECIPIENT, 1); - print '
'.$langs->trans("PlaceCustomerAddressToIsoLocation").''; - print yn($conf->global->MAIN_PDF_USE_ISO_LOCATION, 1); - print '
'.$langs->trans("ShowDetailsInPDFPageFoot").''; - print $arraydetailsforpdffoot[($conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS ? $conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS : 0)]; - print '
'; - print '
'; - - - /* - * Library - */ - - print '
'; - print load_fiche_titre($langs->trans("Library"), '', ''); - - print '
'; - print ''."\n"; - - print ''."\n"; - print ''."\n"; - print ''."\n"; - print "\n"; - - print ''."\n"; - print ''."\n"; - print ''; } - if (class_exists('TCPDF')) - { - if ($i) print ' + '; - print 'TCPDF'; - print ' ('.@constant('TCPDF_PATH').')'; - $i++; - } - if (class_exists('FPDI')) - { - if ($i) print ' + '; - print 'FPDI'; - print ' ('.@constant('FPDI_PATH').')'; - $i++; - } - if (class_exists('TCPDI')) - { - if ($i) print ' + '; - print 'TCPDI'; - print ' ('.@constant('TCPDI_PATH').')'; - $i++; - } - print ''."\n"; - print ''."\n"; - - print "
'.$langs->trans("Name").''.$langs->trans("Value").'
'.$langs->trans("LibraryToBuildPDF").''; - $i=0; - $pdf=pdf_getInstance('A4'); - if (class_exists('FPDF') && ! class_exists('TCPDF')) + if ($pid) { - if ($i) print ' + '; - print 'FPDF'; - print ' ('.@constant('FPDF_PATH').')'; - $i++; + print '
'.$langs->trans("ShowProfIdInAddress").' - '.$pid.''; + $keyforconstant = 'MAIN_PROFID'.$i.'_IN_ADDRESS'; + print $form->selectyesno($keyforconstant, isset($conf->global->$keyforconstant)?$conf->global->$keyforconstant:0, 1, $noCountryCode); + print '
\n"; - print '
'; - - print '
'; - print ''.$langs->trans("Modify").''; - print '
'; - print '
'; } +print ''; +print '
'; + + +print '
'; + + +// Localtaxes +$locales =''; +$text=''; +if ($mysoc->useLocalTax(1) || $mysoc->useLocalTax(2)) +{ + if ($mysoc->useLocalTax(1)) + { + $locales = $langs->transcountry("LT1", $mysoc->country_code); + $text ='' . $langs->trans("HideLocalTaxOnPDF", $langs->transcountry("LT1", $mysoc->country_code)) . ''; + $text.= $form->selectyesno('MAIN_PDF_MAIN_HIDE_SECOND_TAX', (!empty($conf->global->MAIN_PDF_MAIN_HIDE_SECOND_TAX)) ? $conf->global->MAIN_PDF_MAIN_HIDE_SECOND_TAX : 0, 1); + $text .= ''; + } + + if ($mysoc->useLocalTax(2)) + { + $locales.=($locales?' & ':'').$langs->transcountry("LT2", $mysoc->country_code); + + $text.= '' . $langs->trans("HideLocalTaxOnPDF", $langs->transcountry("LT2", $mysoc->country_code)) . ''; + $text.= $form->selectyesno('MAIN_PDF_MAIN_HIDE_THIRD_TAX', (!empty($conf->global->MAIN_PDF_MAIN_HIDE_THIRD_TAX)) ? $conf->global->MAIN_PDF_MAIN_HIDE_THIRD_TAX : 0, 1); + $text.= ''; + } +} + +$title = $langs->trans("PDFRulesForSalesTax"); +if ($mysoc->useLocalTax(1) || $mysoc->useLocalTax(2)) +{ + $title.=' - '.$langs->trans("PDFLocaltax", $locales); +} + +print load_fiche_titre($title, '', ''); + +print ''; +print ''; + +// Hide any information on Sale tax / VAT + +print ''; + +// Locataxes +print $text; + +print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("HideAnyVATInformationOnPDF").''; +print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT', (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT))?$conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT:0, 1); +print '
'; +print '
'; + + +// Other +print load_fiche_titre($langs->trans("Other"), '', ''); + +print '
'; +print ''; +print ''; + +//Desc + +print ''; + +//Ref + +print ''; + +//Details + +print ''; + +//Invert sender and recipient + +print ''; + +// Place customer adress to the ISO location + +print ''; + + +print ''; + +print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("HideDescOnPDF").''; +print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_DESC', (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC))?$conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC:0, 1); +print '
'.$langs->trans("HideRefOnPDF").''; +print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_REF', (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF))?$conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF:0, 1); +print '
'.$langs->trans("HideDetailsOnPDF").''; +print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS', (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS))?$conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS:0, 1); +print '
'.$langs->trans("SwapSenderAndRecipientOnPDF").''; +print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0, 1); +print '
'.$langs->trans("PlaceCustomerAddressToIsoLocation").''; +print $form->selectyesno('MAIN_PDF_USE_ISO_LOCATION', (! empty($conf->global->MAIN_PDF_USE_ISO_LOCATION))?$conf->global->MAIN_PDF_USE_ISO_LOCATION:0, 1); +print '
'.$langs->trans("ShowDetailsInPDFPageFoot").''; +print $form->selectarray('MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS', $arraydetailsforpdffoot, $conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS); +print '
'; +print '
'; + + +/* + * Library + */ + +print '
'; +print load_fiche_titre($langs->trans("Library"), '', ''); + +print '
'; +print ''."\n"; + +print ''."\n"; +print ''."\n"; +print ''."\n"; +print "\n"; + +print ''."\n"; +print ''."\n"; +print ''."\n"; +print ''."\n"; + +print "
'.$langs->trans("Name").''.$langs->trans("Value").'
'.$langs->trans("LibraryToBuildPDF").''; +$i=0; +$pdf=pdf_getInstance('A4'); +if (class_exists('FPDF') && ! class_exists('TCPDF')) +{ + if ($i) print ' + '; + print 'FPDF'; + print ' ('.@constant('FPDF_PATH').')'; + $i++; +} +if (class_exists('TCPDF')) +{ + if ($i) print ' + '; + print 'TCPDF'; + print ' ('.@constant('TCPDF_PATH').')'; + $i++; +} +if (class_exists('FPDI')) +{ + if ($i) print ' + '; + print 'FPDI'; + print ' ('.@constant('FPDI_PATH').')'; + $i++; +} +if (class_exists('TCPDI')) +{ + if ($i) print ' + '; + print 'TCPDI'; + print ' ('.@constant('TCPDI_PATH').')'; + $i++; +} +print '
\n"; +print '
'; + + +print '
'; +print ''; +print '
'; + +print ''; + + // End of page llxFooter(); $db->close(); diff --git a/htdocs/admin/security_other.php b/htdocs/admin/security_other.php index 28c3db6f1d3..c9bf1ba4357 100644 --- a/htdocs/admin/security_other.php +++ b/htdocs/admin/security_other.php @@ -88,7 +88,7 @@ llxHeader('', $langs->trans("Miscellaneous"), $wikihelp); print load_fiche_titre($langs->trans("SecuritySetup"), '', 'title_setup'); -print $langs->trans("MiscellaneousDesc")."
\n"; +print ''.$langs->trans("MiscellaneousDesc")."
\n"; print "
\n"; diff --git a/htdocs/admin/sms.php b/htdocs/admin/sms.php index e08c2c5eca8..73cad8f69ad 100644 --- a/htdocs/admin/sms.php +++ b/htdocs/admin/sms.php @@ -147,7 +147,7 @@ llxHeader('', $langs->trans("Setup"), $wikihelp); print load_fiche_titre($langs->trans("SmsSetup"), '', 'title_setup'); -print $langs->trans("SmsDesc")."
\n"; +print ''.$langs->trans("SmsDesc")."
\n"; print "
\n"; // List of sending methods diff --git a/htdocs/admin/translation.php b/htdocs/admin/translation.php index ad7a2278991..ba2dde77bec 100644 --- a/htdocs/admin/translation.php +++ b/htdocs/admin/translation.php @@ -229,7 +229,7 @@ print load_fiche_titre($langs->trans("Translation"), $enabledisablehtml, 'title_ $current_language_code=$langs->defaultlang; $s=picto_from_langcode($current_language_code); -print $form->textwithpicto($langs->trans("CurrentUserLanguage").': '.$s.' '.$current_language_code.'', $langs->trans("TranslationDesc")).'
'; +print ''.$form->textwithpicto($langs->trans("CurrentUserLanguage").': '.$s.' '.$current_language_code.'', $langs->trans("TranslationDesc")).'
'; print '
'; diff --git a/htdocs/core/boxes/box_accountancy_suspense_account.php b/htdocs/core/boxes/box_accountancy_suspense_account.php index 9740de82fbc..03c0f0ab7ae 100644 --- a/htdocs/core/boxes/box_accountancy_suspense_account.php +++ b/htdocs/core/boxes/box_accountancy_suspense_account.php @@ -108,14 +108,14 @@ class box_accountancy_suspense_account extends ModeleBoxes ); } else { $this->info_box_contents[0][0] = array( - 'td' => 'class="nohover opacitymedium left"', - 'text' => $langs->trans("SuspenseAccountNotDefined") + 'td' => 'class="nohover"', + 'text' => ''.$langs->trans("SuspenseAccountNotDefined").'' ); } } else { $this->info_box_contents[0][0] = array( - 'td' => 'class="nohover opacitymedium left"', - 'text' => $langs->trans("ReadPermissionNotAllowed") + 'td' => 'class="nohover"', + 'text' => ''.$langs->trans("ReadPermissionNotAllowed").'' ); } } diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 5d9a637de58..490d033dbf3 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -702,8 +702,8 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM $warnpicto = ' '.img_warning($langs->trans("WarningMandatorySetupNotComplete")); } $newmenu->add("/admin/modules.php?mainmenu=home", $langs->trans("Modules").$warnpicto, 1); - $newmenu->add("/admin/menus.php?mainmenu=home", $langs->trans("Menus"), 1); $newmenu->add("/admin/ihm.php?mainmenu=home", $langs->trans("GUISetup"), 1); + $newmenu->add("/admin/menus.php?mainmenu=home", $langs->trans("Menus"), 1); $newmenu->add("/admin/translation.php?mainmenu=home", $langs->trans("Translation"), 1); $newmenu->add("/admin/defaultvalues.php?mainmenu=home", $langs->trans("DefaultValues"), 1); From c3aba5f1a32b9609c4597bd51a529f28b49e8ed8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 14:53:30 +0200 Subject: [PATCH 207/980] FIX #12083 --- htdocs/debugbar/class/TraceableDB.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/debugbar/class/TraceableDB.php b/htdocs/debugbar/class/TraceableDB.php index d4bfd291602..20b5d47f0e8 100644 --- a/htdocs/debugbar/class/TraceableDB.php +++ b/htdocs/debugbar/class/TraceableDB.php @@ -333,9 +333,9 @@ class TraceableDB extends DoliDB 'sql' => $sql, 'duration' => $duration, 'memory_usage' => $memoryDelta, - 'is_success' => $resql, - 'error_code' => ! $resql ? $this->db->lasterrno() : null, - 'error_message' => ! $resql ? $this->db->lasterror() : null + 'is_success' => $resql ? true : false, + 'error_code' => $resql ? null : $this->db->lasterrno(), + 'error_message' => $resql ? null : $this->db->lasterror() ); } From 868bfb518b80c17b1253a8e485b5282bf3392290 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 15:08:10 +0200 Subject: [PATCH 208/980] FIX #11702 FIX #12088 --- htdocs/bom/tpl/objectline_create.tpl.php | 5 +++-- htdocs/core/tpl/objectline_create.tpl.php | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/htdocs/bom/tpl/objectline_create.tpl.php b/htdocs/bom/tpl/objectline_create.tpl.php index e266c142480..b77d713268f 100644 --- a/htdocs/bom/tpl/objectline_create.tpl.php +++ b/htdocs/bom/tpl/objectline_create.tpl.php @@ -100,14 +100,15 @@ if ($nolinesbefore) { $filtertype=''; if (! empty($object->element) && $object->element == 'contrat' && empty($conf->global->CONTRACT_SUPPORT_PRODUCTS)) $filtertype='1'; + $statustoshow = -1; if (! empty($conf->global->ENTREPOT_EXTRA_STATUS)) { // hide products in closed warehouse, but show products for internal transfer - $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, 1, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, 'warehouseopen,warehouseinternal', GETPOST('combinations', 'array')); + $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, 'warehouseopen,warehouseinternal', GETPOST('combinations', 'array')); } else { - $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, 1, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, '', GETPOST('combinations', 'array')); + $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, '', GETPOST('combinations', 'array')); } echo ''; diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index 6bad5bb2ac5..ee34654f2f2 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -38,7 +38,6 @@ if (empty($object) || ! is_object($object)) { exit; } - $usemargins=0; if (! empty($conf->margin->enabled) && ! empty($object->element) && in_array($object->element, array('facture','facturerec','propal','commande'))) { @@ -248,14 +247,15 @@ if ($nolinesbefore) { if (empty($senderissupplier)) { + $statustoshow = 1; if (! empty($conf->global->ENTREPOT_EXTRA_STATUS)) { // hide products in closed warehouse, but show products for internal transfer - $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, -1, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, 'warehouseopen,warehouseinternal', GETPOST('combinations', 'array')); + $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, 'warehouseopen,warehouseinternal', GETPOST('combinations', 'array')); } else { - $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, -1, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, '', GETPOST('combinations', 'array')); + $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, '', GETPOST('combinations', 'array')); } if (! empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS)) From 85a4bac9e078e3c8e18ca72c2f34752b1cff0109 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 15:22:12 +0200 Subject: [PATCH 209/980] Better translation --- htdocs/langs/en_US/admin.lang | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index bc9981faf3f..5996d643624 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -870,9 +870,9 @@ Permission1251=Run mass imports of external data into database (data load) Permission1321=Export customer invoices, attributes and payments Permission1322=Reopen a paid bill Permission1421=Export sales orders and attributes -Permission2401=Read actions (events or tasks) linked to his account -Permission2402=Create/modify actions (events or tasks) linked to his account -Permission2403=Delete actions (events or tasks) linked to his account +Permission2401=Read actions (events or tasks) linked to his user account (if owner of event) +Permission2402=Create/modify actions (events or tasks) linked to his user account (if owner of event) +Permission2403=Delete actions (events or tasks) linked to his user account (if owner of event) Permission2411=Read actions (events or tasks) of others Permission2412=Create/modify actions (events or tasks) of others Permission2413=Delete actions (events or tasks) of others From 777c297353431b777f1d769ea29f735e2b16610a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 15:42:27 +0200 Subject: [PATCH 210/980] FIX #12054 --- .../compta/facture/invoicetemplate_list.php | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php index 5da37d46fd5..661f9604500 100644 --- a/htdocs/compta/facture/invoicetemplate_list.php +++ b/htdocs/compta/facture/invoicetemplate_list.php @@ -217,7 +217,17 @@ $sql = "SELECT s.nom as name, s.rowid as socid, f.rowid as facid, f.titre, f.tot $sql.= " f.nb_gen_done, f.nb_gen_max, f.date_last_gen, f.date_when, f.suspended,"; $sql.= " f.datec, f.tms,"; $sql.= " f.fk_cond_reglement, f.fk_mode_reglement"; -$sql.= " FROM ".MAIN_DB_PREFIX."societe as s,".MAIN_DB_PREFIX."facture_rec as f"; +// 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 : ''); +// Add fields from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook +$sql.=preg_replace('/^,/', '', $hookmanager->resPrint); +$sql =preg_replace('/,\s*$/', '', $sql); + +$sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."facture_rec as f"; +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture_rec_extrafields as ef ON ef.fk_object = f.rowid"; if (! $user->rights->societe->client->voir && ! $socid) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; } @@ -492,6 +502,8 @@ if ($resql) if (! empty($arrayfields['f.date_when']['checked'])) print_liste_field_titre($arrayfields['f.date_when']['label'], $_SERVER['PHP_SELF'], "f.date_when", "", $param, 'align="center"', $sortfield, $sortorder); if (! empty($arrayfields['f.datec']['checked'])) print_liste_field_titre($arrayfields['f.datec']['label'], $_SERVER['PHP_SELF'], "f.datec", "", $param, 'align="center"', $sortfield, $sortorder); if (! empty($arrayfields['f.tms']['checked'])) print_liste_field_titre($arrayfields['f.tms']['label'], $_SERVER['PHP_SELF'], "f.tms", "", $param, 'align="center"', $sortfield, $sortorder); + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; if (! empty($arrayfields['status']['checked'])) print_liste_field_titre($arrayfields['status']['label'], $_SERVER['PHP_SELF'], "f.suspended,f.frequency", "", $param, 'align="center"', $sortfield, $sortorder); print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'nomaxwidthsearch ')."\n"; print "\n"; @@ -630,6 +642,15 @@ if ($resql) print ''; if (! $i) $totalarray['nbfield']++; } + + $obj = $objp; + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$objp, 'i'=>$i, 'totalarray'=>&$totalarray); + $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Status if (! empty($arrayfields['status']['checked'])) { print ''; From c6a796d270efaaca1914e41540f13863b579a1ee Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 15:45:32 +0200 Subject: [PATCH 211/980] Try to fix #12097 --- htdocs/core/db/pgsql.class.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php index 637aac02545..2347d3d77e5 100644 --- a/htdocs/core/db/pgsql.class.php +++ b/htdocs/core/db/pgsql.class.php @@ -199,6 +199,12 @@ class DoliDBPgsql extends DoliDB $line=$newline; } + if (preg_match('/[\s\t\(]*(\w*)[\s\t]+bigint.*auto_increment/i', $line, $reg)) { + $newline=preg_replace('/([\s\t\(]*)([a-zA-Z_0-9]*)[\s\t]+int.*auto_increment[^,]*/i', '\\1 \\2 BIGSERIAL PRIMARY KEY', $line); + //$line = "-- ".$line." replaced by --\n".$newline; + $line=$newline; + } + // tinyint type conversion $line=preg_replace('/tinyint\(?[0-9]*\)?/', 'smallint', $line); $line=preg_replace('/tinyint/i', 'smallint', $line); From b5a2d373158096dcc27df9d33a1497059b5e6c3a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 16:10:09 +0200 Subject: [PATCH 212/980] Fix phpunit of BOM --- htdocs/bom/class/bom.class.php | 1 + test/phpunit/BOMTest.php | 149 ++++++++++++++++++++------------- 2 files changed, 94 insertions(+), 56 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 3835baf3b25..44370b40720 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -953,6 +953,7 @@ class BOM extends CommonObject public function initAsSpecimen() { $this->initAsSpecimenCommon(); + $this->ref = 'BOM-123'; $this->date = $this->date_creation; } diff --git a/test/phpunit/BOMTest.php b/test/phpunit/BOMTest.php index 551722aadd2..73603a5f336 100644 --- a/test/phpunit/BOMTest.php +++ b/test/phpunit/BOMTest.php @@ -22,89 +22,126 @@ * \brief PHPUnit test for BillOfMaterials class. */ -namespace test\unit; +global $conf,$user,$langs,$db; +//define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver +//require_once 'PHPUnit/Autoload.php'; +require_once dirname(__FILE__).'/../../htdocs/master.inc.php'; +require_once dirname(__FILE__).'/../../htdocs/bom/class/bom.class.php'; + +if (empty($user->id)) { + print "Load permissions for admin user nb 1\n"; + $user->fetch(1); + $user->getrights(); +} +$conf->global->MAIN_DISABLE_ALL_MAILS=1; + +$langs->load("main"); + /** * Class BillOfMaterialsTest * @package Testbillofmaterials */ -class BOMTest extends \PHPUnit\Framework\TestCase +class BOMTest extends PHPUnit\Framework\TestCase { + protected $savconf; + protected $savuser; + protected $savlangs; + protected $savdb; + /** - * Global test setup - * @return void + * Constructor + * We save global variables into local variables + * + * @return BOMTest */ + public function __construct() + { + parent::__construct(); + + //$this->sharedFixture + global $conf,$user,$langs,$db; + $this->savconf=$conf; + $this->savuser=$user; + $this->savlangs=$langs; + $this->savdb=$db; + + print __METHOD__." db->type=".$db->type." user->id=".$user->id; + //print " - db ".$db->db; + print "\n"; + } + + // Static methods public static function setUpBeforeClass() { - fwrite(STDOUT, __METHOD__ . "\n"); + global $conf,$user,$langs,$db; + $db->begin(); // This is to have all actions inside a transaction even if test launched without suite. + + if (! empty($conf->global->MAIN_FIRSTNAME_NAME_POSITION)) { + print "\n".__METHOD__." Company must be setup to have name-firstname in order 'Firstname Lastname'\n"; + die(); + } + if (! empty($conf->global->MAIN_MODULE_LDAP)) { print "\n".__METHOD__." module LDAP must be disabled.\n"; die(); } + if (! empty($conf->global->MAIN_MODULE_MAILMANSPIP)) { print "\n".__METHOD__." module MailmanSpip must be disabled.\n"; die(); } + + print __METHOD__."\n"; + } + + // tear down after class + public static function tearDownAfterClass() + { + global $conf,$user,$langs,$db; + $db->rollback(); + + print __METHOD__."\n"; } /** - * Unit test setup - * @return void + * Init phpunit tests + * + * @return void */ protected function setUp() { - fwrite(STDOUT, __METHOD__ . "\n"); + global $conf,$user,$langs,$db; + $conf=$this->savconf; + $user=$this->savuser; + $langs=$this->savlangs; + $db=$this->savdb; + + print __METHOD__."\n"; } /** - * Verify pre conditions - * @return void - */ - protected function assertPreConditions() - { - fwrite(STDOUT, __METHOD__ . "\n"); - } - - /** - * A sample test - * @return bool - */ - public function testSomething() - { - fwrite(STDOUT, __METHOD__ . "\n"); - // TODO: test something - $this->assertTrue(true); - } - - /** - * Verify post conditions - * @return void - */ - protected function assertPostConditions() - { - fwrite(STDOUT, __METHOD__ . "\n"); - } - - /** - * Unit test teardown - * @return void + * End phpunit tests + * + * @return void */ protected function tearDown() { - fwrite(STDOUT, __METHOD__ . "\n"); + print __METHOD__."\n"; } /** - * Global test teardown - * @return void - */ - public static function tearDownAfterClass() - { - fwrite(STDOUT, __METHOD__ . "\n"); - } - - /** - * Unsuccessful test + * testBOMCreate * - * @param Exception $e Exception - * @return void - * @throws Exception + * @return int */ - protected function onNotSuccessfulTest(Exception $e) + public function testBOMCreate() { - fwrite(STDOUT, __METHOD__ . "\n"); - throw $e; + global $conf,$user,$langs,$db; + $conf=$this->savconf; + $user=$this->savuser; + $langs=$this->savlangs; + $db=$this->savdb; + + $localobject=new BOM($this->savdb); + $localobject->initAsSpecimen(); + $result=$localobject->create($user); + + print __METHOD__." result=".$result."\n"; + $this->assertLessThan($result, 0); + + return $localobject; } } From 7b81ffe3fe618eabe3219f0111d620b6cbac20f5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 16:29:16 +0200 Subject: [PATCH 213/980] Update list.php --- htdocs/expensereport/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index 2b4a2a9a983..ecf32df6740 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -281,7 +281,7 @@ $sql.= " d.date_debut, d.date_fin, d.date_create, d.tms as date_modif, d.date_va $sql.= " u.rowid as id_user, u.firstname, u.lastname, u.login, u.email, u.statut, u.photo"; // 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 : ''); + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); } // Add fields from hooks $parameters=array(); From d9e434965a87a0e163f9b5494a49255173d5803d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 16:29:44 +0200 Subject: [PATCH 214/980] Update list.php --- htdocs/holiday/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index 882f59dbee6..b86dd2864b5 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -275,7 +275,7 @@ $sql.= " ua.statut as validator_statut,"; $sql.= " ua.photo as validator_photo"; // 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 : ''); + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); } // Add fields from hooks $parameters=array(); From fbc4e3b441515c482338c9d137f89cc7ee584f81 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 16:37:10 +0200 Subject: [PATCH 215/980] Update listbyaccount.php --- htdocs/accountancy/bookkeeping/listbyaccount.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php index 2b9fc4fde29..640cf87d496 100644 --- a/htdocs/accountancy/bookkeeping/listbyaccount.php +++ b/htdocs/accountancy/bookkeeping/listbyaccount.php @@ -397,25 +397,27 @@ while ($i < min($num, $limit)) $i++; } -// Affiche un Sous-Total du dernier compte comptable affiché +// Show sub-total of last shown account print ''; print ''.$langs->trans("SubTotal").':'.price($sous_total_debit).''.price($sous_total_credit).''; -print ''; +print ''; print price($sous_total_debit - $sous_total_credit); -print '\n'; +print ''; +print ''; print ''; -// Affiche le Total +// Show total print ''; print ''.$langs->trans("Total").':'; -print ''; +print ''; print price($total_debit); print ''; -print ''; +print ''; print price($total_credit); print ''; -print ''; +print ''; +print ''; print ''; print ""; From b276abea26c58e78320137fc22a7e1d431ff71bb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 16:49:58 +0200 Subject: [PATCH 216/980] Fix missing token in form Fix date lost after search --- htdocs/accountancy/bookkeeping/list.php | 4 +-- .../accountancy/bookkeeping/listbyaccount.php | 31 +++++++++++-------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 5cf64a70e67..b5f0c06738a 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -502,9 +502,9 @@ if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&con if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; print '
'; +print ''; print ''; if ($optioncss != '') print ''; -print ''; print ''; print ''; print ''; @@ -542,7 +542,7 @@ if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint; else $moreforfilter = $hookmanager->resPrint; print '
'; -print ''; +print '
'; // Filters lines print ''; diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php index 640cf87d496..d91772a6ab3 100644 --- a/htdocs/accountancy/bookkeeping/listbyaccount.php +++ b/htdocs/accountancy/bookkeeping/listbyaccount.php @@ -37,9 +37,6 @@ require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; // Load translation files required by the page $langs->loadLangs(array("accountancy")); -$page = GETPOST("page"); -$sortorder = GETPOST("sortorder"); -$sortfield = GETPOST("sortfield"); $action = GETPOST('action', 'alpha'); $search_date_start = dol_mktime(0, 0, 0, GETPOST('search_date_startmonth', 'int'), GETPOST('search_date_startday', 'int'), GETPOST('search_date_startyear', 'int')); $search_date_end = dol_mktime(0, 0, 0, GETPOST('search_date_endmonth', 'int'), GETPOST('search_date_endday', 'int'), GETPOST('search_date_endyear', 'int')); @@ -71,9 +68,9 @@ $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; if ($sortorder == "") $sortorder = "ASC"; -if ($sortfield == "") $sortfield = "t.doc_date"; +if ($sortfield == "") $sortfield = "t.doc_date,t.rowid"; -if (empty($search_date_start) && empty($search_date_end)) { +if (empty($search_date_start) && empty($search_date_end) && GETPOSTISSET('search_date_startday') && GETPOSTISSET('search_date_startmonth') && GETPOSTISSET('search_date_starthour')) { $sql = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear "; $sql.= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."'"; $sql.= $db->plimit(1); @@ -255,6 +252,14 @@ if ($action == 'delbookkeepingyear') { print ''; +print ''; +print ''; +if ($optioncss != '') print ''; +print ''; +print ''; +print ''; +print ''; + $newcardbutton.= dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param); $newcardbutton.= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', './card.php?action=create'); @@ -265,12 +270,11 @@ if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($lim print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $result, $nbtotalofrecords, 'title_accountancy', 0, $viewflat.$newcardbutton, '', $limit); // Reverse sort order -if ( preg_match('/^asc/i', $sortorder) ) - $sortorder = "asc"; -else - $sortorder = "desc"; +if (preg_match('/^asc/i', $sortorder)) $sortorder = "asc"; +else $sortorder = "desc"; -print '
'; +print '
'; +print '
'; print ''; print ''; +print ''; print ''; print_liste_field_titre("AccountAccountingShort", $_SERVER['PHP_SELF']); @@ -313,8 +318,6 @@ print_liste_field_titre("Codejournal", $_SERVER['PHP_SELF'], "t.code_journal", " print_liste_field_titre('', $_SERVER["PHP_SELF"], "", $param, "", 'width="60"', $sortfield, $sortorder, 'center '); print "\n"; -print ''; - $total_debit = 0; $total_credit = 0; @@ -400,7 +403,7 @@ while ($i < min($num, $limit)) // Show sub-total of last shown account print ''; print ''; -print ''; print ''; @@ -421,6 +424,8 @@ print ''; print ''; print "
'; @@ -300,6 +304,7 @@ print ''; $searchpicto=$form->showFilterAndCheckAddButtons(0); print $searchpicto; print '
'.$langs->trans("SubTotal").':'.price($sous_total_debit).''.price($sous_total_credit).''; +print ''; print price($sous_total_debit - $sous_total_credit); print '
"; +print '
'; + print '
'; // End of page From b58c2c38b2fbb13ef05a7d45ae64fcfb4c142efc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 16:57:47 +0200 Subject: [PATCH 217/980] Fix missing token --- htdocs/core/lib/company.lib.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 36657d48dbc..9b6876aefe9 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -993,7 +993,8 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') $title = (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("ContactsForCompany") : $langs->trans("ContactsAddressesForCompany")); print load_fiche_titre($title, $newcardbutton, ''); - print '
'; + print ''; + print ''; print ''; print ''; print ''; From 95305a313d7b70daa137475b243ee930ec624863 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 17:02:35 +0200 Subject: [PATCH 218/980] Fix trans --- htdocs/core/lib/company.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 864d5d85c53..ced8c37c6d7 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -932,7 +932,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') 't.name'=>array('label'=>"Name", 'checked'=>1, 'position'=>10), 't.poste'=>array('label'=>"PostOrFunction", 'checked'=>1, 'position'=>20), 't.address'=>array('label'=>(empty($conf->dol_optimize_smallscreen) ? $langs->trans("Address").' / '.$langs->trans("Phone").' / '.$langs->trans("Email") : $langs->trans("Address")), 'checked'=>1, 'position'=>30), - 'sc.role'=>array('label'=>"Roles", 'checked'=>1, 'position'=>40), + 'sc.role'=>array('label'=>"ContactByDefaultFor", 'checked'=>1, 'position'=>40), 't.statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>50, 'class'=>'center'), ); // Extra fields @@ -1091,7 +1091,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '') if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap'; if ($key == 'status' || $key == 'statut') $align.=($align?' ':'').'center'; if (! empty($arrayfields['t.'.$key]['checked'])) print getTitleFieldOfList($val['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($align?'class="'.$align.'"':''), $sortfield, $sortorder, $align.' ')."\n"; - if ($key == 'role') $align.=($align?' ':'').'center'; + if ($key == 'role') $align.=($align?' ':'').'left'; if (! empty($arrayfields['sc.'.$key]['checked'])) { print getTitleFieldOfList($arrayfields['sc.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 'sc.'.$key, '', $param, ($align?'class="'.$align.'"':''), $sortfield, $sortorder, $align.' ')."\n"; } From d9dde34ba6eb8ca86ba5bc0bad249279de60abd1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 17:24:02 +0200 Subject: [PATCH 219/980] Fix phpcs --- .../modulebuilder/template/myobject_list.php | 36 +++++++++---------- htdocs/theme/eldy/manifest.json.php | 12 +++---- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 54885f8e380..1c1d0e101b9 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -22,24 +22,24 @@ * \brief List page for myobject */ -//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Do not create database handler $db -//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Do not load object $user -//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); // Do not load object $mysoc -//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Do not load object $langs -//if (! defined('NOSCANGETFORINJECTION')) define('NOSCANGETFORINJECTION','1'); // Do not check injection attack on GET parameters -//if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION','1'); // Do not check injection attack on POST parameters -//if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK','1'); // Do not check CSRF attack (test on referer + on token if option MAIN_SECURITY_CSRF_WITH_TOKEN is on). -//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Do not roll the Anti CSRF token (used if MAIN_SECURITY_CSRF_WITH_TOKEN is on) -//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK','1'); // Do not check style html tag into posted data -//if (! defined('NOIPCHECK')) define('NOIPCHECK','1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip -//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); // If there is no need to load and show top and left menu -//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); // If we don't need to load the html.form.class.php -//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); // Do not load ajax.lib.php library -//if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is public (can be called outside logged session) -//if (! defined("MAIN_LANG_DEFAULT")) define('MAIN_LANG_DEFAULT','auto'); // Force lang to a particular value -//if (! defined("MAIN_AUTHENTICATION_MODE")) define('MAIN_AUTHENTICATION_MODE','aloginmodule'); // Force authentication handler -//if (! defined("NOREDIRECTBYMAINTOLOGIN")) define('NOREDIRECTBYMAINTOLOGIN',1); // The main.inc.php does not make a redirect if not logged, instead show simple error message -//if (! defined("XFRAMEOPTIONS_ALLOWALL")) define('XFRAMEOPTIONS_ALLOWALL',1); // Do not add the HTTP header 'X-Frame-Options: SAMEORIGIN' but 'X-Frame-Options: ALLOWALL' +//if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); // Do not create database handler $db +//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1'); // Do not load object $user +//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); // Do not load object $mysoc +//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1'); // Do not load object $langs +//if (! defined('NOSCANGETFORINJECTION')) define('NOSCANGETFORINJECTION', '1'); // Do not check injection attack on GET parameters +//if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION', '1'); // Do not check injection attack on POST parameters +//if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); // Do not check CSRF attack (test on referer + on token if option MAIN_SECURITY_CSRF_WITH_TOKEN is on). +//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Do not roll the Anti CSRF token (used if MAIN_SECURITY_CSRF_WITH_TOKEN is on) +//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK', '1'); // Do not check style html tag into posted data +//if (! defined('NOIPCHECK')) define('NOIPCHECK', '1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip +//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu +//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); // If we don't need to load the html.form.class.php +//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); // Do not load ajax.lib.php library +//if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page is public (can be called outside logged session) +//if (! defined("MAIN_LANG_DEFAULT")) define('MAIN_LANG_DEFAULT', 'auto'); // Force lang to a particular value +//if (! defined("MAIN_AUTHENTICATION_MODE")) define('MAIN_AUTHENTICATION_MODE', 'aloginmodule'); // Force authentication handler +//if (! defined("NOREDIRECTBYMAINTOLOGIN")) define('NOREDIRECTBYMAINTOLOGIN', '1'); // The main.inc.php does not make a redirect if not logged, instead show simple error message +//if (! defined("XFRAMEOPTIONS_ALLOWALL")) define('XFRAMEOPTIONS_ALLOWALL', '1'); // Do not add the HTTP header 'X-Frame-Options: SAMEORIGIN' but 'X-Frame-Options: ALLOWALL' // Load Dolibarr environment $res=0; diff --git a/htdocs/theme/eldy/manifest.json.php b/htdocs/theme/eldy/manifest.json.php index 8809286ed1e..889b406ab3f 100644 --- a/htdocs/theme/eldy/manifest.json.php +++ b/htdocs/theme/eldy/manifest.json.php @@ -28,12 +28,12 @@ if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1'); if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); -if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); -if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', 1); -if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', 1); -if (! defined('NOLOGIN')) define('NOLOGIN', 1); -if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU',1); -if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', 1); +if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1'); +if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); +if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); +if (! defined('NOLOGIN')) define('NOLOGIN', '1'); +if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); +if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); require_once __DIR__.'/../../main.inc.php'; From fa928f7dc333d3a2e086830b7e47a080a24daf6c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 17:33:13 +0200 Subject: [PATCH 220/980] Update modCategorie.class.php --- htdocs/core/modules/modCategorie.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/modCategorie.class.php b/htdocs/core/modules/modCategorie.class.php index eb9e2c6b4a1..d157e35a555 100644 --- a/htdocs/core/modules/modCategorie.class.php +++ b/htdocs/core/modules/modCategorie.class.php @@ -427,7 +427,7 @@ class modCategorie extends DolibarrModules if ($conf->societe->enabled) { $typeexample.=($typeexample?"/":"")."2=Customer-Prospect"; } if ($conf->adherent->enabled) { $typeexample.=($typeexample?"/":"")."3=Member"; } $this->import_examplevalues_array[$r] = array( - 'ca.label'=>"Supplier Category",'ca.type'=>$typeexample,'ca.description'=>"Imported category", + 'ca.label'=>"Supplier Category",'ca.type'=>$typeexample,'ca.description'=>"My Category description", 'ca.fk_parent' => '0' ); From 5446a7bd8e6d78c1092469398de6e6777d961ebe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 17:43:15 +0200 Subject: [PATCH 221/980] Try phpunit fix --- test/phpunit/BOMTest.php | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/test/phpunit/BOMTest.php b/test/phpunit/BOMTest.php index 73603a5f336..b69e59c6283 100644 --- a/test/phpunit/BOMTest.php +++ b/test/phpunit/BOMTest.php @@ -39,8 +39,11 @@ $langs->load("main"); /** - * Class BillOfMaterialsTest - * @package Testbillofmaterials + * Class for PHPUnit tests + * + * @backupGlobals disabled + * @backupStaticAttributes enabled + * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ class BOMTest extends PHPUnit\Framework\TestCase { @@ -77,13 +80,6 @@ class BOMTest extends PHPUnit\Framework\TestCase global $conf,$user,$langs,$db; $db->begin(); // This is to have all actions inside a transaction even if test launched without suite. - if (! empty($conf->global->MAIN_FIRSTNAME_NAME_POSITION)) { - print "\n".__METHOD__." Company must be setup to have name-firstname in order 'Firstname Lastname'\n"; - die(); - } - if (! empty($conf->global->MAIN_MODULE_LDAP)) { print "\n".__METHOD__." module LDAP must be disabled.\n"; die(); } - if (! empty($conf->global->MAIN_MODULE_MAILMANSPIP)) { print "\n".__METHOD__." module MailmanSpip must be disabled.\n"; die(); } - print __METHOD__."\n"; } @@ -142,6 +138,6 @@ class BOMTest extends PHPUnit\Framework\TestCase print __METHOD__." result=".$result."\n"; $this->assertLessThan($result, 0); - return $localobject; + return $result; } } From d109341ebedd95d7b0eeaa84a4d9510e7db7fcfe Mon Sep 17 00:00:00 2001 From: JC Prieto Date: Fri, 11 Oct 2019 18:08:15 +0200 Subject: [PATCH 222/980] Update card.php Variable $mesg not do anything --- htdocs/fourn/card.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/htdocs/fourn/card.php b/htdocs/fourn/card.php index 5ebe8ffed56..5c183cc212b 100644 --- a/htdocs/fourn/card.php +++ b/htdocs/fourn/card.php @@ -85,10 +85,7 @@ if (empty($reshook)) $result=$object->fetch($id); $object->code_compta_fournisseur=$_POST["supplieraccountancycode"]; $result=$object->update($object->id, $user, 1, 0, 1); - if ($result < 0) - { - $mesg=join(',', $object->errors); - } + if ($result < 0) setEventMessages($object->error, $object->errors, 'errors'); } // terms of the settlement if ($action == 'setconditions' && $user->rights->societe->creer) From 51383ce6afe742fba85502b83bac04008c1a8c87 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 18:42:07 +0200 Subject: [PATCH 223/980] FIX Reset of password can use email like the login. --- htdocs/user/class/user.class.php | 7 ++++++- htdocs/user/passwordforgotten.php | 9 +++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index e8a45efcd62..fecbafe1dba 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -238,9 +238,10 @@ class User extends CommonObject * @param string $sid If defined, sid to used for search * @param int $loadpersonalconf 1=also load personal conf of user (in $user->conf->xxx), 0=do not load personal conf. * @param int $entity If a value is >= 0, we force the search on a specific entity. If -1, means search depens on default setup. + * @param int $email If defined, email to used for search * @return int <0 if KO, 0 not found, >0 if OK */ - public function fetch($id = '', $login = '', $sid = '', $loadpersonalconf = 0, $entity = -1) + public function fetch($id = '', $login = '', $sid = '', $loadpersonalconf = 0, $entity = -1, $email = '') { global $conf, $user; @@ -305,6 +306,10 @@ class User extends CommonObject { $sql.= " AND u.login = '".$this->db->escape($login)."'"; } + elseif ($email) + { + $sql.= " AND u.email = '".$this->db->escape($email)."'"; + } else { $sql.= " AND u.rowid = ".$id; diff --git a/htdocs/user/passwordforgotten.php b/htdocs/user/passwordforgotten.php index ada75da6110..8f85465cde2 100644 --- a/htdocs/user/passwordforgotten.php +++ b/htdocs/user/passwordforgotten.php @@ -45,8 +45,8 @@ $action=GETPOST('action', 'alpha'); $mode=$dolibarr_main_authentication; if (! $mode) $mode='http'; -$username = GETPOST('username', 'alpha'); -$passwordhash = GETPOST('passwordhash', 'alpha'); +$username = trim(GETPOST('username', 'alpha')); +$passwordhash = trim(GETPOST('passwordhash', 'alpha')); $conf->entity = (GETPOST('entity', 'int') ? GETPOST('entity', 'int') : 1); // Instantiate hooks of thirdparty module only if not already define @@ -104,6 +104,11 @@ if ($action == 'buildnewpassword' && $username) { $edituser = new User($db); $result=$edituser->fetch('', $username, '', 1); + if ($result == 0 && preg_match('/@/', $username)) + { + $result=$edituser->fetch('', '', '', 1, -1, $username); + } + if ($result <= 0 && $edituser->error == 'USERNOTFOUND') { $message = '
'.$langs->trans("ErrorLoginDoesNotExists", $username).'
'; From dfaf2ae34b20383a8c18d06efca2bf4e03bdf267 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 19:20:52 +0200 Subject: [PATCH 224/980] Trans --- htdocs/install/mysql/migration/repair.sql | 2 +- htdocs/langs/en_US/compta.lang | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/migration/repair.sql b/htdocs/install/mysql/migration/repair.sql index 4d87203b068..eac0d5b3bd9 100755 --- a/htdocs/install/mysql/migration/repair.sql +++ b/htdocs/install/mysql/migration/repair.sql @@ -471,7 +471,7 @@ UPDATE llx_accounting_bookkeeping set date_creation = tms where date_creation IS -- Note to make all deposit as payed when there is already a discount generated from it. --drop table tmp_invoice_deposit_mark_as_available; --create table tmp_invoice_deposit_mark_as_available as select * from llx_facture as f where f.type = 3 and f.paye = 0 and f.rowid in (select fk_facture_source from llx_societe_remise_except); ---update llx_facture set paye = 1 where rowid in (select rowid from tmp_invoice_deposit_mark_as_available); +--update llx_facture set paye = 1, fk_statut = 2 where rowid in (select rowid from tmp_invoice_deposit_mark_as_available); diff --git a/htdocs/langs/en_US/compta.lang b/htdocs/langs/en_US/compta.lang index 42d88f3f722..eb76d9c64a2 100644 --- a/htdocs/langs/en_US/compta.lang +++ b/htdocs/langs/en_US/compta.lang @@ -112,7 +112,7 @@ ShowVatPayment=Show VAT payment TotalToPay=Total to pay BalanceVisibilityDependsOnSortAndFilters=Balance is visible in this list only if table is sorted ascending on %s and filtered for 1 bank account CustomerAccountancyCode=Customer accounting code -SupplierAccountancyCode=vendor accounting code +SupplierAccountancyCode=Vendor accounting code CustomerAccountancyCodeShort=Cust. account. code SupplierAccountancyCodeShort=Sup. account. code AccountNumber=Account number From f345b5fdb0d2b3bc4f2ce52d541393a1f1c7d050 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 19:32:45 +0200 Subject: [PATCH 225/980] Fix look and feel v10 --- htdocs/comm/multiprix.php | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/htdocs/comm/multiprix.php b/htdocs/comm/multiprix.php index 8a5226d36d2..6442bb45a88 100644 --- a/htdocs/comm/multiprix.php +++ b/htdocs/comm/multiprix.php @@ -91,15 +91,13 @@ if ($_socid > 0) dol_fiche_head($head, $tabchoice, $langs->trans("ThirdParty"), 0, 'company'); - print ''; - print '\n"; - - - print ""; - print "
'; - print ''; + print '
'; - print '"; + print '"; - print '
'; - print $langs->trans("PriceLevel").''.$objsoc->price_level."
'; + print $langs->trans("PriceLevel").''.$objsoc->price_level."
'; - print $langs->trans("NewValue").''; + print '
'; + print $langs->trans("NewValue").''; print '
"; - print "
"; - dol_fiche_end(); print '
'; @@ -157,8 +149,8 @@ if ($_socid > 0) while ($i < $num ) { $obj = $db->fetch_object($resql); - $tag = !$tag; - print ''; + + print ''; print ''.dol_print_date($db->jdate($obj->dc), "dayhour").''; print ''.$obj->price_level.' '; $userstatic->id=$obj->uid; From 2fa3b23cf10c9e05afc81be1caec91c6b6990d74 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Oct 2019 19:36:36 +0200 Subject: [PATCH 226/980] Fix missing price level field --- htdocs/core/modules/modSociete.class.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php index e41e96c5add..a0d190c65cd 100644 --- a/htdocs/core/modules/modSociete.class.php +++ b/htdocs/core/modules/modSociete.class.php @@ -270,6 +270,9 @@ class modSociete extends DolibarrModules 'st.code'=>'ProspectStatus','payterm.libelle'=>'PaymentConditions','paymode.libelle'=>'PaymentMode' ); if (! empty($conf->global->SOCIETE_USEPREFIX)) $this->export_fields_array[$r]['s.prefix']='Prefix'; + + if (! empty($conf->global->SOCIETE_USEPREFIX)) $this->export_fields_array[$r]['s.prefix']='Prefix'; + if (! empty($conf->global->PRODUIT_MULTIPRICES)) $this->export_fields_array[$r]['s.price_level']='PriceLevel'; // Add multicompany field if (! empty($conf->global->MULTICOMPANY_ENTITY_IN_EXPORT_IF_SHARED)) { @@ -295,7 +298,8 @@ class modSociete extends DolibarrModules 's.tva_intra'=>"Text",'s.capital'=>"Numeric",'s.note_private'=>"Text",'s.note_public'=>"Text",'t.libelle'=>"Text", 'ce.code'=>"List:c_effectif:libelle:code","cfj.libelle"=>"Text",'s.fk_prospectlevel'=>'List:c_prospectlevel:label:code', 'st.code'=>'List:c_stcomm:libelle:code','d.nom'=>'Text','u.login'=>'Text','u.firstname'=>'Text','u.lastname'=>'Text','payterm.libelle'=>'Text', - 'paymode.libelle'=>'Text','s.entity'=>'Numeric' + 'paymode.libelle'=>'Text','s.entity'=>'Numeric', + 's.price_level'=>'Numeric' ); $this->export_entities_array[$r]=array('u.login'=>'user','u.firstname'=>'user','u.lastname'=>'user'); // We define here only fields that use another picto From 9f596565898857b7503b597a00e9bfc64d7c2bd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 11 Oct 2019 23:08:33 +0200 Subject: [PATCH 227/980] fix typo inspired by grandoc --- dev/tools/dolibarr-mysql2pgsql.pl | 86 +++++++++---------- htdocs/adherents/class/adherent.class.php | 2 +- .../compta/facture/invoicetemplate_list.php | 4 +- .../core/class/commondocgenerator.class.php | 10 +-- .../supplier_order/pdf/pdf_cornas.modules.php | 6 +- .../jquery/plugins/flot/jquery.flot.js | 6 +- 6 files changed, 57 insertions(+), 57 deletions(-) diff --git a/dev/tools/dolibarr-mysql2pgsql.pl b/dev/tools/dolibarr-mysql2pgsql.pl index 1f510ad60f1..2fe03aaf2b5 100755 --- a/dev/tools/dolibarr-mysql2pgsql.pl +++ b/dev/tools/dolibarr-mysql2pgsql.pl @@ -58,7 +58,7 @@ foreach my $file (keys %filelist) { $ARGV[1]="$DESTI/$file"; print "Convert file $ARGV[0] into $ARGV[1]\n"; - + # MySQL to PostgreSQL dump file converter # # For usage: perl mysql2pgsql.perl --help @@ -76,18 +76,18 @@ foreach my $file (keys %filelist) { # 4) add debug option # see rest of changelog at http://cvs.linux.hr/cvsweb.cgi/sql/mysql2pgsql # 2003-12-16 jsp -- Joe Speigle : - # converts: s/\) *Type=MyISAM;/);/i, enum data type -> references, + # converts: s/\) *Type=MyISAM;/);/i, enum data type -> references, # auto_increment->sequences # 2004-01-13 jsp -- moved project to gborg; both the above declined ownership # 2004-06-29 converts: year(4), year(2) - # homepage: gborg.postgresql.org - + # homepage: gborg.postgresql.org + GetOptions("debug", "help"); - + my $DEBUG = $opt_debug || 0; my $HELP = $opt_help || 0; - - + + if (($HELP) || ! defined($ARGV[0]) || ! defined($ARGV[1])) { print "Usage: perl $0 {--verbose|--help|--debug} mysql_dump_file.sql pg_dump_file.sql\n"; print "\t* OPTIONS\n"; @@ -106,15 +106,15 @@ foreach my $file (keys %filelist) { print "\tpg_dump_file.sql (undefined)\n"; } exit 1; - } - + } + open(IN,"<$ARGV[0]") || die "can't open mysql dump file $ARGV[0]"; open(OUT,">$ARGV[1]") || die "can't open pg dump file $ARGV[1]"; print OUT "-- Generated by $PROG\n"; print OUT "-- (c) 2004, PostgreSQL Inc.\n"; print OUT "-- (c) 2005, Laurent Destailleur.\n"; print OUT "\n"; - + # Output for create table and create index sub output_create { # If command ends with "xxx,);", we change to "xxx);" @@ -128,7 +128,7 @@ foreach my $file (keys %filelist) { print OUT $create_index; } } - + # Reset when moving from each "create table" to "insert" part of dump sub reset_vars() { $create_sql=""; @@ -137,24 +137,24 @@ foreach my $file (keys %filelist) { $enum_column=''; } - + # Boucle sur contenu fichier source #---------------------------------- while() { - + # comments or empty lines - if (/^-- \$Id/) { + if (/^-- \$Id/) { $_ =~ s/\$//g; - print OUT $_; + print OUT $_; next; } # comments or empty lines if (/^#/ || /^$/ || /^--/) { - print OUT $_; + print OUT $_; next; } - if (/^USE\s*([^;]*);/) { - print OUT "\\c ". $1; + if (/^USE\s*([^;]*);/) { + print OUT "\\c ". $1; next; } if ($create_sql ne "") { # we are inside create table statement so lets process datatypes @@ -167,14 +167,14 @@ foreach my $file (keys %filelist) { # LDR Added "innodb" and "engine" } elsif (/(ISAM|innodb)/i) { # end of create table sequence - s/\) *type=(MyISAM|innodb);/);/i; - s/\) *engine=(MyISAM|innodb);/);/i; + s/\) *type=(MyISAM|innodb);/);/i; + s/\) *engine=(MyISAM|innodb);/);/i; $create_sql =~ s/,$//g; # strip last , inside create table $create_sql .= $_; &output_create; &reset_vars(); next; - } + } # enum -> check if (/([\w\"]*)\s+enum\s*\(((?:['"][\?\w]+['"]\s*,)+['"][\?\w]+['"])\)(.*)$/i) { @@ -189,7 +189,7 @@ foreach my $file (keys %filelist) { $enum_datafield{$enum_column} =~ s/\"/\'/g; $_ = qq~ $enum_column CHAR($maxlength) CHECK ($enum_column IN ($enum_datafield{$enum_column})) $suite\n~; # int, auto_increment -> serial - } elsif (/^[\s\t]*(\w*)\s*.*int.*auto_increment/i) { + } elsif (/^[\s\t]*(\w*)\s*.*int.*auto_increment/i) { $seq = qq~${table}_${1}_seq~; s/[\s\t]*([a-zA-Z_0-9]*)\s*.*int.*auto_increment[^,]*/ $1 SERIAL PRIMARY KEY/ig; $create_sql.=$_; @@ -211,40 +211,40 @@ foreach my $file (keys %filelist) { elsif (/tinyint/i) { s/tinyint/smallint/g; } - + # nuke unsigned s/(int\w+|smallint)\s+unsigned/$1/gi; - + # blob -> text s/\w*blob/text/gi; # tinytext/mediumtext -> text s/tinytext/text/gi; s/mediumtext/text/gi; - + # char -> varchar # PostgreSQL would otherwise pad with spaces as opposed # to MySQL! Your user interface may depend on this! s/(\s+)char/${1}varchar/gi; - + # nuke date representation (not supported in PostgreSQL) s/datetime default '[^']+'/datetime/i; s/date default '[^']+'/datetime/i; s/time default '[^']+'/datetime/i; - + # change not null datetime field to null valid ones # (to support remapping of "zero time" to null s/datetime not null/datetime/i; s/datetime/timestamp/i; - + # nuke size of timestamp s/timestamp\([^)]*\)/timestamp/i; - + # double -> numeric s/^double/numeric/i; s/(\s*)double/${1}numeric/i; - + # float -> numeric s/^float/numeric/i; s/(\s*)float/${1}numeric/i; @@ -261,7 +261,7 @@ foreach my $file (keys %filelist) { $create_sql.=$_; next; } - + # unique key [name] (field) if (/unique key\s*(\w*)\s*\((\w+)\)/i) { s/unique key\s*(\w*)\s*\((\w+)\)/UNIQUE\($2\)/i; @@ -288,30 +288,30 @@ foreach my $file (keys %filelist) { $create_index .= "CREATE INDEX $idxname ON $table ($fieldlist);\n"; next; } - + # index(field) if (/index\s*(\w*)\s*\((\w+)\)/i) { my $idxname=($1?"$1":"idx_${table}_$2"); $create_index .= "CREATE INDEX $idxname ON $table ($2);\n"; next; } - + # primary key if (/\bkey\b/i && !/^\s+primary key\s+/i) { s/KEY(\s+)[^(]*(\s+)/$1 UNIQUE $2/i; # hack off name of the non-primary key } - + # key(xxx) if (/key\s*\((\w+)\)/i) { my $idxname="idx_${table}_$1"; $create_index .= "CREATE INDEX $idxname ON $table ($1);\n"; next; } - + # Quote column names s/(^\s*)([^\s\-\(]+)(\s*)/$1"$2"$3/gi if (!/\bkey\b/i); - - # Remap colums with names of existing system attribute + + # Remap columns with names of existing system attribute if (/"oid"/i) { s/"oid"/"_oid"/g; print STDERR "WARNING: table $table uses column \"oid\" which is renamed to \"_oid\"\nYou should fix application manually! Press return to continue."; @@ -330,13 +330,13 @@ foreach my $file (keys %filelist) { s!\x85!... !g; # \ldots s!\x92!`!g; } - + # fix dates '0000-00-00 00:00:00' (should be null) s/'0000-00-00 00:00:00'/null/gi; s/'0000-00-00'/null/gi; s/'00:00:00'/null/gi; s/([12]\d\d\d)([01]\d)([0-3]\d)([0-2]\d)([0-6]\d)([0-6]\d)/'$1-$2-$3 $4:$5:$6'/; - + if (/create\s+table\s+(\w+)/i) { $create_sql = $_; /create\s*table\s*(\w+)/i; @@ -345,11 +345,11 @@ foreach my $file (keys %filelist) { print OUT $_; } } # end of if inside create_table - } # END while() - + } # END while() + close IN; close OUT; - + } print "\n"; @@ -358,4 +358,4 @@ print "\n"; print "Press a key to finish...\n"; $stop=; -0; \ No newline at end of file +0; diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 14eb401866a..2bcbc21c3a0 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -1282,7 +1282,7 @@ class Adherent extends CommonObject $this->societe = $obj->company; $this->company = $obj->company; $this->socid = $obj->fk_soc; - $this->fk_soc = $obj->fk_soc; // For backward comaptibility + $this->fk_soc = $obj->fk_soc; // For backward compatibility $this->address = $obj->address; $this->zip = $obj->zip; $this->town = $obj->town; diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php index 3e9011bb74b..e13dc30204f 100644 --- a/htdocs/compta/facture/invoicetemplate_list.php +++ b/htdocs/compta/facture/invoicetemplate_list.php @@ -416,7 +416,7 @@ if ($resql) print ''; if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; print ''; - $formother->select_year($search_year?$search_year:-1, 'search_year', 1, 20, 5, 0, 0, '', 'witdhauto valignmiddle'); + $formother->select_year($search_year?$search_year:-1, 'search_year', 1, 20, 5, 0, 0, '', 'widthauto valignmiddle'); print ''; } // Date next generation @@ -425,7 +425,7 @@ if ($resql) print ''; if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; print ''; - $formother->select_year($search_year_date_when?$search_year_date_when:-1, 'search_year_date_when', 1, 20, 5, 0, 0, '', 'witdhauto valignmiddle'); + $formother->select_year($search_year_date_when?$search_year_date_when:-1, 'search_year_date_when', 1, 20, 5, 0, 0, '', 'widthauto valignmiddle'); print ''; } // Extra fields diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index 84f49bafe3f..c99f78c3483 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -63,7 +63,7 @@ abstract class CommonDocGenerator // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Define array with couple subtitution key => subtitution value + * Define array with couple substitution key => substitution value * * @param User $user User * @param Translate $outputlangs Language object for output @@ -101,7 +101,7 @@ abstract class CommonDocGenerator // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Define array with couple subtitution key => subtitution value + * Define array with couple substitution key => substitution value * * @param Societe $mysoc Object thirdparty * @param Translate $outputlangs Language object for output @@ -161,7 +161,7 @@ abstract class CommonDocGenerator // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Define array with couple subtitution key => subtitution value + * Define array with couple substitution key => substitution value * * @param Societe $object Object * @param Translate $outputlangs Language object for output @@ -242,7 +242,7 @@ abstract class CommonDocGenerator // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Define array with couple subtitution key => subtitution value + * Define array with couple substitution key => substitution value * * @param Contact $object contact * @param Translate $outputlangs object for output @@ -723,7 +723,7 @@ abstract class CommonDocGenerator // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Define array with couple subtitution key => subtitution value + * Define array with couple substitution key => substitution value * * @param Object $object Dolibarr Object * @param Translate $outputlangs Language object for output diff --git a/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php b/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php index 04a62d3d924..ee858c35cf7 100644 --- a/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php +++ b/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php @@ -1625,7 +1625,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders */ /** - * uasort callback function to Sort colums fields + * uasort callback function to Sort columns fields * * @param array $a PDF lines array fields configs * @param array $b PDF lines array fields configs @@ -1663,7 +1663,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders // Positionning $curX = $this->page_largeur-$this->marge_droite; // start from right - // Array witdh + // Array width $arrayWidth = $this->page_largeur-$this->marge_droite-$this->marge_gauche; // Count flexible column @@ -1671,7 +1671,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders $countFlexCol = 0; foreach ($this->cols as $colKey => &$colDef) { - if (!$this->getColumnStatus($colKey)) continue; // continue if desable + if (!$this->getColumnStatus($colKey)) continue; // continue if disabled if (!empty($colDef['scale'])){ // In case of column widht is defined by percentage diff --git a/htdocs/includes/jquery/plugins/flot/jquery.flot.js b/htdocs/includes/jquery/plugins/flot/jquery.flot.js index 39f3e4cf3ef..c97ceb1bf44 100644 --- a/htdocs/includes/jquery/plugins/flot/jquery.flot.js +++ b/htdocs/includes/jquery/plugins/flot/jquery.flot.js @@ -2010,7 +2010,7 @@ Licensed under the MIT license. ctx.lineTo(xrange.to + subPixel, yrange.to); } else { ctx.moveTo(xrange.from, yrange.to + subPixel); - ctx.lineTo(xrange.to, yrange.to + subPixel); + ctx.lineTo(xrange.to, yrange.to + subPixel); } ctx.stroke(); } else { @@ -2525,9 +2525,9 @@ Licensed under the MIT license. radius = series.points.radius, symbol = series.points.symbol; - // If the user sets the line width to 0, we change it to a very + // If the user sets the line width to 0, we change it to a very // small value. A line width of 0 seems to force the default of 1. - // Doing the conditional here allows the shadow setting to still be + // Doing the conditional here allows the shadow setting to still be // optional even with a lineWidth of 0. if( lw == 0 ) From c3e8aec07c6be4e0c315409c34ef65de83b8ee12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 11 Oct 2019 23:54:05 +0200 Subject: [PATCH 228/980] fix translation for showemailing in lang files, it's ShowEMailing not ShowEmailing --- htdocs/comm/mailing/class/mailing.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php index 9df3a04a786..dba1de41cfd 100644 --- a/htdocs/comm/mailing/class/mailing.class.php +++ b/htdocs/comm/mailing/class/mailing.class.php @@ -548,7 +548,7 @@ class Mailing extends CommonObject $result = ''; $companylink = ''; - $label = '' . $langs->trans("ShowEmailing") . ''; + $label = '' . $langs->trans("ShowEMailing") . ''; $label.= '
'; $label.= '' . $langs->trans('Ref') . ': ' . $this->ref; @@ -567,7 +567,7 @@ class Mailing extends CommonObject { if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) { - $label=$langs->trans("ShowEmailing"); + $label=$langs->trans("ShowEMailing"); $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"'; } $linkclose.=' title="'.dol_escape_htmltag($label, 1).'"'; From 849eda20232f47e91bf9afe1874365d1586fe0ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 12 Oct 2019 00:05:26 +0200 Subject: [PATCH 229/980] Update index.php --- htdocs/comm/mailing/index.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/mailing/index.php b/htdocs/comm/mailing/index.php index d6ade738e3e..0f3e42d366f 100644 --- a/htdocs/comm/mailing/index.php +++ b/htdocs/comm/mailing/index.php @@ -175,13 +175,15 @@ if ($result) { while ($i < $num ) { $obj = $db->fetch_object($result); + $mailstatic=new Mailing($db); + $mailstatic->id = $obj->rowid; + $mailstatic->ref = $obj->rowid; print ''; - print ''.img_object($langs->trans("ShowEMail"), "email").' '.$obj->rowid.''; + print ''.$mailstatic->getNomUrl(1).''; print ''.dol_trunc($obj->titre, 38).''; print ''.dol_print_date($db->jdate($obj->date_creat), 'day').''; print ''.($obj->nbemail?$obj->nbemail:"0").''; - $mailstatic=new Mailing($db); print ''.$mailstatic->LibStatut($obj->statut, 5).''; print ''; $i++; From 71227e43faf1f7f9a98df7d73f47710fbe50f54e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 12 Oct 2019 04:51:41 +0200 Subject: [PATCH 230/980] Debug stripe deprecated page --- htdocs/stripe/class/stripe.class.php | 122 ++++++++++++++++++++++----- htdocs/stripe/payment.php | 2 +- 2 files changed, 101 insertions(+), 23 deletions(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 1f1610438e8..593447919a7 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -803,7 +803,8 @@ class Stripe extends CommonObject } /** - * Create charge with public/payment/newpayment.php, stripe/card.php, cronjobs or REST API + * Create charge. + * This is called by page htdocs/stripe/payment.php and may be deprecated. * * @param int $amount Amount to pay * @param string $currency EUR, GPB... @@ -854,12 +855,12 @@ class Stripe extends CommonObject $description = ""; $ref = ""; - if ($origin == order) { + if ($origin == 'order') { $order = new Commande($this->db); $order->fetch($item); $ref = $order->ref; $description = "ORD=" . $ref . ".CUS=" . $societe->id.".PM=stripe"; - } elseif ($origin == invoice) { + } elseif ($origin == 'invoice') { $invoice = new Facture($this->db); $invoice->fetch($item); $ref = $invoice->ref; @@ -881,9 +882,42 @@ class Stripe extends CommonObject global $stripearrayofkeysbyenv; \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$status]['secret_key']); - if (empty($conf->stripeconnect->enabled)) + if (empty($conf->stripeconnect->enabled)) // With a common Stripe account { - if (preg_match('/acct_/i', $source)) + if (preg_match('/pm_/i', $source)) + { + $stripecard = $source; + $amountstripe = $stripeamount; + $FULLTAG = 'PFBO'; // Payment From Back Office + $stripe = $return; + $amounttopay = $amount; + $servicestatus = $status; + + dol_syslog("* createPaymentStripe get stripeacc", LOG_DEBUG); + $stripeacc = $stripe->getStripeAccount($service); // Get Stripe OAuth connect account if it exists (no network access here) + + dol_syslog("* createPaymentStripe Create payment on card ".$stripecard->id.", amounttopay=".$amounttopay.", amountstripe=".$amountstripe.", FULLTAG=".$FULLTAG, LOG_DEBUG); + + // Create payment intent and charge payment (confirmnow = true) + $paymentintent = $stripe->getPaymentIntent($amounttopay, $currency, $FULLTAG, $description, $invoice, $customer->id, $stripeacc, $servicestatus, 0, 'automatic', true, $stripecard->id, 1); + + $charge = new stdClass(); + if ($paymentintent->status == 'succeeded') + { + $charge->status = 'ok'; + } + else + { + $charge->status = 'failed'; + $charge->failure_code = $stripe->code; + $charge->failure_message = $stripe->error; + $charge->failure_declinecode = $stripe->declinecode; + $stripefailurecode = $stripe->code; + $stripefailuremessage = $stripe->error; + $stripefailuredeclinecode = $stripe->declinecode; + } + } + elseif (preg_match('/acct_/i', $source)) { $charge = \Stripe\Charge::create(array( "amount" => "$stripeamount", @@ -914,12 +948,14 @@ class Stripe extends CommonObject $charge = \Stripe\Charge::create($paymentarray, array("idempotency_key" => "$description")); } } else { - $fee = $amount * ($conf->global->STRIPE_APPLICATION_FEE_PERCENT / 100) + $conf->global->STRIPE_APPLICATION_FEE; - if ($fee >= $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL && $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL > $conf->global->STRIPE_APPLICATION_FEE_MINIMAL) { - $fee = $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL; - } elseif ($fee < $conf->global->STRIPE_APPLICATION_FEE_MINIMAL) { - $fee = $conf->global->STRIPE_APPLICATION_FEE_MINIMAL; - } + // With Stripe Connect + $fee = $amount * ($conf->global->STRIPE_APPLICATION_FEE_PERCENT / 100) + $conf->global->STRIPE_APPLICATION_FEE; + if ($fee >= $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL && $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL > $conf->global->STRIPE_APPLICATION_FEE_MINIMAL) { + $fee = $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL; + } elseif ($fee < $conf->global->STRIPE_APPLICATION_FEE_MINIMAL) { + $fee = $conf->global->STRIPE_APPLICATION_FEE_MINIMAL; + } + if (! in_array($currency, $arrayzerounitcurrency)) $stripefee = round($fee * 100); else $stripefee = round($fee); @@ -942,22 +978,64 @@ class Stripe extends CommonObject $paymentarray["receipt_email"] = $societe->email; } - $charge = \Stripe\Charge::create($paymentarray, array("idempotency_key" => "$description", "stripe_account" => "$account")); + if (preg_match('/pm_/i', $source)) + { + $stripecard = $source; + $amountstripe = $stripeamount; + $FULLTAG = 'PFBO'; // Payment From Back Office + $stripe = $return; + $amounttopay = $amount; + $servicestatus = $status; + + dol_syslog("* createPaymentStripe get stripeacc", LOG_DEBUG); + $stripeacc = $stripe->getStripeAccount($service); // Get Stripe OAuth connect account if it exists (no network access here) + + dol_syslog("* createPaymentStripe Create payment on card ".$stripecard->id.", amounttopay=".$amounttopay.", amountstripe=".$amountstripe.", FULLTAG=".$FULLTAG, LOG_DEBUG); + + // Create payment intent and charge payment (confirmnow = true) + $paymentintent = $stripe->getPaymentIntent($amounttopay, $currency, $FULLTAG, $description, $invoice, $customer->id, $stripeacc, $servicestatus, 0, 'automatic', true, $stripecard->id, 1); + + $charge = new stdClass(); + if ($paymentintent->status == 'succeeded') + { + $charge->status = 'ok'; + $charge->id = $paymentintent->id; + } + else + { + $charge->status = 'failed'; + $charge->failure_code = $stripe->code; + $charge->failure_message = $stripe->error; + $charge->failure_declinecode = $stripe->declinecode; + } + } + else + { + $charge = \Stripe\Charge::create($paymentarray, array("idempotency_key" => "$description", "stripe_account" => "$account")); + } } if (isset($charge->id)) {} $return->statut = 'success'; $return->id = $charge->id; - if ($charge->source->type == 'card') { - $return->message = $charge->source->card->brand . " ...." . $charge->source->card->last4; - } elseif ($charge->source->type == 'three_d_secure') { - $stripe = new Stripe($this->db); - $src = \Stripe\Source::retrieve("" . $charge->source->three_d_secure->card . "", array( - "stripe_account" => $stripe->getStripeAccount($service) - )); - $return->message = $src->card->brand . " ...." . $src->card->last4; - } else { - $return->message = $charge->id; + + if (preg_match('/pm_/i', $source)) + { + $return->message = 'Payment retreived by card status = '.$charge->status; + } + else + { + if ($charge->source->type == 'card') { + $return->message = $charge->source->card->brand . " ...." . $charge->source->card->last4; + } elseif ($charge->source->type == 'three_d_secure') { + $stripe = new Stripe($this->db); + $src = \Stripe\Source::retrieve("" . $charge->source->three_d_secure->card . "", array( + "stripe_account" => $stripe->getStripeAccount($service) + )); + $return->message = $src->card->brand . " ...." . $src->card->last4; + } else { + $return->message = $charge->id; + } } } catch (\Stripe\Error\Card $e) { include DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'; diff --git a/htdocs/stripe/payment.php b/htdocs/stripe/payment.php index dfcb79e18a0..894753f6440 100644 --- a/htdocs/stripe/payment.php +++ b/htdocs/stripe/payment.php @@ -28,7 +28,7 @@ /** * \file htdocs/stripe/payment.php * \ingroup stripe - * \brief Payment page for customers invoices. TODO Seems deprecated and bugged ! + * \brief Payment page for customers invoices. @TODO Seems deprecated and bugged and not used (no link to this page) ! */ // Load Dolibarr environment From dccfdad9dda6d9b7660c63b4530358a9b4b092a3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 12 Oct 2019 11:25:44 +0200 Subject: [PATCH 231/980] Work on inventory feature --- htdocs/langs/en_US/stocks.lang | 3 + .../modulebuilder/template/myobject_card.php | 2 +- htdocs/product/inventory/card.php | 8 +- htdocs/product/inventory/inventory.php | 283 ++++++++++++++++++ .../product/inventory/lib/inventory.lib.php | 3 +- .../product/inventory/tpl/inventory.tpl.php | 202 +------------ htdocs/theme/eldy/btn.inc.php | 2 +- htdocs/theme/md/btn.inc.php | 13 + 8 files changed, 308 insertions(+), 208 deletions(-) create mode 100644 htdocs/product/inventory/inventory.php diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang index a98d4e18cbf..18dc7faaeb9 100644 --- a/htdocs/langs/en_US/stocks.lang +++ b/htdocs/langs/en_US/stocks.lang @@ -212,3 +212,6 @@ StockIncreaseAfterCorrectTransfer=Increase by correction/transfer StockDecreaseAfterCorrectTransfer=Decrease by correction/transfer StockIncrease=Stock increase StockDecrease=Stock decrease +InventoryForASpecificWarehouse=Inventory for a specific warehouse +InventoryForASpecificProduct=Inventory for a specific product + diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 7f28794d51b..6af2312938b 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -228,7 +228,7 @@ if (($id || $ref) && $action == 'edit') dol_fiche_head(); - print ''."\n"; + print '
'."\n"; // Common attributes include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_edit.tpl.php'; diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php index eb9181c8060..87e6fadb57a 100644 --- a/htdocs/product/inventory/card.php +++ b/htdocs/product/inventory/card.php @@ -148,7 +148,7 @@ jQuery(document).ready(function() { // Part to create if ($action == 'create') { - print load_fiche_titre($langs->trans("NewInventory", $langs->transnoentitiesnoconv("MyInventory")), '', 'products'); + print load_fiche_titre($langs->trans("NewInventory"), '', 'products'); print ''; print ''; @@ -183,7 +183,7 @@ if ($action == 'create') // Part to edit record if (($id || $ref) && $action == 'edit') { - print load_fiche_titre($langs->trans("Inventory")); + print load_fiche_titre($langs->trans("Inventory"), '', 'products'); print ''; print ''; @@ -193,7 +193,7 @@ if (($id || $ref) && $action == 'edit') dol_fiche_head(); - print '
'."\n"; + print '
'."\n"; // Common attributes include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_edit.tpl.php'; @@ -218,7 +218,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $res = $object->fetch_optionals(); $head = inventoryPrepareHead($object); - dol_fiche_head($head, 'inventory', $langs->trans("Inventory"), -1, 'inventory'); + dol_fiche_head($head, 'card', $langs->trans("Inventory"), -1, 'stock'); $formconfirm = ''; diff --git a/htdocs/product/inventory/inventory.php b/htdocs/product/inventory/inventory.php new file mode 100644 index 00000000000..ab1a31fe4de --- /dev/null +++ b/htdocs/product/inventory/inventory.php @@ -0,0 +1,283 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/product/inventory/inventory.php + * \ingroup inventory + * \brief Tabe to enter counting + */ + +require '../../main.inc.php'; +include_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; +include_once DOL_DOCUMENT_ROOT.'/product/inventory/class/inventory.class.php'; +include_once DOL_DOCUMENT_ROOT.'/product/inventory/lib/inventory.lib.php'; + +// Load translation files required by the page +$langs->loadLangs(array("stocks","other")); + +// Get parameters +$id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); +$action = GETPOST('action', 'aZ09'); +$confirm = GETPOST('confirm', 'alpha'); +$cancel = GETPOST('cancel', 'aZ09'); +$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'myobjectcard'; // To manage different context of search +$backtopage = GETPOST('backtopage', 'alpha'); + +if (empty($conf->global->MAIN_USE_ADVANCED_PERMS)) +{ + $result = restrictedArea($user, 'stock', $id); +} +else +{ + $result = restrictedArea($user, 'stock', $id, '', 'inventory_advance'); +} + +// Initialize technical objects +$object=new Inventory($db); +$extrafields = new ExtraFields($db); +$diroutputmassaction=$conf->stock->dir_output . '/temp/massgeneration/'.$user->id; +$hookmanager->initHooks(array('inventorycard')); // Note that conf->hooks_modules contains array + +// Fetch optionals attributes and labels +$extrafields->fetch_name_optionals_label($object->table_element); + +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); + +// Initialize array of search criterias +$search_all=trim(GETPOST("search_all", 'alpha')); +$search=array(); +foreach($object->fields as $key => $val) +{ + if (GETPOST('search_'.$key, 'alpha')) $search[$key]=GETPOST('search_'.$key, 'alpha'); +} + +if (empty($action) && empty($id) && empty($ref)) $action='view'; + +// Load object +include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. + +// Security check - Protection if external user +//if ($user->societe_id > 0) access_forbidden(); +//if ($user->societe_id > 0) $socid = $user->societe_id; +//$result = restrictedArea($user, 'mymodule', $id); + +if (empty($conf->global->MAIN_USE_ADVANCED_PERMS)) +{ + $permissiontoadd = $user->rights->stock->creer; + $permissiontodelete = $user->rights->stock->supprimer; +} +else +{ + $permissiontoadd = $user->rights->stock->inventory_advance->write; + $permissiontodelete = $user->rights->stock->inventory_advance->write; +} + + +/* + * Actions + */ + +$parameters=array(); +$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +if (empty($reshook)) +{ + $error=0; + + $backurlforlist = DOL_URL_ROOT.'/product/inventory/list.php'; + + // Actions cancel, add, update, delete or clone + include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php'; + + // Actions when linking object each other + include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; + + // Actions when printing a doc from card + include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php'; + + // Actions to send emails + /*$trigger_name='MYOBJECT_SENTBYMAIL'; + $autocopy='MAIN_MAIL_AUTOCOPY_MYOBJECT_TO'; + $trackid='myobject'.$object->id; + include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';*/ +} + + + + +/* + * View + */ + +$form=new Form($db); + +llxHeader('', $langs->trans('Inventory'), ''); + +// Example : Adding jquery code +print ''; + + +// Part to show record +if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) +{ + $res = $object->fetch_optionals(); + + $head = inventoryPrepareHead($object); + dol_fiche_head($head, 'inventory', $langs->trans("Inventory"), -1, 'stock'); + + $formconfirm = ''; + + // Confirmation to delete + if ($action == 'delete') { + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteInventory'), $langs->trans('ConfirmDeleteOrder'), 'confirm_delete', '', 0, 1); + } + // Confirmation to delete line + if ($action == 'deleteline') + { + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&lineid='.$lineid, $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_deleteline', '', 0, 1); + } + + // Clone confirmation + if ($action == 'clone') { + // Create an array for form + $formquestion = array(); + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneMyObject', $object->ref), 'confirm_clone', $formquestion, 'yes', 1); + } + + // Call Hook formConfirm + $parameters = array('lineid' => $lineid); + $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + if (empty($reshook)) $formconfirm.=$hookmanager->resPrint; + elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint; + + // Print form confirm + print $formconfirm; + + + // Object card + // ------------------------------------------------------------ + $linkback = '' . $langs->trans("BackToList") . ''; + + $morehtmlref='
'; + /* + // Ref bis + $morehtmlref.=$form->editfieldkey("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->inventory->creer, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->inventory->creer, 'string', '', null, null, '', 1); + // Thirdparty + $morehtmlref.='
'.$langs->trans('ThirdParty') . ' : ' . $soc->getNomUrl(1); + // Project + if (! empty($conf->projet->enabled)) + { + $langs->load("projects"); + $morehtmlref.='
'.$langs->trans('Project') . ' '; + if ($user->rights->inventory->creer) + { + if ($action != 'classify') + { + $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } + } + } else { + if (! empty($object->fk_project)) { + $proj = new Project($db); + $proj->fetch($object->fk_project); + $morehtmlref.=$proj->getNomUrl(); + } else { + $morehtmlref.=''; + } + } + } + */ + $morehtmlref.='
'; + + + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); + + + print '
'; + print '
'; + print '
'; + print '
'."\n"; + + // Common attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_view.tpl.php'; + + // Other attributes. Fields from hook formObjectOptions and Extrafields. + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; + + print '
'; + print '
'; + print ''; + + print '
'; + + dol_fiche_end(); + + + // Buttons for actions + if ($action != 'presend' && $action != 'editline') { + print '
'."\n"; + $parameters=array(); + $reshook=$hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + + if (empty($reshook)) + { + if ($permissiontoadd) + { + print ''.$langs->trans("Validate").''."\n"; + } + else + { + print ''.$langs->trans('Validate').''."\n"; + } + } + print '
'."\n"; + } + + + include DOL_DOCUMENT_ROOT.'/product/inventory/tpl/inventory.tpl.php'; + +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/product/inventory/lib/inventory.lib.php b/htdocs/product/inventory/lib/inventory.lib.php index 361a89c923c..e0af60588ed 100644 --- a/htdocs/product/inventory/lib/inventory.lib.php +++ b/htdocs/product/inventory/lib/inventory.lib.php @@ -69,7 +69,8 @@ function inventoryPrepareHead(&$inventory, $title = 'Inventory', $get = '') global $langs; return array( - array(dol_buildpath('/product/inventory/card.php?id='.$inventory->id.$get, 1), $langs->trans($title),'inventory') + array(dol_buildpath('/product/inventory/card.php?id='.$inventory->id.$get, 1), $langs->trans('Card'), 'card'), + array(dol_buildpath('/product/inventory/inventory.php?id='.$inventory->id.$get, 1), $langs->trans('Inventory'), 'inventory') ); } diff --git a/htdocs/product/inventory/tpl/inventory.tpl.php b/htdocs/product/inventory/tpl/inventory.tpl.php index 8d85b20dc43..992557505db 100644 --- a/htdocs/product/inventory/tpl/inventory.tpl.php +++ b/htdocs/product/inventory/tpl/inventory.tpl.php @@ -8,207 +8,7 @@ if (empty($conf) || ! is_object($conf)) } ?> - - -status != 1) { ?> - trans('AddInventoryProduct'); ?> : -
- - - - - - -

- - -
- - -
Cet inventaire est validé
- - - - - - - $row) { - - $total_pmp+=$row['pmp_stock']; - $total_pa+=$row['pa_stock']; - $total_pmp_actual+=$row['pmp_actual']; - $total_pa_actual+=$row['pa_actual']; - - if($i%20 === 0) - { - _headerList($view); - } // Fin IF principal - ?> - - - - barcode->enabled)) { ?> - - - - - - - global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA)){ - echo ''; - $total_current_pa+=$row['current_pa_stock']; - } - - ?> - - - - - rights->stock->changePMP)) { - echo ''; - } - ?> - - global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA)){ - echo ''; - $total_current_pa_actual+=$row['current_pa_actual']; - } - - ?> - - - - - - - -
  '.price($row['current_pa_stock']).'   - - '.$row['pmp_new'].''.price($row['current_pa_actual']).'
- - status != 1) { ?> -
- - - trans('Modify') ?> - rights->stock->changePMP)) { - echo ''.$langs->trans('ApplyPMP').''; - } - - if ($can_validate == 1) { ?> - trans('RegulateStock') ?> - - - - - - - trans('Flush'); ?> -     - trans('Delete') ?> - -
- - status == 1) { ?> -
- - - - trans('Delete') ?> - - -
- -
-

Date de création : getDate('datec') ?> -
Dernière mise à jour : getDate('tms') ?>

+TODO... diff --git a/htdocs/theme/eldy/btn.inc.php b/htdocs/theme/eldy/btn.inc.php index a3000715712..c69ee57c17b 100644 --- a/htdocs/theme/eldy/btn.inc.php +++ b/htdocs/theme/eldy/btn.inc.php @@ -61,7 +61,7 @@ span.butAction, span.butActionDelete { cursor: pointer; } -.tableforfieldcreate a.butActionNew>span.fa-plus-circle, a.butActionNew>span.fa-plus-circle:hover, +.tableforfieldcreate a.butActionNew>span.fa-plus-circle, .tableforfieldcreate a.butActionNew>span.fa-plus-circle:hover, span.butActionNew>span.fa-plus-circle, span.butActionNew>span.fa-plus-circle:hover, a.butActionNewRefused>span.fa-plus-circle, a.butActionNewRefused>span.fa-plus-circle:hover, span.butActionNewRefused>span.fa-plus-circle, span.butActionNewRefused>span.fa-plus-circle:hover, diff --git a/htdocs/theme/md/btn.inc.php b/htdocs/theme/md/btn.inc.php index 384b968d220..be897e8f841 100644 --- a/htdocs/theme/md/btn.inc.php +++ b/htdocs/theme/md/btn.inc.php @@ -77,6 +77,19 @@ span.butAction, span.butActionDelete { a.butActionNew>span.fa-plus-circle { padding-left: 6px; font-size: 1.5em; } a.butActionNewRefused>span.fa-plus-circle { padding-left: 6px; font-size: 1.5em; } +.tableforfieldcreate a.butActionNew>span.fa-plus-circle, .tableforfieldcreate a.butActionNew>span.fa-plus-circle:hover, +span.butActionNew>span.fa-plus-circle, span.butActionNew>span.fa-plus-circle:hover, +a.butActionNewRefused>span.fa-plus-circle, a.butActionNewRefused>span.fa-plus-circle:hover, +span.butActionNewRefused>span.fa-plus-circle, span.butActionNewRefused>span.fa-plus-circle:hover, +a.butActionNew>span.fa-list-alt, a.butActionNew>span.fa-list-alt:hover, +span.butActionNew>span.fa-list-alt, span.butActionNew>span.fa-list-alt:hover, +a.butActionNewRefused>span.fa-list-alt, a.butActionNewRefused>span.fa-list-alt:hover, +span.butActionNewRefused>span.fa-list-alt, span.butActionNewRefused>span.fa-list-alt:hover +{ + font-size: 1em; + padding-left: 0px; +} + .button, .butAction { color: #ffffff !important; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); From 33efd77fc7949e7d55ee7fe34bd906a302727091 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Sat, 12 Oct 2019 12:10:33 +0200 Subject: [PATCH 232/980] more internationalization --- htdocs/core/modules/action/modules_action.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/core/modules/action/modules_action.php b/htdocs/core/modules/action/modules_action.php index 5199933c0a2..0a559ae2d92 100644 --- a/htdocs/core/modules/action/modules_action.php +++ b/htdocs/core/modules/action/modules_action.php @@ -47,23 +47,23 @@ abstract class ModeleAction extends CommonDocGenerator global $conf; $type='action'; - $liste=array(); + $list=array(); include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; - $liste=getListOfModels($db, $type, $maxfilenamelength); + $list=getListOfModels($db, $type, $maxfilenamelength); - return $liste; + return $list; } } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps /** - * Create an product document on disk using template defined into PRODUCT_ADDON_PDF + * Create a product document on disk using template defined into PRODUCT_ADDON_PDF * - * @param DoliDB $db objet base de donnee + * @param DoliDB $db data base object * @param Object $object Object fichinter - * @param string $modele force le modele a utiliser ('' par defaut) - * @param Translate $outputlangs objet lang a utiliser pour traduction + * @param string $modele forces the model to use ('' by default) + * @param Translate $outputlangs lang object to use for translation * @param int $hidedetails Hide details of lines * @param int $hidedesc Hide description * @param int $hideref Hide ref @@ -79,7 +79,7 @@ function action_create($db, $object, $modele, $outputlangs, $hidedetails = 0, $h $srctemplatepath=''; - // Positionne modele sur le nom du modele de fichinter a utiliser + // Position modele on the name of fichinter model to use if (! dol_strlen($modele)) { if (! empty($conf->global->ACTION_EVENT_ADDON_PDF)) From 9ba992b8b6cc936cae7869395444fd4de63c7375 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 12 Oct 2019 12:31:35 +0200 Subject: [PATCH 233/980] Work on inventory module --- htdocs/bom/bom_list.php | 8 ++--- htdocs/comm/action/card.php | 2 ++ htdocs/core/lib/functions2.lib.php | 35 +++++++++++-------- .../modulebuilder/template/myobject_list.php | 5 +-- htdocs/product/inventory/card.php | 11 +++++- .../inventory/class/inventory.class.php | 22 +++++++----- htdocs/product/inventory/inventory.php | 23 +++++++++--- htdocs/product/inventory/list.php | 31 ++++++++++------ 8 files changed, 93 insertions(+), 44 deletions(-) diff --git a/htdocs/bom/bom_list.php b/htdocs/bom/bom_list.php index 4b0a6ff29be..635f0f9db65 100644 --- a/htdocs/bom/bom_list.php +++ b/htdocs/bom/bom_list.php @@ -375,14 +375,14 @@ print ''; foreach($object->fields as $key => $val) { $cssforfield=(empty($val['css'])?'':$val['css']); - if ($key == 'status') $cssforfield='center'; + if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; - elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real'))) $cssforfield.=($cssforfield?' ':'').'right'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $val['label'] != 'TechnicalID') $cssforfield.=($cssforfield?' ':'').'right'; if (! empty($arrayfields['t.'.$key]['checked'])) { print ''; - if (is_array($val['arrayofkeyval'])) print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 0, 0, 0, '', 'maxwidth75'); + if (is_array($val['arrayofkeyval'])) print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth75'); else print ''; print ''; } @@ -411,7 +411,7 @@ foreach($object->fields as $key => $val) if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; - elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real'))) $cssforfield.=($cssforfield?' ':'').'right'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $val['label'] != 'TechnicalID') $cssforfield.=($cssforfield?' ':'').'right'; if (! empty($arrayfields['t.'.$key]['checked'])) { print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield?'class="'.$cssforfield.'"':''), $sortfield, $sortorder, ($cssforfield?$cssforfield.' ':''))."\n"; diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index baf454fdf67..cc3accde763 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -1080,6 +1080,8 @@ if ($action == 'create') $formproject->selectTasks((! empty($societe->id)?$societe->id:-1), $tid, 'taskid', 24, 0, '1', 1, 0, 0, 'maxwidth500', $projectsListId); print ''; } + + // Object linked if (!empty($origin) && !empty($originid)) { include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 8ff78fe5be0..c2c3528c869 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -1820,69 +1820,76 @@ function dolGetElementUrl($objectid, $objecttype, $withpicto = 0, $option = '') $subelement = $regs[2]; } + // Generic case for $classpath $classpath = $element.'/class'; - // To work with non standard path + // Special cases, to work with non standard path if ($objecttype == 'facture' || $objecttype == 'invoice') { $classpath = 'compta/facture/class'; $module='facture'; $subelement='facture'; } - if ($objecttype == 'commande' || $objecttype == 'order') { + elseif ($objecttype == 'commande' || $objecttype == 'order') { $classpath = 'commande/class'; $module='commande'; $subelement='commande'; } - if ($objecttype == 'propal') { + elseif ($objecttype == 'propal') { $classpath = 'comm/propal/class'; } - if ($objecttype == 'supplier_proposal') { + elseif ($objecttype == 'supplier_proposal') { $classpath = 'supplier_proposal/class'; } - if ($objecttype == 'shipping') { + elseif ($objecttype == 'shipping') { $classpath = 'expedition/class'; $subelement = 'expedition'; $module = 'expedition_bon'; } - if ($objecttype == 'delivery') { + elseif ($objecttype == 'delivery') { $classpath = 'livraison/class'; $subelement = 'livraison'; $module = 'livraison_bon'; } - if ($objecttype == 'contract') { + elseif ($objecttype == 'contract') { $classpath = 'contrat/class'; $module='contrat'; $subelement='contrat'; } - if ($objecttype == 'member') { + elseif ($objecttype == 'member') { $classpath = 'adherents/class'; $module='adherent'; $subelement='adherent'; } - if ($objecttype == 'cabinetmed_cons') { + elseif ($objecttype == 'cabinetmed_cons') { $classpath = 'cabinetmed/class'; $module='cabinetmed'; $subelement='cabinetmedcons'; } - if ($objecttype == 'fichinter') { + elseif ($objecttype == 'fichinter') { $classpath = 'fichinter/class'; $module='ficheinter'; $subelement='fichinter'; } - if ($objecttype == 'task') { + elseif ($objecttype == 'task') { $classpath = 'projet/class'; $module='projet'; $subelement='task'; } - if ($objecttype == 'stock') { + elseif ($objecttype == 'stock') { $classpath = 'product/stock/class'; $module='stock'; $subelement='stock'; } + elseif ($objecttype == 'inventory') { + $classpath = 'product/inventory/class'; + $module='stock'; + $subelement='inventory'; + } - //print "objecttype=".$objecttype." module=".$module." subelement=".$subelement; - + // Generic case for $classfile and $classname $classfile = strtolower($subelement); $classname = ucfirst($subelement); + //print "objecttype=".$objecttype." module=".$module." subelement=".$subelement." classfile=".$classfile." classname=".$classname; + if ($objecttype == 'invoice_supplier') { $classfile = 'fournisseur.facture'; $classname='FactureFournisseur'; diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 1c1d0e101b9..bf24be61023 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -219,8 +219,9 @@ foreach($object->fields as $key => $val) $sql.='t.'.$key.', '; } // Add fields from extrafields -if (! empty($extrafields->attributes[$object->table_element]['label'])) +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.', ' : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook @@ -414,7 +415,7 @@ foreach($object->fields as $key => $val) if (! empty($arrayfields['t.'.$key]['checked'])) { print ''; - if (is_array($val['arrayofkeyval'])) print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 0, 0, 0, '', 'maxwidth75'); + if (is_array($val['arrayofkeyval'])) print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth75'); else print ''; print ''; } diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php index 87e6fadb57a..639b04cdbcc 100644 --- a/htdocs/product/inventory/card.php +++ b/htdocs/product/inventory/card.php @@ -340,6 +340,15 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ''.$langs->trans('Modify').''."\n"; } + if ($permissiontoadd) + { + print ''.$langs->trans("Validate").''."\n"; + } + else + { + print ''.$langs->trans('Validate').''."\n"; + } + if ($permissiontodelete) { print ''.$langs->trans('Delete').''."\n"; @@ -382,7 +391,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $MAXEVENT = 10; - $morehtmlright = ''; + $morehtmlright = ''; $morehtmlright.= $langs->trans("SeeAll"); $morehtmlright.= ''; diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php index 2445934b98c..e9284781a5d 100644 --- a/htdocs/product/inventory/class/inventory.class.php +++ b/htdocs/product/inventory/class/inventory.class.php @@ -54,22 +54,29 @@ class Inventory extends CommonObject */ public $picto = 'stock'; + const STATUS_DRAFT = 0; + const STATUS_VALIDATED = 1; + const STATUS_RECORDED = 2; + const STATUS_CANCELED = 9; /** - * 'type' if the field format. + * 'type' if the field format ('integer', 'integer:Class:pathtoclass', 'varchar(x)', 'double(24,8)', 'text', 'html', 'datetime', 'timestamp', 'float') * '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) * '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) * '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. - * 'default' is a default value for creation (can still be replaced by the global setup of default values) - * 'showoncombobox' if field must be shown into the label of combobox + * 'showoncombobox' if value of the field must be visible into the label of the combobox that list record + * 'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel") */ // BEGIN MODULEBUILDER PROPERTIES @@ -85,18 +92,15 @@ class Inventory extends CommonObject 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'visible'=>1, 'enabled'=>1, 'position'=>32, 'index'=>1, 'help'=>'InventoryForASpecificProduct'), 'date_inventory' => array('type'=>'date', 'label'=>'DateValue', 'visible'=>1, 'enabled'=>1, 'position'=>35), - 'date_validation' => array('type'=>'datetime', 'label'=>'DateValidation', 'visible'=>-2, 'enabled'=>1, 'position'=>502,), - 'fk_user_valid' => array('type'=>'integer', 'label'=>'UserValidation', 'visible'=>-2, 'enabled'=>1, 'position'=>512,), - 'date_creation' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500), 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), - //'date_valid' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>502), + 'date_validation' => array('type'=>'datetime', 'label'=>'DateValidation', 'visible'=>-2, 'enabled'=>1, 'position'=>502), 'fk_user_creat' =>array('type'=>'integer', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>510), 'fk_user_modif' =>array('type'=>'integer', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>511), - //'fk_user_valid' =>array('type'=>'integer', 'label'=>'UserValidation', 'enabled'=>1, 'visible'=>-1, 'position'=>512), + 'fk_user_valid' => array('type'=>'integer', 'label'=>'UserValidation', 'visible'=>-2, 'enabled'=>1, 'position'=>512), 'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0, 'position'=>1000), - 'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>4, 'enabled'=>1, 'position'=>1000, 'default'=>0, 'arrayofkeyval'=>array(0=>'ToDo', 1=>'Done', -1=>'Cancel')), + 'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>4, 'enabled'=>1, 'position'=>1000, 'default'=>0, 'arrayofkeyval'=>array(0=>'Draft', 1=>'Validated', 2=>'Recorded', -1=>'Canceled')), ); /** diff --git a/htdocs/product/inventory/inventory.php b/htdocs/product/inventory/inventory.php index ab1a31fe4de..c91834e54e5 100644 --- a/htdocs/product/inventory/inventory.php +++ b/htdocs/product/inventory/inventory.php @@ -261,13 +261,28 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea if (empty($reshook)) { - if ($permissiontoadd) + if ($object->status == Inventory::STATUS_DRAFT) { - print ''.$langs->trans("Validate").''."\n"; + if ($permissiontoadd) + { + print ''.$langs->trans("Validate").''."\n"; + } + else + { + print ''.$langs->trans('Validate').''."\n"; + } } - else + + if ($object->status == Inventory::STATUS_VALIDATED) { - print ''.$langs->trans('Validate').''."\n"; + if ($permissiontoadd) + { + print ''.$langs->trans("RecordVerb").''."\n"; + } + else + { + print ''.$langs->trans('RecordVerb').''."\n"; + } } } print ''."\n"; diff --git a/htdocs/product/inventory/list.php b/htdocs/product/inventory/list.php index f2e4853908d..b81e989cbb9 100644 --- a/htdocs/product/inventory/list.php +++ b/htdocs/product/inventory/list.php @@ -366,11 +366,18 @@ print ''; foreach($object->fields as $key => $val) { - $align=''; - if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center'; - if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap'; - if ($key == 'status') $align.=($align?' ':'').'center'; - if (! empty($arrayfields['t.'.$key]['checked'])) print ''; + $cssforfield=(empty($val['css'])?'':$val['css']); + if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $val['label'] != 'TechnicalID') $cssforfield.=($cssforfield?' ':'').'right'; + if (! empty($arrayfields['t.'.$key]['checked'])) + { + print ''; + } } // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; @@ -392,11 +399,15 @@ print ''."\n"; print ''; foreach($object->fields as $key => $val) { - $align=''; - if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center'; - if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap'; - if ($key == 'status') $align.=($align?' ':'').'center'; - if (! empty($arrayfields['t.'.$key]['checked'])) print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($align?'class="'.$align.'"':''), $sortfield, $sortorder, $align.' ')."\n"; + $cssforfield=(empty($val['css'])?'':$val['css']); + if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $val['label'] != 'TechnicalID') $cssforfield.=($cssforfield?' ':'').'right'; + if (! empty($arrayfields['t.'.$key]['checked'])) + { + print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield?'class="'.$cssforfield.'"':''), $sortfield, $sortorder, ($cssforfield?$cssforfield.' ':''))."\n"; + } } // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; From bcc41c2a3389da42e480780babbfd1e4010eefe7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 12 Oct 2019 13:16:12 +0200 Subject: [PATCH 234/980] NEW Can filter on description on bank account transaction lists. --- htdocs/compta/bank/bankentries_list.php | 79 ++++++++++++++++--------- 1 file changed, 52 insertions(+), 27 deletions(-) diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index cd964c7f4f4..1b0f7feffe4 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -75,15 +75,15 @@ else $result=restrictedArea($user, 'banque'); } -$description=GETPOST("description", 'alpha'); $dateop = dol_mktime(12, 0, 0, GETPOST("opmonth", 'int'), GETPOST("opday", 'int'), GETPOST("opyear", 'int')); -$debit=GETPOST("debit", 'alpha'); -$credit=GETPOST("credit", 'alpha'); +$search_debit=GETPOST("search_debit", 'alpha'); +$search_credit=GETPOST("search_credit", 'alpha'); $search_type=GETPOST("search_type", 'alpha'); $search_account=GETPOST("search_account", 'int')?GETPOST("search_account", 'int'):GETPOST("account", 'int'); $search_accountancy_code=GETPOST('search_accountancy_code', 'alpha')?GETPOST('search_accountancy_code', 'alpha'):GETPOST('accountancy_code', 'alpha'); $search_bid=GETPOST("search_bid", "int")?GETPOST("search_bid", "int"):GETPOST("bid", "int"); $search_ref=GETPOST('search_ref', 'alpha'); +$search_description=GETPOST("search_description", 'alpha'); $search_dt_start = dol_mktime(0, 0, 0, GETPOST('search_start_dtmonth', 'int'), GETPOST('search_start_dtday', 'int'), GETPOST('search_start_dtyear', 'int')); $search_dt_end = dol_mktime(0, 0, 0, GETPOST('search_end_dtmonth', 'int'), GETPOST('search_end_dtday', 'int'), GETPOST('search_end_dtyear', 'int')); $search_dv_start = dol_mktime(0, 0, 0, GETPOST('search_start_dvmonth', 'int'), GETPOST('search_start_dvday', 'int'), GETPOST('search_start_dvyear', 'int')); @@ -142,7 +142,7 @@ $search_array_options=$extrafields->getOptionalsFromPost('banktransaction', '', $arrayfields=array( 'b.rowid'=>array('label'=>$langs->trans("Ref"), 'checked'=>1), - 'description'=>array('label'=>$langs->trans("Description"), 'checked'=>1), + 'b.label'=>array('label'=>$langs->trans("Description"), 'checked'=>1), 'b.dateo'=>array('label'=>$langs->trans("DateOperationShort"), 'checked'=>1), 'b.datev'=>array('label'=>$langs->trans("DateValueShort"), 'checked'=>1), 'type'=>array('label'=>$langs->trans("Type"), 'checked'=>1), @@ -186,13 +186,13 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_dt_end=''; $search_dv_start=''; $search_dv_end=''; - $description=""; $search_type=""; - $debit=""; - $credit=""; + $search_debit=""; + $search_credit=""; $search_bid=""; $search_ref=""; $search_req_nb=''; + $search_description=''; $search_thirdparty=''; $search_num_releve=''; $search_conciliated=''; @@ -263,6 +263,7 @@ if ((GETPOST('confirm_savestatement', 'alpha') || GETPOST('confirm_reconcile', ' if ($offset) $param.='&offset='.urlencode($offset); if ($search_thirdparty) $param.='&search_thirdparty='.urlencode($search_thirdparty); if ($search_num_releve) $param.='&search_num_releve='.urlencode($search_num_releve); + if ($search_description) $param.='&search_description='.urlencode($search_description); if ($search_start_dt) $param.='&search_start_dt='.urlencode($search_start_dt); if ($search_end_dt) $param.='&search_end_dt='.urlencode($search_end_dt); if ($search_start_dv) $param.='&search_start_dv='.urlencode($search_start_dv); @@ -393,11 +394,11 @@ if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($lim if ($id > 0) $param.='&id='.urlencode($id); if (!empty($ref)) $param.='&ref='.urlencode($ref); if (!empty($search_ref)) $param.='&search_ref='.urlencode($search_ref); -if (!empty($description)) $param.='&description='.urlencode($description); +if (!empty($search_description)) $param.='&search_description='.urlencode($search_description); if (!empty($search_type)) $param.='&type='.urlencode($search_type); if (!empty($search_thirdparty)) $param.='&search_thirdparty='.urlencode($search_thirdparty); -if (!empty($debit)) $param.='&debit='.urlencode($debit); -if (!empty($credit)) $param.='&credit='.urlencode($credit); +if (!empty($search_debit)) $param.='&search_debit='.urlencode($search_debit); +if (!empty($search_credit)) $param.='&search_credit='.urlencode($search_credit); if (!empty($search_account)) $param.='&search_account='.urlencode($search_account); if (!empty($search_num_releve)) $param.='&search_num_releve='.urlencode($search_num_releve); if ($search_conciliated != '' && $search_conciliated != '-1') $param.='&search_conciliated='.urlencode($search_conciliated); @@ -498,14 +499,36 @@ if ($search_req_nb) $sql.= natural_search("b.num_chq", $search_req_nb); if ($search_num_releve) $sql.= natural_search("b.num_releve", $search_num_releve); if ($search_conciliated != '' && $search_conciliated != '-1') $sql.= " AND b.rappro = ".$search_conciliated; if ($search_thirdparty) $sql.= natural_search("s.nom", $search_thirdparty); -if ($description) $sql.= natural_search("b.label", $description); // Warning some text are just translation keys, not translated strings +if ($search_description) +{ + $search_description_to_use = $search_description; + $arrayoffixedlabels=array( + 'payment_salary', + 'CustomerInvoicePayment', 'CustomerInvoicePaymentBack', + 'SupplierInvoicePayment', 'SupplierInvoicePaymentBack', + 'DonationPayment', + 'ExpenseReportPayment', + 'SocialContributionPayment', + 'SubscriptionPayment', + 'WithdrawalPayment' + ); + foreach($arrayoffixedlabels as $keyforlabel) + { + $translatedlabel = $langs->transnoentitiesnoconv($keyforlabel); + if (preg_match('/'.$search_description.'/i', $translatedlabel)) + { + $search_description_to_use.="|".$keyforlabel; + } + } + $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)."' "; // Search criteria amount -$debit = price2num(str_replace('-', '', $debit)); -$credit = price2num(str_replace('-', '', $credit)); -if ($debit) $sql.= natural_search('- b.amount', $debit, 1); -if ($credit) $sql.= natural_search('b.amount', $credit, 1); +$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); // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; @@ -853,10 +876,10 @@ if ($resql) print ''; print ''; } - if (! empty($arrayfields['description']['checked'])) + if (! empty($arrayfields['b.label']['checked'])) { print ''; } if (! empty($arrayfields['b.dateo']['checked'])) @@ -891,13 +914,13 @@ if ($resql) if (! empty($arrayfields['b.debit']['checked'])) { print ''; } if (! empty($arrayfields['b.credit']['checked'])) { print ''; } if (! empty($arrayfields['balancebefore']['checked'])) @@ -937,7 +960,7 @@ if ($resql) // Fields title print ''; if (! empty($arrayfields['b.rowid']['checked'])) print_liste_field_titre($arrayfields['b.rowid']['label'], $_SERVER['PHP_SELF'], 'b.rowid', '', $param, '', $sortfield, $sortorder); - if (! empty($arrayfields['description']['checked'])) print_liste_field_titre($arrayfields['description']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder); + if (! empty($arrayfields['b.label']['checked'])) print_liste_field_titre($arrayfields['b.label']['label'], $_SERVER['PHP_SELF'], 'b.label', '', $param, '', $sortfield, $sortorder); if (! empty($arrayfields['b.dateo']['checked'])) print_liste_field_titre($arrayfields['b.dateo']['label'], $_SERVER['PHP_SELF'], 'b.dateo', '', $param, '', $sortfield, $sortorder, "center "); if (! empty($arrayfields['b.datev']['checked'])) print_liste_field_titre($arrayfields['b.datev']['label'], $_SERVER['PHP_SELF'], 'b.datev,b.dateo,b.rowid', '', $param, 'align="center"', $sortfield, $sortorder); if (! empty($arrayfields['type']['checked'])) print_liste_field_titre($arrayfields['type']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'align="center"', $sortfield, $sortorder); @@ -1142,7 +1165,7 @@ if ($resql) } // Description - if (! empty($arrayfields['description']['checked'])) + if (! empty($arrayfields['b.label']['checked'])) { print "'; } + // If no record found + if ($num == 0) + { + $colspan=1; + foreach($arrayfields as $key => $val) { if (! empty($val['checked'])) $colspan++; } + print ''; + } + print "
'; + if (is_array($val['arrayofkeyval'])) print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth75'); + else print ''; + print '
'; - //print ''; + print ''; print ''; - print ''; + print ''; print ''; - print ''; + print ''; print '
"; @@ -1557,6 +1580,14 @@ if ($resql) print '
'.$langs->trans("NoRecordFound").'
"; print ""; @@ -1568,12 +1599,6 @@ else dol_print_error($db); } -// If no data to display after a search -if ($_POST["action"] == "search" && ! $num) -{ - print '
'.$langs->trans("NoRecordFound").'
'; -} - // End of page llxFooter(); $db->close(); From 9871dd8770a4ffbe59f700a26191c260a5764d01 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 12 Oct 2019 15:27:06 +0200 Subject: [PATCH 235/980] Debug variants --- htdocs/langs/en_US/products.lang | 4 ++-- htdocs/product/stock/product.php | 12 ++++++++---- htdocs/variants/combinations.php | 26 +++++++++++++++++--------- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index 36ca0ede002..21f4d4947ce 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -208,8 +208,8 @@ UseMultipriceRules=Use price segment rules (defined into product module setup) t PercentVariationOver=%% variation over %s PercentDiscountOver=%% discount over %s KeepEmptyForAutoCalculation=Keep empty to have this calculated automatically from weight or volume of products -VariantRefExample=Example: COL -VariantLabelExample=Example: Color +VariantRefExample=Examples: COL, SIZE +VariantLabelExample=Examples: Color, Size ### composition fabrication Build=Produce ProductsMultiPrice=Products and prices for each price segment diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index 2c0515d309c..9ef671e9913 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -804,8 +804,8 @@ if (! $variants) { */ print '
'; + print ''; - print '
'; print ''; print ''; print ''; @@ -918,7 +918,8 @@ if (! $variants) { print ''; print ''; print ''; - print ''; + print ''; + print ''; } } } @@ -926,12 +927,13 @@ if (! $variants) { } } else dol_print_error($db); + // Total line print ''; print ''; print ''; -// Value purchase + // Value purchase print ''; @@ -939,12 +941,13 @@ if (! $variants) { if (empty($conf->global->PRODUIT_MULTIPRICES)) print ($total ? price($totalvaluesell / $total, 1) : ' '); else print $langs->trans("Variable"); print ''; -// Value to sell + // Value to sell print ''; print ""; + print "
' . $langs->trans("Warehouse") . '' . $langs->trans("NumberOfUnit") . '' . dol_print_date($pdluo->eatby, 'day') . '' . dol_print_date($pdluo->sellby, 'day') . '' . $pdluo->qty . ($pdluo->qty < 0 ? ' ' . img_warning() : '') . '
' . $langs->trans("Total") . ':' . price2num($total, 'MS') . ''; print ($totalwithpmp ? price(price2num($totalvalue / $totalwithpmp, 'MU')) : ' '); // This value may have rounding errors print ''; print $totalvalue ? price(price2num($totalvalue, 'MT'), 1) : ' '; print ''; if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($totalvaluesell, 'MT'), 1); else print $langs->trans("Variable"); print '
"; print '
'; @@ -1067,6 +1070,7 @@ if (! $variants) { print ''; print ''.$langs->trans("Total").''; print ''.$stock_total.''; + print ''; print ''; } else diff --git a/htdocs/variants/combinations.php b/htdocs/variants/combinations.php index 3239dbb5060..4a7774b1a08 100644 --- a/htdocs/variants/combinations.php +++ b/htdocs/variants/combinations.php @@ -377,6 +377,7 @@ if (! empty($id) || ! empty($ref)) dol_fiche_end(); + $listofvariantselected = ''; // Create or edit a varian if ($action == 'add' || ($action == 'edit')) { @@ -386,7 +387,7 @@ if (! empty($id) || ! empty($ref)) //print dol_fiche_head(); $features = $_SESSION['addvariant_'.$object->id]; //First, sanitize - print '
'; + $listofvariantselected = '
'; if (! empty($features)) { foreach ($features as $feature) { @@ -400,16 +401,14 @@ if (! empty($id) || ! empty($ref)) continue; } - print '' . $prodattr->label . ':'. $prodattr_val->value . ' '; + $listofvariantselected .= '' . $prodattr->label . ':'. $prodattr_val->value . ' '; } } - print '
'; - print '

'; + $listofvariantselected .= '
'; //print dol_fiche_end(); } else { $title = $langs->trans('EditProductCombination'); } - print load_fiche_titre($title); if ($action == 'add') { $prodattr_all = $prodattr->fetchAll(); @@ -499,6 +498,10 @@ if (! empty($id) || ! empty($ref)) '; + + print load_fiche_titre($title); + print '
'."\n"; print ''; print ''."\n"; @@ -507,9 +510,9 @@ if (! empty($id) || ! empty($ref)) print ''."\n"; } - print dol_fiche_head(); + print dol_fiche_head(); - ?> + ?> @@ -524,6 +527,7 @@ if (! empty($id) || ! empty($ref)) print ''; foreach ($prodattr_all as $attr) { + //print ''; print ''; } print ''; @@ -561,6 +565,10 @@ if (! empty($id) || ! empty($ref)) "> + +
+ +
variation_price >= 0 ? '+' : '').price($currcomb->variation_price).($currcomb->variation_price_percentage ? ' %' : '') ?> isProduct()) print ''.($currcomb->variation_weight >= 0 ? '+' : '').price($currcomb->variation_weight).' '.measuring_units_string($prodstatic->weight_units, 'weight').''; ?> - getLibStatut(2, 0) ?> - getLibStatut(2, 1) ?> + getLibStatut(2, 0) ?> + getLibStatut(2, 1) ?> From 67d76787eba1dd3493dc435c36d5695751584131 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 12 Oct 2019 15:29:06 +0200 Subject: [PATCH 236/980] Add new hidden conf VARIANT_ALLOW_STOCK_MOVEMENT_ON_VARIANT_PARENT --- htdocs/product/stock/product.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index 9ef671e9913..944b3ce96cd 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -764,7 +764,7 @@ if (empty($reshook)) if ($user->rights->stock->mouvement->creer) { - if (! $variants) { + if (! $variants || ! empty($conf->global->VARIANT_ALLOW_STOCK_MOVEMENT_ON_VARIANT_PARENT)) { print '' . $langs->trans("CorrectStock") . ''; } else @@ -780,7 +780,7 @@ if (empty($reshook)) //if (($user->rights->stock->mouvement->creer) && ! $object->hasbatch()) if ($user->rights->stock->mouvement->creer) { - if (! $variants) { + if (! $variants || ! empty($conf->global->VARIANT_ALLOW_STOCK_MOVEMENT_ON_VARIANT_PARENT)) { print '' . $langs->trans("TransferStock") . ''; } else From cef935468d6669765ee563b97cb0275824e4799e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 12 Oct 2019 18:40:39 +0200 Subject: [PATCH 237/980] Update list.php --- htdocs/compta/bank/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php index 843b3b0e323..df5442f02d6 100644 --- a/htdocs/compta/bank/list.php +++ b/htdocs/compta/bank/list.php @@ -454,7 +454,7 @@ foreach ($accounts as $key=>$type) if (! empty($arrayfields['b.account_number']['checked'])) { print ''; - if (! empty($conf->accounting->enabled)) + if (! empty($conf->accounting->enabled) && ! empty($objecttmp->account_number)) { $accountingaccount = new AccountingAccount($db); $accountingaccount->fetch('', $objecttmp->account_number, 1); @@ -472,7 +472,7 @@ foreach ($accounts as $key=>$type) if (! empty($arrayfields['b.fk_accountancy_journal']['checked'])) { print ''; - if (! empty($conf->accounting->enabled)) + if (! empty($conf->accounting->enabled) && ! empty($objecttmp->fk_accountancy_journal)) { $accountingjournal = new AccountingJournal($db); $accountingjournal->fetch($objecttmp->fk_accountancy_journal); From 9c94ffeea9cb61efd5cdb2dc3cf6693d9709ef3d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 12 Oct 2019 18:40:41 +0200 Subject: [PATCH 238/980] Fix css --- htdocs/comm/mailing/cibles.php | 2 +- htdocs/theme/eldy/global.inc.php | 3 +++ htdocs/theme/md/style.css.php | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index 3cc5f12566d..532e792bd6e 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -338,7 +338,7 @@ if ($object->fetch($id) >= 0) print '
'; if (empty($obj->picto)) $obj->picto='generic'; - print img_object($langs->trans("EmailingTargetSelector").': '.get_class($obj), $obj->picto); + print img_object($langs->trans("EmailingTargetSelector").': '.get_class($obj), $obj->picto, 'class="valignmiddle pictomodule"'); print ' '; print $obj->getDesc(); print '
'; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 46d24b08cc6..0189a3988dd 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1293,6 +1293,9 @@ div.nopadding { .pictowarning { vertical-align: text-bottom; } +.pictomodule { + width: 14px; +} .fiche .arearef img.pictoedit, .fiche .arearef span.pictoedit, .fiche .fichecenter img.pictoedit, .fiche .fichecenter span.pictoedit, .tagtdnote span.pictoedit { diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index a9e94eb885c..8e0cf75047b 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1483,6 +1483,9 @@ table.noborder tr.liste_titre td { .pictowarning { vertical-align: text-bottom; } +.pictomodule { + width: 14px; +} .fiche .arearef img.pictoedit, .fiche .arearef span.pictoedit, .fiche .fichecenter img.pictoedit, .fiche .fichecenter span.pictoedit, .tagtdnote span.pictoedit { From 650cd2b54ffe616cff7228a0478291812b08ffdd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 12 Oct 2019 18:41:33 +0200 Subject: [PATCH 239/980] Prepare 10.0.3 --- 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 94455858e8b..fffd9be3636 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', '10.0.2'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c +if (! defined('DOL_VERSION')) define('DOL_VERSION', '10.0.3'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c if (! defined('EURO')) define('EURO', chr(128)); From b424fc6e274a2596428291cd8b4612978f6a1e12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 12 Oct 2019 18:57:08 +0200 Subject: [PATCH 240/980] Update list.php --- htdocs/compta/bank/list.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php index 843b3b0e323..de8c743803c 100644 --- a/htdocs/compta/bank/list.php +++ b/htdocs/compta/bank/list.php @@ -505,8 +505,13 @@ foreach ($accounts as $key=>$type) if ($result<0) { setEventMessages($objecttmp->error, $objecttmp->errors, 'errors'); } else { - print $result->nbtodo; - if ($result->nbtodolate) print '   ('.$result->nbtodolate.img_warning($langs->trans("Late")).')'; + print ''.$result->nbtodo.''; + if ($result->nbtodolate) { + print ' '; + print ''; + print ' '.$result->nbtodolate; + print ''; + } } } else print $langs->trans("FeatureDisabled"); From c338db6c367be395ae2f8df826875adeb0475281 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 12 Oct 2019 19:16:36 +0200 Subject: [PATCH 241/980] Fix unlink picto --- htdocs/core/lib/functions.lib.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index a17b3c19c5f..1aee5e67cd5 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3135,7 +3135,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ $marginleftonlyshort=0; } elseif ($pictowithouttext == 'unlink') { - $fakey = 'fa-chain-broken'; + $fakey = 'fa-unlink'; $facolor = '#555'; } elseif ($pictowithouttext == 'playdisabled') { @@ -3169,6 +3169,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ //$facolor = '#444'; $marginleftonlyshort=0; } + //this snippet only needed since function img_edit accepts only one additional parameter: no separate one for css only. //class/style need to be extracted to avoid duplicate class/style validation errors when $moreatt is added to the end of the attributes $reg=array(); From 33f620603107909a180a3c5293022ca2b33088a9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 12 Oct 2019 20:12:24 +0200 Subject: [PATCH 242/980] NEW Add link to export target of emailings into a CSV file. --- htdocs/comm/mailing/cibles.php | 76 +++++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 16 deletions(-) diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index 1e467331d90..4ca8b75af31 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -54,16 +54,17 @@ if (! $sortorder) $sortorder="ASC"; $id=GETPOST('id', 'int'); $rowid=GETPOST('rowid', 'int'); $action=GETPOST('action', 'aZ09'); -$search_lastname=GETPOST("search_lastname"); -$search_firstname=GETPOST("search_firstname"); -$search_email=GETPOST("search_email"); -$search_other=GETPOST("search_other"); -$search_dest_status=GETPOST('search_dest_status'); +$search_lastname=GETPOST("search_lastname", 'alphanohtml'); +$search_firstname=GETPOST("search_firstname", 'alphanohtml'); +$search_email=GETPOST("search_email", 'alphanohtml'); +$search_other=GETPOST("search_other", 'alphanohtml'); +$search_dest_status=GETPOST('search_dest_status', 'alphanohtml'); // Search modules dirs $modulesdir = dolGetModulesDirs('/mailings'); $object = new Mailing($db); +$result=$object->fetch($id); /* @@ -112,7 +113,7 @@ if ($action == 'add') } } -if (GETPOST('clearlist')) +if (GETPOST('clearlist', 'int')) { // Loading Class $obj = new MailingTargets($db); @@ -123,6 +124,50 @@ if (GETPOST('clearlist')) */ } +if (GETPOST('exportcsv', 'int')) +{ + $completefilename = 'targets_emailing'.$object->id.'_'.dol_print_date(dol_now(), 'dayhourlog').'csv'; + header('Content-Type: text/csv'); + header('Content-Disposition: attachment;filename=' . $completefilename); + + // List of selected targets + $sql = "SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut, mc.date_envoi, mc.tms,"; + $sql .= " mc.source_url, mc.source_id, mc.source_type, mc.error_text"; + $sql .= " FROM ".MAIN_DB_PREFIX."mailing_cibles as mc"; + $sql .= " WHERE mc.fk_mailing=".$object->id; + $sql .= $db->order($sortfield, $sortorder); + + $resql=$db->query($sql); + if ($resql) + { + $num = $db->num_rows($resql); + $sep = ','; + + while ($obj = $db->fetch_object($resql)) + { + print $obj->rowid . $sep; + print $obj->lastname . $sep; + print $obj->firstname . $sep; + print $obj->email . $sep; + print $obj->other . $sep; + print $obj->date_envoi . $sep; + print $obj->tms . $sep; + print $obj->source_url . $sep; + print $obj->source_id . $sep; + print $obj->source_type . $sep; + print $obj->error_text . $sep; + print "\n"; + } + + exit; + } + else + { + dol_print_error($db); + } + exit; +} + if ($action == 'delete') { // Ici, rowid indique le destinataire et id le mailing @@ -437,10 +482,11 @@ if ($object->fetch($id) >= 0) $param = "&id=".$object->id; //if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); - if ($search_lastname) $param.= "&search_lastname=".urlencode($search_lastname); - if ($search_firstname) $param.= "&search_firstname=".urlencode($search_firstname); - if ($search_email) $param.= "&search_email=".urlencode($search_email); - if ($search_other) $param.= "&search_other=".urlencode($search_other); + if ($search_lastname) $param.= "&search_lastname=".urlencode($search_lastname); + if ($search_firstname) $param.= "&search_firstname=".urlencode($search_firstname); + if ($search_email) $param.= "&search_email=".urlencode($search_email); + if ($search_other) $param.= "&search_other=".urlencode($search_other); + if ($page) $param.= "&page=".urlencode($page); print ''; print ''; @@ -449,11 +495,12 @@ if ($object->fetch($id) >= 0) print ''; print ''; - $cleartext=''; + $morehtmlcenter=''; if ($allowaddtarget) { - $cleartext=$langs->trans("ToClearAllRecipientsClickHere").' '.'id.'" class="button reposition">'.$langs->trans("TargetsReset").''; + $morehtmlcenter=''.$langs->trans("ToClearAllRecipientsClickHere").' id.'" class="button reposition">'.$langs->trans("TargetsReset").''; } - print_barre_liste($langs->trans("MailSelectedRecipients"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $cleartext, $num, $nbtotalofrecords, 'generic', 0, '', '', $limit); + $morehtmlcenter.=' id.'">'.$langs->trans("Download").''; + print_barre_liste($langs->trans("MailSelectedRecipients"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $morehtmlcenter, $num, $nbtotalofrecords, 'generic', 0, '', '', $limit); print ''; @@ -466,9 +513,6 @@ if ($object->fetch($id) >= 0) print ''; print ''; - - if ($page) $param.= "&page=".$page; - print '
'; print ''; From bb21d048f476d749836ddfb29ac196e6487787f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 12 Oct 2019 22:08:11 +0200 Subject: [PATCH 243/980] keep a copy of object for trigger --- htdocs/contact/card.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 4139176e84e..9de1672db90 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -250,6 +250,7 @@ if (empty($reshook)) if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->societe->contact->supprimer) { $result=$object->fetch($id); + $object->oldcopy = clone $object; $object->old_lastname = GETPOST("old_lastname"); $object->old_firstname = GETPOST("old_firstname"); From 2d3a6d2108f5aa09853830c26d05defd155ee0da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 13 Oct 2019 06:05:21 +0200 Subject: [PATCH 244/980] Update card.php --- htdocs/societe/card.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 39754b14fe0..e2a8f731856 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -817,6 +817,7 @@ if (empty($reshook)) if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->societe->supprimer) { $object->fetch($socid); + $object->oldcopy = clone $object; $result = $object->delete($socid, $user); if ($result > 0) From f6a2fd6eb88a31cf2a96dcfdd2d061a829d66884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 13 Oct 2019 06:08:32 +0200 Subject: [PATCH 245/980] Update card.php --- htdocs/user/card.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/user/card.php b/htdocs/user/card.php index bdef850fa6b..edcb99678bb 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -156,6 +156,7 @@ if (empty($reshook)) { $object = new User($db); $object->fetch($id); + $object->oldcopy = clone $object; $result = $object->delete($user); if ($result < 0) { From 9eaad235640851791a4ea6fa013446c33fcf78a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 13 Oct 2019 06:12:53 +0200 Subject: [PATCH 246/980] Update api_contacts.class.php --- htdocs/societe/class/api_contacts.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/class/api_contacts.class.php b/htdocs/societe/class/api_contacts.class.php index b2432afe243..cfddddb7b96 100644 --- a/htdocs/societe/class/api_contacts.class.php +++ b/htdocs/societe/class/api_contacts.class.php @@ -292,7 +292,7 @@ class Contacts extends DolibarrApi { throw new RestException(401, 'Access not allowed for login ' . DolibarrApiAccess::$user->login); } - + $this->contact->oldcopy = clone $this->contact; return $this->contact->delete($id); } From 809d98129f5640ead0c2ee3601c66d66d5c13bce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 13 Oct 2019 06:14:45 +0200 Subject: [PATCH 247/980] Update api_thirdparties.class.php --- htdocs/societe/class/api_thirdparties.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/societe/class/api_thirdparties.class.php b/htdocs/societe/class/api_thirdparties.class.php index 3d2104cc6f2..adcde4b0d5e 100644 --- a/htdocs/societe/class/api_thirdparties.class.php +++ b/htdocs/societe/class/api_thirdparties.class.php @@ -418,7 +418,7 @@ class Thirdparties extends DolibarrApi // External modules should update their ones too if (!$errors) { -$reshook = $hookmanager->executeHooks('replaceThirdparty', array( + $reshook = $hookmanager->executeHooks('replaceThirdparty', array( 'soc_origin' => $soc_origin->id, 'soc_dest' => $object->id ), $soc_dest, $action); @@ -488,6 +488,7 @@ $reshook = $hookmanager->executeHooks('replaceThirdparty', array( if( ! DolibarrApi::_checkAccessToResource('societe', $this->company->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } + $this->company->oldcopy = $this->company; return $this->company->delete($id); } From 0ae1e8c2a98990f7257c73d4a4a433849c5a257f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 13 Oct 2019 06:17:57 +0200 Subject: [PATCH 248/980] Update api_users.class.php --- htdocs/user/class/api_users.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/user/class/api_users.class.php b/htdocs/user/class/api_users.class.php index 72690c65dcb..9549fbe2ef1 100644 --- a/htdocs/user/class/api_users.class.php +++ b/htdocs/user/class/api_users.class.php @@ -350,7 +350,7 @@ class Users extends DolibarrApi { throw new RestException(401, 'Access not allowed for login ' . DolibarrApiAccess::$user->login); } - + $this->useraccount->oldcopy = clone $this->useraccount; return $this->useraccount->delete(DolibarrApiAccess::$user); } From 352df8241e6e9c8405563a2a22db3f82f06ab88a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 13 Oct 2019 06:19:40 +0200 Subject: [PATCH 249/980] Update api_thirdparties.class.php --- htdocs/societe/class/api_thirdparties.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/class/api_thirdparties.class.php b/htdocs/societe/class/api_thirdparties.class.php index adcde4b0d5e..ed3b26e04ac 100644 --- a/htdocs/societe/class/api_thirdparties.class.php +++ b/htdocs/societe/class/api_thirdparties.class.php @@ -488,7 +488,7 @@ class Thirdparties extends DolibarrApi if( ! DolibarrApi::_checkAccessToResource('societe', $this->company->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } - $this->company->oldcopy = $this->company; + $this->company->oldcopy = clone $this->company; return $this->company->delete($id); } From 499eb87173aa6b35a843808aca8a5e03e7414c5c Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 13 Oct 2019 08:20:37 +0200 Subject: [PATCH 250/980] lang file for holidays is holiday --- htdocs/core/modules/holiday/modules_holiday.php | 4 ++-- htdocs/holiday/document.php | 4 +--- htdocs/holiday/list.php | 2 +- htdocs/index.php | 2 +- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/htdocs/core/modules/holiday/modules_holiday.php b/htdocs/core/modules/holiday/modules_holiday.php index 9bd0a448ebc..8797d1f377c 100644 --- a/htdocs/core/modules/holiday/modules_holiday.php +++ b/htdocs/core/modules/holiday/modules_holiday.php @@ -96,7 +96,7 @@ class ModelNumRefHolidays public function info() { global $langs; - $langs->load("holidays"); + $langs->load("holiday"); return $langs->trans("NoDescription"); } @@ -108,7 +108,7 @@ class ModelNumRefHolidays public function getExample() { global $langs; - $langs->load("holidays"); + $langs->load("holiday"); return $langs->trans("NoExample"); } diff --git a/htdocs/holiday/document.php b/htdocs/holiday/document.php index a594a920e74..30803a9ecbc 100644 --- a/htdocs/holiday/document.php +++ b/htdocs/holiday/document.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/holiday.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; // Load translation files required by the page -$langs->loadLangs(array('other', 'holidays', 'companies')); +$langs->loadLangs(array('other', 'holiday', 'companies')); $id = GETPOST('id', 'int'); $ref = GETPOST('ref', 'alpha'); @@ -48,8 +48,6 @@ $confirm = GETPOST('confirm', 'alpha'); if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'holiday', $id, 'holiday'); -$langs->load("holiday"); - // Get parameters $sortfield = GETPOST('sortfield', 'alpha'); $sortorder = GETPOST('sortorder', 'alpha'); diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index f74d731e8bd..1c03e3801b6 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php'; // Load translation files required by the page -$langs->loadLangs(array('users', 'holidays', 'hrm')); +$langs->loadLangs(array('users', 'holiday', 'hrm')); // Protection if external user if ($user->societe_id > 0) accessforbidden(); diff --git a/htdocs/index.php b/htdocs/index.php index d6ce8c90067..5eee02efa1e 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -218,7 +218,7 @@ if (empty($user->societe_id)) 'askprice', 'projects', 'expensereports', - 'holidays', + 'holiday', 'donations' ); // Dashboard Icon lines From 67278e4781505149fc806501de2a54c746281641 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 13 Oct 2019 10:18:41 +0200 Subject: [PATCH 251/980] Update box_last_ticket.php --- htdocs/core/boxes/box_last_ticket.php | 53 +++++++++++++++------------ 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/htdocs/core/boxes/box_last_ticket.php b/htdocs/core/boxes/box_last_ticket.php index 5469efd8fc5..18990cd8bb6 100644 --- a/htdocs/core/boxes/box_last_ticket.php +++ b/htdocs/core/boxes/box_last_ticket.php @@ -1,7 +1,8 @@ - * 2016 Christophe Battarel + * Copyright (C) 2013-2016 Jean-François FERRY + * Copyright (C) 2016 Christophe Battarel + * Copyright (C) 2018-2019 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 @@ -46,7 +47,7 @@ class box_last_ticket extends ModeleBoxes /** * Constructor - * @param DoliDB $db Database handler + * @param DoliDB $db Database handler * @param string $param More parameters */ public function __construct($db, $param = '') @@ -70,7 +71,7 @@ class box_last_ticket extends ModeleBoxes $this->max = $max; - dol_include_once("/ticket/class/ticket.class.php"); + require_once DOL_DOCUMENT_ROOT."/ticket/class/ticket.class.php"; $text = $langs->trans("BoxLastTicketDescription", $max); $this->info_box_head = array( @@ -86,7 +87,7 @@ class box_last_ticket extends ModeleBoxes if ($user->rights->ticket->read) { $sql = "SELECT t.rowid as id, t.ref, t.track_id, t.fk_soc, t.fk_user_create, t.fk_user_assign, t.subject, t.message, t.fk_statut, t.type_code, t.category_code, t.severity_code, t.datec, t.date_read, t.date_close, t.origin_email "; $sql .= ", type.label as type_label, category.label as category_label, severity.label as severity_label"; - $sql .= ", s.nom as company_name"; + $sql .= ", s.nom as company_name, s.email as socemail, s.client, s.fournisseur"; $sql .= " FROM " . MAIN_DB_PREFIX . "ticket as t"; $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_ticket_type as type ON type.code=t.type_code"; $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_ticket_category as category ON category.code=t.category_code"; @@ -108,7 +109,6 @@ class box_last_ticket extends ModeleBoxes $resql = $this->db->query($sql); if ($resql) { $num = $this->db->num_rows($resql); - $now = gmmktime(); $i = 0; @@ -120,22 +120,30 @@ class box_last_ticket extends ModeleBoxes $late = ''; $ticket = new Ticket($this->db); + $ticket->id = $objp->id; + $ticket->track_id = $objp->track_id; + $ticket->ref = $objp->ref; + $ticket->fk_statut = $objp->fk_statut; + $ticket->subject = $objp->subject; + if ($objp->fk_soc > 0) { + $thirdparty = new Societe($this->db); + $thirdparty->id = $objp->fk_soc; + $thirdparty->email = $objp->socemail; + $thirdparty->client = $objp->client; + $thirdparty->fournisseur = $objp->fournisseur; + $thirdparty->name = $objp->company_name; + $link = $thirdparty->getNomUrl(1); + } else { + $link = dol_print_email($objp->origin_email); + } $r = 0; - // Picto - $this->info_box_contents[$i][0] = array( - 'td' => 'class="left" width="16"', - 'logo' => $this->boximg, - 'url' => dol_buildpath("/ticket/card.php?track_id=" . $objp->track_id, 1), - ); - $r++; - - // Id + // Ticket $this->info_box_contents[$i][$r] = array( 'td' => 'class="left"', - 'text' => $objp->ref, - 'url' => dol_buildpath("/ticket/card.php?track_id=" . $objp->track_id, 1), + 'text' => $ticket->getNomUrl(1), + 'asis' => 1 ); $r++; @@ -143,16 +151,15 @@ class box_last_ticket extends ModeleBoxes $this->info_box_contents[$i][$r] = array( 'td' => 'class="left"', 'text' => $objp->subject, // Some event have no ref - 'url' => dol_buildpath("/ticket/card.php?track_id=" . $objp->track_id, 1), + 'url' => DOL_URL_ROOT."/ticket/card.php?track_id=" . $objp->track_id, ); $r++; // Customer $this->info_box_contents[$i][$r] = array( 'td' => 'class="left"', - 'logo' => ($objp->fk_soc > 0 ? 'company' : ''), - 'text' => ($objp->company_name ? $objp->company_name : $objp->origin_email), - 'url' => ($objp->fk_soc > 0 ? DOL_URL_ROOT . "/comm/card.php?socid=" . $objp->fk_soc : ''), + 'text' => $link, + 'asis' => 1, ); $r++; @@ -164,11 +171,9 @@ class box_last_ticket extends ModeleBoxes $r++; // Statut - $ticketstat = new Ticket($this->db); - $ticketstat->fk_statut = $objp->fk_statut; $this->info_box_contents[$i][$r] = array( 'td' => 'class="right"', - 'text' => $ticketstat->getLibStatut(3), + 'text' => $ticket->getLibStatut(3), ); $r++; From 92e4b962faa12b49f205e213bda3eaba7d002fb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 13 Oct 2019 10:37:30 +0200 Subject: [PATCH 252/980] Update box_last_modified_ticket.php --- .../core/boxes/box_last_modified_ticket.php | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/htdocs/core/boxes/box_last_modified_ticket.php b/htdocs/core/boxes/box_last_modified_ticket.php index 87d7e0f7d50..8f86be5a115 100644 --- a/htdocs/core/boxes/box_last_modified_ticket.php +++ b/htdocs/core/boxes/box_last_modified_ticket.php @@ -47,7 +47,7 @@ class box_last_modified_ticket extends ModeleBoxes /** * Constructor - * @param DoliDB $db Database handler + * @param DoliDB $db Database handler * @param string $param More parameters */ public function __construct($db, $param = '') @@ -71,7 +71,7 @@ class box_last_modified_ticket extends ModeleBoxes $this->max = $max; - dol_include_once("/ticket/class/ticket.class.php"); + require_once DOL_DOCUMENT_ROOT."/ticket/class/ticket.class.php"; $text = $langs->trans("BoxLastModifiedTicketDescription", $max); $this->info_box_head = array( @@ -87,7 +87,7 @@ class box_last_modified_ticket extends ModeleBoxes if ($user->rights->ticket->read) { $sql = "SELECT t.rowid as id, t.ref, t.track_id, t.fk_soc, t.fk_user_create, t.fk_user_assign, t.subject, t.message, t.fk_statut, t.type_code, t.category_code, t.severity_code, t.datec, t.date_read, t.date_close, t.origin_email "; $sql.= ", type.label as type_label, category.label as category_label, severity.label as severity_label"; - $sql.= ", s.nom as company_name"; + $sql.= ", s.nom as company_name, s.email as socemail, s.client, s.fournisseur"; $sql.= " FROM ".MAIN_DB_PREFIX."ticket as t"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_ticket_type as type ON type.code=t.type_code"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_ticket_category as category ON category.code=t.category_code"; @@ -107,7 +107,6 @@ class box_last_modified_ticket extends ModeleBoxes $resql = $this->db->query($sql); if ($resql) { $num = $this->db->num_rows($resql); - $now=gmmktime(); $i = 0; @@ -119,23 +118,31 @@ class box_last_modified_ticket extends ModeleBoxes $late = ''; $ticket = new Ticket($this->db); + $ticket->id = $objp->id; + $ticket->track_id = $objp->track_id; + $ticket->ref = $objp->ref; + $ticket->fk_statut = $objp->fk_statut; + $ticket->subject = $objp->subject; + if ($objp->fk_soc > 0) { + $thirdparty = new Societe($this->db); + $thirdparty->id = $objp->fk_soc; + $thirdparty->email = $objp->socemail; + $thirdparty->client = $objp->client; + $thirdparty->fournisseur = $objp->fournisseur; + $thirdparty->name = $objp->company_name; + $link = $thirdparty->getNomUrl(1); + } else { + $link = dol_print_email($objp->origin_email); + } $r=0; - // Picto + // Ticket $this->info_box_contents[$i][0] = array( - 'td' => 'class="left" width="16"', - 'logo' => $this->boximg, - 'url' => dol_buildpath("/ticket/card.php?track_id=".$objp->track_id, 1), - ); - $r++; - - // Id - $this->info_box_contents[$i][$r] = array( 'td' => 'class="left"', - 'text' => $objp->ref, - 'url' => dol_buildpath("/ticket/card.php?track_id=".$objp->track_id, 1), + 'text' => $ticket->getNomUrl(1), + 'asis' => 1, ); $r++; @@ -143,16 +150,15 @@ class box_last_modified_ticket extends ModeleBoxes $this->info_box_contents[$i][$r] = array( 'td' => 'class="left"', 'text' => $objp->subject, // Some event have no ref - 'url' => dol_buildpath("/ticket/card.php?track_id=".$objp->track_id, 1), + 'url' => DOL_URL_ROOT."/ticket/card.php?track_id=".$objp->track_id, ); $r++; // Customer $this->info_box_contents[$i][$r] = array( 'td' => 'class="left"', - 'logo' => ($objp->fk_soc>0?'company':''), - 'text' => ($objp->company_name?$objp->company_name:$objp->origin_email), - 'url' => ($objp->fk_soc>0?DOL_URL_ROOT."/comm/card.php?socid=".$objp->fk_soc:'') + 'text' => $link, + 'asis' => 1, ); $r++; @@ -165,11 +171,9 @@ class box_last_modified_ticket extends ModeleBoxes $r++; // Statut - $ticketstat = new Ticket($this->db); - $ticketstat->fk_statut = $objp->fk_statut; $this->info_box_contents[$i][$r] = array( 'td' => 'class="right"', - 'text' => $ticketstat->getLibStatut(3) + 'text' => $ticket->getLibStatut(3) ); $r++; From e50d32dc00536523090307691cd1c0b1d6518119 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 13 Oct 2019 13:20:45 +0200 Subject: [PATCH 253/980] Remove a duplicate line --- htdocs/core/modules/modSociete.class.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php index a0d190c65cd..8d6490becfe 100644 --- a/htdocs/core/modules/modSociete.class.php +++ b/htdocs/core/modules/modSociete.class.php @@ -269,8 +269,6 @@ class modSociete extends DolibarrModules 't.libelle'=>"ThirdPartyType",'ce.code'=>"Staff","cfj.libelle"=>"JuridicalStatus",'s.fk_prospectlevel'=>'ProspectLevel', 'st.code'=>'ProspectStatus','payterm.libelle'=>'PaymentConditions','paymode.libelle'=>'PaymentMode' ); - if (! empty($conf->global->SOCIETE_USEPREFIX)) $this->export_fields_array[$r]['s.prefix']='Prefix'; - if (! empty($conf->global->SOCIETE_USEPREFIX)) $this->export_fields_array[$r]['s.prefix']='Prefix'; if (! empty($conf->global->PRODUIT_MULTIPRICES)) $this->export_fields_array[$r]['s.price_level']='PriceLevel'; // Add multicompany field From 9efc5a1b9d85184c7fab5fb715b8d36f86177662 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 13 Oct 2019 15:00:07 +0200 Subject: [PATCH 254/980] Fix extension --- htdocs/comm/mailing/cibles.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index 4ca8b75af31..998f4a6c202 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -126,7 +126,7 @@ if (GETPOST('clearlist', 'int')) if (GETPOST('exportcsv', 'int')) { - $completefilename = 'targets_emailing'.$object->id.'_'.dol_print_date(dol_now(), 'dayhourlog').'csv'; + $completefilename = 'targets_emailing'.$object->id.'_'.dol_print_date(dol_now(), 'dayhourlog').'.csv'; header('Content-Type: text/csv'); header('Content-Disposition: attachment;filename=' . $completefilename); From f91b98d326f6a2f591e6538f1dba9e7ba22ff338 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 13 Oct 2019 20:50:03 +0200 Subject: [PATCH 255/980] Add frequency in template invoice popup --- .../compta/facture/class/facture-rec.class.php | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index a71860c01c1..e65db4d2f5e 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2015 Laurent Destailleur + * Copyright (C) 2004-2019 Laurent Destailleur * Copyright (C) 2009-2012 Regis Houssin * Copyright (C) 2010-2011 Juanjo Menent * Copyright (C) 2012 Cedric Salvador @@ -1241,14 +1241,17 @@ class FactureRec extends CommonInvoice $result=''; $label = '' . $langs->trans("ShowInvoice") . ''; - if (! empty($this->ref)) + if (! empty($this->ref)) { $label .= '
'.$langs->trans('Ref') . ': ' . $this->ref; - if (! empty($this->date_last_gen)) + } + if ($this->frequency > 0) { + $label .= '
'.$langs->trans('Frequency') . ': ' . $this->frequency.$this->unit_frequency; + } + if (! empty($this->date_last_gen)) { $label .= '
'.$langs->trans('DateLastGeneration') . ': ' . dol_print_date($this->date_last_gen, 'dayhour'); - if ($this->frequency > 0) - { - if (! empty($this->date_when)) - { + } + if ($this->frequency > 0) { + if (! empty($this->date_when)) { $label .= '
'.$langs->trans('NextDateToExecution') . ': '; $label .= (empty($this->suspended)?'':''). dol_print_date($this->date_when, 'day').(empty($this->suspended)?'':''); // No hour for this property if (! empty($this->suspended)) $label .= ' ('.$langs->trans("Disabled").')'; From 323f31d8323f8e80b1d33d224b5130119f93efe9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 13 Oct 2019 20:54:00 +0200 Subject: [PATCH 256/980] Trans frequency --- .../facture/class/facture-rec.class.php | 2 +- htdocs/compta/facture/fiche-rec.php | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index e65db4d2f5e..18d153dc597 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -1245,7 +1245,7 @@ class FactureRec extends CommonInvoice $label .= '
'.$langs->trans('Ref') . ': ' . $this->ref; } if ($this->frequency > 0) { - $label .= '
'.$langs->trans('Frequency') . ': ' . $this->frequency.$this->unit_frequency; + $label .= '
'.$langs->trans('Frequency') . ': ' . $langs->trans('FrequencyPer_'.$this->unit_frequency, $this->frequency); } if (! empty($this->date_last_gen)) { $label .= '
'.$langs->trans('DateLastGeneration') . ': ' . dol_print_date($this->date_last_gen, 'dayhour'); diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index 713d5e9554d..fb56ccb916f 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -154,7 +154,7 @@ if (empty($reshook)) // Create predefined invoice if ($action == 'add') { - if (! GETPOST('titre')) + if (! GETPOST('titre', 'nohtml')) { setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->trans("Title")), null, 'errors'); $action = "create"; @@ -162,15 +162,15 @@ if (empty($reshook)) } $frequency=GETPOST('frequency', 'int'); - $reyear=GETPOST('reyear'); - $remonth=GETPOST('remonth'); - $reday=GETPOST('reday'); - $rehour=GETPOST('rehour'); - $remin=GETPOST('remin'); + $reyear=GETPOST('reyear', 'int'); + $remonth=GETPOST('remonth', 'int'); + $reday=GETPOST('reday', 'int'); + $rehour=GETPOST('rehour', 'int'); + $remin=GETPOST('remin', 'int'); $nb_gen_max=GETPOST('nb_gen_max', 'int'); //if (empty($nb_gen_max)) $nb_gen_max =0; - if (GETPOST('frequency')) + if (GETPOST('frequency', 'int')) { if (empty($reyear) || empty($remonth) || empty($reday)) { @@ -188,12 +188,12 @@ if (empty($reshook)) if (! $error) { - $object->titre = GETPOST('titre', 'alpha'); // deprecated - $object->title = GETPOST('titre', 'alpha'); + $object->titre = GETPOST('titre', 'nohtml'); // deprecated + $object->title = GETPOST('titre', 'nohtml'); $object->note_private = GETPOST('note_private', 'none'); $object->note_public = GETPOST('note_public', 'none'); $object->modelpdf = GETPOST('modelpdf', 'alpha'); - $object->usenewprice = GETPOST('usenewprice'); + $object->usenewprice = GETPOST('usenewprice', 'alpha'); $object->frequency = $frequency; $object->unit_frequency = GETPOST('unit_frequency', 'alpha'); From e2ca646b6e5f6238f2000700b379a2e87a0305f1 Mon Sep 17 00:00:00 2001 From: Tobias Sekan Date: Mon, 14 Oct 2019 10:22:47 +0200 Subject: [PATCH 257/980] Fix MS Outlook import error --- htdocs/core/lib/xcal.lib.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php index f0edbd6f877..a4ddb68dbd3 100644 --- a/htdocs/core/lib/xcal.lib.php +++ b/htdocs/core/lib/xcal.lib.php @@ -180,7 +180,9 @@ function build_calfile($format, $title, $desc, $events_array, $outputfile) if (! empty($location)) fwrite($calfileh, "LOCATION:".$encoding.$location."\n"); if ($fulldayevent) fwrite($calfileh, "X-FUNAMBOL-ALLDAY:1\n"); - if ($fulldayevent) fwrite($calfileh, "X-MICROSOFT-CDO-ALLDAYEVENT:1\n"); + + // see https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxcical/0f262da6-c5fd-459e-9f18-145eba86b5d2 + if ($fulldayevent) fwrite($calfileh, "X-MICROSOFT-CDO-ALLDAYEVENT:TRUE\n"); // Date must be GMT dates // Current date From 7973b0320166f2cefec0158714e6da9e49eadf2f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 11:38:36 +0200 Subject: [PATCH 258/980] NEW Add estimated duration on the BOM module --- htdocs/bom/class/bom.class.php | 5 +- htdocs/core/class/commonobject.class.php | 117 +++++++++++------- .../install/mysql/migration/10.0.0-11.0.0.sql | 2 + htdocs/install/mysql/tables/llx_bom_bom.sql | 1 + htdocs/langs/en_US/mrp.lang | 4 +- 5 files changed, 79 insertions(+), 50 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 44370b40720..73e26de8aea 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -94,6 +94,7 @@ class BOM extends CommonObject 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp'), 'qty' => array('type'=>'real', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'default'=>1, 'position'=>55, 'notnull'=>1, 'isameasure'=>'1', 'css'=>'maxwidth75imp'), 'efficiency' => array('type'=>'real', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>-1, 'default'=>1, 'position'=>100, 'notnull'=>0, 'css'=>'maxwidth50imp', 'help'=>'ValueOfMeansLoss'), + 'duration' => array('type'=>'real', 'label'=>'EstimatedDuration', 'enabled'=>1, 'visible'=>-1, 'position'=>101, 'notnull'=>-1, 'css'=>'maxwidth50imp', 'help'=>'EstimatedDurationDesc'), 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>-1, 'position'=>161, 'notnull'=>-1,), 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>-1, 'position'=>162, 'notnull'=>-1,), 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>300, 'notnull'=>1,), @@ -202,7 +203,7 @@ class BOM extends CommonObject */ public function create(User $user, $notrigger = false) { - if ($this->efficiency < 0 || $this->efficiency > 1) $this->efficiency = 1; + if ($this->efficiency <= 0 || $this->efficiency > 1) $this->efficiency = 1; return $this->createCommon($user, $notrigger); } @@ -412,7 +413,7 @@ class BOM extends CommonObject */ public function update(User $user, $notrigger = false) { - if ($this->efficiency < 0 || $this->efficiency > 1) $this->efficiency = 1; + if ($this->efficiency <= 0 || $this->efficiency > 1) $this->efficiency = 1; return $this->updateCommon($user, $notrigger); } diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index bc1e93314ec..484bb5fa4d4 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2572,8 +2572,7 @@ abstract class CommonObject public function updateRangOfLine($rowid, $rang) { $fieldposition = 'rang'; // @TODO Rename 'rang' into 'position' - if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position'; - if (in_array($this->table_element_line, array('bom_bomline'))) $fieldposition = 'position'; + if (in_array($this->table_element_line, array('bom_bomline', 'ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position'; $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang; $sql.= ' WHERE rowid = '.$rowid; @@ -2879,11 +2878,11 @@ abstract class CommonObject $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_PROPOSAL"; elseif ($this->element == 'commande' || $this->element == 'order') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_ORDER"; - elseif ($this->element == 'facture') + elseif ($this->element == 'facture' || $this->element == 'invoice') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_INVOICE"; - elseif ($this->element == 'facture_fourn') + elseif ($this->element == 'facture_fourn' || $this->element == 'supplier_invoice') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_INVOICE"; - elseif ($this->element == 'order_supplier') + elseif ($this->element == 'order_supplier' || $this->element == 'supplier_order') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_ORDER"; elseif ($this->element == 'supplier_proposal') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_PROPOSAL"; @@ -6271,18 +6270,12 @@ abstract class CommonObject $value=''; } } - elseif ($type == 'double') + elseif ($type == 'double' || $type == 'real') { if (!empty($value)) { $value=price($value); } } - elseif ($type == 'real') - { - if (!empty($value)) { - $value=price($value); - } - } elseif ($type == 'boolean') { $checked=''; @@ -7115,7 +7108,7 @@ abstract class CommonObject * Function test if type is array * * @param array $info content informations of field - * @return bool + * @return bool true if array */ protected function isArray($info) { @@ -7124,42 +7117,26 @@ abstract class CommonObject if(isset($info['type']) && $info['type']=='array') return true; else return false; } - else return false; - } - - /** - * Function test if type is null - * - * @param array $info content informations of field - * @return bool - */ - protected function isNull($info) - { - if(is_array($info)) - { - if(isset($info['type']) && $info['type']=='null') return true; - else return false; - } - else return false; + return false; } /** * Function test if type is date * * @param array $info content informations of field - * @return bool + * @return bool true if date */ public function isDate($info) { if(isset($info['type']) && ($info['type']=='date' || $info['type']=='datetime' || $info['type']=='timestamp')) return true; - else return false; + return false; } /** * Function test if type is integer * * @param array $info content informations of field - * @return bool + * @return bool true if integer */ public function isInt($info) { @@ -7175,7 +7152,7 @@ abstract class CommonObject * Function test if type is float * * @param array $info content informations of field - * @return bool + * @return bool true if float */ public function isFloat($info) { @@ -7184,14 +7161,14 @@ abstract class CommonObject if (isset($info['type']) && (preg_match('/^(double|real|price)/i', $info['type']))) return true; else return false; } - else return false; + return false; } /** * Function test if type is text * * @param array $info content informations of field - * @return bool + * @return bool true if type text */ public function isText($info) { @@ -7200,7 +7177,39 @@ abstract class CommonObject if(isset($info['type']) && $info['type']=='text') return true; else return false; } - else return false; + return false; + } + + /** + * Function test if field can be null + * + * @param array $info content informations of field + * @return bool true if it can be null + */ + protected function canBeNull($info) + { + if(is_array($info)) + { + if(isset($info['notnull']) && $info['notnull']!='1') return true; + else return false; + } + return true; + } + + /** + * Function test if field is forced to null if zero or empty + * + * @param array $info content informations of field + * @return bool true if forced to null + */ + protected function isForcedToNullIfZero($info) + { + if(is_array($info)) + { + if(isset($info['notnull']) && $info['notnull']=='-1') return true; + else return false; + } + return false; } /** @@ -7216,7 +7225,7 @@ abstract class CommonObject if(isset($info['index']) && $info['index']==true) return true; else return false; } - else return false; + return false; } /** @@ -7309,17 +7318,30 @@ abstract class CommonObject elseif($this->isInt($info)) { if ($field == 'rowid') $this->id = (int) $obj->{$field}; - else $this->{$field} = (int) $obj->{$field}; + else + { + if ($this->isForcedToNullIfZero($info)) + { + if (empty($obj->{$field})) $this->{$field} = null; + else $this->{$field} = (double) $obj->{$field}; + } + else + { + $this->{$field} = (int) $obj->{$field}; + } + } } elseif($this->isFloat($info)) { - $this->{$field} = (double) $obj->{$field}; - } - elseif($this->isNull($info)) - { - $val = $obj->{$field}; - // zero is not null - $this->{$field} = (is_null($val) || (empty($val) && $val!==0 && $val!=='0') ? null : $val); + if ($this->isForcedToNullIfZero($info)) + { + if (empty($obj->{$field})) $this->{$field} = null; + else $this->{$field} = (double) $obj->{$field}; + } + else + { + $this->{$field} = (double) $obj->{$field}; + } } else { @@ -7376,7 +7398,8 @@ abstract class CommonObject if (array_key_exists('date_creation', $fieldvalues) && empty($fieldvalues['date_creation'])) $fieldvalues['date_creation']=$this->db->idate($now); if (array_key_exists('fk_user_creat', $fieldvalues) && ! ($fieldvalues['fk_user_creat'] > 0)) $fieldvalues['fk_user_creat']=$user->id; unset($fieldvalues['rowid']); // The field 'rowid' is reserved field name for autoincrement field so we don't need it into insert. - + if (array_key_exists('ref', $fieldvalues)) $fieldvalues['ref']=dol_string_nospecial($fieldvalues['ref']); // If field is a ref,we sanitize data + $keys=array(); $values = array(); foreach ($fieldvalues as $k => $v) { diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index a857898f5dc..42097685f6f 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -49,6 +49,8 @@ UPDATE llx_c_units SET label = 'SurfaceUnitm2' WHERE code IN ('M2'); -- For v11 +ALTER TABLE llx_bom_bom ADD COLUMN duration double(8,4) DEFAULT NULL; + create table llx_categorie_warehouse ( fk_categorie integer NOT NULL, diff --git a/htdocs/install/mysql/tables/llx_bom_bom.sql b/htdocs/install/mysql/tables/llx_bom_bom.sql index d66c3f9ffbf..d195dc4ec5d 100644 --- a/htdocs/install/mysql/tables/llx_bom_bom.sql +++ b/htdocs/install/mysql/tables/llx_bom_bom.sql @@ -26,6 +26,7 @@ CREATE TABLE llx_bom_bom( fk_product integer, qty double(24,8), efficiency double(8,4) DEFAULT 1, + duration double(8,4) DEFAULT NULL, date_creation datetime NOT NULL, date_valid datetime, tms timestamp, diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index 29bb88a80a4..f9c24aadc17 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -21,4 +21,6 @@ NewMO=New Manufacturing Order QtyToProduce=Qty to produce DateStartPlannedMo=Date start planned DateEndPlannedMo=Date end planned -KeepEmptyForAsap=Empty means 'As Soon As Possible' \ No newline at end of file +KeepEmptyForAsap=Empty means 'As Soon As Possible' +EstimatedDuration=Estimated duration +EstimatedDurationDesc=Estimated duration to manufacture this product using this BOM \ No newline at end of file From ef09da87945859d5e68ba03bafff77ac92bdce32 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 11:45:13 +0200 Subject: [PATCH 259/980] Fix CSRF check --- htdocs/admin/modulehelp.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/modulehelp.php b/htdocs/admin/modulehelp.php index d5b0f864be6..de9d1677932 100644 --- a/htdocs/admin/modulehelp.php +++ b/htdocs/admin/modulehelp.php @@ -21,7 +21,9 @@ * \brief Page to activate/disable all modules */ -if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu +if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu +if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Disabled because this page is into a popup on module search page and we want to avoid to have an Anti CSRF token error (done if MAIN_SECURITY_CSRF_WITH_TOKEN is on) when we make a second search after closing popup. + require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; From a33fb4777736de9e14b96618b1256c254d95e679 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 12:10:14 +0200 Subject: [PATCH 260/980] Work on MO module --- htdocs/core/modules/modBom.class.php | 6 +++--- htdocs/core/modules/modVariants.class.php | 2 ++ htdocs/langs/en_US/mrp.lang | 4 ++++ htdocs/theme/eldy/img/object_mrp.png | Bin 0 -> 548 bytes htdocs/theme/md/img/object_movement.png | Bin 0 -> 548 bytes htdocs/theme/md/img/object_mrp.png | Bin 0 -> 548 bytes 6 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 htdocs/theme/eldy/img/object_mrp.png create mode 100644 htdocs/theme/md/img/object_movement.png create mode 100644 htdocs/theme/md/img/object_mrp.png diff --git a/htdocs/core/modules/modBom.class.php b/htdocs/core/modules/modBom.class.php index 9502c4c0af8..92cd956a260 100644 --- a/htdocs/core/modules/modBom.class.php +++ b/htdocs/core/modules/modBom.class.php @@ -54,14 +54,14 @@ class modBom extends DolibarrModules // It is used to group modules by family in module setup page $this->family = "products"; // Module position in the family on 2 digits ('01', '10', '20', ...) - $this->module_position = '90'; + $this->module_position = '60'; // Gives the possibility for the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this) //$this->familyinfo = array('myownfamily' => array('position' => '01', 'label' => $langs->trans("MyOwnFamily"))); // Module label (no space allowed), used if translation string 'ModuleBomName' not found (Bom is name of module). $this->name = preg_replace('/^mod/i', '', get_class($this)); // Module description, used if translation string 'ModuleBomDesc' not found (Bom is name of module). - $this->description = "Bill of Materials (BOM) definitions for Manufacturing Resource Planning"; + $this->description = "Module to define your Bills Of Materials (BOM). Can be used for Manufacturing Resource Planning by the module Manufacturing Orders (MO)"; // Used only if file README.md and README-LL.md not found. $this->descriptionlong = "Bill of Materials definitions. They can be used to make Manufacturing Resource Planning"; @@ -75,7 +75,7 @@ class modBom extends DolibarrModules // Name of image file used for this module. // If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue' // If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module' - $this->picto='generic'; + $this->picto='bom'; // Define some features supported by module (triggers, login, substitutions, menus, css, etc...) $this->module_parts = array( diff --git a/htdocs/core/modules/modVariants.class.php b/htdocs/core/modules/modVariants.class.php index 31e008b2870..728107ea08f 100644 --- a/htdocs/core/modules/modVariants.class.php +++ b/htdocs/core/modules/modVariants.class.php @@ -53,6 +53,8 @@ class modVariants extends DolibarrModules // Family can be 'crm','financial','hr','projects','products','ecm','technic','other' // It is used to group modules in module setup page $this->family = "products"; + // Module position in the family on 2 digits ('01', '10', '20', ...) + $this->module_position = '50'; // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) $this->name = preg_replace('/^mod/i', '', get_class($this)); // Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module) diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index f9c24aadc17..9d8e85f889d 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -1,6 +1,10 @@ +Mrp=Manufacturing Orders +MRPDescription=Module to manage Manufacturing Orders (MO). MRPArea=MRP Area +MrpSetupPage=Setup of module MO MenuBOM=Bills of material LatestBOMModified=Latest %s Bills of materials modified +Bom=Bills of Material BillOfMaterials=Bill of Material BOMsSetup=Setup of module BOM ListOfBOMs=List of bills of material - BOM diff --git a/htdocs/theme/eldy/img/object_mrp.png b/htdocs/theme/eldy/img/object_mrp.png new file mode 100644 index 0000000000000000000000000000000000000000..38b59646d710dfac4f94e01bbf41bb6b1779c0c6 GIT binary patch literal 548 zcmV+<0^9wGP)NCbZ?_my9^sP^Lq==>fRY)$Zp?_lD zm4N3MYAVYy+g(Qz_l6<+!_ZICIQp>xHv%7>!@AUfkS5^?d@B=4{3G}lxxXF++Oh+gwij(rEZ`+=bs!~^1 zJ=C%giU~|D3(2Rz|4_O4PGRIUz|zVW@yXQN-wZ(zYl%!YLVY0J1 mN5A$LDKQhLw=ZjNO#cI4PwLNUR3Co;00001s=)Ifzm#A|bYiS|b)bxV3E9MBBK;fUyVJCZIttE=F*Ppj+_g z6%XK!ZR90Gl8{kVy$)NMn>@pos|wr?IUtiZL`Xv=%?NisA{rd@^xL8vj-~*CCk` znkwDt8i)zfb18P_vLwkrJK>vncIbf+yYum>Xm?ExZtD+!)X1uk=Hu$Il>bBY_4)qt zc;H5Daph}LmA7Lxf2%yhm)Yp2c6$_NufFn*(yh{y!IQ;@!NSvWUt@CV0&m=o9>F)y zPWMFC{*(^amI__NCbZ?_my9^sP^Lq==>fRY)$Zp?_lD zm4N3MYAVYy+g(Qz_l6<+!_ZICIQp>xHv%7>!@AUfkS5^?d@B=4{3G}lxxXF++Oh+gwij(rEZ`+=bs!~^1 zJ=C%giU~|D3(2Rz|4_O4PGRIUz|zVW@yXQN-wZ(zYl%!YLVY0J1 mN5A$LDKQhLw=ZjNO#cI4PwLNUR3Co;0000 Date: Mon, 14 Oct 2019 12:27:44 +0200 Subject: [PATCH 261/980] Fix trans export --- htdocs/exports/export.php | 2 +- htdocs/langs/en_US/admin.lang | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php index df298153062..c404fc2b264 100644 --- a/htdocs/exports/export.php +++ b/htdocs/exports/export.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/export/modules_export.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; // Load translation files required by the page -$langs->loadlangs(array('exports', 'other', 'users', 'companies', 'projects')); +$langs->loadlangs(array('admin', 'exports', 'other', 'users', 'companies', 'projects', 'suppliers', 'products')); // Everybody should be able to go on this page //if (! $user->admin) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 5996d643624..bef32dfcd84 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1061,6 +1061,7 @@ CompanyTown=Town CompanyCountry=Country CompanyCurrency=Main currency CompanyObject=Object of the company +IDCountry=ID country Logo=Logo DoNotSuggestPaymentMode=Do not suggest NoActiveBankAccountDefined=No active bank account defined From b4827dbe067e6755665a268262c9ea2deb59f4fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 12:30:26 +0200 Subject: [PATCH 262/980] Prepare 10.0.3 --- ChangeLog | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ee409bb7588..3583c10385b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,8 +2,68 @@ English Dolibarr ChangeLog -------------------------------------------------------------- -***** ChangeLog for 10.0.2 compared to 10.0.1 ***** +***** ChangeLog for 10.0.3 compared to 10.0.2 ***** +FIX: #11702 +FIX: #11861 No consistent code to manage measuring units +FIX: #11942 +FIX: #12026 +FIX: #12040 +FIX: #12041 +FIX: #12054 +FIX: #12083 +FIX: #12088 +FIX: access to public interface when origin email has an alias. +FIX: Alias name is not into the email recipient label. +FIX: allow standalone credit note even if no invoice +FIX: an admin can not access his own permissions after enabling advanced +FIX: an admin can not access his own permissions after enabling advanced permissions +FIX: Attachement of linked files on ticket when sending a message +FIX: avoid non numeric warning +FIX: Bad currency var used in stripe for connect +FIX: Bad list of ticket on public interface for ticket emailcollector +FIX: Can't modify vendor invoice if transfered into accountancy +FIX: change product type must be allowed if we activate hidden conf +FIX: colspan on VAT quadri report +FIX: CSS +FIX: Debug feature orderstoinvoice for suppliers +FIX: do not output return code on screen after a select of bank account +FIX: Edit of ticket module parameters erased others +FIX: empty cache when we want to load specific warehouses in select +FIX: escape email alias +FIX: expedition.class.php +FIX: Export of leave request show the number of open days +FIX: Filtering the HTTP Header "Accept-Language". +FIX: Filter on project on ticket list +FIX: Filter "Open all" of ticket was ko. +FIX: Force downlaod of file with .noexe as octet-stream mime type +FIX: form not closed. +FIX: hidden conf to prevent from changing product_type +FIX: If product account not suggested during bind, it is not preselected +FIX: If we share invoice, we need to see discount created from a deposit on each entity +FIX: Import of product using units +FIX: label of thirdparty is wrong on open project list +FIX: Look and feel v10 +FIX: missing begin() +FIX: missing "$this->id" in "fetch" function +FIX: navigation on ticket tab of projects +FIX: new invoice with generic thirdparty in takepos +FIX: Pb in units of shipments +FIX: regression with option to hide picto on top menu +FIX: selection of project i am contact of. +FIX: Send email from expense report card. +FIX: shipping card: missing user error messages when classifying closed or billed +FIX: SQL injection on qty +FIX: stripe payment when there is a quote into address +FIX: Substitution of __PROJECT_XXX__ not done +FIX: TakePOS no invoice validation control and good payment translate +FIX: the access of the bank account of one user +FIX: top menu right padding +FIX: Update of leave request when CSRF with token is on +FIX: Var not enough sanitized +FIX: wrong test +FIX: XSS +***** ChangeLog for 10.0.2 compared to 10.0.1 ***** FIX: #10460 compatibility with MariaDB 10.4 FIX: #11401 Adherent unknown language key FIX: #11422 Can't edit his own events with standard rights From 4e52276d1f99e2aff354b9e32a849f38f95a37ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 14 Oct 2019 13:14:02 +0200 Subject: [PATCH 263/980] fix travis --- htdocs/product/inventory/inventory.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/product/inventory/inventory.php b/htdocs/product/inventory/inventory.php index c91834e54e5..c36dd3e47a6 100644 --- a/htdocs/product/inventory/inventory.php +++ b/htdocs/product/inventory/inventory.php @@ -288,9 +288,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ''."\n"; } - include DOL_DOCUMENT_ROOT.'/product/inventory/tpl/inventory.tpl.php'; - } // End of page From 84c00a0133fbfcc6275331c019cad210ef101562 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 14:44:14 +0200 Subject: [PATCH 264/980] css --- htdocs/theme/eldy/theme_vars.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 91b50b2a249..f0f74cc1e44 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -70,7 +70,7 @@ $colorbackbody='255,255,255'; $colortexttitlenotab='110,80,20'; $colortexttitle='0,0,0'; $colortext='0,0,0'; -$colortextlink='10, 20, 120'; +$colortextlink='10, 20, 110'; $fontsize='0.86em'; $fontsizesmaller='0.75em'; $topMenuFontSize='1.2em'; From 369f29b1f3c19ddf7f574706704eba013ab78b2c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 14:51:44 +0200 Subject: [PATCH 265/980] css --- htdocs/theme/eldy/global.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index ddbea5cd43b..850631c6382 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1102,7 +1102,7 @@ div.blockvmenulogo .menulogocontainer { margin: px; margin-left: 8px; - margin-right: 8px; + margin-right: 2px; padding: 0; height: px; /* width: 100px; */ From 0b19c4ff953ca25acbea7424985b6518d2da836c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 14:53:22 +0200 Subject: [PATCH 266/980] css --- htdocs/theme/eldy/global.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 850631c6382..9a7972c2381 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1102,7 +1102,7 @@ div.blockvmenulogo .menulogocontainer { margin: px; margin-left: 8px; - margin-right: 2px; + margin-right: 4px; padding: 0; height: px; /* width: 100px; */ From f9f4faa0d2ec1e76cf0eab382f9d09117c96160a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 14:54:30 +0200 Subject: [PATCH 267/980] css --- htdocs/theme/eldy/global.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 9a7972c2381..d2cb0e424c4 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1101,7 +1101,7 @@ div.blockvmenulogo } .menulogocontainer { margin: px; - margin-left: 8px; + margin-left: 12px; margin-right: 4px; padding: 0; height: px; From 9922ff39caf97dd5f6d816cd2532343b6ed91415 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 15:01:37 +0200 Subject: [PATCH 268/980] Fix show duration in list of services --- htdocs/product/list.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 50b1347da6b..1e6f1317b87 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -171,7 +171,7 @@ $arrayfields=array( 'p.label'=>array('label'=>$langs->trans("Label"), 'checked'=>1), 'p.fk_product_type'=>array('label'=>$langs->trans("Type"), 'checked'=>0, 'enabled'=>(! empty($conf->product->enabled) && ! empty($conf->service->enabled))), 'p.barcode'=>array('label'=>$langs->trans("Gencod"), 'checked'=>1, 'enabled'=>(! empty($conf->barcode->enabled))), - 'p.duration'=>array('label'=>$langs->trans("Duration"), 'checked'=>($contextpage != 'productlist'), 'enabled'=>(! empty($conf->service->enabled))), + 'p.duration'=>array('label'=>$langs->trans("Duration"), 'checked'=>($contextpage != 'productlist'), 'enabled'=>(! empty($conf->service->enabled) && (string) $type == '1')), 'p.weight'=>array('label'=>$langs->trans("Weight"), 'checked'=>0, 'enabled'=>(! empty($conf->product->enabled))), 'p.length'=>array('label'=>$langs->trans("Length"), 'checked'=>0, 'enabled'=>(! empty($conf->product->enabled) && ! empty($conf->global->PRODUCT_DISABLE_SIZE))), 'p.surface'=>array('label'=>$langs->trans("Surface"), 'checked'=>0, 'enabled'=>(! empty($conf->product->enabled) && ! empty($conf->global->PRODUCT_DISABLE_SURFACE))), @@ -604,7 +604,7 @@ if ($resql) print ''; } // Duration - if ((string) $type == '1' && ! empty($arrayfields['p.duration']['checked'])) + if (! empty($arrayfields['p.duration']['checked'])) { print '
'; @@ -748,7 +748,7 @@ if ($resql) if (! empty($arrayfields['p.barcode']['checked'])) { print_liste_field_titre($arrayfields['p.barcode']['label'], $_SERVER["PHP_SELF"], "p.barcode", "", $param, "", $sortfield, $sortorder); } - if ((string) $type == '1' && ! empty($arrayfields['p.duration']['checked'])) { + if (! empty($arrayfields['p.duration']['checked'])) { print_liste_field_titre($arrayfields['p.duration']['label'], $_SERVER["PHP_SELF"], "p.duration", "", $param, '', $sortfield, $sortorder, 'center '); } if (! empty($arrayfields['p.weight']['checked'])) print_liste_field_titre($arrayfields['p.weight']['label'], $_SERVER["PHP_SELF"], "p.weight", "", $param, '', $sortfield, $sortorder, 'center '); @@ -921,7 +921,7 @@ if ($resql) } // Duration - if ((string) $type == '1' && ! empty($arrayfields['p.duration']['checked'])) + if (! empty($arrayfields['p.duration']['checked'])) { print ''; print ''; print ''; - if (!empty($conf->multicurrency->enabled)) { - print ''; - } + //if (!empty($conf->multicurrency->enabled)) { + // print ''; + //} print ''; if ($conf->global->PRODUCT_USE_UNITS) print ''; print ''; @@ -1571,8 +1571,7 @@ else $objp = $db->fetch_object($result); - // - + // Line in view mode if ($action != 'editline' || GETPOST('rowid') != $objp->rowid) { print ''; @@ -1608,21 +1607,21 @@ else { print '\n"; } - // TVA + // VAT print ''; // Price print '\n"; // Price multicurrency - if (!empty($conf->multicurrency->enabled)) { + /*if (!empty($conf->multicurrency->enabled)) { print ''; - } - // Quantite + }*/ + // Quantity print ''; // Unit if($conf->global->PRODUCT_USE_UNITS) print ''; - // Remise + // Discount if ($objp->remise_percent > 0) { print '\n"; @@ -1711,7 +1710,7 @@ else print $line->showOptionals($extrafields, 'view', array('style'=>'class="oddeven"', 'colspan'=>$colspan), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1); } } - // Ligne en mode update + // Line in mode update else { // Ligne carac @@ -1741,18 +1740,34 @@ else $doleditor->Create(); print ''; + + // VAT print ''; + + // Price print ''; + + // Price multicurrency + /*if (!empty($conf->multicurrency->enabled)) { + print ''; + }*/ + + // Quantity print ''; + + // Unit if ($conf->global->PRODUCT_USE_UNITS) { print ''; } + + // Discount print ''; + if (! empty($usemargins)) { print ' - +
'; print ''; @@ -939,7 +939,7 @@ if ($resql) $dur=array("i"=>$langs->trans("Minute"),"h"=>$langs->trans("Hour"),"d"=>$langs->trans("Day"),"w"=>$langs->trans("Week"),"m"=>$langs->trans("Month"),"y"=>$langs->trans("Year")); } print $duration_value; - print (! empty($duration_unit) && isset($dur[$duration_unit]) ? ' '.$langs->trans($dur[$duration_unit]) : ''); + print ((! empty($duration_unit) && isset($dur[$duration_unit]) && $duration_value != '') ? ' '.$langs->trans($dur[$duration_unit]) : ''); } else { From 0a9cc9656405173ea79b765fbdd4cb6914f966d4 Mon Sep 17 00:00:00 2001 From: iouston <4319513+iouston@users.noreply.github.com> Date: Mon, 14 Oct 2019 15:01:57 +0200 Subject: [PATCH 269/980] Update document.php Add 2 hidden options for set by default a sort (sort and order) on document page --- htdocs/comm/propal/document.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/comm/propal/document.php b/htdocs/comm/propal/document.php index 14b845a3e8a..8e3bf45bf68 100644 --- a/htdocs/comm/propal/document.php +++ b/htdocs/comm/propal/document.php @@ -60,6 +60,10 @@ if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; + +if (isset($conf->global->MAIN_DOC_SORT_FIELD)){$sortfield=$conf->global->MAIN_DOC_SORT_FIELD;} +if (isset($conf->global->MAIN_DOC_SORT_ORDER)){$sortorder=$conf->global->MAIN_DOC_SORT_ORDER;} + if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="name"; From 720245422e6b2c18edba95fcf82dbe7b7dd3a134 Mon Sep 17 00:00:00 2001 From: iouston <4319513+iouston@users.noreply.github.com> Date: Mon, 14 Oct 2019 15:04:49 +0200 Subject: [PATCH 270/980] Update document.php add 2 hidden options for sort files on document page --- htdocs/commande/document.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php index 4d784e299fb..8a40ad83d25 100644 --- a/htdocs/commande/document.php +++ b/htdocs/commande/document.php @@ -59,6 +59,10 @@ if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; + +if (isset($conf->global->MAIN_DOC_SORT_FIELD)){$sortfield=$conf->global->MAIN_DOC_SORT_FIELD;} +if (isset($conf->global->MAIN_DOC_SORT_ORDER)){$sortorder=$conf->global->MAIN_DOC_SORT_ORDER;} + if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="name"; From 0cd451ef1ad11751d5b935271054c0bb9ce6e75a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 15:06:21 +0200 Subject: [PATCH 271/980] Fix show duration in list of services --- htdocs/product/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 1e6f1317b87..2b36582025f 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -941,7 +941,7 @@ if ($resql) print $duration_value; print ((! empty($duration_unit) && isset($dur[$duration_unit]) && $duration_value != '') ? ' '.$langs->trans($dur[$duration_unit]) : ''); } - else + elseif (! preg_match('/^[a-z]$/i', $obj->duration)) // If duration is a simple char (like 's' of 'm'), we do not show value { print $obj->duration; } From f6aafea33c42042fac243e5da992910153b5f63e Mon Sep 17 00:00:00 2001 From: iouston <4319513+iouston@users.noreply.github.com> Date: Mon, 14 Oct 2019 15:09:59 +0200 Subject: [PATCH 272/980] Update document.php add 2 hidden options for set a default field and a defaut order on document page --- htdocs/projet/document.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/projet/document.php b/htdocs/projet/document.php index e16e90982a6..b2065029b72 100644 --- a/htdocs/projet/document.php +++ b/htdocs/projet/document.php @@ -62,6 +62,10 @@ if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; + +if (isset($conf->global->MAIN_DOC_SORT_FIELD)){$sortfield=$conf->global->MAIN_DOC_SORT_FIELD;} +if (isset($conf->global->MAIN_DOC_SORT_ORDER)){$sortorder=$conf->global->MAIN_DOC_SORT_ORDER;} + if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="name"; From 6ebdce8a9db1dd739800ce3a727e57ef6caa8144 Mon Sep 17 00:00:00 2001 From: iouston <4319513+iouston@users.noreply.github.com> Date: Mon, 14 Oct 2019 15:13:07 +0200 Subject: [PATCH 273/980] Update document.php add 2 hidden options for set a default field and a default order on document page --- htdocs/societe/document.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/societe/document.php b/htdocs/societe/document.php index 54a2bea1d41..5ea892f0670 100644 --- a/htdocs/societe/document.php +++ b/htdocs/societe/document.php @@ -55,6 +55,10 @@ if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; + +if (isset($conf->global->MAIN_DOC_SORT_FIELD)){$sortfield=$conf->global->MAIN_DOC_SORT_FIELD;} +if (isset($conf->global->MAIN_DOC_SORT_ORDER)){$sortorder=$conf->global->MAIN_DOC_SORT_ORDER;} + if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="position_name"; From 83b4f41eb5749e267f2219ffe9a68dcf028690ba Mon Sep 17 00:00:00 2001 From: iouston <4319513+iouston@users.noreply.github.com> Date: Mon, 14 Oct 2019 15:15:34 +0200 Subject: [PATCH 274/980] Update document.php add 2 hidden options for set a default field sort and a default order on a document page --- htdocs/contact/document.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/contact/document.php b/htdocs/contact/document.php index 6fb2803f715..b081582337e 100644 --- a/htdocs/contact/document.php +++ b/htdocs/contact/document.php @@ -62,6 +62,10 @@ if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; + + if (isset($conf->global->MAIN_DOC_SORT_FIELD)){$sortfield=$conf->global->MAIN_DOC_SORT_FIELD;} + if (isset($conf->global->MAIN_DOC_SORT_ORDER)){$sortorder=$conf->global->MAIN_DOC_SORT_ORDER;} + if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="name"; From 92c624daf0bdd80313bed5a4862e750775bf22de Mon Sep 17 00:00:00 2001 From: atm-greg Date: Mon, 14 Oct 2019 15:28:06 +0200 Subject: [PATCH 275/980] add security.lib.php for dol_hash --- htdocs/blockedlog/class/blockedlog.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/blockedlog/class/blockedlog.class.php b/htdocs/blockedlog/class/blockedlog.class.php index d7302a2c795..4413b78a6a4 100644 --- a/htdocs/blockedlog/class/blockedlog.class.php +++ b/htdocs/blockedlog/class/blockedlog.class.php @@ -1048,6 +1048,7 @@ class BlockedLog if (empty($conf->global->BLOCKEDLOG_ENTITY_FINGERPRINT)) { // creation of a unique fingerprint require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/lib/security.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php'; $fingerprint = dol_hash(print_r($mysoc, true).getRandomPassword(1), '5'); From 44476afdac8d09cae7b3e12d2f3794101d707d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric?= <35066297+c3do@users.noreply.github.com> Date: Mon, 14 Oct 2019 15:35:04 +0200 Subject: [PATCH 276/980] FIX: No pricing rule on new clean installation There is no pricing rule on new fresh installation of Dolibarr. I think the pricing rule "PRODUCT_PRICE_UNIQ" should be set by default because it is needed to update a product through API REST. --- htdocs/core/modules/modProduct.class.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/htdocs/core/modules/modProduct.class.php b/htdocs/core/modules/modProduct.class.php index da2ac06dcea..a3e3e539468 100644 --- a/htdocs/core/modules/modProduct.class.php +++ b/htdocs/core/modules/modProduct.class.php @@ -85,6 +85,13 @@ class modProduct extends DolibarrModules $this->const[$r][3] = 'Module to control product codes'; $this->const[$r][4] = 0; $r++; + + $this->const[$r][0] = "PRODUCT_PRICE_UNIQ"; + $this->const[$r][1] = "chaine"; + $this->const[$r][2] = "1"; + $this->const[$r][3] = 'pricing rule by default'; + $this->const[$r][4] = 0; + $r++; /*$this->const[$r][0] = "PRODUCT_ADDON_PDF"; $this->const[$r][1] = "chaine"; From 5056d7220b8d67a178ec2cbfa0f5ddbc4a7aeb4a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 15:36:28 +0200 Subject: [PATCH 277/980] Fix multicurrency not yet supported on contracts --- htdocs/contrat/card.php | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index bbefeb7eb4f..51f5e7382f6 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -1559,9 +1559,9 @@ else print ''.$langs->trans("ServiceNb", $cursorline).''.$langs->trans("VAT").''.$langs->trans("PriceUHT").''.$langs->trans("PriceUHTCurrency").''.$langs->trans("PriceUHTCurrency").''.$langs->trans("Qty").''.$langs->trans("Unit").''.$langs->trans("ReductionShort").'
'.img_object($langs->trans("ShowProductOrService"), ($objp->product_type ? 'service' : 'product')).' '.dol_htmlentitiesbr($objp->description)."'; print vatrate($objp->tva_tx.($objp->vat_src_code?(' ('.$objp->vat_src_code.')'):''), '%', $objp->info_bits); print ''.($objp->subprice != '' ? price($objp->subprice) : '')."'.price($objp->multicurrency_subprice).''.$objp->qty.''.$langs->trans($object->lines[$cursorline-1]->getLabelOfUnit()).''.$objp->remise_percent."%'; print $form->load_tva("eltva_tx", $objp->tva_tx.($objp->vat_src_code?(' ('.$objp->vat_src_code.')'):''), $mysoc, $object->thirdparty, $objp->fk_product, $objp->info_bits, $objp->product_type, 0, 1); print ''.price($objp->multicurrency_subprice).''; print $form->selectUnits($objp->fk_unit, "unit"); print '%'; @@ -2063,6 +2078,7 @@ else if ($action != 'editline') { $forcetoshowtitlelines=1; + if (empty($object->multicurrency_code)) $object->multicurrency_code = $conf->currency; // TODO Remove this when multicurrency supported on contracts // Add free products/services $object->formAddObjectLine(1, $mysoc, $soc); From 4f10009113a776462c26c4500d3c24c593dc9d63 Mon Sep 17 00:00:00 2001 From: atm-josselin Date: Mon, 14 Oct 2019 15:39:38 +0200 Subject: [PATCH 278/980] Add fields definition in product batch class for extrafields compatibility --- htdocs/product/stock/class/productlot.class.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/htdocs/product/stock/class/productlot.class.php b/htdocs/product/stock/class/productlot.class.php index f3cec8f9a98..dd811a66cf6 100644 --- a/htdocs/product/stock/class/productlot.class.php +++ b/htdocs/product/stock/class/productlot.class.php @@ -53,6 +53,19 @@ class Productlot extends CommonObject */ public $ismultientitymanaged = 1; + /** + * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + */ + public $fields=array( + 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'index'=>1, 'position'=>1, 'comment'=>'Id'), + 'batch' =>array('type'=>'varchar(30)', 'label'=>'Batch', 'enabled'=>1, 'visible'=>1, 'notnull'=>0, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'comment'=>'Batch'), + 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20), + 'datec' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500), + 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), + 'fk_user_author'=>array('type'=>'integer', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>510, 'foreignkey'=>'llx_user.rowid'), + 'fk_user_modif' =>array('type'=>'integer', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>511) + ); + /** * @var int Entity */ From e326c232452645506a11ffd295e0cc2f72c7d7fd Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Mon, 14 Oct 2019 15:48:24 +0200 Subject: [PATCH 279/980] add missing translation --- htdocs/core/modules/commande/doc/pdf_einstein.modules.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index e6b960be0ce..c101f73fca0 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -307,7 +307,7 @@ class pdf_einstein extends ModelePDFCommandes $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right - // Positionne $this->atleastonediscount si on a au moins une remise + // Set $this->atleastonediscount if you have at least one discount for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) @@ -361,7 +361,7 @@ class pdf_einstein extends ModelePDFCommandes } } - // Affiche notes + // Displays notes $notetoshow=empty($object->note_public)?'':$object->note_public; if (! empty($conf->global->MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE)) { @@ -461,7 +461,7 @@ class pdf_einstein extends ModelePDFCommandes $pdf->setPage($pageposafter); $curY = $tab_top_newpage; } - $pdf->SetFont('', '', $default_font_size - 1); // On repositionne la police par defaut + $pdf->SetFont('', '', $default_font_size - 1); // We reposition the default font // VAT Rate if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT) && empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN)) @@ -503,7 +503,7 @@ class pdf_einstein extends ModelePDFCommandes $pdf->SetXY($this->postotalht, $curY); $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->postotalht, 3, $total_excl_tax, 0, 'R', 0); - // Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva + // Collection of totals by value of vat in $this->vat["rate"] = total_tva if ($conf->multicurrency->enabled && $object->multicurrency_tx != 1) $tvaligne=$object->lines[$i]->multicurrency_total_tva; else $tvaligne=$object->lines[$i]->total_tva; From fd90ebe63ba6780881497255567dc64617156a40 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Mon, 14 Oct 2019 15:57:29 +0200 Subject: [PATCH 280/980] add missing translation --- .../modules/commande/doc/pdf_eratosthene.modules.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index 90efc67cd7f..9688d160303 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -430,7 +430,7 @@ class pdf_eratosthene extends ModelePDFCommandes { $pdf->rollbackTransaction(true); - // prepar pages to receive notes + // prepare pages to receive notes while ($pagenb < $pageposafternote) { $pdf->AddPage(); $pagenb++; @@ -464,7 +464,7 @@ class pdf_eratosthene extends ModelePDFCommandes } - // apply note frame to previus pages + // apply note frame to previous pages $i = $pageposbeforenote; while ($i < $pageposafternote) { $pdf->setPage($i); @@ -526,7 +526,7 @@ class pdf_eratosthene extends ModelePDFCommandes } - // Use new auto collum system + // Use new auto column system $this->prepareArrayColumnField($object, $outputlangs, $hidedetails, $hidedesc, $hideref); // tab simulation to know line height @@ -636,7 +636,7 @@ class pdf_eratosthene extends ModelePDFCommandes $pdf->setPage($pageposafter); $curY = $tab_top_newpage; } - $pdf->SetFont('', '', $default_font_size - 1); // On repositionne la police par defaut + $pdf->SetFont('', '', $default_font_size - 1); // We reposition the default font // VAT Rate if ($this->getColumnStatus('vat')) @@ -701,7 +701,7 @@ class pdf_eratosthene extends ModelePDFCommandes $reshook=$hookmanager->executeHooks('printPDFline', $parameters, $this); // Note that $object may have been modified by hook - // Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva + // Collection of totals by value of vat in $this->vat["rate"] = total_tva if ($conf->multicurrency->enabled && $object->multicurrency_tx != 1) $tvaligne=$object->lines[$i]->multicurrency_total_tva; else $tvaligne=$object->lines[$i]->total_tva; From 28339920b3cf3d3e952c524c9262fbc2a345729b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 16:00:03 +0200 Subject: [PATCH 281/980] Translation --- htdocs/compta/facture/class/facture.class.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index baaed787023..713c68c8e8a 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -1233,7 +1233,7 @@ class Facture extends CommonInvoice */ public function getNomUrl($withpicto = 0, $option = '', $max = 0, $short = 0, $moretitle = '', $notooltip = 0, $addlinktonotes = 0, $save_lastsearch_value = -1, $target = '') { - global $langs, $conf, $user; + global $langs, $conf, $user, $mysoc; if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips @@ -1276,11 +1276,11 @@ class Facture extends CommonInvoice if (! empty($this->total_ht)) $label.= '
' . $langs->trans('AmountHT') . ': ' . price($this->total_ht, 0, $langs, 0, -1, -1, $conf->currency); if (! empty($this->total_tva)) - $label.= '
' . $langs->trans('VAT') . ': ' . price($this->total_tva, 0, $langs, 0, -1, -1, $conf->currency); + $label.= '
' . $langs->trans('AmountVAT') . ': ' . price($this->total_tva, 0, $langs, 0, -1, -1, $conf->currency); if (! empty($this->total_localtax1) && $this->total_localtax1 != 0) // We keep test != 0 because $this->total_localtax1 can be '0.00000000' - $label.= '
' . $langs->trans('LT1') . ': ' . price($this->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency); + $label.= '
' . $langs->transcountry('AmountLT1', $mysoc->country_code) . ': ' . price($this->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency); if (! empty($this->total_localtax2) && $this->total_localtax2 != 0) - $label.= '
' . $langs->trans('LT2') . ': ' . price($this->total_localtax2, 0, $langs, 0, -1, -1, $conf->currency); + $label.= '
' . $langs->transcountry('AmountLT2', $mysoc->country_code) . ': ' . price($this->total_localtax2, 0, $langs, 0, -1, -1, $conf->currency); if (! empty($this->total_ttc)) $label.= '
' . $langs->trans('AmountTTC') . ': ' . price($this->total_ttc, 0, $langs, 0, -1, -1, $conf->currency); if ($moretitle) $label.=' - '.$moretitle; @@ -2136,7 +2136,7 @@ class Facture extends CommonInvoice if ($this->paye != 1) { $this->db->begin(); - + $now=dol_now(); dol_syslog(get_class($this)."::set_paid rowid=".$this->id, LOG_DEBUG); @@ -3557,7 +3557,7 @@ class Facture extends CommonInvoice $cluser->fetch($obj->fk_user_closing); $this->user_closing = $cluser; } - + $this->date_creation = $this->db->jdate($obj->datec); $this->date_modification = $this->db->jdate($obj->datem); $this->date_validation = $this->db->jdate($obj->datev); From dba9450b0104e74245ebab78734b70a041757a2a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 16:03:12 +0200 Subject: [PATCH 282/980] css --- htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php b/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php index f9e3d4336f0..f6f854d9635 100644 --- a/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php +++ b/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php @@ -48,7 +48,7 @@ foreach($linkedObjectBlock as $key => $objectlink) ?>
trans("RepeatableInvoice"); ?>getNomUrl(1); ?>getNomUrl(1); ?> date_when, 'day'); ?> Date: Mon, 14 Oct 2019 16:07:54 +0200 Subject: [PATCH 283/980] css --- htdocs/theme/eldy/global.inc.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index d2cb0e424c4..2eb5a4d17e9 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -785,6 +785,9 @@ table[summary="list_of_modules"] .fa-cog { font-size: 1.5em; } +.linkedcol-element { + min-width: 100px; +} /* ============================================================================== */ /* Styles to hide objects */ @@ -865,6 +868,10 @@ table[summary="list_of_modules"] .fa-cog { .minwidth300imp { min-width: 300px !important; } .minwidth400imp { min-width: 300px !important; } .minwidth500imp { min-width: 300px !important; } + + .linkedcol-element { + min-width: unset; + } } /* Force values for small screen 1000 */ From 4b7987374b699fb7168bd238409f3a3083a955f8 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 14 Oct 2019 14:46:04 +0000 Subject: [PATCH 284/980] Fixing style errors. --- htdocs/comm/propal/class/propal.class.php | 4 ++-- htdocs/compta/facture/class/facture.class.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 6babe8076a8..45cc0399a93 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1287,11 +1287,11 @@ class Propal extends CommonObject $object->datep = $now; // deprecated $object->fin_validite = $object->date + ($object->duree_validite * 24 * 3600); if (empty($conf->global->MAIN_KEEP_REF_CUSTOMER_ON_CLONING)) $object->ref_client = ''; - if ($conf->global->MAIN_DONT_KEEP_NOTE_ON_CLONING==1) + if ($conf->global->MAIN_DONT_KEEP_NOTE_ON_CLONING==1) { $object->note_private = ''; $object->note_public = ''; - } + } // Create clone $object->context['createfromclone']='createfromclone'; $result=$object->create($user); diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 7f5432682ab..70edd98a2f0 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -1046,11 +1046,11 @@ class Facture extends CommonInvoice $object->close_code = ''; $object->close_note = ''; $object->products = $object->lines; // For backward compatibility - if ($conf->global->MAIN_DONT_KEEP_NOTE_ON_CLONING==1) + if ($conf->global->MAIN_DONT_KEEP_NOTE_ON_CLONING==1) { $object->note_private = ''; $object->note_public = ''; - } + } // Loop on each line of new invoice foreach($object->lines as $i => $line) From dbdc62b0289c1cd71bffd0acd29d569e72d8f869 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 18:41:46 +0200 Subject: [PATCH 285/980] Fix td --- htdocs/compta/prelevement/create.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/prelevement/create.php b/htdocs/compta/prelevement/create.php index 61db16c505c..3aaad5662a3 100644 --- a/htdocs/compta/prelevement/create.php +++ b/htdocs/compta/prelevement/create.php @@ -142,7 +142,7 @@ if ($nb < 0 || $nb1 < 0 || $nb11 < 0) { dol_print_error($bprev->error); } -print ''; +print '
'; print ''; print ''; print ''; print ''; + print ''; print ''; } else From 2257706a3026edc8908941bbb87d2ce6d6868e98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric?= <35066297+c3do@users.noreply.github.com> Date: Mon, 14 Oct 2019 22:22:20 +0200 Subject: [PATCH 301/980] New: Update product type with update method --- htdocs/product/class/api_products.class.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php index 2a9f407bf54..81e2659d918 100644 --- a/htdocs/product/class/api_products.class.php +++ b/htdocs/product/class/api_products.class.php @@ -246,8 +246,13 @@ class Products extends DolibarrApi } $this->product->$field = $value; } + + $updatetype = false; + if ($this->product->type != $oldproduct->type && ($this->product->isProduct() || $this->product->isService())) { + $updatetype = true; + } - $result = $this->product->update($id, DolibarrApiAccess::$user, 1, 'update'); + $result = $this->product->update($id, DolibarrApiAccess::$user, 1, 'update', $updatetype); // If price mode is 1 price per product if ($result > 0 && ! empty($conf->global->PRODUCT_PRICE_UNIQ)) { From 3429cb7c1d8dc4d4a43b4372b077a1e998ea6ab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric?= <35066297+c3do@users.noreply.github.com> Date: Mon, 14 Oct 2019 22:42:38 +0200 Subject: [PATCH 302/980] New: Update product type with update method --- htdocs/product/class/product.class.php | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 1b46a656511..aa0c575d8d7 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -787,13 +787,14 @@ class Product extends CommonObject * Update a record into database. * If batch flag is set to on, we create records into llx_product_batch * - * @param int $id Id of product - * @param User $user Object user making update - * @param int $notrigger Disable triggers - * @param string $action Current action for hookmanager ('add' or 'update') + * @param int $id Id of product + * @param User $user Object user making update + * @param int $notrigger Disable triggers + * @param string $action Current action for hookmanager ('add' or 'update') + * @param int $updatetype Update product type * @return int 1 if OK, -1 if ref already exists, -2 if other error */ - public function update($id, $user, $notrigger = false, $action = 'update') + public function update($id, $user, $notrigger = false, $action = 'update', $updatetype = false) { global $langs, $conf, $hookmanager; @@ -939,6 +940,11 @@ class Product extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."product"; $sql.= " SET label = '" . $this->db->escape($this->label) ."'"; + + if ($updatetype && ($this->isProduct() || $this->isService())) { + $sql.= ", fk_product_type = " . $this->type; + } + $sql.= ", ref = '" . $this->db->escape($this->ref) ."'"; $sql.= ", ref_ext = ".(! empty($this->ref_ext)?"'".$this->db->escape($this->ref_ext)."'":"null"); $sql.= ", default_vat_code = ".($this->default_vat_code ? "'".$this->db->escape($this->default_vat_code)."'" : "null"); From b77d2f2ff2d71ac8c1948ee25db8e2b63804f78f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 14 Oct 2019 23:27:37 +0200 Subject: [PATCH 303/980] Update box_task.php --- htdocs/core/boxes/box_task.php | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/htdocs/core/boxes/box_task.php b/htdocs/core/boxes/box_task.php index 59b31086db5..dbe1757d55d 100644 --- a/htdocs/core/boxes/box_task.php +++ b/htdocs/core/boxes/box_task.php @@ -134,7 +134,13 @@ class box_task extends ModeleBoxes }); }); '; - + // set cookie by js + $boxcontent.=''; + $this->info_box_contents[0][] = array( + 'tr'=>'class="nohover"', + 'td' => 'class="nohover"', + 'textnoformat' => $boxcontent, + ); $sql = "SELECT pt.rowid, pt.ref, pt.fk_projet, pt.fk_task_parent, pt.datec, pt.dateo, pt.datee, pt.datev, pt.label, pt.description, pt.duration_effective, pt.planned_workload, pt.progress"; @@ -163,7 +169,7 @@ class box_task extends ModeleBoxes $sql.= $this->db->plimit($max, 0); $result = $this->db->query($sql); - $i = 0; + $i = 1; if ($result) { $num = $this->db->num_rows($result); while ($objp = $this->db->fetch_object($result)) { @@ -183,8 +189,12 @@ class box_task extends ModeleBoxes $label = $projectstatic->getNomUrl(1).' '.$taskstatic->getNomUrl(1).' '.dol_htmlentities($taskstatic->label); - $boxcontent.= getTaskProgressView($taskstatic, $label, true, false, true); + $boxcontent = getTaskProgressView($taskstatic, $label, true, false, true); + $this->info_box_contents[$i][] = array( + 'td' => '', + 'text' => $boxcontent, + ); $i++; } } else { @@ -192,15 +202,6 @@ class box_task extends ModeleBoxes } } - // set cookie by js - if(empty($i)){ - $boxcontent.=''; - } - - $this->info_box_contents[0][] = array( - 'td' => '', - 'text' => $boxcontent, - ); } /** From 540f20c18f7c0df6726ee35d21d9d11c8d04a326 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 23:49:26 +0200 Subject: [PATCH 304/980] css --- htdocs/theme/eldy/global.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 353c14041f4..0fe2236c33a 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1114,8 +1114,8 @@ div.blockvmenulogo } .menulogocontainer { margin: px; - margin-left: 12px; - margin-right: 4px; + margin-left: 11px; + margin-right: 9px; padding: 0; height: px; /* width: 100px; */ From a53c7cfca8d9887e566b21717f59c153072c5f8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 15 Oct 2019 00:13:52 +0200 Subject: [PATCH 305/980] Update box_last_modified_ticket.php --- htdocs/core/boxes/box_last_modified_ticket.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_last_modified_ticket.php b/htdocs/core/boxes/box_last_modified_ticket.php index 8f86be5a115..56299c60429 100644 --- a/htdocs/core/boxes/box_last_modified_ticket.php +++ b/htdocs/core/boxes/box_last_modified_ticket.php @@ -166,7 +166,7 @@ class box_last_modified_ticket extends ModeleBoxes // Date creation $this->info_box_contents[$i][$r] = array( 'td' => 'class="right"', - 'text' => dol_print_date($this->db->idate($objp->datec), 'dayhour') + 'text' => dol_print_date($datec, 'dayhour') ); $r++; From 194072fc60ec7728877f51bacbf54407644211bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 15 Oct 2019 00:14:43 +0200 Subject: [PATCH 306/980] Update box_last_ticket.php --- htdocs/core/boxes/box_last_ticket.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_last_ticket.php b/htdocs/core/boxes/box_last_ticket.php index 18990cd8bb6..cf4b7f305f7 100644 --- a/htdocs/core/boxes/box_last_ticket.php +++ b/htdocs/core/boxes/box_last_ticket.php @@ -166,7 +166,7 @@ class box_last_ticket extends ModeleBoxes // Date creation $this->info_box_contents[$i][$r] = array( 'td' => 'class="right"', - 'text' => dol_print_date($this->db->idate($objp->datec), 'dayhour'), + 'text' => dol_print_date($datec, 'dayhour'), ); $r++; From 415379c4f2e4d9ffd19c454a92999d293e3c93ab Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 15 Oct 2019 00:27:09 +0200 Subject: [PATCH 307/980] Link show tutorial in middle --- htdocs/accountancy/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/index.php b/htdocs/accountancy/index.php index 4eab81ea49f..0eeccbd3395 100644 --- a/htdocs/accountancy/index.php +++ b/htdocs/accountancy/index.php @@ -88,7 +88,7 @@ if ($conf->accounting->enabled) } - print load_fiche_titre($langs->trans("AccountancyArea"), $showtutorial . $resultboxes['selectboxlist'], 'accountancy'); + print load_fiche_titre($langs->trans("AccountancyArea"), $resultboxes['selectboxlist'], 'accountancy', 0, '', '', $showtutorial); print '
'; // hideobject is to start hidden print "
\n"; From f50a75194c205863d4bd420e1f7be402be38d5ac Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 15 Oct 2019 00:44:22 +0200 Subject: [PATCH 308/980] Removed warning --- htdocs/core/class/conf.class.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 535db40e0e4..60b33e51188 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -227,10 +227,7 @@ class Conf $filesList = explode(":", $this->global->LOCAL_CONSTS_FILES); foreach ($filesList as $file) { $file=dol_sanitizeFileName($file); - include_once DOL_DOCUMENT_ROOT . "/".$file."/".$file."_consts.php"; - foreach ($file2bddconsts as $key=>$value) { - $this->global->$key=$value; - } + include_once DOL_DOCUMENT_ROOT . "/".$file."/".$file."_consts.php"; // This file must set $this->global->XXX vars. } } @@ -669,6 +666,8 @@ class Conf if (! isset($this->global->MAIN_EXTRAFIELDS_IN_ONE_TD)) $this->global->MAIN_EXTRAFIELDS_IN_ONE_TD = 1; + if (! isset($this->global->MAIN_USE_OLD_TITLE_BUTTON)) $this->global->MAIN_USE_OLD_TITLE_BUTTON = 1; + if (empty($this->global->MAIN_MODULE_DOLISTORE_API_SRV)) $this->global->MAIN_MODULE_DOLISTORE_API_SRV='https://www.dolistore.com'; if (empty($this->global->MAIN_MODULE_DOLISTORE_API_KEY)) $this->global->MAIN_MODULE_DOLISTORE_API_KEY='dolistorecatalogpublickey1234567'; From a1c93cb2e6c5a42a496f2a24bd46dd8dc5d28704 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 15 Oct 2019 02:45:12 +0200 Subject: [PATCH 309/980] MAIN_ACTIVATE_HTML5 is now always on now (so option removed). Look and feel v11 --- htdocs/accountancy/bookkeeping/list.php | 4 ++-- htdocs/core/class/conf.class.php | 3 +-- htdocs/core/lib/functions.lib.php | 7 +++---- htdocs/exports/class/export.class.php | 3 +-- htdocs/theme/eldy/btn.inc.php | 22 ++++++++++++++------ htdocs/theme/eldy/dropdown.inc.php | 2 +- htdocs/theme/eldy/global.inc.php | 18 +++++++++++++--- htdocs/theme/eldy/theme_vars.inc.php | 2 +- htdocs/theme/md/style.css.php | 5 +++++ htdocs/ticket/card.php | 12 +++++++---- htdocs/ticket/class/actions_ticket.class.php | 4 ++-- 11 files changed, 55 insertions(+), 27 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index b5f0c06738a..2958a229d24 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -518,9 +518,9 @@ else $buttonLabel = $langs->trans("ExportList"); // Button re-export if (! empty($conf->global->ACCOUNTING_REEXPORT)) { - $newcardbutton =''.img_picto($langs->trans("Activated"), 'switch_on').' '; + $newcardbutton =''.img_picto($langs->trans("Activated"), 'switch_on').' '; } else { - $newcardbutton =''.img_picto($langs->trans("Disabled"), 'switch_off').' '; + $newcardbutton =''.img_picto($langs->trans("Disabled"), 'switch_off').' '; } $newcardbutton.= ''.$langs->trans("IncludeDocsAlreadyExported").''; diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 60b33e51188..287d8121213 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -439,7 +439,6 @@ class Conf // Set some default values //$this->global->MAIN_LIST_FILTER_ON_DAY=1; // On filter that show date, we must show input field for day before or after month - $this->global->MAIN_ACTIVATE_HTML5=1; $this->global->MAIN_MAIL_USE_MULTI_PART=1; // societe @@ -666,7 +665,7 @@ class Conf if (! isset($this->global->MAIN_EXTRAFIELDS_IN_ONE_TD)) $this->global->MAIN_EXTRAFIELDS_IN_ONE_TD = 1; - if (! isset($this->global->MAIN_USE_OLD_TITLE_BUTTON)) $this->global->MAIN_USE_OLD_TITLE_BUTTON = 1; + if (! isset($this->global->MAIN_USE_OLD_TITLE_BUTTON)) $this->global->MAIN_USE_OLD_TITLE_BUTTON = 0; if (empty($this->global->MAIN_MODULE_DOLISTORE_API_SRV)) $this->global->MAIN_MODULE_DOLISTORE_API_SRV='https://www.dolistore.com'; if (empty($this->global->MAIN_MODULE_DOLISTORE_API_KEY)) $this->global->MAIN_MODULE_DOLISTORE_API_KEY='dolistorecatalogpublickey1234567'; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index f178a25f4c2..7bda225978f 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -4125,7 +4125,7 @@ function load_fiche_titre($titre, $morehtmlright = '', $picto = 'generic', $pict if ($picto == 'setup') $picto='generic'; $return.= "\n"; - $return.= '
'.$langs->trans("NbOfInvoiceToWithdraw").''; @@ -161,6 +161,7 @@ print ''; if ($mesg) print $mesg; print "
\n"; + print '
'; print ''; if ($nb) { @@ -193,6 +194,7 @@ else } print "
\n"; + print "
\n"; print '
'; @@ -245,7 +247,7 @@ if ($resql) print_barre_liste($langs->trans("InvoiceWaitingWithdraw"), $page, $_SERVER['PHP_SELF'], $param, '', '', '', $num, $nbtotalofrecords, 'invoicing', 0, '', '', $limit); - print ''; + print '
'; print ''; print ''; print ''; @@ -299,7 +301,10 @@ if ($resql) $i++; } } - else print ''; + else + { + print ''; + } print "
'.$langs->trans("Invoice").''.$langs->trans("ThirdParty").'
'.$langs->trans("None").'
'.$langs->trans("None").'
"; print ""; print "
\n"; From 3b84e2bac34b72a200bdad73fed5710b0930e464 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 19:21:13 +0200 Subject: [PATCH 286/980] Use img-thumb css --- htdocs/core/lib/usergroups.lib.php | 2 +- htdocs/core/lib/website2.lib.php | 2 +- htdocs/theme/eldy/global.inc.php | 6 ++++++ htdocs/theme/eldy/theme_vars.inc.php | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index 66698be76cc..be5871bf6e3 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -397,7 +397,7 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false) print ''; if ($subdir == $conf->global->MAIN_THEME) $title=$langs->trans("ThemeCurrentlyActive"); else $title=$langs->trans("ShowPreview"); - print ''.$title.''; + print ''.$title.''; print '
'; if ($subdir == $selected_theme) { diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index 9b2abe22904..ba2505cc15a 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -433,7 +433,7 @@ function showWebsiteTemplates(Website $website) if (! empty($urladvanced)) $ret.=''; else $ret.=''; print $ret; - print ''.$title.''; + print ''.$title.''; print ''; print '
'; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 2eb5a4d17e9..353c14041f4 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -789,6 +789,12 @@ table[summary="list_of_modules"] .fa-cog { min-width: 100px; } +.img-skinthumb { + width: 160px; + height: 120px; +} + + /* ============================================================================== */ /* Styles to hide objects */ /* ============================================================================== */ diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index f0f74cc1e44..37569ebcd6c 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -67,7 +67,7 @@ $colorbacklinepairhover='230,237,244'; // line hover $colorbacklinepairchecked='230,237,244'; // line checked $colorbacklinebreak='233,228,230'; // line break $colorbackbody='255,255,255'; -$colortexttitlenotab='110,80,20'; +$colortexttitlenotab='140,80,10'; // 140,80,10 or 10,140,80 $colortexttitle='0,0,0'; $colortext='0,0,0'; $colortextlink='10, 20, 110'; From 502d154cea7fd7c85415463762fca7ec7ad304b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 14 Oct 2019 20:01:35 +0200 Subject: [PATCH 287/980] Update check_notifications.php --- htdocs/core/ajax/check_notifications.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/core/ajax/check_notifications.php b/htdocs/core/ajax/check_notifications.php index dd994823a4b..02e304b3d44 100644 --- a/htdocs/core/ajax/check_notifications.php +++ b/htdocs/core/ajax/check_notifications.php @@ -1,6 +1,7 @@ * Copyright (C) 2017 Juanjo Menent + * Copyright (C) 2019 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 @@ -16,6 +17,7 @@ * along with this program. If not, see . */ +if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Disables token renewal if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); From 45b3d623bbe90e57252377a6f6efc4404bf33a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 14 Oct 2019 20:30:31 +0200 Subject: [PATCH 288/980] Update list.php --- htdocs/fourn/facture/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index 8985ee33de2..1da06b03d63 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -805,7 +805,7 @@ if ($resql) if (! empty($arrayfields['country.code_iso']['checked'])) print_liste_field_titre($arrayfields['country.code_iso']['label'],$_SERVER["PHP_SELF"],"country.code_iso","",$param,'align="center"',$sortfield,$sortorder); if (! empty($arrayfields['typent.code']['checked'])) print_liste_field_titre($arrayfields['typent.code']['label'],$_SERVER["PHP_SELF"],"typent.code","",$param,'align="center"',$sortfield,$sortorder); if (! empty($arrayfields['f.fk_mode_reglement']['checked'])) print_liste_field_titre($arrayfields['f.fk_mode_reglement']['label'],$_SERVER["PHP_SELF"],"f.fk_mode_reglement","",$param,"",$sortfield,$sortorder); - if (! empty($arrayfields['f.total_ht']['checked'])) print_liste_field_titre($arrayfields['f.total_ht']['label'],$_SERVER['PHP_SELF'],'f.total','',$param,'align="right"',$sortfield,$sortorder); + if (! empty($arrayfields['f.total_ht']['checked'])) print_liste_field_titre($arrayfields['f.total_ht']['label'],$_SERVER['PHP_SELF'],'f.total_ht','',$param,'align="right"',$sortfield,$sortorder); if (! empty($arrayfields['f.total_vat']['checked'])) print_liste_field_titre($arrayfields['f.total_vat']['label'],$_SERVER['PHP_SELF'],'f.tva','',$param,'align="right"',$sortfield,$sortorder); if (! empty($arrayfields['f.total_localtax1']['checked'])) print_liste_field_titre($arrayfields['f.total_localtax1']['label'],$_SERVER['PHP_SELF'],'f.localtax1','',$param,'align="right"',$sortfield,$sortorder); if (! empty($arrayfields['f.total_localtax2']['checked'])) print_liste_field_titre($arrayfields['f.total_localtax2']['label'],$_SERVER['PHP_SELF'],'f.localtax2','',$param,'align="right"',$sortfield,$sortorder); From 056f7f826bfaad2048597b4a785467176fcee0d9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 20:41:28 +0200 Subject: [PATCH 289/980] Clean code --- htdocs/modulebuilder/template/myobject_card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 72bc424c53c..132bf158ac8 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -446,7 +446,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Clone if (! empty($user->rights->mymodule->write)) { - print ''; + print '' . $langs->trans("ToClone") . ''."\n"; } /* From 5a5599754075cdff0d484c9f43566ce3e89690d6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 20:53:18 +0200 Subject: [PATCH 290/980] Update pdf_eratosthene.modules.php --- htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index 9688d160303..d3f7f3016a0 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -701,7 +701,7 @@ class pdf_eratosthene extends ModelePDFCommandes $reshook=$hookmanager->executeHooks('printPDFline', $parameters, $this); // Note that $object may have been modified by hook - // Collection of totals by value of vat in $this->vat["rate"] = total_tva + // Collection of totals by value of vat in $this->tva["rate"] = total_tva if ($conf->multicurrency->enabled && $object->multicurrency_tx != 1) $tvaligne=$object->lines[$i]->multicurrency_total_tva; else $tvaligne=$object->lines[$i]->total_tva; From 3866ac60363a90376dfa6e4e906310888054bbcc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 21:18:22 +0200 Subject: [PATCH 291/980] Update document.php --- htdocs/societe/document.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/document.php b/htdocs/societe/document.php index 5ea892f0670..971944c4f30 100644 --- a/htdocs/societe/document.php +++ b/htdocs/societe/document.php @@ -56,8 +56,8 @@ $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -if (isset($conf->global->MAIN_DOC_SORT_FIELD)){$sortfield=$conf->global->MAIN_DOC_SORT_FIELD;} -if (isset($conf->global->MAIN_DOC_SORT_ORDER)){$sortorder=$conf->global->MAIN_DOC_SORT_ORDER;} +if (! empty($conf->global->MAIN_DOC_SORT_FIELD)) { $sortfield=$conf->global->MAIN_DOC_SORT_FIELD; } +if (! empty($conf->global->MAIN_DOC_SORT_ORDER)) { $sortorder=$conf->global->MAIN_DOC_SORT_ORDER; } if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="position_name"; From c8d3aea18ae84e43d8030224d181ad53baf0a8c3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 21:20:17 +0200 Subject: [PATCH 292/980] Update document.php --- htdocs/commande/document.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php index 8a40ad83d25..515e14095bd 100644 --- a/htdocs/commande/document.php +++ b/htdocs/commande/document.php @@ -60,8 +60,8 @@ $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -if (isset($conf->global->MAIN_DOC_SORT_FIELD)){$sortfield=$conf->global->MAIN_DOC_SORT_FIELD;} -if (isset($conf->global->MAIN_DOC_SORT_ORDER)){$sortorder=$conf->global->MAIN_DOC_SORT_ORDER;} +if (! empty($conf->global->MAIN_DOC_SORT_FIELD)) { $sortfield=$conf->global->MAIN_DOC_SORT_FIELD; } +if (! empty($conf->global->MAIN_DOC_SORT_ORDER)) { $sortorder=$conf->global->MAIN_DOC_SORT_ORDER; } if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="name"; From 15d4a185996d3e29a7b5765a0b86121cea6513b6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 21:21:04 +0200 Subject: [PATCH 293/980] Update document.php --- htdocs/projet/document.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/projet/document.php b/htdocs/projet/document.php index b2065029b72..10c7a140df7 100644 --- a/htdocs/projet/document.php +++ b/htdocs/projet/document.php @@ -63,8 +63,8 @@ $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -if (isset($conf->global->MAIN_DOC_SORT_FIELD)){$sortfield=$conf->global->MAIN_DOC_SORT_FIELD;} -if (isset($conf->global->MAIN_DOC_SORT_ORDER)){$sortorder=$conf->global->MAIN_DOC_SORT_ORDER;} +if (! empty($conf->global->MAIN_DOC_SORT_FIELD)) { $sortfield=$conf->global->MAIN_DOC_SORT_FIELD; } +if (! empty($conf->global->MAIN_DOC_SORT_ORDER)) { $sortorder=$conf->global->MAIN_DOC_SORT_ORDER; } if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="name"; From e5e94f5e7a0c938f3900b58e3e77214586d3aaa3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 21:23:08 +0200 Subject: [PATCH 294/980] Update document.php --- htdocs/contact/document.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/contact/document.php b/htdocs/contact/document.php index b081582337e..ad8bbb68e5f 100644 --- a/htdocs/contact/document.php +++ b/htdocs/contact/document.php @@ -63,8 +63,8 @@ $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; - if (isset($conf->global->MAIN_DOC_SORT_FIELD)){$sortfield=$conf->global->MAIN_DOC_SORT_FIELD;} - if (isset($conf->global->MAIN_DOC_SORT_ORDER)){$sortorder=$conf->global->MAIN_DOC_SORT_ORDER;} + if (! empty($conf->global->MAIN_DOC_SORT_FIELD)) { $sortfield=$conf->global->MAIN_DOC_SORT_FIELD; } + if (! empty($conf->global->MAIN_DOC_SORT_ORDER)) { $sortorder=$conf->global->MAIN_DOC_SORT_ORDER; } if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="name"; From 176436ec341665648a8d75f07d5a7c674086ca2f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Oct 2019 21:23:52 +0200 Subject: [PATCH 295/980] Update document.php --- htdocs/comm/propal/document.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/propal/document.php b/htdocs/comm/propal/document.php index 8e3bf45bf68..eca5ce52fa7 100644 --- a/htdocs/comm/propal/document.php +++ b/htdocs/comm/propal/document.php @@ -61,8 +61,8 @@ $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -if (isset($conf->global->MAIN_DOC_SORT_FIELD)){$sortfield=$conf->global->MAIN_DOC_SORT_FIELD;} -if (isset($conf->global->MAIN_DOC_SORT_ORDER)){$sortorder=$conf->global->MAIN_DOC_SORT_ORDER;} +if (! empty($conf->global->MAIN_DOC_SORT_FIELD)) { $sortfield=$conf->global->MAIN_DOC_SORT_FIELD; } +if (! empty($conf->global->MAIN_DOC_SORT_ORDER)) { $sortorder=$conf->global->MAIN_DOC_SORT_ORDER; } if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="name"; From 7ce5ddbf025a2bb6e7f895929348105d20fbdafc Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Mon, 14 Oct 2019 21:25:43 +0200 Subject: [PATCH 296/980] Internationalization --- htdocs/core/modules/contract/doc/pdf_strato.modules.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/modules/contract/doc/pdf_strato.modules.php b/htdocs/core/modules/contract/doc/pdf_strato.modules.php index d2dd1f56218..badf7343295 100644 --- a/htdocs/core/modules/contract/doc/pdf_strato.modules.php +++ b/htdocs/core/modules/contract/doc/pdf_strato.modules.php @@ -269,7 +269,7 @@ class pdf_strato extends ModelePDFContract $tab_top = 90; $tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?42:10); - // Affiche notes + // Display notes if (! empty($object->note_public)) { $tab_top -= 2; @@ -411,7 +411,7 @@ class pdf_strato extends ModelePDFContract $pdf->setPage($pageposafter); $curY = $tab_top_newpage; } - $pdf->SetFont('', '', $default_font_size - 1); // On repositionne la police par defaut + $pdf->SetFont('', '', $default_font_size - 1); // We reposition the default font // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) @@ -613,7 +613,7 @@ class pdf_strato extends ModelePDFContract pdf_watermark($pdf, $outputlangs, $this->page_hauteur, $this->page_largeur, 'mm', $conf->global->CONTRACT_DRAFT_WATERMARK); } - //Prepare la suite + //Prepare next $pdf->SetTextColor(0, 0, 60); $pdf->SetFont('', 'B', $default_font_size + 3); @@ -727,7 +727,7 @@ class pdf_strato extends ModelePDFContract $this->recipient = $object->thirdparty; //Recipient name - // On peut utiliser le nom de la societe du contact + // You can use the name of the contact company if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $thirdparty = $object->contact; } else { From b88059433c18706f26bd1f9d0ed5a878c4bc1cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 14 Oct 2019 21:36:38 +0200 Subject: [PATCH 297/980] Update list.php --- htdocs/fourn/commande/list.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 6410f2c9e57..5f0ca9f9be1 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -349,7 +349,7 @@ if (empty($reshook)) { $fk_parent_line = 0; } - $result = $object->addline( + $result = $object->addline( $desc, $lines[$i]->subprice, $lines[$i]->qty, @@ -492,7 +492,9 @@ $sql.= ' cf.date_creation as date_creation, cf.tms as date_update,'; $sql.= " p.rowid as project_id, p.ref as project_ref, p.title as project_title,"; $sql.= " u.firstname, u.lastname, u.photo, u.login, u.email as user_email"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook From 6761e1ef3334dcddf425d81076dc4f5bbfa5cbed Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Mon, 14 Oct 2019 21:38:21 +0200 Subject: [PATCH 298/980] Internationalization --- .../expedition/doc/pdf_espadon.modules.php | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php index 8d29edec7d8..40ae16aff59 100644 --- a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php @@ -218,7 +218,7 @@ class pdf_espadon extends ModelePdfExpedition if ($conf->expedition->dir_output) { - // Definition de $dir et $file + // Definition of $dir and $file if ($object->specimen) { $dir = $conf->expedition->dir_output."/sending"; @@ -390,10 +390,10 @@ class pdf_espadon extends ModelePdfExpedition } - // Use new auto collum system + // Use new auto column system $this->prepareArrayColumnField($object, $outputlangs, $hidedetails, $hidedesc, $hideref); - // Simulation de tableau pour connaitre la hauteur de la ligne de titre + // Table simulation to know the height of the title line $pdf->startTransaction(); $this->pdfTabTitles($pdf, $tab_top, $tab_height, $outputlangs, $hidetop); $pdf->rollbackTransaction(true); @@ -606,10 +606,10 @@ class pdf_espadon extends ModelePdfExpedition $bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1; } - // Affiche zone totaux + // Display total area $posy=$this->_tableau_tot($pdf, $object, 0, $bottomlasttab, $outputlangs); - // Pied de page + // Pagefoot $this->_pagefoot($pdf, $object, $outputlangs); if (method_exists($pdf, 'AliasNbPages')) $pdf->AliasNbPages(); @@ -653,12 +653,12 @@ class pdf_espadon extends ModelePdfExpedition /** * Show total to pay * - * @param PDF $pdf Object PDF + * @param PDF $pdf Object PDF * @param Facture $object Object invoice - * @param int $deja_regle Montant deja regle - * @param int $posy Position depart + * @param int $deja_regle Amount already paid + * @param int $posy Start Position * @param Translate $outputlangs Objet langs - * @return int Position pour suite + * @return int Position for suite */ protected function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs) { @@ -673,7 +673,7 @@ class pdf_espadon extends ModelePdfExpedition $tab2_hl = 4; $pdf->SetFont('', 'B', $default_font_size - 1); - // Tableau total + // Total table $col1x = $this->posxweightvol-50; $col2x = $this->posxweightvol; /*if ($this->page_largeur < 210) // To work with US executive format { @@ -824,7 +824,7 @@ class pdf_espadon extends ModelePdfExpedition pdf_watermark($pdf, $outputlangs, $this->page_hauteur, $this->page_largeur, 'mm', $conf->global->SHIPPING_DRAFT_WATERMARK); } - //Prepare la suite + //Prepare next $pdf->SetTextColor(0, 0, 60); $pdf->SetFont('', 'B', $default_font_size + 3); @@ -1006,7 +1006,7 @@ class pdf_espadon extends ModelePdfExpedition } //Recipient name - // On peut utiliser le nom de la societe du contact + // You can use the name of the contact company if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $thirdparty = $object->contact; } else { From 30099a821b471cbbcc91ef587fea43c46a43d212 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 14 Oct 2019 19:39:00 +0000 Subject: [PATCH 299/980] Fixing style errors. --- htdocs/core/modules/expedition/doc/pdf_espadon.modules.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php index 40ae16aff59..ddc07db0380 100644 --- a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php @@ -656,7 +656,7 @@ class pdf_espadon extends ModelePdfExpedition * @param PDF $pdf Object PDF * @param Facture $object Object invoice * @param int $deja_regle Amount already paid - * @param int $posy Start Position + * @param int $posy Start Position * @param Translate $outputlangs Objet langs * @return int Position for suite */ From 234dfec351344e7234175d54274edc4cc8fcda0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 14 Oct 2019 21:53:25 +0200 Subject: [PATCH 300/980] add missing td --- htdocs/product/stock/product.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index b91c5d9c5ec..345151138e0 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -1073,6 +1073,7 @@ if (! $variants) { print '
'.$langs->trans("Total").''.$stock_total.'
'; // maring bottom must be same than into print_barre_list + $return.= '
'; // maring bottom must be same than into print_barre_list if ($picto) $return.= ''; $return.= ''; } - if (! empty($arrayfields['a.datep2']['checked'])) { + if (! empty($arrayfields['a.datep2']['checked'])) { print ''; @@ -548,6 +548,7 @@ if ($resql) $actionstatic->type_label=$obj->type_label; $actionstatic->type_picto=$obj->type_picto; $actionstatic->label=$obj->label; + $actionstatic->location = $obj->location; $actionstatic->note=dol_htmlentitiesbr($obj->note); print ''; @@ -609,11 +610,11 @@ if ($resql) print $form->textwithtooltip(dol_trunc($text, 40), $actionstatic->note); print ''; } - + $formatToUse = $obj->fulldayevent?'day':'dayhour'; // Start date if (! empty($arrayfields['a.datep']['checked'])) { print ''; } From 12f1962085501bd3f735ae56d0558fba3bc306ad Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 00:40:42 +0200 Subject: [PATCH 323/980] Better error message when module file is corrupted --- htdocs/admin/modules.php | 2 +- htdocs/langs/en_US/errors.lang | 1 + htdocs/mrp/class/mo.class.php | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 787f3ded291..f26e657679a 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -190,7 +190,7 @@ if ($action=='install') //var_dump($modulenamedir); if (! dol_is_dir($modulenamedir)) { - setEventMessages($langs->trans("ErrorModuleFileSeemsToHaveAWrongFormat").'
Dir not found: '.$conf->admin->dir_temp.'/'.$tmpdir.'/'.$modulename.'
'.$conf->admin->dir_temp.'/'.$tmpdir.'/htdocs/'.$modulename, null, 'errors'); + setEventMessages($langs->trans("ErrorModuleFileSeemsToHaveAWrongFormat").'
'.$langs->trans("ErrorModuleFileSeemsToHaveAWrongFormat2", $modulename, 'htdocs/'.$modulename), null, 'errors'); $error++; } } diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index f8c3c1a1aee..0b4b9b61746 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -196,6 +196,7 @@ ErrorPhpMailDelivery=Check that you don't use a too high number of recipients an ErrorUserNotAssignedToTask=User must be assigned to task to be able to enter time consumed. ErrorTaskAlreadyAssigned=Task already assigned to user ErrorModuleFileSeemsToHaveAWrongFormat=The module package seems to have a wrong format. +ErrorModuleFileSeemsToHaveAWrongFormat2=At least one mandatory directory must exists into zip of module: %s or %s ErrorFilenameDosNotMatchDolibarrPackageRules=The name of the module package (%s) does not match expected name syntax: %s ErrorDuplicateTrigger=Error, duplicate trigger name %s. Already loaded from %s. ErrorNoWarehouseDefined=Error, no warehouses defined. diff --git a/htdocs/mrp/class/mo.class.php b/htdocs/mrp/class/mo.class.php index a459a582bba..d485ec0ef16 100644 --- a/htdocs/mrp/class/mo.class.php +++ b/htdocs/mrp/class/mo.class.php @@ -1,3 +1,4 @@ + * Copyright (C) ---Put here your own copyright and developer email--- From b0355dd1498368d293cf1a61cb5ee1e380c06dbb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 01:20:58 +0200 Subject: [PATCH 324/980] Module BOM have now status DRAFT, VALIDATED, DISABLED --- htdocs/bom/bom_card.php | 143 ++++++++++++++++++++++- htdocs/bom/class/bom.class.php | 103 +++++++++------- htdocs/commande/class/commande.class.php | 2 +- htdocs/core/class/commonobject.class.php | 53 ++++++++- htdocs/langs/en_US/mrp.lang | 5 +- 5 files changed, 252 insertions(+), 54 deletions(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 5f3ec89da61..899fcdbe0e6 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -206,6 +206,62 @@ if (empty($reshook)) setEventMessages($object->error, $object->errors, 'errors'); } } + + if ($action == 'confirm_close' && $confirm == 'yes' && $permissionedit) + { + $result = $object->cancel($user); + if ($result >= 0) + { + // Define output language + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) + { + $outputlangs = $langs; + $newlang = ''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09'); + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang; + if (! empty($newlang)) { + $outputlangs = new Translate("", $conf); + $outputlangs->setDefaultLang($newlang); + } + $model=$object->modelpdf; + $ret = $object->fetch($id); // Reload to get new records + + $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); + } + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } + } + + if ($action == 'confirm_reopen' && $confirm == 'yes' && $permissionedit) + { + $result = $object->reopen($user); + if ($result >= 0) + { + // Define output language + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) + { + $outputlangs = $langs; + $newlang = ''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09'); + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang; + if (! empty($newlang)) { + $outputlangs = new Translate("", $conf); + $outputlangs->setDefaultLang($newlang); + } + $model=$object->modelpdf; + $ret = $object->fetch($id); // Reload to get new records + + $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); + } + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } + } } @@ -339,13 +395,13 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } $text = $langs->trans('ConfirmValidateBom', $numref); - if (! empty($conf->notification->enabled)) + /*if (! empty($conf->notification->enabled)) { require_once DOL_DOCUMENT_ROOT . '/core/class/notify.class.php'; $notify = new Notify($db); $text .= '
'; $text .= $notify->confirmMessage('BOM_VALIDATE', $object->socid, $object); - } + }*/ $formquestion=array(); if (! empty($conf->bom->enabled)) @@ -362,7 +418,67 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea ); } - $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('ValidateOrder'), $text, 'confirm_validate', $formquestion, 0, 1, 220); + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('Validate'), $text, 'confirm_validate', $formquestion, 0, 1, 220); + } + + // Confirmation of closing + if ($action == 'close') + { + $text = $langs->trans('ConfirmCloseBom', $object->ref); + /*if (! empty($conf->notification->enabled)) + { + require_once DOL_DOCUMENT_ROOT . '/core/class/notify.class.php'; + $notify = new Notify($db); + $text .= '
'; + $text .= $notify->confirmMessage('BOM_CLOSE', $object->socid, $object); + }*/ + + $formquestion=array(); + if (! empty($conf->bom->enabled)) + { + $langs->load("mrp"); + require_once DOL_DOCUMENT_ROOT . '/product/class/html.formproduct.class.php'; + $formproduct = new FormProduct($db); + $forcecombo=0; + if ($conf->browser->name == 'ie') $forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy + $formquestion = array( + // 'text' => $langs->trans("ConfirmClone"), + // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1), + // array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1), + ); + } + + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('Close'), $text, 'confirm_close', $formquestion, 0, 1, 220); + } + + // Confirmation of reopen + if ($action == 'reopen') + { + $text = $langs->trans('ConfirmReopenBom', $object->ref); + /*if (! empty($conf->notification->enabled)) + { + require_once DOL_DOCUMENT_ROOT . '/core/class/notify.class.php'; + $notify = new Notify($db); + $text .= '
'; + $text .= $notify->confirmMessage('BOM_CLOSE', $object->socid, $object); + }*/ + + $formquestion=array(); + if (! empty($conf->bom->enabled)) + { + $langs->load("mrp"); + require_once DOL_DOCUMENT_ROOT . '/product/class/html.formproduct.class.php'; + $formproduct = new FormProduct($db); + $forcecombo=0; + if ($conf->browser->name == 'ie') $forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy + $formquestion = array( + // 'text' => $langs->trans("ConfirmClone"), + // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1), + // array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1), + ); + } + + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('ReOpen'), $text, 'confirm_reopen', $formquestion, 0, 1, 220); } // Clone confirmation @@ -546,20 +662,35 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ''.$langs->trans('Modify').''."\n"; } + // Validate if ($user->rights->bom->write && $object->status == BOM::STATUS_DRAFT) { - print ''; + if (is_array($object->lines) && count($object->lines) > 0) + { + print '' . $langs->trans("Validate") . ''; + } + else + { + print '' . $langs->trans("Validate") . ''; + } } + // Close / Cancel if ($user->rights->bom->write && $object->status == BOM::STATUS_VALIDATED) { - print ''; + print '' . $langs->trans("Disable") . ''; + } + + // Re-open + if ($user->rights->bom->write && $object->status == BOM::STATUS_CANCELED) + { + print '' . $langs->trans("ReOpen") . ''; } // Clone if ($user->rights->bom->write) { - print ''; + print '' . $langs->trans("ToClone") . ''; } /* diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index c8855c9cc03..3968c6d2813 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -640,62 +640,75 @@ class BOM extends CommonObject * Set draft status * * @param User $user Object user that modify + * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers * @return int <0 if KO, >0 if OK */ - public function setDraft($user) + public function setDraft($user, $notrigger = 0) { - global $conf, $langs; + // Protection + if ($this->status <= self::STATUS_DRAFT) + { + return 0; + } - $error=0; + /*if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->bom->write)) + || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->bom->bom_advance->validate)))) + { + $this->error='Permission denied'; + return -1; + }*/ - // Protection - if ($this->status <= self::STATUS_DRAFT) - { - return 0; - } + return $this->setStatusCommon($user, self::STATUS_DRAFT, $notrigger, 'BOM_UNVALIDATE'); + } - /*if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->bom->write)) - || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->bom->bom_advance->validate)))) - { - $this->error='Permission denied'; - return -1; - }*/ + /** + * Set cancel status + * + * @param User $user Object user that modify + * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers + * @return int <0 if KO, 0=Nothing done, >0 if OK + */ + public function cancel($user, $notrigger = 0) + { + // Protection + if ($this->status != self::STATUS_VALIDATED) + { + return 0; + } - $this->db->begin(); + /*if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->bom->write)) + || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->bom->bom_advance->validate)))) + { + $this->error='Permission denied'; + return -1; + }*/ - $sql = "UPDATE ".MAIN_DB_PREFIX."bom"; - $sql.= " SET status = ".self::STATUS_DRAFT; - $sql.= " WHERE rowid = ".$this->id; + return $this->setStatusCommon($user, self::STATUS_CANCELED, 'BOM_CLOSE'); + } - dol_syslog(get_class($this)."::setDraft", LOG_DEBUG); - if ($this->db->query($sql)) - { - if (! $error) - { - $this->oldcopy= clone $this; - } + /** + * Set cancel status + * + * @param User $user Object user that modify + * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers + * @return int <0 if KO, 0=Nothing done, >0 if OK + */ + public function reopen($user, $notrigger = 0) + { + // Protection + if ($this->status != self::STATUS_CANCELED) + { + return 0; + } - if (!$error) { - // Call trigger - $result=$this->call_trigger('BOM_UNVALIDATE', $user); - if ($result < 0) $error++; - } + /*if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->bom->write)) + || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->bom->bom_advance->validate)))) + { + $this->error='Permission denied'; + return -1; + }*/ - if (!$error) { - $this->status=self::STATUS_DRAFT; - $this->db->commit(); - return 1; - } else { - $this->db->rollback(); - return -1; - } - } - else - { - $this->error=$this->db->error(); - $this->db->rollback(); - return -1; - } + return $this->setStatusCommon($user, self::STATUS_VALIDATED, 'BOM_REOPEN'); } /** diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 16d9dcdc3d8..66a15857a04 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -647,7 +647,7 @@ class Commande extends CommonOrder $now=dol_now(); - $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande'; + $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql.= ' SET fk_statut = '.self::STATUS_CLOSED.','; $sql.= ' fk_user_cloture = '.$user->id.','; $sql.= " date_cloture = '".$this->db->idate($now)."'"; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 484bb5fa4d4..d17d49e326e 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -7399,7 +7399,7 @@ abstract class CommonObject if (array_key_exists('fk_user_creat', $fieldvalues) && ! ($fieldvalues['fk_user_creat'] > 0)) $fieldvalues['fk_user_creat']=$user->id; unset($fieldvalues['rowid']); // The field 'rowid' is reserved field name for autoincrement field so we don't need it into insert. if (array_key_exists('ref', $fieldvalues)) $fieldvalues['ref']=dol_string_nospecial($fieldvalues['ref']); // If field is a ref,we sanitize data - + $keys=array(); $values = array(); foreach ($fieldvalues as $k => $v) { @@ -7857,6 +7857,57 @@ abstract class CommonObject } } + + /** + * Set draft status + * + * @param User $user Object user that modify + * @param int $status New status to set (often a constant like self::STATUS_XXX) + * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers + * @param string $triggercode Trigger code to use + * @return int <0 if KO, >0 if OK + */ + public function setStatusCommon($user, $status, $notrigger = 0, $triggercode = '') + { + $error=0; + + $this->db->begin(); + + $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element; + $sql.= " SET status = ".$status; + $sql.= " WHERE rowid = ".$this->id; + + if ($this->db->query($sql)) + { + if (! $error) + { + $this->oldcopy= clone $this; + } + + if (! $error && ! $notrigger) { + // Call trigger + $result=$this->call_trigger($triggercode, $user); + if ($result < 0) $error++; + } + + if (!$error) { + $this->status = $status; + $this->db->commit(); + return 1; + } else { + $this->db->rollback(); + return -1; + } + } + else + { + $this->error=$this->db->error(); + $this->db->rollback(); + return -1; + } + } + + /** * Initialise object with example values * Id must be 0 if object instance is a specimen diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index 9d8e85f889d..601fe792cd6 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -27,4 +27,7 @@ DateStartPlannedMo=Date start planned DateEndPlannedMo=Date end planned KeepEmptyForAsap=Empty means 'As Soon As Possible' EstimatedDuration=Estimated duration -EstimatedDurationDesc=Estimated duration to manufacture this product using this BOM \ No newline at end of file +EstimatedDurationDesc=Estimated duration to manufacture this product using this BOM +ConfirmValidateBom=Are you sure you want to validate this BOM (you will be able to use it to build new Manufacturing Orders) +ConfirmCloseBom=Are you sure you want to cancel this BOM (you won't be able to use it to build new Manufacturing Orders anymore) ? +ConfirmReopenBom=Are you sure you want to re-open this BOM (you will be able to use it to build new Manufacturing Orders) \ No newline at end of file From d3df04c5aa4b9cd6ca856715e695c30eb1e51a86 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 01:36:07 +0200 Subject: [PATCH 325/980] Mutualize code --- htdocs/bom/bom_card.php | 84 ------------------ htdocs/bom/class/bom.class.php | 9 +- htdocs/core/actions_addupdatedelete.inc.php | 88 ++++++++++++++++++- .../template/class/myobject.class.php | 76 ++++++++++++++++ 4 files changed, 168 insertions(+), 89 deletions(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 899fcdbe0e6..15ae8f3c21f 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -178,90 +178,6 @@ if (empty($reshook)) $action = ''; } } - - if ($action == 'confirm_validate' && $confirm == 'yes' && $permissionedit) - { - $result = $object->valid($user); - if ($result >= 0) - { - // Define output language - if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) - { - $outputlangs = $langs; - $newlang = ''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09'); - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang; - if (! empty($newlang)) { - $outputlangs = new Translate("", $conf); - $outputlangs->setDefaultLang($newlang); - } - $model=$object->modelpdf; - $ret = $object->fetch($id); // Reload to get new records - - $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); - } - } - else - { - setEventMessages($object->error, $object->errors, 'errors'); - } - } - - if ($action == 'confirm_close' && $confirm == 'yes' && $permissionedit) - { - $result = $object->cancel($user); - if ($result >= 0) - { - // Define output language - if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) - { - $outputlangs = $langs; - $newlang = ''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09'); - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang; - if (! empty($newlang)) { - $outputlangs = new Translate("", $conf); - $outputlangs->setDefaultLang($newlang); - } - $model=$object->modelpdf; - $ret = $object->fetch($id); // Reload to get new records - - $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); - } - } - else - { - setEventMessages($object->error, $object->errors, 'errors'); - } - } - - if ($action == 'confirm_reopen' && $confirm == 'yes' && $permissionedit) - { - $result = $object->reopen($user); - if ($result >= 0) - { - // Define output language - if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) - { - $outputlangs = $langs; - $newlang = ''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09'); - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang; - if (! empty($newlang)) { - $outputlangs = new Translate("", $conf); - $outputlangs->setDefaultLang($newlang); - } - $model=$object->modelpdf; - $ret = $object->fetch($id); // Reload to get new records - - $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); - } - } - else - { - setEventMessages($object->error, $object->errors, 'errors'); - } - } } diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 3968c6d2813..284191d0672 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -513,7 +513,7 @@ class BOM extends CommonObject * @param int $notrigger 1=Does not execute triggers, 0= execute triggers * @return int <=0 if OK, 0=Nothing done, >0 if KO */ - public function valid($user, $notrigger = 0) + public function validate($user, $notrigger = 0) { global $conf, $langs; @@ -553,7 +553,7 @@ class BOM extends CommonObject $this->newref = $num; // Validate - $sql = "UPDATE ".MAIN_DB_PREFIX."bom_bom"; + $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element; $sql.= " SET ref = '".$this->db->escape($num)."',"; $sql.= " status = ".self::STATUS_VALIDATED.","; $sql.= " date_valid='".$this->db->idate($now)."',"; @@ -683,7 +683,7 @@ class BOM extends CommonObject return -1; }*/ - return $this->setStatusCommon($user, self::STATUS_CANCELED, 'BOM_CLOSE'); + return $this->setStatusCommon($user, self::STATUS_CANCELED, $notrigger, 'BOM_CLOSE'); } /** @@ -708,9 +708,10 @@ class BOM extends CommonObject return -1; }*/ - return $this->setStatusCommon($user, self::STATUS_VALIDATED, 'BOM_REOPEN'); + return $this->setStatusCommon($user, self::STATUS_VALIDATED, $notrigger, 'BOM_REOPEN'); } + /** * Return a link to the object card (with optionaly the picto) * diff --git a/htdocs/core/actions_addupdatedelete.inc.php b/htdocs/core/actions_addupdatedelete.inc.php index 66428eea974..abe80b5a832 100644 --- a/htdocs/core/actions_addupdatedelete.inc.php +++ b/htdocs/core/actions_addupdatedelete.inc.php @@ -18,7 +18,7 @@ /** * \file htdocs/core/actions_addupdatedelete.inc.php - * \brief Code for common actions cancel / add / update / delete / clone + * \brief Code for common actions cancel / add / update / update_extras / delete / deleteline / validate / cancel / reopen / clone */ @@ -231,6 +231,92 @@ if ($action == 'confirm_deleteline' && $confirm == 'yes' && ! empty($permissiont } } +// Action validate object +if ($action == 'confirm_validate' && $confirm == 'yes' && $permissionedit) +{ + $result = $object->valid($user); + if ($result >= 0) + { + // Define output language + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) + { + $outputlangs = $langs; + $newlang = ''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09'); + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang; + if (! empty($newlang)) { + $outputlangs = new Translate("", $conf); + $outputlangs->setDefaultLang($newlang); + } + $model=$object->modelpdf; + $ret = $object->fetch($id); // Reload to get new records + + $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); + } + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } +} + +// Action close object +if ($action == 'confirm_close' && $confirm == 'yes' && $permissionedit) +{ + $result = $object->cancel($user); + if ($result >= 0) + { + // Define output language + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) + { + $outputlangs = $langs; + $newlang = ''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09'); + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang; + if (! empty($newlang)) { + $outputlangs = new Translate("", $conf); + $outputlangs->setDefaultLang($newlang); + } + $model=$object->modelpdf; + $ret = $object->fetch($id); // Reload to get new records + + $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); + } + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } +} + +// Action reopen object +if ($action == 'confirm_reopen' && $confirm == 'yes' && $permissionedit) +{ + $result = $object->reopen($user); + if ($result >= 0) + { + // Define output language + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) + { + $outputlangs = $langs; + $newlang = ''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09'); + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang; + if (! empty($newlang)) { + $outputlangs = new Translate("", $conf); + $outputlangs->setDefaultLang($newlang); + } + $model=$object->modelpdf; + $ret = $object->fetch($id); // Reload to get new records + + $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); + } + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } +} // Action clone object if ($action == 'confirm_clone' && $confirm == 'yes' && ! empty($permissiontoadd)) diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 371c4498da8..5c17723e4dd 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -489,6 +489,82 @@ class MyObject extends CommonObject return $this->deleteLineCommon($user, $idline, $notrigger); } + + /** + * Set draft status + * + * @param User $user Object user that modify + * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers + * @return int <0 if KO, >0 if OK + */ + public function setDraft($user, $notrigger = 0) + { + // Protection + if ($this->status <= self::STATUS_DRAFT) + { + return 0; + } + + /*if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->mymodule->write)) + || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->mymodule->mymodule_advance->validate)))) + { + $this->error='Permission denied'; + return -1; + }*/ + + return $this->setStatusCommon($user, self::STATUS_DRAFT, $notrigger, 'BOM_UNVALIDATE'); + } + + /** + * Set cancel status + * + * @param User $user Object user that modify + * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers + * @return int <0 if KO, 0=Nothing done, >0 if OK + */ + public function cancel($user, $notrigger = 0) + { + // Protection + if ($this->status != self::STATUS_VALIDATED) + { + return 0; + } + + /*if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->mymodule->write)) + || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->mymodule->mymodule_advance->validate)))) + { + $this->error='Permission denied'; + return -1; + }*/ + + return $this->setStatusCommon($user, self::STATUS_CANCELED, $notrigger, 'BOM_CLOSE'); + } + + /** + * Set back to validated status + * + * @param User $user Object user that modify + * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers + * @return int <0 if KO, 0=Nothing done, >0 if OK + */ + public function reopen($user, $notrigger = 0) + { + // Protection + if ($this->status != self::STATUS_CANCELED) + { + return 0; + } + + /*if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->mymodule->write)) + || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->mymodule->mymodule_advance->validate)))) + { + $this->error='Permission denied'; + return -1; + }*/ + + return $this->setStatusCommon($user, self::STATUS_VALIDATED, $notrigger, 'BOM_REOPEN'); + } + /** * Return a link to the object card (with optionaly the picto) * From ffc48209702ed36c9effb9c30764ed925144cf0b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 02:05:23 +0200 Subject: [PATCH 326/980] Fix counter of BOM --- htdocs/bom/bom_card.php | 4 ++-- htdocs/bom/class/bom.class.php | 6 +++--- htdocs/core/actions_addupdatedelete.inc.php | 2 +- htdocs/core/modules/bom/mod_bom_advanced.php | 6 +++--- htdocs/core/modules/bom/mod_bom_standard.php | 10 +++++----- htdocs/langs/en_US/mrp.lang | 2 +- htdocs/modulebuilder/template/myobject_card.php | 2 +- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 15ae8f3c21f..8e6551e92ea 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -97,8 +97,8 @@ if (empty($reshook)) $permissiontodelete = $user->rights->bom->delete || ($permissiontoadd && $object->status == 0); $backurlforlist = DOL_URL_ROOT.'/bom/bom_list.php'; if (empty($backtopage)) { - if (empty($id)) $backtopage = $backurlforlist; - else $backtopage = DOL_URL_ROOT.'/bom/bom_card.php?id='.$id; + if (empty($id) && $action != 'add' && $action != 'create') $backtopage = $backurlforlist; + else $backtopage = DOL_URL_ROOT.'/bom/bom_card.php?id='.($id > 0 ? $id : '__ID__'); } $triggermodname = 'BOM_MODIFY'; // Name of trigger action code to execute when we modify record diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 284191d0672..d8e5387f075 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -524,7 +524,7 @@ class BOM extends CommonObject // Protection if ($this->statut == self::STATUS_VALIDATED) { - dol_syslog(get_class($this)."::valid action abandonned: already validated", LOG_WARNING); + dol_syslog(get_class($this)."::validate action abandonned: already validated", LOG_WARNING); return 0; } @@ -560,7 +560,7 @@ class BOM extends CommonObject $sql.= " fk_user_valid = ".$user->id; $sql.= " WHERE rowid = ".$this->id; - dol_syslog(get_class($this)."::valid()", LOG_DEBUG); + dol_syslog(get_class($this)."::validate()", LOG_DEBUG); $resql=$this->db->query($sql); if (! $resql) { @@ -597,7 +597,7 @@ class BOM extends CommonObject $dirdest = $conf->bom->dir_output.'/'.$newref; if (! $error && file_exists($dirsource)) { - dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest); + dol_syslog(get_class($this)."::validate() rename dir ".$dirsource." into ".$dirdest); if (@rename($dirsource, $dirdest)) { diff --git a/htdocs/core/actions_addupdatedelete.inc.php b/htdocs/core/actions_addupdatedelete.inc.php index abe80b5a832..7082bc5e882 100644 --- a/htdocs/core/actions_addupdatedelete.inc.php +++ b/htdocs/core/actions_addupdatedelete.inc.php @@ -234,7 +234,7 @@ if ($action == 'confirm_deleteline' && $confirm == 'yes' && ! empty($permissiont // Action validate object if ($action == 'confirm_validate' && $confirm == 'yes' && $permissionedit) { - $result = $object->valid($user); + $result = $object->validate($user); if ($result >= 0) { // Define output language diff --git a/htdocs/core/modules/bom/mod_bom_advanced.php b/htdocs/core/modules/bom/mod_bom_advanced.php index be6bd9f095d..eed79c037fd 100644 --- a/htdocs/core/modules/bom/mod_bom_advanced.php +++ b/htdocs/core/modules/bom/mod_bom_advanced.php @@ -118,11 +118,11 @@ class mod_bom_advanced extends ModeleNumRefboms /** * Return next free value * - * @param Societe $objsoc Object thirdparty + * @param Product $objprod Object product * @param Object $object Object we need next value for * @return string Value if KO, <0 if KO */ - public function getNextValue($objsoc, $object) + public function getNextValue($objprod, $object) { global $db,$conf; @@ -139,7 +139,7 @@ class mod_bom_advanced extends ModeleNumRefboms $date = ($object->date_bom ? $object->date_bom : $object->date); - $numFinal=get_next_value($db, $mask, 'bom_bom', 'ref', '', $objsoc, $date); + $numFinal=get_next_value($db, $mask, 'bom_bom', 'ref', '', null, $date); return $numFinal; } diff --git a/htdocs/core/modules/bom/mod_bom_standard.php b/htdocs/core/modules/bom/mod_bom_standard.php index af7e173bbae..5eacb3289df 100644 --- a/htdocs/core/modules/bom/mod_bom_standard.php +++ b/htdocs/core/modules/bom/mod_bom_standard.php @@ -108,16 +108,16 @@ class mod_bom_standard extends ModeleNumRefboms /** * Return next free value * - * @param Societe $objsoc Object thirdparty + * @param Product $objprod Object product * @param Object $object Object we need next value for * @return string Value if KO, <0 if KO */ - public function getNextValue($objsoc, $object) + public function getNextValue($objprod, $object) { global $db,$conf; // D'abord on recupere la valeur max - $posindice=8; + $posindice=9; $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."bom_bom"; $sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; @@ -137,9 +137,9 @@ class mod_bom_standard extends ModeleNumRefboms } //$date=time(); - $date=$object->date; + $date=$object->date_creation; $yymm = strftime("%y%m", $date); - +; if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is else $num = sprintf("%04s", $max+1); diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index 601fe792cd6..9fbbe6a7161 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -28,6 +28,6 @@ DateEndPlannedMo=Date end planned KeepEmptyForAsap=Empty means 'As Soon As Possible' EstimatedDuration=Estimated duration EstimatedDurationDesc=Estimated duration to manufacture this product using this BOM -ConfirmValidateBom=Are you sure you want to validate this BOM (you will be able to use it to build new Manufacturing Orders) +ConfirmValidateBom=Are you sure you want to validate the BOM with the reference %s (you will be able to use it to build new Manufacturing Orders) ConfirmCloseBom=Are you sure you want to cancel this BOM (you won't be able to use it to build new Manufacturing Orders anymore) ? ConfirmReopenBom=Are you sure you want to re-open this BOM (you will be able to use it to build new Manufacturing Orders) \ No newline at end of file diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 01d800f23c8..c443641ffd6 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -129,7 +129,7 @@ if (empty($reshook)) $permissiontodelete = $user->rights->mymodule->delete || ($permissiontoadd && $object->status == 0); $backurlforlist = dol_buildpath('/mymodule/myobject_list.php', 1); if (empty($backtopage)) { - if (empty($id)) $backtopage = $backurlforlist; + if (empty($id) && $action != 'add' && $action != 'create') $backtopage = $backurlforlist; else $backtopage = dol_buildpath('/mymodule/myobject_card.php', 1).'?id='.($id > 0 ? $id : '__ID__'); } $triggermodname = 'MYMODULE_MYOBJECT_MODIFY'; // Name of trigger action code to execute when we modify record From b0de030f3e732aa8fb9b0244b4fd03688cd52981 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 02:05:47 +0200 Subject: [PATCH 327/980] phpcs --- htdocs/core/modules/bom/mod_bom_standard.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/bom/mod_bom_standard.php b/htdocs/core/modules/bom/mod_bom_standard.php index 5eacb3289df..eefbc7570c0 100644 --- a/htdocs/core/modules/bom/mod_bom_standard.php +++ b/htdocs/core/modules/bom/mod_bom_standard.php @@ -139,7 +139,7 @@ class mod_bom_standard extends ModeleNumRefboms //$date=time(); $date=$object->date_creation; $yymm = strftime("%y%m", $date); -; + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is else $num = sprintf("%04s", $max+1); From fc90916de944287e9327915ca7de3336c51be4b9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 03:17:53 +0200 Subject: [PATCH 328/980] Look and feel v11 --- htdocs/bom/bom_list.php | 48 +- htdocs/mrp/mo_list.php | 21 +- htdocs/product/inventory/list.php | 92 ++- htdocs/product/stock/class/entrepot.class.php | 24 + htdocs/product/stock/list.php | 592 ++++++++++++------ 5 files changed, 479 insertions(+), 298 deletions(-) diff --git a/htdocs/bom/bom_list.php b/htdocs/bom/bom_list.php index 635f0f9db65..46473d52ddb 100644 --- a/htdocs/bom/bom_list.php +++ b/htdocs/bom/bom_list.php @@ -21,6 +21,7 @@ * \ingroup bom * \brief List page for bom */ + // Load Dolibarr environment require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; @@ -99,7 +100,7 @@ $arrayfields=array(); foreach($object->fields as $key => $val) { // If $val['visible']==0, then we never show the field - if (! empty($val['visible'])) $arrayfields['t.'.$key]=array('label'=>$val['label'], 'checked'=>(($val['visible']<0)?0:1), 'enabled'=>$val['enabled'], 'position'=>$val['position']); + if (! empty($val['visible'])) $arrayfields['t.'.$key]=array('label'=>$val['label'], 'checked'=>(($val['visible']<0)?0:1), 'enabled'=>($val['enabled'] && ($val['visible'] != 3)), 'position'=>$val['position']); } // Extra fields if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) @@ -179,8 +180,9 @@ foreach($object->fields as $key => $val) $sql.='t.'.$key.', '; } // Add fields from extrafields -if (! empty($extrafields->attributes[$object->table_element]['label'])) +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.', ' : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook @@ -213,6 +215,7 @@ foreach($object->fields as $key => $val) // 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.', ' : ''); +} // Add where from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListGroupBy',$parameters); // Note that $action and $object may have been modified by hook @@ -258,7 +261,7 @@ if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && { $obj = $db->fetch_object($resql); $id = $obj->rowid; - header("Location: ".dol_buildpath('/bom/bom_card.php', 1).'?id='.$id); + header("Location: ".DOL_URL_ROOT.'/bom/bom_card.php?id='.$id); exit; } @@ -290,7 +293,8 @@ if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&con if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); foreach($search as $key => $val) { - $param.= '&search_'.$key.'='.urlencode($search[$key]); + if (is_array($search[$key]) && count($search[$key])) foreach($search[$key] as $skey) $param.='&search_'.$key.'[]='.urlencode($skey); + else $param.= '&search_'.$key.'='.urlencode($search[$key]); } if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); // Add $param from extra fields @@ -315,19 +319,7 @@ print ''; print ''; print ''; -$newcardbutton=''; -//if ($user->rights->bom->creer) -//{ - $newcardbutton=''.$langs->trans('New').''; - $newcardbutton.= ''; - $newcardbutton.= ''; -//} -//else -//{ -// $newcardbutton=''.$langs->trans('New').''; -// $newcardbutton.= ''; -// $newcardbutton.= ''; -//} +$newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/bom/bom_card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $user->rights->bom->write); print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'cubes', 0, $newcardbutton, '', $limit); @@ -338,10 +330,10 @@ $objecttmp=new BOM($db); $trackid='xxxx'.$object->id; include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; -if ($sall) +if ($search_all) { foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); - print '
'.$langs->trans("FilterOnInto", $sall) . join(', ', $fieldstosearchall).'
'; + print '
'.$langs->trans("FilterOnInto", $search_all) . join(', ', $fieldstosearchall).'
'; } $moreforfilter = ''; @@ -424,7 +416,7 @@ $parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sort $reshook=$hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column -print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch ')."\n"; +print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n"; print '
'."\n"; @@ -460,12 +452,14 @@ while ($i < min($num, $limit)) foreach($object->fields as $key => $val) { $cssforfield=(empty($val['css'])?'':$val['css']); - if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; - elseif ($key == 'ref') $cssforfield.=($cssforfield?' ':'').'nowrap'; - elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; - elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; - elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real'))) $cssforfield.=($cssforfield?' ':'').'right'; - + if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + + if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif ($key == 'ref') $cssforfield.=($cssforfield?' ':'').'nowrap'; + + if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $key != 'status') $cssforfield.=($cssforfield?' ':'').'right'; + if (! empty($arrayfields['t.'.$key]['checked'])) { print ''; @@ -488,7 +482,7 @@ while ($i < min($num, $limit)) $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column - print ''; } @@ -442,7 +429,7 @@ foreach($object->fields as $key => $val) if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; - elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price'))) $cssforfield.=($cssforfield?' ':'').'right'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $val['label'] != 'TechnicalID') $cssforfield.=($cssforfield?' ':'').'right'; if (! empty($arrayfields['t.'.$key]['checked'])) { print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield?'class="'.$cssforfield.'"':''), $sortfield, $sortorder, ($cssforfield?$cssforfield.' ':''))."\n"; diff --git a/htdocs/product/inventory/list.php b/htdocs/product/inventory/list.php index b81e989cbb9..59c81c83e29 100644 --- a/htdocs/product/inventory/list.php +++ b/htdocs/product/inventory/list.php @@ -21,6 +21,7 @@ * \brief List page for inventory */ +// Load Dolibarr environment require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; @@ -30,7 +31,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/inventory/class/inventory.class.php'; // Load translation files required by the page $langs->loadLangs(array("stocks","other")); -$action = GETPOST('action', 'alpha')?GETPOST('action', 'alpha'):'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... +$action = GETPOST('action', 'aZ09')?GETPOST('action', 'aZ09'):'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) $show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation @@ -47,7 +48,7 @@ $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; $sortfield = GETPOST('sortfield', 'alpha'); $sortorder = GETPOST('sortorder', 'alpha'); $page = GETPOST('page', 'int'); -if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; @@ -67,7 +68,7 @@ if (! $sortorder) $sortorder="ASC"; // Security check $socid=0; -if ($user->societe_id > 0) +if ($user->societe_id > 0) // Protection if external user { //$socid = $user->societe_id; accessforbidden(); @@ -101,10 +102,10 @@ $arrayfields=array(); foreach($object->fields as $key => $val) { // If $val['visible']==0, then we never show the field - if (! empty($val['visible'])) $arrayfields['t.'.$key]=array('label'=>$val['label'], 'checked'=>(($val['visible']<0)?0:1), 'enabled'=>$val['enabled'], 'position'=>$val['position']); + if (! empty($val['visible'])) $arrayfields['t.'.$key]=array('label'=>$val['label'], 'checked'=>(($val['visible']<0)?0:1), 'enabled'=>($val['enabled'] && ($val['visible'] != 3)), 'position'=>$val['position']); } // Extra fields -if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) { @@ -119,8 +120,6 @@ $arrayfields = dol_sort_array($arrayfields, 'position'); /* * Actions - * - * Put here all code to do according to value of "$action" parameter */ if (GETPOST('cancel', 'alpha')) { $action='list'; $massaction=''; } @@ -164,8 +163,6 @@ if (empty($reshook)) /* * View - * - * Put here all code to render page */ $form=new Form($db); @@ -192,10 +189,10 @@ if (! empty($extrafields->attributes[$object->table_element]['label'])) { $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook $sql.=$hookmanager->resPrint; -$sql=preg_replace('/, $/', '', $sql); +$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."myobject_extrafields as ef on (t.rowid = ef.fk_object)"; -if ($object->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity('myobject').")"; +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)"; +if ($object->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity($object->element).")"; else $sql.=" WHERE 1 = 1"; foreach($search as $key => $val) { @@ -218,11 +215,14 @@ foreach($object->fields as $key => $val) $sql.='t.'.$key.', '; } // Add fields from extrafields -foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.', ' : ''); +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.', ' : ''); +} // Add where from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListGroupBy',$parameters); // Note that $action and $object may have been modified by hook $sql.=$hookmanager->resPrint; +$sql=preg_replace('/, $/','', $sql); */ $sql.=$db->order($sortfield, $sortorder); @@ -231,18 +231,17 @@ $sql.=$db->order($sortfield, $sortorder); $nbtotalofrecords = ''; if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { - $result = $db->query($sql); - $nbtotalofrecords = $db->num_rows($result); - if (($page * $limit) > $nbtotalofrecords) // if total resultset is smaller then paging size (filtering), goto and load page 0 + $resql = $db->query($sql); + $nbtotalofrecords = $db->num_rows($resql); + if (($page * $limit) > $nbtotalofrecords) // if total of record found is smaller than page * limit, goto and load page 0 { $page = 0; $offset = 0; } } -// if total resultset is smaller the limit, no need to do paging. +// if total of record found is smaller than limit, no need to do paging and to restart another select with limits set. if (is_numeric($nbtotalofrecords) && $limit > $nbtotalofrecords) { - $resql = $result; $num = $nbtotalofrecords; } else @@ -274,21 +273,6 @@ if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && llxHeader('', $title, $help_url); -// Example : Adding jquery code -print ''; - $arrayofselected=is_array($toselect)?$toselect:array(); $param=''; @@ -296,7 +280,8 @@ if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&con if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); foreach($search as $key => $val) { - $param.= '&search_'.$key.'='.urlencode($search[$key]); + if (is_array($search[$key]) && count($search[$key])) foreach($search[$key] as $skey) $param.='&search_'.$key.'[]='.urlencode($skey); + else $param.= '&search_'.$key.'='.urlencode($search[$key]); } if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); // Add $param from extra fields @@ -308,7 +293,7 @@ $arrayofmassactions = array( //'builddoc'=>$langs->trans("PDFMerge"), ); if ($user->rights->stock->supprimer) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); -if (in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array(); +if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array(); $massactionbutton=$form->selectMassAction('', $arrayofmassactions); print ''; @@ -321,7 +306,9 @@ print ''; print ''; print ''; -print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'products', 0, '', '', $limit); +$newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/bom/bom_card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $user->rights->bom->write); + +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'products', 0, $newcardbutton, '', $limit); // Add code for pre mass action (confirmation or email presend form) $topicmail="Information"; @@ -330,7 +317,7 @@ $objecttmp=new Inventory($db); $trackid='inve'.$object->id; include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; -if ($sall) +if ($search_all) { foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); print '
'.$langs->trans("FilterOnInto", $sall) . join(', ', $fieldstosearchall).'
'; @@ -415,13 +402,15 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; $parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder); $reshook=$hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; -print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch ')."\n"; +// Action column +print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n"; print ''."\n"; // Detect if we need a fetch on each output line $needToFetchEachLine=0; -if (! empty($extrafields->attributes[$object->table_element]['computed'])) { +if (is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0) +{ foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) { if (preg_match('/\$object/', $val)) $needToFetchEachLine++; // There is at least one compute field that use $object @@ -448,16 +437,21 @@ while ($i < min($num, $limit)) print ''; foreach($object->fields as $key => $val) { - $align=''; - if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center'; - if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap'; - if ($key == 'status') $align.=($align?' ':'').'center'; + $cssforfield=(empty($val['css'])?'':$val['css']); + if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + + if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif ($key == 'ref') $cssforfield.=($cssforfield?' ':'').'nowrap'; + + if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $key != 'status') $cssforfield.=($cssforfield?' ':'').'right'; + if (! empty($arrayfields['t.'.$key]['checked'])) { - print ''; - print $object->showOutputField($val, $key, $obj->$key, ''); + print ''; + if ($key == 'status') print $object->getLibStatut(5); + elseif (in_array($val['type'], array('date','datetime','timestamp'))) print $object->showOutputField($val, $key, $db->jdate($obj->$key), ''); + else print $object->showOutputField($val, $key, $obj->$key, ''); print ''; if (! $i) $totalarray['nbfield']++; if (! empty($val['isameasure'])) @@ -474,7 +468,7 @@ while ($i < min($num, $limit)) $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column - print ''; if (! $i) $totalarray['nbfield']++; - print ''; + print ''."\n"; $i++; } diff --git a/htdocs/product/stock/class/entrepot.class.php b/htdocs/product/stock/class/entrepot.class.php index 824934992bf..004ad49ce46 100644 --- a/htdocs/product/stock/class/entrepot.class.php +++ b/htdocs/product/stock/class/entrepot.class.php @@ -95,6 +95,30 @@ class Entrepot extends CommonObject // List of short language codes for status public $statuts = array(); + /** + * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + */ + public $fields=array( + 'rowid' =>array('type'=>'integer', 'label'=>'ID', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>10), + 'ref' =>array('type'=>'varchar(255)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>-2, 'showoncombobox'=>1, 'position'=>25), + 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>30), + 'description' =>array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-2, 'position'=>35), + 'lieu' =>array('type'=>'varchar(64)', 'label'=>'LocationSummary', 'enabled'=>1, 'visible'=>-2, 'position'=>40), + 'fk_parent' =>array('type'=>'integer', 'label'=>'ParentWarehouse', 'enabled'=>1, 'visible'=>-2, 'position'=>41), + 'address' =>array('type'=>'varchar(255)', 'label'=>'Address', 'enabled'=>1, 'visible'=>-2, 'position'=>45), + 'zip' =>array('type'=>'varchar(10)', 'label'=>'Zip', 'enabled'=>1, 'visible'=>-2, 'position'=>50), + 'town' =>array('type'=>'varchar(50)', 'label'=>'Town', 'enabled'=>1, 'visible'=>-2, 'position'=>55), + 'fk_departement' =>array('type'=>'integer', 'label'=>'State', 'enabled'=>1, 'visible'=>0, 'position'=>60), + 'fk_pays' =>array('type'=>'integer', 'label'=>'Country', 'enabled'=>1, 'visible'=>-2, 'position'=>65), + //'fk_user_author' =>array('type'=>'integer', 'label'=>'Fk user author', 'enabled'=>1, 'visible'=>-2, 'position'=>82), + //'model_pdf' =>array('type'=>'varchar(255)', 'label'=>'ModelPDF', 'enabled'=>1, 'visible'=>-2, 'position'=>84), + //'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportKey', 'enabled'=>1, 'visible'=>-2, 'position'=>85), + 'statut' =>array('type'=>'tinyint(4)', 'label'=>'Status', 'enabled'=>1, 'visible'=>-2, 'position'=>200), + 'datec' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>500), + 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), + ); + + /** * Constructor * diff --git a/htdocs/product/stock/list.php b/htdocs/product/stock/list.php index ae39ba63f3b..b38888be9bb 100644 --- a/htdocs/product/stock/list.php +++ b/htdocs/product/stock/list.php @@ -28,34 +28,50 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php'; // Load translation files required by the page -$langs->load("stocks"); +$langs->loadLangs(array("stocks","other")); -// Security check -$result=restrictedArea($user, 'stock'); +$action = GETPOST('action', 'aZ09')?GETPOST('action', 'aZ09'):'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... +$massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) +$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation +$cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button +$toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list +$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'stocklist'; // 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') -$sall=trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml')); +$search_all=trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml')); $search_ref=GETPOST("sref", "alpha")?GETPOST("sref", "alpha"):GETPOST("search_ref", "alpha"); $search_label=GETPOST("snom", "alpha")?GETPOST("snom", "alpha"):GETPOST("search_label", "alpha"); $search_status=GETPOST("search_status", "int"); +// Load variable for pagination $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; -$sortfield = GETPOST("sortfield"); -$sortorder = GETPOST("sortorder"); +$sortfield = GETPOST('sortfield', 'alpha'); +$sortorder = GETPOST('sortorder', 'alpha'); +$page = GETPOST('page', 'int'); +if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; if (! $sortfield) $sortfield="e.ref"; if (! $sortorder) $sortorder="ASC"; -$page = GETPOST("page"); -if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 -$offset = $limit * $page; + +// Security check +$result=restrictedArea($user, 'stock'); + $year = strftime("%Y", time()); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $object = new Entrepot($db); -$hookmanager->initHooks(array('stocklist')); $extrafields = new ExtraFields($db); +$diroutputmassaction=$conf->inventory->dir_output . '/temp/massgeneration/'.$user->id; +$hookmanager->initHooks(array('stocklist')); -// fetch optionals attributes and labels +// Fetch optionals attributes and labels $extrafields->fetch_name_optionals_label($object->table_element); + $search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); @@ -69,30 +85,69 @@ $fieldstosearchall = array( 'e.town'=>'Town', ); - -// Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +// Definition of fields for list +$arrayfields=array( + 'stockqty'=>array('type'=>'float', 'label'=>'PhysicalStock', 'enabled'=>1, 'visible'=>-2, 'position'=>70), + 'estimatedvalue'=>array('type'=>'float', 'label'=>'EstimatedStockValue', 'enabled'=>1, 'visible'=>-2, 'position'=>71), + 'sellvalue'=>array('type'=>'float', 'label'=>'EstimatedStockValueSell', 'enabled'=>1, 'visible'=>-2, 'position'=>72), +); +foreach($object->fields as $key => $val) { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + // If $val['visible']==0, then we never show the field + if (! empty($val['visible'])) $arrayfields['t.'.$key]=array('label'=>$val['label'], 'checked'=>(($val['visible']<0)?0:1), 'enabled'=>($val['enabled'] && ($val['visible'] != 3)), 'position'=>$val['position']); } +// Extra fields +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) +{ + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } +} +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); /* * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; +if (GETPOST('cancel', 'alpha')) { $action='list'; $massaction=''; } +if (! GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; } -if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) // Both test are required to be compatible with all browsers +$parameters=array(); +$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +if (empty($reshook)) { - $search_ref=""; - $sall=""; - $search_label=""; - $search_status=""; - $search_array_options=array(); + // Selection of new fields + include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; + + // Purge search criteria + if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') ||GETPOST('button_removefilter', 'alpha')) // All tests are required to be compatible with all browsers + { + $search_ref=""; + $sall=""; + $search_label=""; + $search_status=""; + $toselect=''; + $search_array_options=array(); + } + if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha') + || GETPOST('button_search_x', 'alpha') || GETPOST('button_search.x', 'alpha') || GETPOST('button_search', 'alpha')) + { + $massaction=''; // Protection to avoid mass action if we force a new search during a mass action confirmation + } + + // Mass actions + $objectclass='Entrepot'; + $objectlabel='Warehouse'; + $permtoread = $user->rights->stock->lire; + $permtodelete = $user->rights->stock->supprimer; + $uploaddir = $conf->stock->dir_output; + include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } @@ -103,6 +158,14 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $form=new Form($db); $warehouse=new Entrepot($db); +$now=dol_now(); + +$help_url='EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks'; +$title = $langs->trans("ListOfWarehouses"); + + +// Build and execute select +// -------------------------------------------------------------------- $sql = "SELECT e.rowid, e.ref, e.statut, e.lieu, e.address, e.zip, e.town, e.fk_pays, e.fk_parent,"; $sql.= " SUM(p.pmp * ps.reel) as estimatedvalue, SUM(p.price * ps.reel) as sellvalue, SUM(ps.reel) as stockqty"; // Add fields from extrafields @@ -115,16 +178,16 @@ if (! empty($extrafields->attributes[$object->table_element]['label'])) { $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook $sql.=$hookmanager->resPrint; -//$sql=preg_replace('/, $/', '', $sql); -$sql.= " FROM ".MAIN_DB_PREFIX."entrepot as e"; +$sql=preg_replace('/,\s*$/', '', $sql); +$sql.= " FROM ".MAIN_DB_PREFIX.$object->table_element." as e"; +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 (e.rowid = ef.fk_object)"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_stock as ps ON e.rowid = ps.fk_entrepot"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON ps.fk_product = p.rowid"; -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 (e.rowid = ef.fk_object)"; $sql.= " WHERE e.entity IN (".getEntity('stock').")"; if ($search_ref) $sql.= natural_search("e.ref", $search_ref); // ref if ($search_label) $sql.= natural_search("e.lieu", $search_label); // label if ($search_status != '' && $search_status >= 0) $sql.= " AND e.statut = ".$search_status; -if ($sall) $sql .= natural_search(array_keys($fieldstosearchall), $sall); +if ($search_all) $sql .= natural_search(array_keys($fieldstosearchall), $search_all); // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks @@ -149,189 +212,308 @@ if ($result) } } $sql.= $db->order($sortfield, $sortorder); -$sql.= $db->plimit($limit+1, $offset); -$result = $db->query($sql); -if ($result) +// Count total nb of records +$nbtotalofrecords = ''; +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { - $num = $db->num_rows($result); - - $i = 0; - - $help_url='EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks'; - llxHeader("", $langs->trans("ListOfWarehouses"), $help_url); - - $param=''; - if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; - if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; - if ($search_ref) $param.="&search_ref=".urlencode($search_ref); - if ($search_label) $param.="&search_label=".urlencode($search_label); - if ($search_status) $param.="&search_status=".urlencode($search_status); - if ($sall) $param.="&sall=".urlencode($sall); - - // Add $param from extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; - - $newcardbutton=''; - if ($user->rights->stock->creer) + $resql = $db->query($sql); + $nbtotalofrecords = $db->num_rows($resql); + if (($page * $limit) > $nbtotalofrecords) // if total of record found is smaller than page * limit, goto and load page 0 { - $newcardbutton=''.$langs->trans('MenuNewWarehouse').''; - $newcardbutton.= ''; - $newcardbutton.= ''; + $page = 0; + $offset = 0; } - - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - - print_barre_liste($langs->trans("ListOfWarehouses"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $totalnboflines, 'generic', 0, $newcardbutton, '', $limit); - - if ($sall) - { - foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); - print '
'.$langs->trans("FilterOnInto", $sall) . join(', ', $fieldstosearchall).'
'; - } - - $moreforfilter=''; - - print '
'; - print '
'.img_picto('', $picto, 'class="valignmiddle widthpictotitle pictotitle"', $pictoisfullpath).''; $return.= '
'.$titre.'
'; @@ -4187,11 +4187,10 @@ function print_barre_liste($titre, $page, $file, $options = '', $sortfield = '', print "\n"; print "\n"; - print ''; // maring bottom must be same than into load_fiche_tire + print '
'; // maring bottom must be same than into load_fiche_tire // Left - //if ($picto && $titre) print ''; - print ''; // User assigned - print ''; // Progression diff --git a/htdocs/ticket/class/actions_ticket.class.php b/htdocs/ticket/class/actions_ticket.class.php index 2a9fc198592..f6d03d3360a 100644 --- a/htdocs/ticket/class/actions_ticket.class.php +++ b/htdocs/ticket/class/actions_ticket.class.php @@ -197,7 +197,7 @@ class ActionsTicket print $langs->trans("InitialMessage"); print ''; @@ -208,7 +208,7 @@ class ActionsTicket $msg = GETPOST('message_initial', 'alpha') ? GETPOST('message_initial', 'alpha') : $object->message; include_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php'; $uselocalbrowser = true; - $doleditor = new DolEditor('message_initial', $msg, '100%', 250, 'dolibarr_details', 'In', true, $uselocalbrowser, $conf->global->FCKEDITOR_ENABLE_TICKET); + $doleditor = new DolEditor('message_initial', $msg, '100%', 250, 'dolibarr_details', 'In', true, $uselocalbrowser, $conf->global->FCKEDITOR_ENABLE_TICKET, ROWS_4, '95%'); $doleditor->Create(); } else { // Deal with format differences (text / HTML) From 2ed96c9e5ffe5c6632bbc036d18d607f1e6e2040 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 15 Oct 2019 02:54:19 +0200 Subject: [PATCH 310/980] Fix scrutinizer --- htdocs/contact/class/contact.class.php | 4 +-- .../box_accountancy_suspense_account.php | 4 +-- htdocs/core/lib/ticket.lib.php | 1 + ...rface_90_modSociete_ContactRoles.class.php | 25 +++++++++++-------- htdocs/ticket/class/ticket.class.php | 2 +- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 560a6e2bc0d..1d88ebc87aa 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -1514,8 +1514,8 @@ class Contact extends CommonObject /** * Get Contact roles for a thirdparty * - * @param string $element element type - * @return array|int + * @param string $element Element type + * @return array|int Array of contact roles or -1 * @throws Exception */ public function getContactRoles($element = '') diff --git a/htdocs/core/boxes/box_accountancy_suspense_account.php b/htdocs/core/boxes/box_accountancy_suspense_account.php index 03c0f0ab7ae..86971e1e042 100644 --- a/htdocs/core/boxes/box_accountancy_suspense_account.php +++ b/htdocs/core/boxes/box_accountancy_suspense_account.php @@ -74,7 +74,7 @@ class box_accountancy_suspense_account extends ModeleBoxes include_once DOL_DOCUMENT_ROOT.'/accountancy/class/bookkeeping.class.php'; - $bookkeepingstatic = new BookKeeping($this->db); + //$bookkeepingstatic = new BookKeeping($this->db); $this->info_box_head = array('text' => $langs->trans("BoxTitleSuspenseAccount")); @@ -103,7 +103,7 @@ class box_accountancy_suspense_account extends ModeleBoxes $this->info_box_contents[0][1] = array( 'td' => 'class="right"', - 'text' => '' . $nbSuspenseAccount . '', + 'text' => '' . $nbSuspenseAccount . '', 'asis' => 1 ); } else { diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index 53afbe50dce..543bdb025fa 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -151,6 +151,7 @@ function showDirectPublicLink($object) require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'; $email = CMailFile::getValidAddress($object->origin_email, 2); + $url = ''; if ($email) { $url = dol_buildpath('/public/ticket/view.php', 3).'?track_id='.$object->track_id.'&email='.$email; diff --git a/htdocs/core/triggers/interface_90_modSociete_ContactRoles.class.php b/htdocs/core/triggers/interface_90_modSociete_ContactRoles.class.php index 13eb44d4eee..79b99e59a8f 100644 --- a/htdocs/core/triggers/interface_90_modSociete_ContactRoles.class.php +++ b/htdocs/core/triggers/interface_90_modSociete_ContactRoles.class.php @@ -90,20 +90,23 @@ class InterfaceContactRoles extends DolibarrTriggers if (!empty($cloneFrom->id)) $TContactAlreadyLinked = array_merge($cloneFrom->liste_contact(-1, 'external'), $cloneFrom->liste_contact(-1, 'internal')); } - foreach($TContact as $i => $infos) { - foreach ($TContactAlreadyLinked as $contactData) { - if($contactData['id'] == $infos['fk_socpeople'] && $contactData['fk_c_type_contact'] == $infos['type_contact']) unset($TContact[$i]); + if (is_array($TContact)) + { + foreach($TContact as $i => $infos) { + foreach ($TContactAlreadyLinked as $contactData) { + if ($contactData['id'] == $infos['fk_socpeople'] && $contactData['fk_c_type_contact'] == $infos['type_contact']) unset($TContact[$i]); + } } - } - $nb = 0; - foreach($TContact as $infos) { - $res = $object->add_contact($infos['fk_socpeople'], $infos['type_contact']); - if($res > 0) $nb++; - } + $nb = 0; + foreach($TContact as $infos) { + $res = $object->add_contact($infos['fk_socpeople'], $infos['type_contact']); + if ($res > 0) $nb++; + } - if($nb > 0) { - setEventMessages($langs->trans('ContactAddedAutomatically', $nb), null, 'mesgs'); + if($nb > 0) { + setEventMessages($langs->trans('ContactAddedAutomatically', $nb), null, 'mesgs'); + } } } } diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 5443e943583..0daba74be77 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -1609,7 +1609,7 @@ class Ticket extends CommonObject * @param array $filename_list List of files to attach (full path of filename on file system) * @param array $mimetype_list List of MIME type of attached files * @param array $mimefilename_list List of attached file name in message - * @return void + * @return int <0 if KO, >0 if OK */ public function createTicketMessage($user, $notrigger = 0, $filename_list = array(), $mimetype_list = array(), $mimefilename_list = array()) { From 568faef7f4c2f77087fd9005b9a0b37dd0bffc85 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 15 Oct 2019 04:08:34 +0200 Subject: [PATCH 311/980] Fix encoding of message --- htdocs/takepos/takepos.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index bd14e227876..311bcd00d8b 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -396,7 +396,7 @@ function Refresh() { function New() { // If we go here,it means $conf->global->TAKEPOS_BAR_RESTAURANT is not defined console.log("New with place = , js place="+place); - var r = confirm(' 0 ? $langs->trans("ConfirmDeletionOfThisPOSSale") : $langs->trans("ConfirmDiscardOfThisPOSSale")); ?>'); + var r = confirm(' 0 ? $langs->transnoentitiesnoconv("ConfirmDeletionOfThisPOSSale") : $langs->transnoentitiesnoconv("ConfirmDiscardOfThisPOSSale")); ?>'); if (r == true) { $("#poslines").load("invoice.php?action=delete&place="+place, function() { //$('#poslines').scrollTop($('#poslines')[0].scrollHeight); From 33cc0c017cf43eb87bb784c5da9a1d480e589e90 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 15 Oct 2019 04:20:51 +0200 Subject: [PATCH 312/980] responsive --- htdocs/hrm/index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php index ef8df639d26..80a9366186c 100644 --- a/htdocs/hrm/index.php +++ b/htdocs/hrm/index.php @@ -225,7 +225,7 @@ if (! empty($conf->holiday->enabled) && $user->rights->holiday->read) print ''; print ''; - print ''; + print ''; print ''; $starthalfday=($obj->halfday == -1 || $obj->halfday == 2)?'afternoon':'morning'; @@ -304,7 +304,7 @@ if (! empty($conf->deplacement->enabled) && $user->rights->deplacement->lire) print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -376,7 +376,7 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; From 00bac9e98911fea926babb7806a35e5accd264d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 15 Oct 2019 08:02:59 +0200 Subject: [PATCH 313/980] Update interface_50_modAgenda_ActionsAuto.class.php Update agenda.lang Update agenda.lang Update interface_50_modAgenda_ActionsAuto.class.php --- htdocs/langs/en_US/agenda.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang index 8ad19e06695..465846a43db 100644 --- a/htdocs/langs/en_US/agenda.lang +++ b/htdocs/langs/en_US/agenda.lang @@ -76,6 +76,7 @@ ContractSentByEMail=Contract %s sent by email OrderSentByEMail=Sales order %s sent by email InvoiceSentByEMail=Customer invoice %s sent by email SupplierOrderSentByEMail=Purchase order %s sent by email +ORDER_SUPPLIER_DELETEInDolibarr=Purchase order %s deleted SupplierInvoiceSentByEMail=Vendor invoice %s sent by email ShippingSentByEMail=Shipment %s sent by email ShippingValidated= Shipment %s validated From 0d69ae9e8c0a6a8f6b025b546c65c0c70fccce84 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 15 Oct 2019 09:52:14 +0200 Subject: [PATCH 314/980] NEW mode for list thirdparty API (add supplier) add new mode for more universel use of the api and easy switch between customer's and supplier's modes --- htdocs/societe/class/api_thirdparties.class.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/societe/class/api_thirdparties.class.php b/htdocs/societe/class/api_thirdparties.class.php index ed3b26e04ac..b5ae7d94c03 100644 --- a/htdocs/societe/class/api_thirdparties.class.php +++ b/htdocs/societe/class/api_thirdparties.class.php @@ -117,6 +117,7 @@ class Thirdparties extends DolibarrApi * @param int $mode Set to 1 to show only customers * Set to 2 to show only prospects * Set to 3 to show only those are not customer neither prospect + * Set to 4 to show only suppliers * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.nom:like:'TheCompany%') and (t.date_creation:<:'20160101')" * @return array Array of thirdparty objects */ @@ -143,6 +144,7 @@ class Thirdparties extends DolibarrApi if ($mode == 1) $sql.= " AND t.client IN (1, 3)"; if ($mode == 2) $sql.= " AND t.client IN (2, 3)"; if ($mode == 3) $sql.= " AND t.client IN (0)"; + if ($mode == 4) $sql.= " AND t.fournisseur IN (1)"; $sql.= ' AND t.entity IN ('.getEntity('societe').')'; if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) || $search_sale > 0) $sql.= " AND t.rowid = sc.fk_soc"; //if ($email != NULL) $sql.= " AND s.email = \"".$email."\""; From 63a60c7811465eb5e46d53c1a16d6ef5483cac64 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 15 Oct 2019 11:13:14 +0200 Subject: [PATCH 315/980] NEW Add option MAIN_PDF_FORCE_FONT_SIZE --- htdocs/core/lib/pdf.lib.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index d16fc569961..b233b937be7 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -240,14 +240,18 @@ function pdf_getPDFFont($outputlangs) */ function pdf_getPDFFontSize($outputlangs) { + global $conf; + $size=10; // By default, for FPDI or ISO language on TCPDF - if (class_exists('TCPDF')) // If TCPDF on, we can use an UTF8 one like DejaVuSans if required (slower) + if (class_exists('TCPDF')) // If TCPDF on, we can use an UTF8 font like DejaVuSans if required (slower) { - if ($outputlangs->trans('FONTSIZEFORPDF')!='FONTSIZEFORPDF') + if ($outputlangs->trans('FONTSIZEFORPDF') != 'FONTSIZEFORPDF') { $size = (int) $outputlangs->trans('FONTSIZEFORPDF'); } } + if (! empty($conf->global->MAIN_PDF_FORCE_FONT_SIZE)) $size = $conf->global->MAIN_PDF_FORCE_FONT_SIZE; + return $size; } From a45ad29e71e6b6cfd83d544bb3c0a4f2186fa5b9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 15 Oct 2019 11:32:53 +0200 Subject: [PATCH 316/980] Doc --- ChangeLog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ChangeLog b/ChangeLog index 3583c10385b..d4e1356b493 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,11 @@ English Dolibarr ChangeLog -------------------------------------------------------------- ***** ChangeLog for 10.0.3 compared to 10.0.2 ***** +IMPORTANT : This version fixes a serious bug in saving the units of weight, size, surface and volume on product card. +The unit were not saved correctly in database making calculation on shipments wrong. +Update to this version must be done if you use them and have installed version 10.0.0, 10.0.1 or 10.0.2 and set some products after installing or upgrading to this version. +Once update is done you must then edit (manually) the product that has bad unit to set the correct unit to have features restored. + FIX: #11702 FIX: #11861 No consistent code to manage measuring units FIX: #11942 From 9ce71c26aa7b7f673a1319cf45a5ebf82b17205b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 15 Oct 2019 11:41:22 +0200 Subject: [PATCH 317/980] Use alpha logo by default --- htdocs/core/menus/standard/auguria.lib.php | 2 +- htdocs/core/menus/standard/eldy.lib.php | 5 +++-- htdocs/theme/dolibarr_logo_squarred_alpha.png | Bin 0 -> 8921 bytes 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 htdocs/theme/dolibarr_logo_squarred_alpha.png diff --git a/htdocs/core/menus/standard/auguria.lib.php b/htdocs/core/menus/standard/auguria.lib.php index 39e2150280e..5f27a68d63a 100644 --- a/htdocs/core/menus/standard/auguria.lib.php +++ b/htdocs/core/menus/standard/auguria.lib.php @@ -137,7 +137,7 @@ function print_auguria_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout } else { - $urllogo=DOL_URL_ROOT.'/theme/dolibarr_logo_squarred.png'; + $urllogo=DOL_URL_ROOT.'/theme/dolibarr_logo_squarred_alpha.png'; } $title=$langs->trans("GoIntoSetupToChangeLogo"); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 5d6bf501d82..cf95da29568 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -482,7 +482,7 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout = $mysoc->logo_squarred_mini=(empty($conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI)?'':$conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI); $logoContainerAdditionalClass = 'backgroundforcompanylogo'; - if(!empty($conf->global->MAIN_INFO_SOCIETE_LOGO_NO_BACKGROUND)){ + if(! empty($conf->global->MAIN_INFO_SOCIETE_LOGO_NO_BACKGROUND)){ $logoContainerAdditionalClass = ''; } @@ -496,7 +496,8 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout = }*/ else { - $urllogo=DOL_URL_ROOT.'/theme/dolibarr_logo_squarred.png'; + $urllogo=DOL_URL_ROOT.'/theme/dolibarr_logo_squarred_alpha.png'; + $logoContainerAdditionalClass = ''; } $title=$langs->trans("GoIntoSetupToChangeLogo"); diff --git a/htdocs/theme/dolibarr_logo_squarred_alpha.png b/htdocs/theme/dolibarr_logo_squarred_alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..06e69ad8b7b66c0fb6b464644290dd3bcc66064e GIT binary patch literal 8921 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 L`rV>CkKg Date: Tue, 15 Oct 2019 14:29:27 +0200 Subject: [PATCH 318/980] Fix non-numeric value encountered on ical export --- htdocs/comm/action/class/actioncomm.class.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 5803c0afc20..1ce4dce01a0 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1543,6 +1543,19 @@ class ActionComm extends CommonObject $event['uid']='dolibarragenda-'.$this->db->database_name.'-'.$obj->id."@".$_SERVER["SERVER_NAME"]; $event['type']=$type; $datestart=$this->db->jdate($obj->datep)-(empty($conf->global->AGENDA_EXPORT_FIX_TZ)?0:($conf->global->AGENDA_EXPORT_FIX_TZ*3600)); + + // fix for -> Warning: A non-numeric value encountered + if(is_numeric($this->db->jdate($obj->datep2))) + { + $dateend = $this->db->jdate($obj->datep2) + - (empty($conf->global->AGENDA_EXPORT_FIX_TZ) ? 0 : ($conf->global->AGENDA_EXPORT_FIX_TZ * 3600)); + } + else + { + // use start date as fall-back to avoid import erros on empty end date + $datestart = $dateend; + } + $dateend=$this->db->jdate($obj->datep2)-(empty($conf->global->AGENDA_EXPORT_FIX_TZ)?0:($conf->global->AGENDA_EXPORT_FIX_TZ*3600)); $duration=($datestart && $dateend)?($dateend - $datestart):0; $event['summary']=$obj->label.($obj->socname?" (".$obj->socname.")":""); From 6a8e8907efc528598cec19f395a8f97e53399d19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 15 Oct 2019 17:55:07 +0200 Subject: [PATCH 319/980] Update list.php --- htdocs/comm/propal/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 893a3935cba..511166991bf 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -267,7 +267,7 @@ $sql.= ' p.rowid, p.entity, p.note_private, p.total_ht, p.tva as total_vat, p.to $sql.= ' p.datec as date_creation, p.tms as date_update,'; $sql.= " pr.rowid as project_id, pr.ref as project_ref, pr.title as project_label,"; $sql.= ' u.login'; -if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", sc.fk_soc, sc.fk_user,"; +if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", sc.fk_soc, sc.fk_user"; if ($search_categ_cus) $sql .= ", cc.fk_categorie, cc.fk_soc"; // Add fields from extrafields foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); From e94d47daf74ccb62122e236cb6599d1f980f1816 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 15 Oct 2019 19:57:23 +0200 Subject: [PATCH 320/980] Work on MRP module --- htdocs/bom/bom_card.php | 91 ++++++++++++++++++- htdocs/bom/class/bom.class.php | 2 +- htdocs/commande/card.php | 2 +- .../install/mysql/migration/10.0.0-11.0.0.sql | 2 + .../install/mysql/tables/llx_bom_bomline.sql | 2 +- htdocs/mrp/index.php | 3 +- 6 files changed, 97 insertions(+), 5 deletions(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 5e24724b6f7..5f3ec89da61 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -42,6 +42,11 @@ $contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'bomcard $backtopage = GETPOST('backtopage', 'alpha'); $lineid = GETPOST('lineid', 'int'); +// PDF +$hidedetails = (GETPOST('hidedetails', 'int') ? GETPOST('hidedetails', 'int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 1 : 0)); +$hidedesc = (GETPOST('hidedesc', 'int') ? GETPOST('hidedesc', 'int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC) ? 1 : 0)); +$hideref = (GETPOST('hideref', 'int') ? GETPOST('hideref', 'int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0)); + // Initialize technical objects $object=new BOM($db); $extrafields = new ExtraFields($db); @@ -173,6 +178,34 @@ if (empty($reshook)) $action = ''; } } + + if ($action == 'confirm_validate' && $confirm == 'yes' && $permissionedit) + { + $result = $object->valid($user); + if ($result >= 0) + { + // Define output language + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) + { + $outputlangs = $langs; + $newlang = ''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09'); + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang; + if (! empty($newlang)) { + $outputlangs = new Translate("", $conf); + $outputlangs->setDefaultLang($newlang); + } + $model=$object->modelpdf; + $ret = $object->fetch($id); // Reload to get new records + + $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); + } + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } + } } @@ -286,6 +319,52 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea { $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&lineid='.$lineid, $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_deleteline', '', 0, 1); } + $formconfirm = ''; + + // Confirmation to delete + if ($action == 'delete') { + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteOrder'), $langs->trans('ConfirmDeleteOrder'), 'confirm_delete', '', 0, 1); + } + + // Confirmation of validation + if ($action == 'validate') + { + // We check that object has a temporary ref + $ref = substr($object->ref, 1, 4); + if ($ref == 'PROV') { + $object->fetch_product(); + $numref = $object->getNextNumRef($object->product); + } else { + $numref = $object->ref; + } + + $text = $langs->trans('ConfirmValidateBom', $numref); + if (! empty($conf->notification->enabled)) + { + require_once DOL_DOCUMENT_ROOT . '/core/class/notify.class.php'; + $notify = new Notify($db); + $text .= '
'; + $text .= $notify->confirmMessage('BOM_VALIDATE', $object->socid, $object); + } + + $formquestion=array(); + if (! empty($conf->bom->enabled)) + { + $langs->load("mrp"); + require_once DOL_DOCUMENT_ROOT . '/product/class/html.formproduct.class.php'; + $formproduct = new FormProduct($db); + $forcecombo=0; + if ($conf->browser->name == 'ie') $forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy + $formquestion = array( + // 'text' => $langs->trans("ConfirmClone"), + // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1), + // array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1), + ); + } + + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('ValidateOrder'), $text, 'confirm_validate', $formquestion, 0, 1, 220); + } + // Clone confirmation if ($action == 'clone') { // Create an array for form @@ -467,10 +546,20 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ''.$langs->trans('Modify').''."\n"; } + if ($user->rights->bom->write && $object->status == BOM::STATUS_DRAFT) + { + print ''; + } + + if ($user->rights->bom->write && $object->status == BOM::STATUS_VALIDATED) + { + print ''; + } + // Clone if ($user->rights->bom->write) { - print ''; + print ''; } /* diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 73e26de8aea..c8855c9cc03 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -1052,7 +1052,7 @@ class BOMLine extends CommonObject 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,), 'qty' => array('type'=>'double(24,8)', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'position'=>100, 'notnull'=>1, 'isameasure'=>'1',), 'efficiency' => array('type'=>'double(8,4)', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>1, 'default'=>1, 'position'=>110, 'notnull'=>1, 'css'=>'maxwidth50imp', 'help'=>'ValueOfMeansLoss'), - 'position' => array('type'=>'integer', 'label'=>'Rank', 'enabled'=>1, 'visible'=>0, 'position'=>200, 'notnull'=>1,), + 'position' => array('type'=>'integer', 'label'=>'Rank', 'enabled'=>1, 'visible'=>0, 'default'=>0, 'position'=>200, 'notnull'=>1,), 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,), ); public $rowid; diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 968607ed660..0d13537037c 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1924,7 +1924,7 @@ if ($action == 'create' && $usercancreate) // Confirmation of validation if ($action == 'validate') { - // on verifie si l'objet est en numerotation provisoire + // We check that object has a temporary ref $ref = substr($object->ref, 1, 4); if ($ref == 'PROV') { $numref = $object->getNextNumRef($soc); diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 42097685f6f..1a8379d857a 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -50,6 +50,8 @@ UPDATE llx_c_units SET label = 'SurfaceUnitm2' WHERE code IN ('M2'); -- For v11 ALTER TABLE llx_bom_bom ADD COLUMN duration double(8,4) DEFAULT NULL; +ALTER TABLE llx_bom_bomline ADD COLUMN position integer NOT NULL DEFAULT 0; +ALTER TABLE llx_bom_bomline DROP COLUMN rank; create table llx_categorie_warehouse ( diff --git a/htdocs/install/mysql/tables/llx_bom_bomline.sql b/htdocs/install/mysql/tables/llx_bom_bomline.sql index cb7079cf16a..330f1bb18d6 100644 --- a/htdocs/install/mysql/tables/llx_bom_bomline.sql +++ b/htdocs/install/mysql/tables/llx_bom_bomline.sql @@ -23,6 +23,6 @@ CREATE TABLE llx_bom_bomline( import_key varchar(14), qty double(24,8) NOT NULL, efficiency double(8,4) NOT NULL DEFAULT 1, - position integer NOT NULL + position integer NOT NULL DEFAULT 0 -- END MODULEBUILDER FIELDS ) ENGINE=innodb; diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index f5f723a8fac..b6c20cde620 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -175,7 +175,7 @@ print '
'; */ $max=5; -$sql = "SELECT a.rowid, a.status, a.ref, a.tms as datem"; +$sql = "SELECT a.rowid, a.status, a.ref, a.tms as datem, a.status"; $sql.= " FROM ".MAIN_DB_PREFIX."bom_bom as a"; $sql.= " WHERE a.entity IN (".getEntity('bom').")"; $sql.= $db->order("a.tms", "DESC"); @@ -200,6 +200,7 @@ if ($resql) $staticbom->id=$obj->rowid; $staticbom->ref=$obj->ref; $staticbom->date_modification=$obj->datem; + $staticbom->status=$obj->status; print '
'; print ''; From d2eeb9e749711b5363af954ec7889fd501588ddc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 15 Oct 2019 19:59:16 +0200 Subject: [PATCH 321/980] Wor kon BOM --- htdocs/mrp/ChangeLog.md | 5 + htdocs/mrp/README.md | 3 + htdocs/mrp/admin/setup.php | 151 ++++ htdocs/mrp/class/mo.class.php | 746 ++++++++++++++++++ htdocs/mrp/core/modules/modMrp.class.php | 349 ++++++++ htdocs/mrp/lib/mrp.lib.php | 54 ++ htdocs/mrp/lib/mrp_mo.lib.php | 83 ++ htdocs/mrp/mo_agenda.php | 262 ++++++ htdocs/mrp/mo_card.php | 550 +++++++++++++ htdocs/mrp/mo_document.php | 167 ++++ htdocs/mrp/mo_list.php | 602 ++++++++++++++ htdocs/mrp/mo_note.php | 165 ++++ htdocs/mrp/modulebuilder.txt | 3 + htdocs/mrp/sql/llx_mrp_mo.key.sql | 35 + htdocs/mrp/sql/llx_mrp_mo.sql | 39 + htdocs/mrp/sql/llx_mrp_mo_extrafields.key.sql | 19 + htdocs/mrp/sql/llx_mrp_mo_extrafields.sql | 23 + 17 files changed, 3256 insertions(+) create mode 100644 htdocs/mrp/ChangeLog.md create mode 100644 htdocs/mrp/README.md create mode 100644 htdocs/mrp/admin/setup.php create mode 100644 htdocs/mrp/class/mo.class.php create mode 100644 htdocs/mrp/core/modules/modMrp.class.php create mode 100644 htdocs/mrp/lib/mrp.lib.php create mode 100644 htdocs/mrp/lib/mrp_mo.lib.php create mode 100644 htdocs/mrp/mo_agenda.php create mode 100644 htdocs/mrp/mo_card.php create mode 100644 htdocs/mrp/mo_document.php create mode 100644 htdocs/mrp/mo_list.php create mode 100644 htdocs/mrp/mo_note.php create mode 100644 htdocs/mrp/modulebuilder.txt create mode 100644 htdocs/mrp/sql/llx_mrp_mo.key.sql create mode 100644 htdocs/mrp/sql/llx_mrp_mo.sql create mode 100644 htdocs/mrp/sql/llx_mrp_mo_extrafields.key.sql create mode 100644 htdocs/mrp/sql/llx_mrp_mo_extrafields.sql diff --git a/htdocs/mrp/ChangeLog.md b/htdocs/mrp/ChangeLog.md new file mode 100644 index 00000000000..416bad1d559 --- /dev/null +++ b/htdocs/mrp/ChangeLog.md @@ -0,0 +1,5 @@ +# CHANGELOG MRP FOR DOLIBARR ERP CRM + +## 1.0 +Initial version + diff --git a/htdocs/mrp/README.md b/htdocs/mrp/README.md new file mode 100644 index 00000000000..b23e31fb577 --- /dev/null +++ b/htdocs/mrp/README.md @@ -0,0 +1,3 @@ +# MRP Module + +Module to manage Manufacturing Orders (MO) \ No newline at end of file diff --git a/htdocs/mrp/admin/setup.php b/htdocs/mrp/admin/setup.php new file mode 100644 index 00000000000..8d7df29b383 --- /dev/null +++ b/htdocs/mrp/admin/setup.php @@ -0,0 +1,151 @@ + + * Copyright (C) 2019 Alicealalalamdskfldmjgdfgdfhfghgfh Adminson + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file mrp/admin/setup.php + * \ingroup mrp + * \brief Mrp setup page. + */ + +// Load Dolibarr environment +$res=0; +// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; +// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME +$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1; +while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; } +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php"; +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php"; +// Try main.inc.php using relative path +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php"; +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php"; +if (! $res) die("Include of main fails"); + +global $langs, $user; + +// Libraries +require_once DOL_DOCUMENT_ROOT . "/core/lib/admin.lib.php"; +require_once '../lib/mrp.lib.php'; +//require_once "../class/myclass.class.php"; + +// Translations +$langs->loadLangs(array("admin", "mrp")); + +// Access control +if (! $user->admin) accessforbidden(); + +// Parameters +$action = GETPOST('action', 'alpha'); +$backtopage = GETPOST('backtopage', 'alpha'); + +$arrayofparameters=array( + 'MRP_MYPARAM1'=>array('css'=>'minwidth200','enabled'=>1), + 'MRP_MYPARAM2'=>array('css'=>'minwidth500','enabled'=>1) +); + + + +/* + * Actions + */ + +if ((float) DOL_VERSION >= 6) +{ + include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +} + + + +/* + * View + */ + +$page_name = "MrpSetup"; +llxHeader('', $langs->trans($page_name)); + +// Subheader +$linkback = ''.$langs->trans("BackToModuleList").''; + +print load_fiche_titre($langs->trans($page_name), $linkback, 'object_mrp'); + +// Configuration header +$head = mrpAdminPrepareHead(); +dol_fiche_head($head, 'settings', '', -1, "mrp"); + +// Setup page goes here +echo ''.$langs->trans("MrpSetupPage").'

'; + + +if ($action == 'edit') +{ + print '
'; + print ''; + print ''; + + print '
'.img_picto('', $picto, 'id="pictotitle"', $pictoisfullpath).''; + print ''; if ($picto && $titre) print img_picto('', $picto, 'class="hideonsmartphone valignmiddle opacityhigh pictotitle widthpictotitle"', $pictoisfullpath); print '
'.$titre; if (!empty($titre) && $savtotalnboflines >= 0 && (string) $savtotalnboflines != '') print ' ('.$totalnboflines.')'; diff --git a/htdocs/exports/class/export.class.php b/htdocs/exports/class/export.class.php index cd4d70c2518..d6b6a8676ae 100644 --- a/htdocs/exports/class/export.class.php +++ b/htdocs/exports/class/export.class.php @@ -399,8 +399,7 @@ class Export $szFilterField=''; break; case 'Status': - if (! empty($conf->global->MAIN_ACTIVATE_HTML5)) $szFilterField=''; - else $szFilterField=''; + $szFilterField=''; break; case 'Boolean': $szFilterField='
' . $langs->trans("AssignedTo") . ''; + print '
'; + print ''; + } + print '
'; + print $langs->trans("AssignedTo"); + if ($object->fk_statut < 8 && GETPOST('set', 'alpha') != "assign_ticket" && $user->rights->ticket->manage) { + print '' . img_edit($langs->trans('Modify'), '') . '
'; + print '
'; if ($object->fk_user_assign > 0) { $userstat->fetch($object->fk_user_assign); print $userstat->getNomUrl(1); @@ -892,9 +899,6 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd print ' '; print ''; } - if ($object->fk_statut < 8 && GETPOST('set', 'alpha') != "assign_ticket" && $user->rights->ticket->manage) { - print '' . img_picto('', 'edit') . ' ' . $langs->trans('Modify') . ''; - } print '
'; if ($user->rights->ticket->manage) { - print '' . img_edit($langs->trans('Modify')) . ''; + print '' . img_edit($langs->trans('Modify')) . ''; } print '
'.$holidaystatic->getNomUrl(1).''.$userstatic->getNomUrl(-1, 'leave').''.$userstatic->getNomUrl(-1, 'leave').''.$typeleaves[$obj->fk_type]['label'].'
'.$deplacementstatic->getNomUrl(1).''.$userstatic->getNomUrl(-1).''.$userstatic->getNomUrl(-1).''.$obj->km.''.dol_print_date($db->jdate($obj->dm), 'day').''.$deplacementstatic->LibStatut($obj->fk_statut, 3).'
'.$expensereportstatic->getNomUrl(1).''.$userstatic->getNomUrl(-1).''.$userstatic->getNomUrl(-1).''.price($obj->total_ttc).''.dol_print_date($db->jdate($obj->dm), 'day').''.$expensereportstatic->LibStatut($obj->status, 3).'
'.$staticbom->getNomUrl(1, 32).'
'; + print ''; + + foreach($arrayofparameters as $key => $val) + { + print ''; + } + print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; + $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); + print $form->textwithpicto($langs->trans($key), $tooltiphelp); + print '
'; + + print '
'; + print ''; + print '
'; + + print ''; + print '
'; +} +else +{ + if (! empty($arrayofparameters)) + { + print ''; + print ''; + + foreach($arrayofparameters as $key => $val) + { + print ''; + } + + print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; + $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); + print $form->textwithpicto($langs->trans($key), $tooltiphelp); + print '' . $conf->global->$key . '
'; + + print '
'; + print ''.$langs->trans("Modify").''; + print '
'; + } + else + { + print '
'.$langs->trans("NothingToSetup"); + } +} + + +// Page end +dol_fiche_end(); + +llxFooter(); +$db->close(); diff --git a/htdocs/mrp/class/mo.class.php b/htdocs/mrp/class/mo.class.php new file mode 100644 index 00000000000..a459a582bba --- /dev/null +++ b/htdocs/mrp/class/mo.class.php @@ -0,0 +1,746 @@ + + * Copyright (C) ---Put here your own copyright and developer email--- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file class/mo.class.php + * \ingroup mrp + * \brief This file is a CRUD class file for Mo (Create/Read/Update/Delete) + */ + +// Put here all includes required by your class file +require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php'; +//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; +//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; + +/** + * Class for Mo + */ +class Mo extends CommonObject +{ + /** + * @var string ID to identify managed object + */ + public $element = 'mo'; + + /** + * @var string Name of table without prefix where object is stored + */ + public $table_element = 'mrp_mo'; + + /** + * @var int Does mo support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe + */ + public $ismultientitymanaged = 0; + + /** + * @var int Does mo support extrafields ? 0=No, 1=Yes + */ + public $isextrafieldmanaged = 1; + + /** + * @var string String with name of icon for mo. Must be the part after the 'object_' into object_mo.png + */ + public $picto = 'mrp'; + + + const STATUS_DRAFT = 0; + const STATUS_VALIDATED = 1; // To produce + const STATUS_INPROGRESS = 2; + const STATUS_DONE = 3; + const STATUS_CANCELED = -1; + + + + /** + * 'type' if the field format ('integer', 'integer:Class:pathtoclass', 'varchar(x)', 'double(24,8)', 'text', 'html', 'datetime', 'timestamp', 'float') + * '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) + * '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) + * '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. + * 'showoncombobox' if value of the field must be visible into the label of the combobox that list record + * 'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel") + */ + + // BEGIN MODULEBUILDER PROPERTIES + /** + * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + */ + public $fields=array( + 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",), + 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'position'=>10, 'notnull'=>1, 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", 'showoncombobox'=>'1',), + 'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>-1, 'position'=>20, 'notnull'=>1, 'default'=>'1', 'index'=>1,), + 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'notnull'=>-1, 'searchall'=>1, 'showoncombobox'=>'1',), + 'qty' => array('type'=>'real', 'label'=>'QtyToProduce', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'notnull'=>1, 'index'=>1, 'comment'=>"Qty to produce",), + 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'enabled'=>1, 'visible'=>-1, 'position'=>50, 'notnull'=>-1, 'index'=>1), + 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>-1, 'position'=>61, 'notnull'=>-1,), + 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>-1, 'position'=>62, 'notnull'=>-1,), + 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>500, 'notnull'=>1,), + 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'position'=>501, 'notnull'=>-1,), + 'fk_user_creat' => array('type'=>'integer', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'position'=>510, 'notnull'=>1, 'foreignkey'=>'user.rowid',), + 'fk_user_modif' => array('type'=>'integer', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'position'=>511, 'notnull'=>-1,), + 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,), + 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'comment'=>"Product to produce",), + 'date_start_planned' => array('type'=>'datetime', 'label'=>'DateStartPlannedMo', 'enabled'=>1, 'visible'=>1, 'position'=>55, 'notnull'=>-1, 'index'=>1, 'help'=>'KeepEmptyForAsap'), + 'date_end_planned' => array('type'=>'datetime', 'label'=>'DateEndPlannedMo', 'enabled'=>1, 'visible'=>1, 'position'=>56, 'notnull'=>-1, 'index'=>1,), + 'fk_bom' => array('type'=>'integer:Bom:bom/class/bom.class.php', 'label'=>'BOM', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>-1, 'index'=>1, 'comment'=>"Original BOM",), + 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php', 'label'=>'Project', 'enabled'=>1, 'visible'=>-1, 'position'=>52, 'notnull'=>-1, 'index'=>1,), + 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>4, 'position'=>1000, 'default'=>0, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Brouillon', '1'=>'Validated', '2'=>'InProgress', '3'=>'Done', '-1'=>'Canceled')), + ); + public $rowid; + public $ref; + public $entity; + public $label; + public $qty; + public $fk_soc; + public $note_public; + public $note_private; + public $date_creation; + public $tms; + public $fk_user_creat; + public $fk_user_modif; + public $import_key; + public $status; + public $fk_product; + public $date_start_planned; + public $date_end_planned; + public $fk_bom; + public $fk_project; + // END MODULEBUILDER PROPERTIES + + + // If this object has a subtable with lines + + /** + * @var int Name of subtable line + */ + //public $table_element_line = 'mrp_moline'; + + /** + * @var int Field with ID of parent key if this field has a parent + */ + //public $fk_element = 'fk_mo'; + + /** + * @var int Name of subtable class that manage subtable lines + */ + //public $class_element_line = 'Moline'; + + /** + * @var array List of child tables. To test if we can delete object. + */ + //protected $childtables=array(); + + /** + * @var array List of child tables. To know object to delete on cascade. + */ + //protected $childtablesoncascade=array('mrp_modet'); + + /** + * @var MoLine[] Array of subtable lines + */ + //public $lines = array(); + + + + /** + * Constructor + * + * @param DoliDb $db Database handler + */ + public function __construct(DoliDB $db) + { + global $conf, $langs; + + $this->db = $db; + + if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && isset($this->fields['rowid'])) $this->fields['rowid']['visible']=0; + if (empty($conf->multicompany->enabled) && isset($this->fields['entity'])) $this->fields['entity']['enabled']=0; + + // Unset fields that are disabled + foreach($this->fields as $key => $val) + { + if (isset($val['enabled']) && empty($val['enabled'])) + { + unset($this->fields[$key]); + } + } + + // Translate some data of arrayofkeyval + foreach($this->fields as $key => $val) + { + if (is_array($val['arrayofkeyval'])) + { + foreach($val['arrayofkeyval'] as $key2 => $val2) + { + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); + } + } + } + } + + /** + * Create object into database + * + * @param User $user User that creates + * @param bool $notrigger false=launch triggers after, true=disable triggers + * @return int <0 if KO, Id of created object if OK + */ + public function create(User $user, $notrigger = false) + { + return $this->createCommon($user, $notrigger); + } + + /** + * Clone an object into another one + * + * @param User $user User that creates + * @param int $fromid Id of object to clone + * @return mixed New object created, <0 if KO + */ + public function createFromClone(User $user, $fromid) + { + global $langs, $extrafields; + $error = 0; + + dol_syslog(__METHOD__, LOG_DEBUG); + + $object = new self($this->db); + + $this->db->begin(); + + // Load source object + $result = $object->fetchCommon($fromid); + if ($result > 0 && ! empty($object->table_element_line)) $object->fetchLines(); + + // get lines so they will be clone + //foreach($this->lines as $line) + // $line->fetch_optionals(); + + // Reset some properties + unset($object->id); + unset($object->fk_user_creat); + unset($object->import_key); + + + // Clear fields + $object->ref = "copy_of_".$object->ref; + $object->title = $langs->trans("CopyOf")." ".$object->title; + // ... + // Clear extrafields that are unique + if (is_array($object->array_options) && count($object->array_options) > 0) + { + $extrafields->fetch_name_optionals_label($this->table_element); + foreach($object->array_options as $key => $option) + { + $shortkey = preg_replace('/options_/', '', $key); + if (! empty($extrafields->attributes[$this->element]['unique'][$shortkey])) + { + //var_dump($key); var_dump($clonedObj->array_options[$key]); exit; + unset($object->array_options[$key]); + } + } + } + + // Create clone + $object->context['createfromclone'] = 'createfromclone'; + $result = $object->createCommon($user); + if ($result < 0) { + $error++; + $this->error = $object->error; + $this->errors = $object->errors; + } + + if (! $error) + { + // copy internal contacts + if ($this->copy_linked_contact($object, 'internal') < 0) + { + $error++; + } + } + + if (! $error) + { + // copy external contacts if same company + if (property_exists($this, 'socid') && $this->socid == $object->socid) + { + if ($this->copy_linked_contact($object, 'external') < 0) + $error++; + } + } + + unset($object->context['createfromclone']); + + // End + if (!$error) { + $this->db->commit(); + return $object; + } else { + $this->db->rollback(); + return -1; + } + } + + /** + * Load object in memory from the database + * + * @param int $id Id object + * @param string $ref Ref + * @return int <0 if KO, 0 if not found, >0 if OK + */ + public function fetch($id, $ref = null) + { + $result = $this->fetchCommon($id, $ref); + if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines(); + return $result; + } + + /** + * Load object lines in memory from the database + * + * @return int <0 if KO, 0 if not found, >0 if OK + */ + public function fetchLines() + { + $this->lines=array(); + + $result = $this->fetchLinesCommon(); + return $result; + } + + + /** + * Load list of objects in memory from the database. + * + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) + * @param string $filtermode Filter mode (AND or OR) + * @return array|int int <0 if KO, array of pages if OK + */ + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + { + global $conf; + + dol_syslog(__METHOD__, LOG_DEBUG); + + $records=array(); + + $sql = 'SELECT '; + $sql .= $this->getFieldList(); + $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element. ' as t'; + if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) $sql .= ' WHERE t.entity IN ('.getEntity($this->table_element).')'; + else $sql .= ' WHERE 1 = 1'; + // Manage filter + $sqlwhere = array(); + if (count($filter) > 0) { + foreach ($filter as $key => $value) { + if ($key=='t.rowid') { + $sqlwhere[] = $key . '='. $value; + } + elseif (strpos($key, 'date') !== false) { + $sqlwhere[] = $key.' = \''.$this->db->idate($value).'\''; + } + elseif ($key=='customsql') { + $sqlwhere[] = $value; + } + else { + $sqlwhere[] = $key . ' LIKE \'%' . $this->db->escape($value) . '%\''; + } + } + } + if (count($sqlwhere) > 0) { + $sql .= ' AND (' . implode(' '.$filtermode.' ', $sqlwhere).')'; + } + + if (!empty($sortfield)) { + $sql .= $this->db->order($sortfield, $sortorder); + } + if (!empty($limit)) { + $sql .= ' ' . $this->db->plimit($limit, $offset); + } + + $resql = $this->db->query($sql); + if ($resql) { + $num = $this->db->num_rows($resql); + $i = 0; + while ($i < min($limit, $num)) + { + $obj = $this->db->fetch_object($resql); + + $record = new self($this->db); + $record->setVarsFromFetchObj($obj); + + $records[$record->id] = $record; + + $i++; + } + $this->db->free($resql); + + return $records; + } else { + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); + + return -1; + } + } + + /** + * Update object into database + * + * @param User $user User that modifies + * @param bool $notrigger false=launch triggers after, true=disable triggers + * @return int <0 if KO, >0 if OK + */ + public function update(User $user, $notrigger = false) + { + return $this->updateCommon($user, $notrigger); + } + + /** + * Delete object in database + * + * @param User $user User that deletes + * @param bool $notrigger false=launch triggers after, true=disable triggers + * @return int <0 if KO, >0 if OK + */ + public function delete(User $user, $notrigger = false) + { + return $this->deleteCommon($user, $notrigger); + //return $this->deleteCommon($user, $notrigger, 1); + } + + /** + * Delete a line of object in database + * + * @param User $user User that delete + * @param int $idline Id of line to delete + * @param bool $notrigger false=launch triggers after, true=disable triggers + * @return int >0 if OK, <0 if KO + */ + public function deleteLine(User $user, $idline, $notrigger = false) + { + if ($this->status < 0) + { + $this->error = 'ErrorDeleteLineNotAllowedByObjectStatus'; + return -2; + } + + return $this->deleteLineCommon($user, $idline, $notrigger); + } + + /** + * Return a link to the object card (with optionaly the picto) + * + * @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto) + * @param string $option On what the link point to ('nolink', ...) + * @param int $notooltip 1=Disable tooltip + * @param string $morecss Add more css on link + * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking + * @return string String with URL + */ + public function getNomUrl($withpicto = 0, $option = '', $notooltip = 0, $morecss = '', $save_lastsearch_value = -1) + { + global $conf, $langs, $hookmanager; + + if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips + + $result = ''; + + $label = '' . $langs->trans("Mo") . ''; + $label.= '
'; + $label.= '' . $langs->trans('Ref') . ': ' . $this->ref; + + $url = dol_buildpath('/mrp/mo_card.php', 1).'?id='.$this->id; + + if ($option != 'nolink') + { + // Add param to save lastsearch_values or not + $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0); + if ($save_lastsearch_value == -1 && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1; + if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1'; + } + + $linkclose=''; + if (empty($notooltip)) + { + if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) + { + $label=$langs->trans("ShowMo"); + $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"'; + } + $linkclose.=' title="'.dol_escape_htmltag($label, 1).'"'; + $linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"'; + } + else $linkclose = ($morecss?' class="'.$morecss.'"':''); + + $linkstart = ''; + $linkend=''; + + $result .= $linkstart; + if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1); + if ($withpicto != 2) $result.= $this->ref; + $result .= $linkend; + //if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : ''); + + global $action,$hookmanager; + $hookmanager->initHooks(array('modao')); + $parameters=array('id'=>$this->id, 'getnomurl'=>$result); + $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; + } + + /** + * Return label of the status + * + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto + * @return string Label of status + */ + public function getLibStatut($mode = 0) + { + return $this->LibStatut($this->status, $mode); + } + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Return the status + * + * @param int $status Id status + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto + * @return string Label of status + */ + public function LibStatut($status, $mode = 0) + { + // phpcs:enable + if (empty($this->labelstatus)) + { + global $langs; + //$langs->load("mrp"); + $this->labelstatus[self::STATUS_DRAFT] = $langs->trans('Draft'); + $this->labelstatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); + $this->labelstatus[self::STATUS_CANCELED] = $langs->trans('Disabled'); + } + + if ($mode == 0) + { + return $this->labelstatus[$status]; + } + elseif ($mode == 1) + { + return $this->labelstatus[$status]; + } + elseif ($mode == 2) + { + return img_picto($this->labelstatus[$status], 'statut'.$status, '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + } + elseif ($mode == 3) + { + return img_picto($this->labelstatus[$status], 'statut'.$status, '', false, 0, 0, '', 'valignmiddle'); + } + elseif ($mode == 4) + { + return img_picto($this->labelstatus[$status], 'statut'.$status, '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + } + elseif ($mode == 5) + { + return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut'.$status, '', false, 0, 0, '', 'valignmiddle'); + } + elseif ($mode == 6) + { + return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut'.$status, '', false, 0, 0, '', 'valignmiddle'); + } + } + + /** + * Load the info information in the object + * + * @param int $id Id of object + * @return void + */ + public function info($id) + { + $sql = 'SELECT rowid, date_creation as datec, tms as datem,'; + $sql.= ' fk_user_creat, fk_user_modif'; + $sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t'; + $sql.= ' WHERE t.rowid = '.$id; + $result=$this->db->query($sql); + if ($result) + { + if ($this->db->num_rows($result)) + { + $obj = $this->db->fetch_object($result); + $this->id = $obj->rowid; + if ($obj->fk_user_author) + { + $cuser = new User($this->db); + $cuser->fetch($obj->fk_user_author); + $this->user_creation = $cuser; + } + + if ($obj->fk_user_valid) + { + $vuser = new User($this->db); + $vuser->fetch($obj->fk_user_valid); + $this->user_validation = $vuser; + } + + if ($obj->fk_user_cloture) + { + $cluser = new User($this->db); + $cluser->fetch($obj->fk_user_cloture); + $this->user_cloture = $cluser; + } + + $this->date_creation = $this->db->jdate($obj->datec); + $this->date_modification = $this->db->jdate($obj->datem); + $this->date_validation = $this->db->jdate($obj->datev); + } + + $this->db->free($result); + } + else + { + dol_print_error($this->db); + } + } + + /** + * Initialise object with example values + * Id must be 0 if object instance is a specimen + * + * @return void + */ + public function initAsSpecimen() + { + $this->initAsSpecimenCommon(); + } + + /** + * Create an array of lines + * + * @return array|int array of lines if OK, <0 if KO + */ + public function getLinesArray() + { + $this->lines=array(); + + $objectline = new MoLine($this->db); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_mo = '.$this->id)); + + if (is_numeric($result)) + { + $this->error = $this->error; + $this->errors = $this->errors; + return $result; + } + else + { + $this->lines = $result; + return $this->lines; + } + } + + /** + * Create a document onto disk according to template module. + * + * @param string $modele Force template to use ('' to not force) + * @param Translate $outputlangs objet lang a utiliser pour traduction + * @param int $hidedetails Hide details of lines + * @param int $hidedesc Hide description + * @param int $hideref Hide ref + * @param null|array $moreparams Array to provide more information + * @return int 0 if KO, 1 if OK + */ + public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams = null) + { + global $conf,$langs; + + $langs->load("mrp"); + + if (! dol_strlen($modele)) { + + $modele = 'standard'; + + if ($this->modelpdf) { + $modele = $this->modelpdf; + } elseif (! empty($conf->global->MO_ADDON_PDF)) { + $modele = $conf->global->MO_ADDON_PDF; + } + } + + $modelpath = "core/modules/mrp/doc/"; + + return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams); + } + + /** + * Action executed by scheduler + * CAN BE A CRON TASK. In such a case, parameters come from the schedule job setup field 'Parameters' + * + * @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK) + */ + //public function doScheduledJob($param1, $param2, ...) + public function doScheduledJob() + { + global $conf, $langs; + + //$conf->global->SYSLOG_FILE = 'DOL_DATA_ROOT/dolibarr_mydedicatedlofile.log'; + + $error = 0; + $this->output = ''; + $this->error=''; + + dol_syslog(__METHOD__, LOG_DEBUG); + + $now = dol_now(); + + $this->db->begin(); + + // ... + + $this->db->commit(); + + return $error; + } +} + +/** + * Class MoLine. You can also remove this and generate a CRUD class for lines objects. + */ +class MoLine +{ + // To complete with content of an object MoLine + // We should have a field rowid, fk_mo and position +} diff --git a/htdocs/mrp/core/modules/modMrp.class.php b/htdocs/mrp/core/modules/modMrp.class.php new file mode 100644 index 00000000000..7e57f70c6c8 --- /dev/null +++ b/htdocs/mrp/core/modules/modMrp.class.php @@ -0,0 +1,349 @@ + + * Copyright (C) 2018-2019 Nicolas ZABOURI + * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019 Alicealalalamdskfldmjgdfgdfhfghgfh Adminson + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \defgroup mrp Module Mrp + * \brief Mrp module descriptor. + * + * \file htdocs/mrp/core/modules/modMrp.class.php + * \ingroup mrp + * \brief Description and activation file for module Mrp + */ +include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php'; + +/** + * Description and activation class for module Mrp + */ +class modMrp extends DolibarrModules +{ + /** + * Constructor. Define names, constants, directories, boxes, permissions + * + * @param DoliDB $db Database handler + */ + public function __construct($db) + { + global $langs,$conf; + $this->db = $db; + + // Id for module (must be unique). + // Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id). + $this->numero = 660; // TODO Go on page https://wiki.dolibarr.org/index.php/List_of_modules_id to reserve an id number for your module + // Key text used to identify module (for permissions, menus, etc...) + $this->rights_class = 'mrp'; + // Family can be 'base' (core modules),'crm','financial','hr','projects','products','ecm','technic' (transverse modules),'interface' (link with external tools),'other','...' + // It is used to group modules by family in module setup page + $this->family = "products"; + // Module position in the family on 2 digits ('01', '10', '20', ...) + $this->module_position = '62'; + // Gives the possibility for the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this) + //$this->familyinfo = array('myownfamily' => array('position' => '01', 'label' => $langs->trans("MyOwnFamily"))); + // Module label (no space allowed), used if translation string 'ModuleMrpName' not found (Mrp is name of module). + $this->name = preg_replace('/^mod/i', '', get_class($this)); + // Module description, used if translation string 'ModuleMrpDesc' not found (Mrp is name of module). + $this->description = "MRPDescription"; + // Used only if file README.md and README-LL.md not found. + $this->descriptionlong = "Module to Manage Manufacturing Orders (MO)"; + // Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated' or a version string like 'x.y.z' + $this->version = 'dolibarr'; + // Url to the file with your last numberversion of this module + //$this->url_last_version = 'http://www.example.com/versionmodule.txt'; + + // Key used in llx_const table to save module status enabled/disabled (where MRP 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. + // If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue' + // If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module' + $this->picto='mrp'; + // Define some features supported by module (triggers, login, substitutions, menus, css, etc...) + $this->module_parts = array( + // Set this to 1 if module has its own trigger directory (core/triggers) + 'triggers' => 0, + // Set this to 1 if module has its own login method file (core/login) + 'login' => 0, + // Set this to 1 if module has its own substitution function file (core/substitutions) + 'substitutions' => 0, + // Set this to 1 if module has its own menus handler directory (core/menus) + 'menus' => 0, + // Set this to 1 if module overwrite template dir (core/tpl) + 'tpl' => 0, + // Set this to 1 if module has its own barcode directory (core/modules/barcode) + 'barcode' => 0, + // Set this to 1 if module has its own models directory (core/modules/xxx) + 'models' => 0, + // Set this to 1 if module has its own theme directory (theme) + 'theme' => 0, + // Set this to relative path of css file if module has its own css file + 'css' => array( + // '/mrp/css/mrp.css.php', + ), + // Set this to relative path of js file if module must load a js on all pages + 'js' => array( + // '/mrp/js/mrp.js.php', + ), + // Set here all hooks context managed by module. To find available hook context, make a "grep -r '>initHooks(' *" on source code. You can also set hook context to 'all' + 'hooks' => array( + // 'data' => array( + // 'hookcontext1', + // 'hookcontext2', + // ), + // 'entity' => '0', + ), + // Set this to 1 if features of module are opened to external users + 'moduleforexternal' => 0, + ); + // Data directories to create when module is enabled. + // Example: this->dirs = array("/mrp/temp","/mrp/subdir"); + $this->dirs = array("/mrp/temp"); + // Config pages. Put here list of php page, stored into mrp/admin directory, to use to setup module. + $this->config_page_url = array("setup.php@mrp"); + // Dependencies + // A condition to hide module + $this->hidden = false; + // List of module class names as string that must be enabled if this module is enabled. Example: array('always1'=>'modModuleToEnable1','always2'=>'modModuleToEnable2', 'FR1'=>'modModuleToEnableFR'...) + $this->depends = array('modBom'); + $this->requiredby = array(); // List of module class names as string to disable if this one is disabled. Example: array('modModuleToDisable1', ...) + $this->conflictwith = array(); // List of module class names as string this module is in conflict with. Example: array('modModuleToDisable1', ...) + $this->langfiles = array("mrp"); + $this->phpmin = array(5,5); // Minimum version of PHP required by module + $this->need_dolibarr_version = array(8,0); // Minimum version of Dolibarr required by module + $this->warnings_activation = array(); // Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...) + $this->warnings_activation_ext = array(); // Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...) + //$this->automatic_activation = array('FR'=>'MrpWasAutomaticallyActivatedBecauseOfYourCountryChoice'); + //$this->always_enabled = true; // If true, can't be disabled + + // Constants + // List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 'current' or 'allentities', deleteonunactive) + // Example: $this->const=array(1 => array('MRP_MYNEWCONST1', 'chaine', 'myvalue', 'This is a constant to add', 1), + // 2 => array('MRP_MYNEWCONST2', 'chaine', 'myvalue', 'This is another constant to add', 0, 'current', 1) + // ); + $this->const = array( + // 1 => array('MRP_MYCONSTANT', 'chaine', 'avalue', 'This is a constant to add', 1, 'allentities', 1) + ); + + // Some keys to add into the overwriting translation tables + /*$this->overwrite_translation = array( + 'en_US:ParentCompany'=>'Parent company or reseller', + 'fr_FR:ParentCompany'=>'Maison mère ou revendeur' + )*/ + + if (! isset($conf->mrp) || ! isset($conf->mrp->enabled)) { + $conf->mrp=new stdClass(); + $conf->mrp->enabled=0; + } + + // Array to add new pages in new tabs + $this->tabs = array(); + // Example: + // $this->tabs[] = array('data'=>'objecttype:+tabname1:Title1:mylangfile@mrp:$user->rights->mrp->read:/mrp/mynewtab1.php?id=__ID__'); // To add a new tab identified by code tabname1 + // $this->tabs[] = array('data'=>'objecttype:+tabname2:SUBSTITUTION_Title2:mylangfile@mrp:$user->rights->othermodule->read:/mrp/mynewtab2.php?id=__ID__', // To add another new tab identified by code tabname2. Label will be result of calling all substitution functions on 'Title2' key. + // $this->tabs[] = array('data'=>'objecttype:-tabname:NU:conditiontoremove'); // To remove an existing tab identified by code tabname + // + // Where objecttype can be + // 'categories_x' to add a tab in category view (replace 'x' by type of category (0=product, 1=supplier, 2=customer, 3=member) + // 'contact' to add a tab in contact view + // 'contract' to add a tab in contract view + // 'group' to add a tab in group view + // 'intervention' to add a tab in intervention view + // 'invoice' to add a tab in customer invoice view + // 'invoice_supplier' to add a tab in supplier invoice view + // 'member' to add a tab in fundation member view + // 'opensurveypoll' to add a tab in opensurvey poll view + // 'order' to add a tab in customer order view + // 'order_supplier' to add a tab in supplier order view + // 'payment' to add a tab in payment view + // 'payment_supplier' to add a tab in supplier payment view + // 'product' to add a tab in product view + // 'propal' to add a tab in propal view + // 'project' to add a tab in project view + // 'stock' to add a tab in stock view + // 'thirdparty' to add a tab in third party view + // 'user' to add a tab in user view + + // Dictionaries + $this->dictionaries=array(); + /* Example: + $this->dictionaries=array( + 'langs'=>'mylangfile@mrp', + // List of tables we want to see into dictonnary editor + 'tabname'=>array(MAIN_DB_PREFIX."table1",MAIN_DB_PREFIX."table2",MAIN_DB_PREFIX."table3"), + // Label of tables + 'tablib'=>array("Table1","Table2","Table3"), + // Request to select fields + 'tabsql'=>array('SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table1 as f','SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table2 as f','SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table3 as f'), + // Sort order + 'tabsqlsort'=>array("label ASC","label ASC","label ASC"), + // List of fields (result of select to show dictionary) + 'tabfield'=>array("code,label","code,label","code,label"), + // List of fields (list of fields to edit a record) + 'tabfieldvalue'=>array("code,label","code,label","code,label"), + // List of fields (list of fields for insert) + 'tabfieldinsert'=>array("code,label","code,label","code,label"), + // Name of columns with primary key (try to always name it 'rowid') + 'tabrowid'=>array("rowid","rowid","rowid"), + // Condition to show each dictionary + 'tabcond'=>array($conf->mrp->enabled,$conf->mrp->enabled,$conf->mrp->enabled) + ); + */ + + // Boxes/Widgets + // Add here list of php file(s) stored in mrp/core/boxes that contains a class to show a widget. + $this->boxes = array( + // 0 => array( + // 'file' => 'mrpwidget1.php@mrp', + // 'note' => 'Widget provided by Mrp', + // 'enabledbydefaulton' => 'Home', + // ), + // ... + ); + + // Cronjobs (List of cron jobs entries to add when module is enabled) + // unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week + $this->cronjobs = array( + // 0 => array( + // 'label' => 'MyJob label', + // 'jobtype' => 'method', + // 'class' => '/mrp/class/mo.class.php', + // 'objectname' => 'Mo', + // 'method' => 'doScheduledJob', + // 'parameters' => '', + // 'comment' => 'Comment', + // 'frequency' => 2, + // 'unitfrequency' => 3600, + // 'status' => 0, + // 'test' => '$conf->mrp->enabled', + // 'priority' => 50, + // ), + ); + // Example: $this->cronjobs=array( + // 0=>array('label'=>'My label', 'jobtype'=>'method', 'class'=>'/dir/class/file.class.php', 'objectname'=>'MyClass', 'method'=>'myMethod', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>'$conf->mrp->enabled', 'priority'=>50), + // 1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>1, 'unitfrequency'=>3600*24, 'status'=>0, 'test'=>'$conf->mrp->enabled', 'priority'=>50) + // ); + + // Permissions provided by this module + $this->rights = array(); + $r=0; + // Add here entries to declare new permissions + /* BEGIN MODULEBUILDER PERMISSIONS */ + $this->rights[$r][0] = $this->numero + $r; // Permission id (must not be already used) + $this->rights[$r][1] = 'Read objects of Mrp'; // Permission label + $this->rights[$r][4] = 'read'; // In php code, permission will be checked by test if ($user->rights->mrp->level1->level2) + $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->mrp->level1->level2) + $r++; + $this->rights[$r][0] = $this->numero + $r; // Permission id (must not be already used) + $this->rights[$r][1] = 'Create/Update objects of Mrp'; // Permission label + $this->rights[$r][4] = 'write'; // In php code, permission will be checked by test if ($user->rights->mrp->level1->level2) + $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->mrp->level1->level2) + $r++; + $this->rights[$r][0] = $this->numero + $r; // Permission id (must not be already used) + $this->rights[$r][1] = 'Delete objects of Mrp'; // Permission label + $this->rights[$r][4] = 'delete'; // In php code, permission will be checked by test if ($user->rights->mrp->level1->level2) + $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->mrp->level1->level2) + $r++; + /* END MODULEBUILDER PERMISSIONS */ + + // Main menu entries to add + $this->menu = array(); + $r=0; + // Add here entries to declare new menus + /* BEGIN MODULEBUILDER TOPMENU */ + /* END MODULEBUILDER LEFTMENU MO */ + + // Exports profiles provided by this module + $r=1; + /* BEGIN MODULEBUILDER EXPORT MO */ + /* + $langs->load("mrp"); + $this->export_code[$r]=$this->rights_class.'_'.$r; + $this->export_label[$r]='MoLines'; // Translation key (used only if key ExportDataset_xxx_z not found) + $this->export_icon[$r]='mo@mrp'; + $keyforclass = 'Mo'; $keyforclassfile='/mymobule/class/mo.class.php'; $keyforelement='mo'; + include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php'; + $keyforselect='mo'; $keyforaliasextra='extra'; $keyforelement='mo'; + include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; + //$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields) + $this->export_sql_start[$r]='SELECT DISTINCT '; + $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'mo as t'; + $this->export_sql_end[$r] .=' WHERE 1 = 1'; + $this->export_sql_end[$r] .=' AND t.entity IN ('.getEntity('mo').')'; + $r++; */ + /* END MODULEBUILDER EXPORT MO */ + + // Imports profiles provided by this module + $r=1; + /* BEGIN MODULEBUILDER IMPORT MO */ + /* + $langs->load("mrp"); + $this->export_code[$r]=$this->rights_class.'_'.$r; + $this->export_label[$r]='MoLines'; // Translation key (used only if key ExportDataset_xxx_z not found) + $this->export_icon[$r]='mo@mrp'; + $keyforclass = 'Mo'; $keyforclassfile='/mymobule/class/mo.class.php'; $keyforelement='mo'; + include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php'; + $keyforselect='mo'; $keyforaliasextra='extra'; $keyforelement='mo'; + include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; + //$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields) + $this->export_sql_start[$r]='SELECT DISTINCT '; + $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'mo as t'; + $this->export_sql_end[$r] .=' WHERE 1 = 1'; + $this->export_sql_end[$r] .=' AND t.entity IN ('.getEntity('mo').')'; + $r++; */ + /* END MODULEBUILDER IMPORT MO */ + } + + /** + * Function called when module is enabled. + * The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database. + * It also creates data directories + * + * @param string $options Options when enabling module ('', 'noboxes') + * @return int 1 if OK, 0 if KO + */ + public function init($options = '') + { + $result=$this->_load_tables('/mrp/sql/'); + if ($result < 0) return -1; // Do not activate module if error 'not allowed' returned when loading module SQL queries (the _load_table run sql with run_sql with the error allowed parameter set to 'default') + + // Create extrafields during init + //include_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; + //$extrafields = new ExtraFields($this->db); + //$result1=$extrafields->addExtraField('myattr1', "New Attr 1 label", 'boolean', 1, 3, 'thirdparty', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->mrp->enabled'); + //$result2=$extrafields->addExtraField('myattr2', "New Attr 2 label", 'varchar', 1, 10, 'project', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->mrp->enabled'); + //$result3=$extrafields->addExtraField('myattr3', "New Attr 3 label", 'varchar', 1, 10, 'bank_account', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->mrp->enabled'); + //$result4=$extrafields->addExtraField('myattr4', "New Attr 4 label", 'select', 1, 3, 'thirdparty', 0, 1, '', array('options'=>array('code1'=>'Val1','code2'=>'Val2','code3'=>'Val3')), 1,'', 0, 0, '', '', 'mrp', '$conf->mrp->enabled'); + //$result5=$extrafields->addExtraField('myattr5', "New Attr 5 label", 'text', 1, 10, 'user', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->mrp->enabled'); + + $sql = array(); + return $this->_init($sql, $options); + } + + /** + * Function called when module is disabled. + * Remove from database constants, boxes and permissions from Dolibarr database. + * Data directories are not deleted + * + * @param string $options Options when enabling module ('', 'noboxes') + * @return int 1 if OK, 0 if KO + */ + public function remove($options = '') + { + $sql = array(); + return $this->_remove($sql, $options); + } +} diff --git a/htdocs/mrp/lib/mrp.lib.php b/htdocs/mrp/lib/mrp.lib.php new file mode 100644 index 00000000000..7ee1fcd04c7 --- /dev/null +++ b/htdocs/mrp/lib/mrp.lib.php @@ -0,0 +1,54 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file mrp/lib/mrp.lib.php + * \ingroup mrp + * \brief Library files with common functions for Mrp + */ + +/** + * Prepare admin pages header + * + * @return array + */ +function mrpAdminPrepareHead() +{ + global $langs, $conf; + + $langs->load("mrp"); + + $h = 0; + $head = array(); + + $head[$h][0] = dol_buildpath("/mrp/admin/setup.php", 1); + $head[$h][1] = $langs->trans("Settings"); + $head[$h][2] = 'settings'; + $h++; + + // Show more tabs from modules + // Entries must be declared in modules descriptor with line + //$this->tabs = array( + // 'entity:+tabname:Title:@mrp:/mrp/mypage.php?id=__ID__' + //); // to add new tab + //$this->tabs = array( + // 'entity:-tabname:Title:@mrp:/mrp/mypage.php?id=__ID__' + //); // to remove a tab + complete_head_from_modules($conf, $langs, null, $head, $h, 'mrp'); + + return $head; +} diff --git a/htdocs/mrp/lib/mrp_mo.lib.php b/htdocs/mrp/lib/mrp_mo.lib.php new file mode 100644 index 00000000000..6189761269e --- /dev/null +++ b/htdocs/mrp/lib/mrp_mo.lib.php @@ -0,0 +1,83 @@ +. + */ + +/** + * \file lib/mrp_mo.lib.php + * \ingroup mrp + * \brief Library files with common functions for Mo + */ + +/** + * Prepare array of tabs for Mo + * + * @param Mo $object Mo + * @return array Array of tabs + */ +function moPrepareHead($object) +{ + global $db, $langs, $conf; + + $langs->load("mrp"); + + $h = 0; + $head = array(); + + $head[$h][0] = dol_buildpath("/mrp/mo_card.php", 1).'?id='.$object->id; + $head[$h][1] = $langs->trans("Card"); + $head[$h][2] = 'card'; + $h++; + + if (isset($object->fields['note_public']) || isset($object->fields['note_private'])) + { + $nbNote = 0; + if (!empty($object->note_private)) $nbNote++; + if (!empty($object->note_public)) $nbNote++; + $head[$h][0] = dol_buildpath('/mrp/mo_note.php', 1).'?id='.$object->id; + $head[$h][1] = $langs->trans('Notes'); + if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + $head[$h][2] = 'note'; + $h++; + } + + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; + $upload_dir = $conf->mrp->dir_output . "/mo/" . dol_sanitizeFileName($object->ref); + $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); + $nbLinks=Link::count($db, $object->element, $object->id); + $head[$h][0] = dol_buildpath("/mrp/mo_document.php", 1).'?id='.$object->id; + $head[$h][1] = $langs->trans('Documents'); + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + $head[$h][2] = 'document'; + $h++; + + $head[$h][0] = dol_buildpath("/mrp/mo_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( + // 'entity:+tabname:Title:@mrp:/mrp/mypage.php?id=__ID__' + //); // to add new tab + //$this->tabs = array( + // 'entity:-tabname:Title:@mrp:/mrp/mypage.php?id=__ID__' + //); // to remove a tab + complete_head_from_modules($conf, $langs, $object, $head, $h, 'mo@mrp'); + + return $head; +} diff --git a/htdocs/mrp/mo_agenda.php b/htdocs/mrp/mo_agenda.php new file mode 100644 index 00000000000..aab1ff10581 --- /dev/null +++ b/htdocs/mrp/mo_agenda.php @@ -0,0 +1,262 @@ + + * Copyright (C) ---Put here your own copyright and developer email--- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file mo_agenda.php + * \ingroup mrp + * \brief Page of Mo events + */ + +// Load Dolibarr environment +$res=0; +// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; +// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME +$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1; +while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; } +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php"; +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php"; +// Try main.inc.php using relative path +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php"; +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php"; +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php"; +if (! $res) die("Include of main fails"); + +require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +dol_include_once('/mrp/class/mo.class.php'); +dol_include_once('/mrp/lib/mrp_mo.lib.php'); + + +// Load translation files required by the page +$langs->loadLangs(array("mrp","other")); + +// Get parameters +$id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); +$action = GETPOST('action', 'alpha'); +$cancel = GETPOST('cancel', 'aZ09'); +$backtopage = GETPOST('backtopage', 'alpha'); + +if (GETPOST('actioncode', 'array')) +{ + $actioncode=GETPOST('actioncode', 'array', 3); + if (! count($actioncode)) $actioncode='0'; +} +else +{ + $actioncode=GETPOST("actioncode", "alpha", 3)?GETPOST("actioncode", "alpha", 3):(GETPOST("actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)); +} +$search_agenda_label=GETPOST('search_agenda_label'); + +// Security check - Protection if external user +//if ($user->societe_id > 0) access_forbidden(); +//if ($user->societe_id > 0) $socid = $user->societe_id; +//$result = restrictedArea($user, 'mrp', $id); + +$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; +$sortfield = GETPOST("sortfield", 'alpha'); +$sortorder = GETPOST("sortorder", 'alpha'); +$page = GETPOST("page", 'int'); +if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +if (! $sortfield) $sortfield='a.datep,a.id'; +if (! $sortorder) $sortorder='DESC'; + +// Initialize technical objects +$object=new Mo($db); +$extrafields = new ExtraFields($db); +$diroutputmassaction=$conf->mrp->dir_output . '/temp/massgeneration/'.$user->id; +$hookmanager->initHooks(array('moagenda','globalcard')); // Note that conf->hooks_modules contains array + +// Fetch optionals attributes and labels +$extrafields->fetch_name_optionals_label($object->table_element); + +// Load object +include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals +if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mrp->multidir_output[$object->entity] . "/" . $object->id; + + + +/* + * Actions + */ + +$parameters=array('id'=>$socid); +$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +if (empty($reshook)) +{ + // Cancel + if (GETPOST('cancel', 'alpha') && ! empty($backtopage)) + { + header("Location: ".$backtopage); + exit; + } + + // Purge search criteria + if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) // All tests are required to be compatible with all browsers + { + $actioncode=''; + $search_agenda_label=''; + } +} + + + +/* + * View + */ + +$contactstatic = new Contact($db); + +$form = new Form($db); + +if ($object->id > 0) +{ + $title=$langs->trans("Agenda"); + //if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name." - ".$title; + $help_url = ''; + llxHeader('', $title, $help_url); + + if (! empty($conf->notification->enabled)) $langs->load("mails"); + $head = moPrepareHead($object); + + + dol_fiche_head($head, 'agenda', $langs->trans("Mo"), -1, $object->picto); + + // Object card + // ------------------------------------------------------------ + $linkback = '' . $langs->trans("BackToList") . ''; + + $morehtmlref='
'; + /* + // Ref customer + $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); + // Thirdparty + $morehtmlref.='
'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1); + // Project + if (! empty($conf->projet->enabled)) + { + $langs->load("projects"); + $morehtmlref.='
'.$langs->trans('Project') . ' '; + if ($user->rights->mrp->creer) + { + if ($action != 'classify') + //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; + $morehtmlref.=' : '; + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.='
'; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.='
'; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } + } else { + if (! empty($object->fk_project)) { + $proj = new Project($db); + $proj->fetch($object->fk_project); + $morehtmlref.=''; + $morehtmlref.=$proj->ref; + $morehtmlref.=''; + } else { + $morehtmlref.=''; + } + } + }*/ + $morehtmlref.='
'; + + + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); + + print '
'; + print '
'; + + $object->info($object->id); + dol_print_object_info($object, 1); + + print '
'; + + dol_fiche_end(); + + + + // Actions buttons + + $objthirdparty=$object; + $objcon=new stdClass(); + + $out='&origin='.$object->element.'&originid='.$object->id; + $permok=$user->rights->agenda->myactions->create; + if ((! empty($objthirdparty->id) || ! empty($objcon->id)) && $permok) + { + //$out.='trans("AddAnAction"),'filenew'); + //$out.=""; + } + + + print '
'; + + if (! empty($conf->agenda->enabled)) + { + if (! empty($user->rights->agenda->myactions->create) || ! empty($user->rights->agenda->allactions->create)) + { + print ''.$langs->trans("AddAction").''; + } + else + { + print ''.$langs->trans("AddAction").''; + } + } + + print '
'; + + if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) )) + { + $param='&id='.$object->id.'&socid='.$socid; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); + + + //print load_fiche_titre($langs->trans("ActionsOnMo"), '', ''); + + // List of all actions + $filters=array(); + $filters['search_agenda_label']=$search_agenda_label; + + // TODO Replace this with same code than into list.php + //show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); + } +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php new file mode 100644 index 00000000000..f15b45b96e5 --- /dev/null +++ b/htdocs/mrp/mo_card.php @@ -0,0 +1,550 @@ + + * Copyright (C) ---Put here your own copyright and developer email--- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file mo_card.php + * \ingroup mrp + * \brief Page to create/edit/view mo + */ + +//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Do not create database handler $db +//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Do not load object $user +//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); // Do not load object $mysoc +//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Do not load object $langs +//if (! defined('NOSCANGETFORINJECTION')) define('NOSCANGETFORINJECTION','1'); // Do not check injection attack on GET parameters +//if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION','1'); // Do not check injection attack on POST parameters +//if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK','1'); // Do not check CSRF attack (test on referer + on token if option MAIN_SECURITY_CSRF_WITH_TOKEN is on). +//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Do not roll the Anti CSRF token (used if MAIN_SECURITY_CSRF_WITH_TOKEN is on) +//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK','1'); // Do not check style html tag into posted data +//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); // If there is no need to load and show top and left menu +//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); // If we don't need to load the html.form.class.php +//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); // Do not load ajax.lib.php library +//if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is public (can be called outside logged session). This include the NOIPCHECK too. +//if (! defined('NOIPCHECK')) define('NOIPCHECK','1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip +//if (! defined("MAIN_LANG_DEFAULT")) define('MAIN_LANG_DEFAULT','auto'); // Force lang to a particular value +//if (! defined("MAIN_AUTHENTICATION_MODE")) define('MAIN_AUTHENTICATION_MODE','aloginmodule'); // Force authentication handler +//if (! defined("NOREDIRECTBYMAINTOLOGIN")) define('NOREDIRECTBYMAINTOLOGIN',1); // The main.inc.php does not make a redirect if not logged, instead show simple error message +//if (! defined("FORCECSP")) define('FORCECSP','none'); // Disable all Content Security Policies + + +// Load Dolibarr environment +$res=0; +// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; +// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME +$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1; +while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; } +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php"; +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php"; +// Try main.inc.php using relative path +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php"; +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php"; +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php"; +if (! $res) die("Include of main fails"); + +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; +dol_include_once('/mrp/class/mo.class.php'); +dol_include_once('/mrp/lib/mrp_mo.lib.php'); + +// Load translation files required by the page +$langs->loadLangs(array("mrp", "other")); + +// Get parameters +$id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); +$action = GETPOST('action', 'aZ09'); +$confirm = GETPOST('confirm', 'alpha'); +$cancel = GETPOST('cancel', 'aZ09'); +$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'mocard'; // To manage different context of search +$backtopage = GETPOST('backtopage', 'alpha'); +//$lineid = GETPOST('lineid', 'int'); + +// Initialize technical objects +$object=new Mo($db); +$extrafields = new ExtraFields($db); +$diroutputmassaction=$conf->mrp->dir_output . '/temp/massgeneration/'.$user->id; +$hookmanager->initHooks(array('mocard','globalcard')); // Note that conf->hooks_modules contains array + +// Fetch optionals attributes and labels +$extrafields->fetch_name_optionals_label($object->table_element); + +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); + +// Initialize array of search criterias +$search_all=trim(GETPOST("search_all", 'alpha')); +$search=array(); +foreach($object->fields as $key => $val) +{ + if (GETPOST('search_'.$key, 'alpha')) $search[$key]=GETPOST('search_'.$key, 'alpha'); +} + +if (empty($action) && empty($id) && empty($ref)) $action='view'; + +// Load object +include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. + +// Security check - Protection if external user +//if ($user->societe_id > 0) access_forbidden(); +//if ($user->societe_id > 0) $socid = $user->societe_id; +//$isdraft = (($object->statut == Mo::STATUS_DRAFT) ? 1 : 0); +//$result = restrictedArea($user, 'mrp', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); + +$permissionnote=$user->rights->mrp->write; // Used by the include of actions_setnotes.inc.php +$permissiondellink=$user->rights->mrp->write; // Used by the include of actions_dellink.inc.php +$permissionedit=$user->rights->mrp->write; // Used by the include of actions_lineupdown.inc.php +$permissiontoadd=$user->rights->mrp->write; // Used by the include of actions_addupdatedelete.inc.php + + + +/* + * Actions + * + * Put here all code to do according to value of "action" parameter + */ + +$parameters=array(); +$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +if (empty($reshook)) +{ + $error=0; + + $permissiontodelete = $user->rights->mrp->delete || ($permissiontoadd && $object->status == 0); + $backurlforlist = dol_buildpath('/mrp/mo_list.php', 1); + if (empty($backtopage)) { + if (empty($id)) $backtopage = $backurlforlist; + else $backtopage = dol_buildpath('/mrp/mo_card.php', 1).'?id='.($id > 0 ? $id : '__ID__'); + } + $triggermodname = 'MRP_MO_MODIFY'; // Name of trigger action code to execute when we modify record + + // Actions cancel, add, update, delete or clone + include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php'; + + // Actions when linking object each other + include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; + + // Actions when printing a doc from card + include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php'; + + // Actions to send emails + $trigger_name='MO_SENTBYMAIL'; + $autocopy='MAIN_MAIL_AUTOCOPY_MO_TO'; + $trackid='mo'.$object->id; + include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; +} + + + + +/* + * View + * + * Put here all code to build page + */ + +$form=new Form($db); +$formfile=new FormFile($db); + +llxHeader('', $langs->trans('Mo'), ''); + +// Example : Adding jquery code +print ''; + + +// Part to create +if ($action == 'create') +{ + print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("Mo")), '', 'cubes'); + + print '
'; + print ''; + print ''; + print ''; + + dol_fiche_head(array(), ''); + + print ''."\n"; + + // Common attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_add.tpl.php'; + + // Other attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_add.tpl.php'; + + print '
'."\n"; + + dol_fiche_end(); + + print ' + + '; + + print '
'; + print ''; + print '  '; + print ''; // Cancel for create does not post form if we don't know the backtopage + print '
'; + + print '
'; +} + +// Part to edit record +if (($id || $ref) && $action == 'edit') +{ + print load_fiche_titre($langs->trans("Mo"), '', 'cubes'); + + print '
'; + print ''; + print ''; + print ''; + print ''; + + dol_fiche_head(); + + print ''."\n"; + + // Common attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_edit.tpl.php'; + + // Other attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_edit.tpl.php'; + + print '
'; + + dol_fiche_end(); + + print '
'; + print '   '; + print '
'; + + print '
'; +} + +// Part to show record +if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) +{ + $res = $object->fetch_optionals(); + + $head = moPrepareHead($object); + dol_fiche_head($head, 'card', $langs->trans("Mo"), -1, $object->picto); + + $formconfirm = ''; + + // Confirmation to delete + if ($action == 'delete') + { + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteMo'), $langs->trans('ConfirmDeleteMo'), 'confirm_delete', '', 0, 1); + } + // Confirmation to delete line + if ($action == 'deleteline') + { + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&lineid='.$lineid, $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_deleteline', '', 0, 1); + } + // Clone confirmation + if ($action == 'clone') { + // Create an array for form + $formquestion = array(); + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneMo', $object->ref), 'confirm_clone', $formquestion, 'yes', 1); + } + + // Confirmation of action xxxx + if ($action == 'xxx') + { + $formquestion=array(); + /* + $forcecombo=0; + if ($conf->browser->name == 'ie') $forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy + $formquestion = array( + // 'text' => $langs->trans("ConfirmClone"), + // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1), + // array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1), + // array('type' => 'other', 'name' => 'idwarehouse', 'label' => $langs->trans("SelectWarehouseForStockDecrease"), 'value' => $formproduct->selectWarehouses(GETPOST('idwarehouse')?GETPOST('idwarehouse'):'ifone', 'idwarehouse', '', 1, 0, 0, '', 0, $forcecombo)) + ); + */ + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('XXX'), $text, 'confirm_xxx', $formquestion, 0, 1, 220); + } + + // Call Hook formConfirm + $parameters = array('lineid' => $lineid); + $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + if (empty($reshook)) $formconfirm.=$hookmanager->resPrint; + elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint; + + // Print form confirm + print $formconfirm; + + + // Object card + // ------------------------------------------------------------ + $linkback = '' . $langs->trans("BackToList") . ''; + + $morehtmlref='
'; + /* + // Ref bis + $morehtmlref.=$form->editfieldkey("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->mrp->creer, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->mrp->creer, 'string', '', null, null, '', 1); + // Thirdparty + $morehtmlref.='
'.$langs->trans('ThirdParty') . ' : ' . $soc->getNomUrl(1); + // Project + if (! empty($conf->projet->enabled)) + { + $langs->load("projects"); + $morehtmlref.='
'.$langs->trans('Project') . ' '; + if ($user->rights->mrp->write) + { + if ($action != 'classify') + $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.='
'; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.='
'; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } + } else { + if (! empty($object->fk_project)) { + $proj = new Project($db); + $proj->fetch($object->fk_project); + $morehtmlref.=$proj->getNomUrl(); + } else { + $morehtmlref.=''; + } + } + } + */ + $morehtmlref.='
'; + + + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); + + + print '
'; + print '
'; + print '
'; + print ''."\n"; + + // Common attributes + //$keyforbreak='fieldkeytoswitchonsecondcolumn'; + include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_view.tpl.php'; + + // Other attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; + + print '
'; + print '
'; + print '
'; + + print '
'; + + dol_fiche_end(); + + + /* + * Lines + */ + + if (! empty($object->table_element_line)) + { + // Show object lines + $result = $object->getLinesArray(); + + print '
+ + + + + '; + + if (! empty($conf->use_javascript_ajax) && $object->status == 0) { + include DOL_DOCUMENT_ROOT . '/core/tpl/ajaxrow.tpl.php'; + } + + print '
'; + if (! empty($object->lines) && $object->status == 0 && $permissiontoadd && $action != 'selectlines' && $action != 'editline') + { + print ''; + } + + if (! empty($object->lines)) + { + $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1); + } + + // Form to add new line + if ($object->status == 0 && $permissiontoadd && $action != 'selectlines') + { + if ($action != 'editline') + { + // Add products/services form + $object->formAddObjectLine(1, $mysoc, $soc); + + $parameters = array(); + $reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + } + } + + if (! empty($object->lines) && $object->status == 0 && $permissiontoadd && $action != 'selectlines' && $action != 'editline') + { + print '
'; + } + print '
'; + + print "
\n"; + } + + + // Buttons for actions + + if ($action != 'presend' && $action != 'editline') { + print '
'."\n"; + $parameters=array(); + $reshook=$hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + + if (empty($reshook)) + { + // Send + print '' . $langs->trans('SendMail') . ''."\n"; + + // Modify + if (! empty($user->rights->mrp->write)) + { + print ''.$langs->trans("Modify").''."\n"; + } + else + { + print ''.$langs->trans('Modify').''."\n"; + } + + // Clone + if (! empty($user->rights->mrp->write)) + { + print ''; + } + + /* + if ($user->rights->mrp->write) + { + if ($object->status == 1) + { + print ''.$langs->trans("Disable").''."\n"; + } + else + { + print ''.$langs->trans("Enable").''."\n"; + } + } + */ + + // Delete (need delete permission, or if draft, just need create/modify permission) + if (! empty($user->rights->mrp->delete) || (! empty($object->fields['status']) && $object->status == $object::STATUS_DRAFT && ! empty($user->rights->mrp->write))) + { + print ''.$langs->trans('Delete').''."\n"; + } + else + { + print ''.$langs->trans('Delete').''."\n"; + } + } + print '
'."\n"; + } + + + // Select mail models is same action as presend + if (GETPOST('modelselected')) { + $action = 'presend'; + } + + if ($action != 'presend') + { + print '
'; + print ''; // ancre + + // Documents + /*$objref = dol_sanitizeFileName($object->ref); + $relativepath = $comref . '/' . $comref . '.pdf'; + $filedir = $conf->mrp->dir_output . '/' . $objref; + $urlsource = $_SERVER["PHP_SELF"] . "?id=" . $object->id; + $genallowed = $user->rights->mrp->read; // If you can read, you can build the PDF to read content + $delallowed = $user->rights->mrp->create; // If you can create/edit, you can remove a file on card + print $formfile->showdocuments('mrp', $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang); + */ + + // Show links to link elements + $linktoelem = $form->showLinkToObjectBlock($object, null, array('mo')); + $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem); + + + print '
'; + + $MAXEVENT = 10; + + $morehtmlright = ''; + $morehtmlright.= $langs->trans("SeeAll"); + $morehtmlright.= ''; + + // List of actions on element + include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php'; + $formactions = new FormActions($db); + $somethingshown = $formactions->showactions($object, 'mo', $socid, 1, '', $MAXEVENT, '', $morehtmlright); + + print '
'; + } + + //Select mail models is same action as presend + /* + if (GETPOST('modelselected')) $action = 'presend'; + + // Presend form + $modelmail='inventory'; + $defaulttopic='InformationMessage'; + $diroutput = $conf->product->dir_output.'/inventory'; + $trackid = 'stockinv'.$object->id; + + include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php'; + */ +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/mrp/mo_document.php b/htdocs/mrp/mo_document.php new file mode 100644 index 00000000000..09f34ae583e --- /dev/null +++ b/htdocs/mrp/mo_document.php @@ -0,0 +1,167 @@ + + * Copyright (C) ---Put here your own copyright and developer email--- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file mo_document.php + * \ingroup mrp + * \brief Tab for documents linked to Mo + */ + +// Load Dolibarr environment +$res=0; +// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; +// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME +$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1; +while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; } +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php"; +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php"; +// Try main.inc.php using relative path +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php"; +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php"; +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php"; +if (! $res) die("Include of main fails"); + +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; +dol_include_once('/mrp/class/mo.class.php'); +dol_include_once('/mrp/lib/mrp_mo.lib.php'); + +// Load translation files required by the page +$langs->loadLangs(array("mrp","companies","other","mails")); + + +$action=GETPOST('action', 'aZ09'); +$confirm=GETPOST('confirm'); +$id=(GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$ref = GETPOST('ref', 'alpha'); + +// Security check - Protection if external user +//if ($user->societe_id > 0) access_forbidden(); +//if ($user->societe_id > 0) $socid = $user->societe_id; +//$result = restrictedArea($user, 'mrp', $id); + +// Get parameters +$sortfield = GETPOST("sortfield", 'alpha'); +$sortorder = GETPOST("sortorder", 'alpha'); +$page = GETPOST("page", 'int'); +if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +$offset = $conf->liste_limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +if (! $sortorder) $sortorder="ASC"; +if (! $sortfield) $sortfield="name"; +//if (! $sortfield) $sortfield="position_name"; + +// Initialize technical objects +$object=new Mo($db); +$extrafields = new ExtraFields($db); +$diroutputmassaction=$conf->mrp->dir_output . '/temp/massgeneration/'.$user->id; +$hookmanager->initHooks(array('modocument','globalcard')); // Note that conf->hooks_modules contains array + +// Fetch optionals attributes and labels +$extrafields->fetch_name_optionals_label($object->table_element); + +// Load object +include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals + +//if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mrp->multidir_output[$object->entity?$object->entity:$conf->entity] . "/mo/" . dol_sanitizeFileName($object->id); +if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mrp->multidir_output[$object->entity?$object->entity:$conf->entity] . "/mo/" . dol_sanitizeFileName($object->ref); + + +/* + * Actions + */ + +include_once DOL_DOCUMENT_ROOT . '/core/actions_linkedfiles.inc.php'; + + +/* + * View + */ + +$form = new Form($db); + +$title=$langs->trans("Mo").' - '.$langs->trans("Files"); +$help_url=''; +//$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; +llxHeader('', $title, $help_url); + +if ($object->id) +{ + /* + * Show tabs + */ + $head = moPrepareHead($object); + + dol_fiche_head($head, 'document', $langs->trans("Mo"), -1, $object->picto); + + + // Build file list + $filearray=dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview.*\.png)$', $sortfield, (strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC), 1); + $totalsize=0; + foreach($filearray as $key => $file) + { + $totalsize+=$file['size']; + } + + // Object card + // ------------------------------------------------------------ + $linkback = '' . $langs->trans("BackToList") . ''; + + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); + + print '
'; + + print '
'; + print ''; + + // Number of files + print ''; + + // Total size + print ''; + + print '
'.$langs->trans("NbOfAttachedFiles").''.count($filearray).'
'.$langs->trans("TotalSizeOfAttachedFiles").''.$totalsize.' '.$langs->trans("bytes").'
'; + + print '
'; + + dol_fiche_end(); + + $modulepart = 'mrp'; + //$permission = $user->rights->mrp->create; + $permission = 1; + //$permtoedit = $user->rights->mrp->create; + $permtoedit = 1; + $param = '&id=' . $object->id; + + //$relativepathwithnofile='mo/' . dol_sanitizeFileName($object->id).'/'; + $relativepathwithnofile='mo/' . dol_sanitizeFileName($object->ref).'/'; + + include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php'; +} +else +{ + accessforbidden('', 0, 1); +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/mrp/mo_list.php b/htdocs/mrp/mo_list.php new file mode 100644 index 00000000000..891ad76eaf8 --- /dev/null +++ b/htdocs/mrp/mo_list.php @@ -0,0 +1,602 @@ + + * Copyright (C) ---Put here your own copyright and developer email--- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file mo_list.php + * \ingroup mrp + * \brief List page for mo + */ + +//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Do not create database handler $db +//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Do not load object $user +//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); // Do not load object $mysoc +//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Do not load object $langs +//if (! defined('NOSCANGETFORINJECTION')) define('NOSCANGETFORINJECTION','1'); // Do not check injection attack on GET parameters +//if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION','1'); // Do not check injection attack on POST parameters +//if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK','1'); // Do not check CSRF attack (test on referer + on token if option MAIN_SECURITY_CSRF_WITH_TOKEN is on). +//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Do not roll the Anti CSRF token (used if MAIN_SECURITY_CSRF_WITH_TOKEN is on) +//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK','1'); // Do not check style html tag into posted data +//if (! defined('NOIPCHECK')) define('NOIPCHECK','1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip +//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); // If there is no need to load and show top and left menu +//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); // If we don't need to load the html.form.class.php +//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); // Do not load ajax.lib.php library +//if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is public (can be called outside logged session) +//if (! defined("MAIN_LANG_DEFAULT")) define('MAIN_LANG_DEFAULT','auto'); // Force lang to a particular value +//if (! defined("MAIN_AUTHENTICATION_MODE")) define('MAIN_AUTHENTICATION_MODE','aloginmodule'); // Force authentication handler +//if (! defined("NOREDIRECTBYMAINTOLOGIN")) define('NOREDIRECTBYMAINTOLOGIN',1); // The main.inc.php does not make a redirect if not logged, instead show simple error message +//if (! defined("XFRAMEOPTIONS_ALLOWALL")) define('XFRAMEOPTIONS_ALLOWALL',1); // Do not add the HTTP header 'X-Frame-Options: SAMEORIGIN' but 'X-Frame-Options: ALLOWALL' + +// Load Dolibarr environment +$res=0; +// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; +// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME +$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1; +while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; } +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php"; +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php"; +// Try main.inc.php using relative path +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php"; +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php"; +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php"; +if (! $res) die("Include of main fails"); + +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; + +// load mrp libraries +require_once __DIR__ . '/class/mo.class.php'; + +// for other modules +//dol_include_once('/othermodule/class/otherobject.class.php'); + +// Load translation files required by the page +$langs->loadLangs(array("mrp","other")); + +$action = GETPOST('action', 'aZ09')?GETPOST('action', 'aZ09'):'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... +$massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) +$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation +$cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button +$toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list +$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'molist'; // 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') + +$id = GETPOST('id', 'int'); + +// Load variable for pagination +$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; +$sortfield = GETPOST('sortfield', 'alpha'); +$sortorder = GETPOST('sortorder', 'alpha'); +$page = GETPOST('page', 'int'); +if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +//if (! $sortfield) $sortfield="p.date_fin"; +//if (! $sortorder) $sortorder="DESC"; + +// Initialize technical objects +$object = new Mo($db); +$extrafields = new ExtraFields($db); +$diroutputmassaction = $conf->mrp->dir_output . '/temp/massgeneration/'.$user->id; +$hookmanager->initHooks(array('molist')); // Note that conf->hooks_modules contains array + +// Fetch optionals attributes and labels +$extrafields->fetch_name_optionals_label($object->table_element); + +$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); + +// Default sort order (if not yet defined by previous GETPOST) +if (! $sortfield) $sortfield="t.".key($object->fields); // Set here default search field. By default 1st field in definition. +if (! $sortorder) $sortorder="ASC"; + +// Security check +if (empty($conf->mrp->enabled)) accessforbidden('Module not enabled'); +$socid=0; +if ($user->societe_id > 0) // Protection if external user +{ + //$socid = $user->societe_id; + accessforbidden(); +} +//$result = restrictedArea($user, 'mrp', $id, ''); + + +// Initialize array of search criterias +$search_all=trim(GETPOST("search_all", 'alpha')); +$search=array(); +foreach($object->fields as $key => $val) +{ + if (GETPOST('search_'.$key, 'alpha')) $search[$key]=GETPOST('search_'.$key, 'alpha'); +} + +// List of fields to search into when doing a "search in all" +$fieldstosearchall = array(); +foreach($object->fields as $key => $val) +{ + if ($val['searchall']) $fieldstosearchall['t.'.$key]=$val['label']; +} + +// Definition of fields for list +$arrayfields=array(); +foreach($object->fields as $key => $val) +{ + // If $val['visible']==0, then we never show the field + if (! empty($val['visible'])) $arrayfields['t.'.$key]=array('label'=>$val['label'], 'checked'=>(($val['visible']<0)?0:1), 'enabled'=>($val['enabled'] && ($val['visible'] != 3)), 'position'=>$val['position']); +} +// Extra fields +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) +{ + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } +} +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); + + + +/* + * Actions + */ + +if (GETPOST('cancel', 'alpha')) { $action='list'; $massaction=''; } +if (! GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; } + +$parameters=array(); +$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +if (empty($reshook)) +{ + // Selection of new fields + include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; + + // Purge search criteria + if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') ||GETPOST('button_removefilter', 'alpha')) // All tests are required to be compatible with all browsers + { + foreach($object->fields as $key => $val) + { + $search[$key]=''; + } + $toselect=''; + $search_array_options=array(); + } + if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha') + || GETPOST('button_search_x', 'alpha') || GETPOST('button_search.x', 'alpha') || GETPOST('button_search', 'alpha')) + { + $massaction=''; // Protection to avoid mass action if we force a new search during a mass action confirmation + } + + // Mass actions + $objectclass='Mo'; + $objectlabel='Mo'; + $permtoread = $user->rights->mrp->read; + $permtodelete = $user->rights->mrp->delete; + $uploaddir = $conf->mrp->dir_output; + include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; +} + + + +/* + * View + */ + +$form=new Form($db); + +$now=dol_now(); + +//$help_url="EN:Module_Mo|FR:Module_Mo_FR|ES:Módulo_Mo"; +$help_url=''; +$title = $langs->trans('ListOfManufacturingOrders'); + + +// Build and execute select +// -------------------------------------------------------------------- +$sql = 'SELECT '; +foreach($object->fields as $key => $val) +{ + $sql.='t.'.$key.', '; +} +// 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.', ' : ''); +// Add fields from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; +$sql=preg_replace('/, $/', '', $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)"; +if ($object->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity($object->element).")"; +else $sql.=" WHERE 1 = 1"; +foreach($search as $key => $val) +{ + if ($key == 'status' && $search[$key] == -1) continue; + $mode_search=(($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0); + if ($search[$key] != '') $sql.=natural_search($key, $search[$key], (($key == 'status')?2:$mode_search)); +} +if ($search_all) $sql.= natural_search(array_keys($fieldstosearchall), $search_all); +// Add where from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; +// Add where from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListWhere', $parameters, $object); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; + +/* If a group by is required +$sql.= " GROUP BY " +foreach($object->fields as $key => $val) +{ + $sql.='t.'.$key.', '; +} +// 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.', ' : ''); +// Add where from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListGroupBy',$parameters); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; +$sql=preg_replace('/, $/','', $sql); +*/ + +$sql.=$db->order($sortfield, $sortorder); + +// Count total nb of records +$nbtotalofrecords = ''; +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) +{ + $resql = $db->query($sql); + $nbtotalofrecords = $db->num_rows($resql); + if (($page * $limit) > $nbtotalofrecords) // if total of record found is smaller than page * limit, goto and load page 0 + { + $page = 0; + $offset = 0; + } +} +// if total of record found is smaller than limit, no need to do paging and to restart another select with limits set. +if (is_numeric($nbtotalofrecords) && $limit > $nbtotalofrecords) +{ + $num = $nbtotalofrecords; +} +else +{ + $sql.= $db->plimit($limit+1, $offset); + + $resql=$db->query($sql); + if (! $resql) + { + dol_print_error($db); + exit; + } + + $num = $db->num_rows($resql); +} + +// Direct jump if only one record found +if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all) +{ + $obj = $db->fetch_object($resql); + $id = $obj->rowid; + header("Location: ".dol_buildpath('/mrp/mo_card.php', 1).'?id='.$id); + exit; +} + + +// Output page +// -------------------------------------------------------------------- + +llxHeader('', $title, $help_url); + +// Example : Adding jquery code +print ''; + +$arrayofselected=is_array($toselect)?$toselect:array(); + +$param=''; +if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); +if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); +foreach($search as $key => $val) +{ + if (is_array($search[$key]) && count($search[$key])) foreach($search[$key] as $skey) $param.='&search_'.$key.'[]='.urlencode($skey); + else $param.= '&search_'.$key.'='.urlencode($search[$key]); +} +if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); +// Add $param from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; + +// List of mass actions available +$arrayofmassactions = array( + //'validate'=>$langs->trans("Validate"), + //'generate_doc'=>$langs->trans("ReGeneratePDF"), + //'builddoc'=>$langs->trans("PDFMerge"), + //'presend'=>$langs->trans("SendByMail"), +); +if ($user->rights->mrp->delete) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); +if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array(); +$massactionbutton=$form->selectMassAction('', $arrayofmassactions); + +print '
'; +if ($optioncss != '') print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +$newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/mrp/mo_card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $user->rights->mrp->write); + +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'cubes', 0, $newcardbutton, '', $limit); + +// Add code for pre mass action (confirmation or email presend form) +$topicmail="SendMoRef"; +$modelmail="mo"; +$objecttmp=new Mo($db); +$trackid='xxxx'.$object->id; +include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; + +if ($search_all) +{ + foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); + print '
'.$langs->trans("FilterOnInto", $search_all) . join(', ', $fieldstosearchall).'
'; +} + +$moreforfilter = ''; +/*$moreforfilter.='
'; +$moreforfilter.= $langs->trans('MyFilter') . ': '; +$moreforfilter.= '
';*/ + +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook +if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint; +else $moreforfilter = $hookmanager->resPrint; + +if (! empty($moreforfilter)) +{ + print '
'; + print $moreforfilter; + print '
'; +} + +$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; +$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields.=(count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); + +print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table +print ''."\n"; + + +// Fields title search +// -------------------------------------------------------------------- +print ''; +foreach($object->fields as $key => $val) +{ + $cssforfield=(empty($val['css'])?'':$val['css']); + if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price'))) $cssforfield.=($cssforfield?' ':'').'right'; + if (! empty($arrayfields['t.'.$key]['checked'])) + { + print ''; + } +} +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; + +// Fields from hook +$parameters=array('arrayfields'=>$arrayfields); +$reshook=$hookmanager->executeHooks('printFieldListOption', $parameters, $object); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; +// Action column +print ''; +print ''."\n"; + + +// Fields title label +// -------------------------------------------------------------------- +print ''; +foreach($object->fields as $key => $val) +{ + $cssforfield=(empty($val['css'])?'':$val['css']); + if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price'))) $cssforfield.=($cssforfield?' ':'').'right'; + if (! empty($arrayfields['t.'.$key]['checked'])) + { + print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield?'class="'.$cssforfield.'"':''), $sortfield, $sortorder, ($cssforfield?$cssforfield.' ':''))."\n"; + } +} +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; +// Hook fields +$parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder); +$reshook=$hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; +// Action column +print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n"; +print ''."\n"; + + +// Detect if we need a fetch on each output line +$needToFetchEachLine=0; +if (is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0) +{ + foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) + { + if (preg_match('/\$object/', $val)) $needToFetchEachLine++; // There is at least one compute field that use $object + } +} + + +// Loop on record +// -------------------------------------------------------------------- +$i=0; +$totalarray=array(); +while ($i < min($num, $limit)) +{ + $obj = $db->fetch_object($resql); + if (empty($obj)) break; // Should not happen + + // Store properties in $object + $object->id = $obj->rowid; + foreach($object->fields as $key => $val) + { + if (property_exists($obj, $key)) $object->$key = $obj->$key; + } + + // Show here line of result + print ''; + foreach($object->fields as $key => $val) + { + $cssforfield=(empty($val['css'])?'':$val['css']); + if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + + if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif ($key == 'ref') $cssforfield.=($cssforfield?' ':'').'nowrap'; + + if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $key != 'status') $cssforfield.=($cssforfield?' ':'').'right'; + + if (! empty($arrayfields['t.'.$key]['checked'])) + { + print ''; + if ($key == 'status') print $object->getLibStatut(5); + elseif (in_array($val['type'], array('date','datetime','timestamp'))) print $object->showOutputField($val, $key, $db->jdate($obj->$key), ''); + else print $object->showOutputField($val, $key, $obj->$key, ''); + print ''; + if (! $i) $totalarray['nbfield']++; + if (! empty($val['isameasure'])) + { + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='t.'.$key; + $totalarray['val']['t.'.$key] += $obj->$key; + } + } + } + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Action column + print ''; + if (! $i) $totalarray['nbfield']++; + + print ''; + + $i++; +} + +// Show total line +if (isset($totalarray['pos'])) +{ + print ''; + $i=0; + while ($i < $totalarray['nbfield']) + { + $i++; + if (! empty($totalarray['pos'][$i])) print ''; + else + { + if ($i == 1) + { + if ($num < $limit) print ''; + else print ''; + } + else print ''; + } + } + print ''; +} + +// If no record found +if ($num == 0) +{ + $colspan=1; + foreach($arrayfields as $key => $val) { if (! empty($val['checked'])) $colspan++; } + print ''; +} + + +$db->free($resql); + +$parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$reshook=$hookmanager->executeHooks('printFieldListFooter', $parameters, $object); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; + +print '
'; + if (is_array($val['arrayofkeyval'])) print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 0, 0, 0, '', 'maxwidth75'); + else print ''; + print ''; +$searchpicto=$form->showFilterButtons(); +print $searchpicto; +print '
'; + if ($massactionbutton || $massaction) // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + { + $selected=0; + if (in_array($obj->rowid, $arrayofselected)) $selected=1; + print ''; + } + print '
'.price($totalarray['val'][$totalarray['pos'][$i]]).''.$langs->trans("Total").''.$langs->trans("Totalforthispage").'
'.$langs->trans("NoRecordFound").'
'."\n"; +print '
'."\n"; + +print '
'."\n"; + +if (in_array('builddoc', $arrayofmassactions) && ($nbtotalofrecords === '' || $nbtotalofrecords)) +{ + $hidegeneratedfilelistifempty=1; + if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) $hidegeneratedfilelistifempty=0; + + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; + $formfile = new FormFile($db); + + // Show list of available documents + $urlsource=$_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder; + $urlsource.=str_replace('&', '&', $param); + + $filedir=$diroutputmassaction; + $genallowed=$user->rights->mrp->read; + $delallowed=$user->rights->mrp->write; + + print $formfile->showdocuments('massfilesarea_mrp', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty); +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/mrp/mo_note.php b/htdocs/mrp/mo_note.php new file mode 100644 index 00000000000..a006f79a609 --- /dev/null +++ b/htdocs/mrp/mo_note.php @@ -0,0 +1,165 @@ + + * Copyright (C) ---Put here your own copyright and developer email--- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file mo_note.php + * \ingroup mrp + * \brief Car with notes on Mo + */ + +// Load Dolibarr environment +$res=0; +// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; +// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME +$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1; +while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; } +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php"; +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php"; +// Try main.inc.php using relative path +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php"; +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php"; +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php"; +if (! $res) die("Include of main fails"); + +dol_include_once('/mrp/class/mo.class.php'); +dol_include_once('/mrp/lib/mrp_mo.lib.php'); + +// Load translation files required by the page +$langs->loadLangs(array("mrp","companies")); + +// Get parameters +$id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); +$action = GETPOST('action', 'alpha'); +$cancel = GETPOST('cancel', 'aZ09'); +$backtopage = GETPOST('backtopage', 'alpha'); + +// Initialize technical objects +$object=new Mo($db); +$extrafields = new ExtraFields($db); +$diroutputmassaction=$conf->mrp->dir_output . '/temp/massgeneration/'.$user->id; +$hookmanager->initHooks(array('monote','globalcard')); // Note that conf->hooks_modules contains array + +// Fetch optionals attributes and labels +$extrafields->fetch_name_optionals_label($object->table_element); + +// Security check - Protection if external user +//if ($user->societe_id > 0) access_forbidden(); +//if ($user->societe_id > 0) $socid = $user->societe_id; +//$result = restrictedArea($user, 'mrp', $id); + +// Load object +include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals +if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mrp->multidir_output[$object->entity] . "/" . $object->id; + +$permissionnote=1; +//$permissionnote=$user->rights->mrp->creer; // Used by the include of actions_setnotes.inc.php + + + +/* + * Actions + */ + +include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once + + +/* + * View + */ + +$form = new Form($db); + +//$help_url='EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes'; +$help_url=''; +llxHeader('', $langs->trans('Mo'), $help_url); + +if ($id > 0 || ! empty($ref)) +{ + $object->fetch_thirdparty(); + + $head = moPrepareHead($object); + + dol_fiche_head($head, 'note', $langs->trans("Mo"), -1, $object->picto); + + // Object card + // ------------------------------------------------------------ + $linkback = '' . $langs->trans("BackToList") . ''; + + $morehtmlref='
'; + /* + // Ref customer + $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); + // Thirdparty + $morehtmlref.='
'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1); + // Project + if (! empty($conf->projet->enabled)) + { + $langs->load("projects"); + $morehtmlref.='
'.$langs->trans('Project') . ' '; + if ($user->rights->mrp->creer) + { + if ($action != 'classify') + //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; + $morehtmlref.=' : '; + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.='
'; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.='
'; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } + } else { + if (! empty($object->fk_project)) { + $proj = new Project($db); + $proj->fetch($object->fk_project); + $morehtmlref.=''; + $morehtmlref.=$proj->ref; + $morehtmlref.=''; + } else { + $morehtmlref.=''; + } + } + }*/ + $morehtmlref.='
'; + + + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); + + + print '
'; + print '
'; + + + $cssclass="titlefield"; + include DOL_DOCUMENT_ROOT.'/core/tpl/notes.tpl.php'; + + print '
'; + + dol_fiche_end(); +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/mrp/modulebuilder.txt b/htdocs/mrp/modulebuilder.txt new file mode 100644 index 00000000000..24ea0d6eac5 --- /dev/null +++ b/htdocs/mrp/modulebuilder.txt @@ -0,0 +1,3 @@ +# DO NOT DELETE THIS FILE MANUALLY +# File to flag module built using official module template. +# When this file is present into a module directory, you can edit it with the module builder tool. Use ModuleBuilder if you want to delete module. \ No newline at end of file diff --git a/htdocs/mrp/sql/llx_mrp_mo.key.sql b/htdocs/mrp/sql/llx_mrp_mo.key.sql new file mode 100644 index 00000000000..071a663dd56 --- /dev/null +++ b/htdocs/mrp/sql/llx_mrp_mo.key.sql @@ -0,0 +1,35 @@ +-- Copyright (C) ---Put here your own copyright and developer email--- +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see http://www.gnu.org/licenses/. + + +-- BEGIN MODULEBUILDER INDEXES +ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_rowid (rowid); +ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_ref (ref); +ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_entity (entity); +ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_qty (qty); +ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_soc (fk_soc); +ALTER TABLE llx_mrp_mo ADD CONSTRAINT llx_mrp_mo_fk_user_creat FOREIGN KEY (fk_user_creat) REFERENCES user(rowid); +ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_status (status); +ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_product (fk_product); +ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_date_start_planned (date_start_planned); +ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_date_end_planned (date_end_planned); +ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_bom (fk_bom); +ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_project (fk_project); +-- END MODULEBUILDER INDEXES + +--ALTER TABLE llx_mrp_mo ADD UNIQUE INDEX uk_mrp_mo_fieldxy(fieldx, fieldy); + +--ALTER TABLE llx_mrp_mo ADD CONSTRAINT llx_mrp_mo_fk_field FOREIGN KEY (fk_field) REFERENCES llx_mrp_myotherobject(rowid); + diff --git a/htdocs/mrp/sql/llx_mrp_mo.sql b/htdocs/mrp/sql/llx_mrp_mo.sql new file mode 100644 index 00000000000..dbb8b0faa01 --- /dev/null +++ b/htdocs/mrp/sql/llx_mrp_mo.sql @@ -0,0 +1,39 @@ +-- Copyright (C) ---Put here your own copyright and developer email--- +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see http://www.gnu.org/licenses/. + + +CREATE TABLE llx_mrp_mo( + -- BEGIN MODULEBUILDER FIELDS + rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL, + ref varchar(128) DEFAULT '(PROV)' NOT NULL, + entity integer DEFAULT 1 NOT NULL, + label varchar(255), + qty real NOT NULL, + fk_soc integer, + note_public text, + note_private text, + date_creation datetime NOT NULL, + tms timestamp, + fk_user_creat integer NOT NULL, + fk_user_modif integer, + import_key varchar(14), + status integer NOT NULL, + fk_product integer NOT NULL, + date_start_planned datetime, + date_end_planned datetime, + fk_bom integer, + fk_project integer + -- END MODULEBUILDER FIELDS +) ENGINE=innodb; \ No newline at end of file diff --git a/htdocs/mrp/sql/llx_mrp_mo_extrafields.key.sql b/htdocs/mrp/sql/llx_mrp_mo_extrafields.key.sql new file mode 100644 index 00000000000..5b280acc41f --- /dev/null +++ b/htdocs/mrp/sql/llx_mrp_mo_extrafields.key.sql @@ -0,0 +1,19 @@ +-- Copyright (C) 2019 Alicealalalamdskfldmjgdfgdfhfghgfh Adminson +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see http://www.gnu.org/licenses/. + + +-- BEGIN MODULEBUILDER INDEXES +ALTER TABLE llx_mrp_myobject_extrafields ADD INDEX idx_fk_object(fk_object); +-- END MODULEBUILDER INDEXES diff --git a/htdocs/mrp/sql/llx_mrp_mo_extrafields.sql b/htdocs/mrp/sql/llx_mrp_mo_extrafields.sql new file mode 100644 index 00000000000..9245ac1c341 --- /dev/null +++ b/htdocs/mrp/sql/llx_mrp_mo_extrafields.sql @@ -0,0 +1,23 @@ +-- Copyright (C) 2019 Alicealalalamdskfldmjgdfgdfhfghgfh Adminson +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see http://www.gnu.org/licenses/. + +create table llx_mrp_myobject_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, + import_key varchar(14) -- import key +) ENGINE=innodb; + From ccd9da99f45dc9a15c6e2223c7f5d7ca32921d63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 15 Oct 2019 20:11:15 +0200 Subject: [PATCH 322/980] Update list.php --- htdocs/comm/action/list.php | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index efb11a7e22b..65f593e26a0 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -21,7 +21,7 @@ */ /** - * \file htdocs/comm/action/list.php + * \file htdocs/comm/action/list.php * \ingroup agenda * \brief Page to list actions */ @@ -239,7 +239,7 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; $sql = "SELECT"; if ($usergroup > 0) $sql.=" DISTINCT"; $sql.= " s.nom as societe, s.rowid as socid, s.client, s.email as socemail,"; -$sql.= " a.id, a.label, a.note, a.datep as dp, a.datep2 as dp2,"; +$sql.= " a.id, a.label, a.note, a.datep as dp, a.datep2 as dp2, a.fulldayevent, a.location,"; $sql.= ' a.fk_user_author,a.fk_user_action,'; $sql.= " a.fk_contact, a.note, a.percent as percent,"; $sql.= " a.fk_element, a.elementtype, a.datec, a.tms as datem,"; @@ -286,14 +286,14 @@ if (! empty($actioncode)) elseif ($actioncode == 'AC_ALL_AUTO') $sql.= " AND c.type = 'systemauto'"; else { - if (is_array($actioncode)) - { - $sql.=" AND c.code IN ('".implode("','", $actioncode)."')"; - } - else - { - $sql.=" AND c.code IN ('".implode("','", explode(',', $actioncode))."')"; - } + if (is_array($actioncode)) + { + $sql.=" AND c.code IN ('".implode("','", $actioncode)."')"; + } + else + { + $sql.=" AND c.code IN ('".implode("','", explode(',', $actioncode))."')"; + } } } } @@ -460,7 +460,7 @@ if ($resql) print $form->selectDate($datestart, 'datestart', 0, 0, 1, '', 1, 0); print '
'; print $form->selectDate($dateend, 'dateend', 0, 0, 1, '', 1, 0); print '
'; - print dol_print_date($db->jdate($obj->dp), "dayhour"); + print dol_print_date($db->jdate($obj->dp), $formatToUse); $late=0; if ($obj->percent == 0 && $obj->dp && $db->jdate($obj->dp) < ($now - $delay_warning)) $late=1; if ($obj->percent == 0 && ! $obj->dp && $obj->dp2 && $db->jdate($obj->dp) < ($now - $delay_warning)) $late=1; @@ -626,7 +627,7 @@ if ($resql) // End date if (! empty($arrayfields['a.datep2']['checked'])) { print ''; - print dol_print_date($db->jdate($obj->dp2), "dayhour"); + print dol_print_date($db->jdate($obj->dp2), $formatToUse); print '
'; + print ''; if ($massactionbutton || $massaction) // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined { $selected=0; diff --git a/htdocs/mrp/mo_list.php b/htdocs/mrp/mo_list.php index 891ad76eaf8..2f32058a41f 100644 --- a/htdocs/mrp/mo_list.php +++ b/htdocs/mrp/mo_list.php @@ -42,20 +42,7 @@ //if (! defined("XFRAMEOPTIONS_ALLOWALL")) define('XFRAMEOPTIONS_ALLOWALL',1); // Do not add the HTTP header 'X-Frame-Options: SAMEORIGIN' but 'X-Frame-Options: ALLOWALL' // Load Dolibarr environment -$res=0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1; -while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; } -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php"; -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php"; -// Try main.inc.php using relative path -if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php"; -if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php"; -if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php"; -if (! $res) die("Include of main fails"); - +require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; @@ -409,11 +396,11 @@ foreach($object->fields as $key => $val) if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; - elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price'))) $cssforfield.=($cssforfield?' ':'').'right'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $val['label'] != 'TechnicalID') $cssforfield.=($cssforfield?' ':'').'right'; if (! empty($arrayfields['t.'.$key]['checked'])) { print ''; - if (is_array($val['arrayofkeyval'])) print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 0, 0, 0, '', 'maxwidth75'); + if (is_array($val['arrayofkeyval'])) print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth75'); else print ''; print '
'; + print ''; if ($massactionbutton || $massaction) // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined { $selected=0; @@ -484,7 +478,7 @@ while ($i < min($num, $limit)) print '
'."\n"; - - // Fields title search - print ''; - - print ''; - - print ''; - - print ''; - - // Extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; - - print ''; - - print ''; - - print ''; - - print ''; - print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "e.ref", "", $param, "", $sortfield, $sortorder); - print_liste_field_titre("LocationSummary", $_SERVER["PHP_SELF"], "e.lieu", "", $param, "", $sortfield, $sortorder); - print_liste_field_titre("PhysicalStock", $_SERVER["PHP_SELF"], "stockqty", '', $param, '', $sortfield, $sortorder, 'right '); - print_liste_field_titre("EstimatedStockValue", $_SERVER["PHP_SELF"], "estimatedvalue", '', $param, '', $sortfield, $sortorder, 'right '); - print_liste_field_titre("EstimatedStockValueSell", $_SERVER["PHP_SELF"], "", '', $param, '', $sortfield, $sortorder, 'right '); - // Extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; - print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "e.statut", '', $param, '', $sortfield, $sortorder, 'right '); - print_liste_field_titre('', $_SERVER["PHP_SELF"], "", '', $param, '', $sortfield, $sortorder, 'maxwidthsearch '); - print "\n"; - - if ($num) - { - $warehouse=new Entrepot($db); - $var=false; - $totalarray=array(); - while ($i < min($num, $limit)) - { - $obj = $db->fetch_object($result); - - $warehouse->id = $obj->rowid; - $warehouse->ref = $obj->ref; - $warehouse->label = $obj->ref; - $warehouse->lieu = $obj->lieu; - $warehouse->fk_parent = $obj->fk_parent; - $warehouse->statut = $obj->statut; - - print ''; - print ''; - if (! $i) $totalarray['nbfield']++; - // Location - print ''; - if (! $i) $totalarray['nbfield']++; - - // Stock qty - print ''; - if (! $i) $totalarray['nbfield']++; - - // PMP value - print ''; - if (! $i) $totalarray['nbfield']++; - - // Selling value - print ''; - if (! $i) $totalarray['nbfield']++; - - // Extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; - - // Status - print ''; - if (! $i) $totalarray['nbfield']++; - - print ''; - if (! $i) $totalarray['nbfield']++; - - print "\n"; - - - $i++; - } - - if ($totalnboflines-$offset <= $limit) - { - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print "\n"; - } - } - - $db->free($result); - - print "
'; - print ''; - print ''; - print ''; - print ''; - print ''; - print $form->selectarray('search_status', $warehouse->statuts, $search_status, 1, 0, 0, '', 1); - print ''; - $searchpicto=$form->showFilterAndCheckAddButtons(0); - print $searchpicto; - print '
' . $warehouse->getNomUrl(1) . ''.$obj->lieu.''.price2num($obj->stockqty, 5).''; - if (price2num($obj->estimatedvalue, 'MT')) print price(price2num($obj->estimatedvalue, 'MT'), 1); - else print ''; - print ''; - if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($obj->sellvalue, 'MT'), 1); - else - { - $htmltext=$langs->trans("OptionMULTIPRICESIsOn"); - print $form->textwithtooltip($langs->trans("Variable"), $htmltext); - } - print ''.$warehouse->LibStatut($obj->statut, 5).'
'.$langs->trans("Total").''.price2num($totalStock, 5).''.price(price2num($total, 'MT'), 1, $langs, 0, 0, -1, $conf->currency).''; - if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($totalsell, 'MT'), 1, $langs, 0, 0, -1, $conf->currency); - else - { - $htmltext=$langs->trans("OptionMULTIPRICESIsOn"); - print $form->textwithtooltip($langs->trans("Variable"), $htmltext); - } - print '
"; - print "
"; - - print ''; +} +// if total of record found is smaller than limit, no need to do paging and to restart another select with limits set. +if (is_numeric($nbtotalofrecords) && $limit > $nbtotalofrecords) +{ + $num = $nbtotalofrecords; } else { - dol_print_error($db); + $sql.= $db->plimit($limit+1, $offset); + + $resql=$db->query($sql); + if (! $resql) + { + dol_print_error($db); + exit; + } + + $num = $db->num_rows($resql); +} + +// Direct jump if only one record found +if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all) +{ + $obj = $db->fetch_object($resql); + $id = $obj->rowid; + header("Location: ".DOL_URL_ROOT.'/product/stock/card.php?id='.$id); + exit; +} + + +// Output page +// -------------------------------------------------------------------- + +llxHeader('', $title, $help_url); + +$arrayofselected=is_array($toselect)?$toselect:array(); + +$param=''; +if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); +if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); +if ($search_ref) $param.="&search_ref=".urlencode($search_ref); +if ($search_label) $param.="&search_label=".urlencode($search_label); +if ($search_status) $param.="&search_status=".urlencode($search_status); +if ($search_all) $param.="&search_all=".urlencode($search_all); +if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); +// Add $param from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; + +// List of mass actions available +$arrayofmassactions = array( + //'presend'=>$langs->trans("SendByMail"), + //'builddoc'=>$langs->trans("PDFMerge"), +); +//if ($user->rights->stock->supprimer) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); +if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array(); +$massactionbutton=$form->selectMassAction('', $arrayofmassactions); + +print '
'; +if ($optioncss != '') print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +$newcardbutton = dolGetButtonTitle($langs->trans('MenuNewWarehouse'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/product/stock/card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $user->rights->stock->creer); + +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'generic', 0, $newcardbutton, '', $limit); + +// Add code for pre mass action (confirmation or email presend form) +$topicmail="Information"; +$modelmail="warehouse"; +$objecttmp=new Entrepot($db); +$trackid='ware'.$object->id; +include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; + + +if ($search_all) +{ + foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); + print '
'.$langs->trans("FilterOnInto", $sall) . join(', ', $fieldstosearchall).'
'; +} + +$moreforfilter = ''; +/*$moreforfilter.='
'; + $moreforfilter.= $langs->trans('MyFilter') . ': '; + $moreforfilter.= '
';*/ + +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook +if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint; +else $moreforfilter = $hookmanager->resPrint; + +if (! empty($moreforfilter)) +{ + print '
'; + print $moreforfilter; + print '
'; +} + +$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; +$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields.=(count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); + +print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table +print ''."\n"; + +// Fields title search +// -------------------------------------------------------------------- +print ''; + +print ''; + +print ''; + +print ''; +print ''; +print ''; + +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; +// Fields from hook +$parameters=array('arrayfields'=>$arrayfields); +$reshook=$hookmanager->executeHooks('printFieldListOption', $parameters, $object); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; + +// Status +print ''; + +// Action column +print ''; +print ''."\n"; + +// Fields title label +// -------------------------------------------------------------------- +print ''; +print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "e.ref", "", $param, "", $sortfield, $sortorder); +print_liste_field_titre("LocationSummary", $_SERVER["PHP_SELF"], "e.lieu", "", $param, "", $sortfield, $sortorder); +print_liste_field_titre("PhysicalStock", $_SERVER["PHP_SELF"], "stockqty", '', $param, '', $sortfield, $sortorder, 'right '); +print_liste_field_titre("EstimatedStockValue", $_SERVER["PHP_SELF"], "estimatedvalue", '', $param, '', $sortfield, $sortorder, 'right '); +print_liste_field_titre("EstimatedStockValueSell", $_SERVER["PHP_SELF"], "", '', $param, '', $sortfield, $sortorder, 'right '); +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; +// Hook fields +$parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder); +$reshook=$hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; +print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "e.statut", '', $param, '', $sortfield, $sortorder, 'right '); +// Action column +print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n"; +print ''."\n"; + +// Loop on record +// -------------------------------------------------------------------- +$i=0; +$totalarray=array(); +if ($num) +{ + $warehouse=new Entrepot($db); + + $totalarray=array(); + while ($i < min($num, $limit)) + { + $obj = $db->fetch_object($resql); + if (empty($obj)) break; // Should not happen + + $warehouse->id = $obj->rowid; + $warehouse->ref = $obj->ref; + $warehouse->label = $obj->ref; + $warehouse->lieu = $obj->lieu; + $warehouse->fk_parent = $obj->fk_parent; + $warehouse->statut = $obj->statut; + + // Show here line of result + print ''; + print ''; + if (! $i) $totalarray['nbfield']++; + // Location + print ''; + if (! $i) $totalarray['nbfield']++; + + // Stock qty + print ''; + if (! $i) $totalarray['nbfield']++; + + // PMP value + print ''; + if (! $i) $totalarray['nbfield']++; + + // Selling value + print ''; + if (! $i) $totalarray['nbfield']++; + + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + + // Status + print ''; + if (! $i) $totalarray['nbfield']++; + + // Action column + print ''; + if (! $i) $totalarray['nbfield']++; + + print ''."\n"; + + + $i++; + } + + if ($totalnboflines-$offset <= $limit) + { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + } +} + +$db->free($resql); + +$parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$reshook=$hookmanager->executeHooks('printFieldListFooter', $parameters, $object); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; + +print '
'; +print ''; +print ''; +print ''; +print ''; +print $form->selectarray('search_status', $warehouse->statuts, $search_status, 1, 0, 0, '', 1); +print ''; +$searchpicto=$form->showFilterButtons(); +print $searchpicto; +print '
' . $warehouse->getNomUrl(1) . ''.$obj->lieu.''.price2num($obj->stockqty, 5).''; + if (price2num($obj->estimatedvalue, 'MT')) print price(price2num($obj->estimatedvalue, 'MT'), 1); + else print ''; + print ''; + if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($obj->sellvalue, 'MT'), 1); + else + { + $htmltext=$langs->trans("OptionMULTIPRICESIsOn"); + print $form->textwithtooltip($langs->trans("Variable"), $htmltext); + } + print ''.$warehouse->LibStatut($obj->statut, 5).''; + if ($massactionbutton || $massaction) // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + { + $selected=0; + if (in_array($obj->rowid, $arrayofselected)) $selected=1; + print ''; + } + print '
'.$langs->trans("Total").''.price2num($totalStock, 5).''.price(price2num($total, 'MT'), 1, $langs, 0, 0, -1, $conf->currency).''; + if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($totalsell, 'MT'), 1, $langs, 0, 0, -1, $conf->currency); + else + { + $htmltext=$langs->trans("OptionMULTIPRICESIsOn"); + print $form->textwithtooltip($langs->trans("Variable"), $htmltext); + } + print '
'."\n"; +print '
'."\n"; + +print '
'."\n"; + +if (in_array('builddoc', $arrayofmassactions) && ($nbtotalofrecords === '' || $nbtotalofrecords)) +{ + $hidegeneratedfilelistifempty=1; + if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) $hidegeneratedfilelistifempty=0; + + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; + $formfile = new FormFile($db); + + // Show list of available documents + $urlsource=$_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder; + $urlsource.=str_replace('&', '&', $param); + + $filedir=$diroutputmassaction; + $genallowed=$user->rights->mymodule->read; + $delallowed=$user->rights->mymodule->create; + + print $formfile->showdocuments('massfilesarea_mymodule', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty); } // End of page From e07e01580db7de0078259127ec3626ff881efa3e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 03:34:32 +0200 Subject: [PATCH 329/980] Replace deprecated code with new one --- htdocs/comm/action/list.php | 4 +++- htdocs/compta/bank/bankentries_list.php | 4 +++- htdocs/compta/bank/card.php | 2 +- htdocs/compta/bank/list.php | 11 ++++++++--- htdocs/contact/list.php | 4 +++- htdocs/contrat/list.php | 4 +++- htdocs/contrat/services_list.php | 4 +++- .../modules/stock/doc/pdf_stdmovement.modules.php | 5 ++++- htdocs/expedition/list.php | 4 +++- htdocs/fichinter/list.php | 4 +++- htdocs/fourn/commande/list.php | 4 +++- htdocs/fourn/facture/list.php | 4 +++- htdocs/product/stock/movement_card.php | 4 +++- htdocs/product/stock/movement_list.php | 4 +++- htdocs/projet/list.php | 6 ++++-- htdocs/projet/tasks/list.php | 4 +++- htdocs/reception/list.php | 4 +++- htdocs/societe/list.php | 4 +++- htdocs/supplier_proposal/list.php | 4 +++- htdocs/user/list.php | 4 +++- 20 files changed, 65 insertions(+), 23 deletions(-) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index efb11a7e22b..38ce916aeee 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -247,7 +247,9 @@ $sql.= " c.code as type_code, c.libelle as type_label,"; $sql.= " sp.lastname, sp.firstname, sp.email, sp.phone, sp.address, sp.phone as phone_pro, sp.phone_mobile, sp.phone_perso, sp.fk_pays as country_id"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 1b0f7feffe4..7f43b24763a 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -473,7 +473,9 @@ $sql.= " ba.rowid as bankid, ba.ref as bankref,"; $sql.= " bu.url_id,"; $sql.= " s.nom, s.name_alias, s.client, s.fournisseur, s.email, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php index fd5a2b42723..ac32ce98c30 100644 --- a/htdocs/compta/bank/card.php +++ b/htdocs/compta/bank/card.php @@ -627,7 +627,7 @@ else $conciliate=$object->canBeConciliated(); if ($conciliate == -2) print $langs->trans("No").' ('.$langs->trans("CashAccount").')'; elseif ($conciliate == -3) print $langs->trans("No").' ('.$langs->trans("Closed").')'; - else print ($object->rappro==1 ? $langs->trans("Yes") : ($langs->trans("No").' ('.$langs->trans("ConciliationDisabled").')')); + else print ($object->rappro==1 ? $langs->trans("Yes") : ($langs->trans("No").' ('.$langs->trans("ConciliationDisabled").')')); print ''; print ''.$langs->trans("BalanceMinimalAllowed").''; diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php index 8f87d6f7151..6a143d4a8d1 100644 --- a/htdocs/compta/bank/list.php +++ b/htdocs/compta/bank/list.php @@ -73,7 +73,7 @@ $hookmanager->initHooks(array('bankaccountlist')); $extrafields = new ExtraFields($db); // fetch optionals attributes and labels -$extrafields->fetch_name_optionals_label('bank_account'); +$extrafields->fetch_name_optionals_label($object->table_element); $search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); // List of fields to search into when doing a "search in all" @@ -144,7 +144,9 @@ $accounts = array(); $sql = "SELECT b.rowid, b.label, b.courant, b.rappro, b.account_number, b.fk_accountancy_journal, b.currency_code, b.datec as date_creation, b.tms as date_update"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook @@ -514,7 +516,10 @@ foreach ($accounts as $key=>$type) } } } - else print $langs->trans("FeatureDisabled"); + else + { + print ''.$langs->trans("FeatureDisabled").''; + } print ''; if (! $i) $totalarray['nbfield']++; } diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 1eed9497619..9f3dc206447 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -276,7 +276,9 @@ $sql.= " p.rowid, p.lastname as lastname, p.statut, p.firstname, p.zip, p.town, $sql.= " p.phone as phone_pro, p.phone_mobile, p.phone_perso, p.fax, p.fk_pays, p.priv, p.datec as date_creation, p.tms as date_update,"; $sql.= " co.code as country_code"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/contrat/list.php b/htdocs/contrat/list.php index fc110d4a396..0fd27d29826 100644 --- a/htdocs/contrat/list.php +++ b/htdocs/contrat/list.php @@ -218,7 +218,9 @@ $sql.= ' SUM('.$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NOT NULL AND $sql.= ' SUM('.$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NOT NULL AND cd.date_fin_validite < '".$db->idate($now - $conf->contrat->services->expires->warning_delay)."')", 1, 0).') as nb_late,'; $sql.= ' SUM('.$db->ifsql("cd.statut=5", 1, 0).') as nb_closed'; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/contrat/services_list.php b/htdocs/contrat/services_list.php index 3e5b9f55c98..fac71516e99 100644 --- a/htdocs/contrat/services_list.php +++ b/htdocs/contrat/services_list.php @@ -219,7 +219,9 @@ $sql.= " cd.subprice,"; //$sql.= " cd.date_c as date_creation,"; $sql.= " cd.tms as date_update"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php b/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php index 2a5f797147e..3ed4ff7e813 100644 --- a/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php +++ b/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php @@ -253,6 +253,7 @@ class pdf_stdmovement extends ModelePDFMovement $warehousestatic=new Entrepot($db); $movement=new MouvementStock($db); $userstatic=new User($db); + $element = 'movement'; $sql = "SELECT p.rowid, p.ref as product_ref, p.label as produit, p.tobatch, p.fk_product_type as type, p.entity,"; $sql.= " e.ref as stock, e.rowid as entrepot_id, e.lieu,"; @@ -262,7 +263,9 @@ class pdf_stdmovement extends ModelePDFMovement $sql.= " pl.rowid as lotid, pl.eatby, pl.sellby,"; $sql.= " u.login, u.photo, u.lastname, u.firstname"; // Add fields from extrafields - foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); + if (! empty($extrafields->attributes[$element]['label'])) { + foreach ($extrafields->attributes[$element]['label'] as $key => $val) $sql.=($extrafields->attributes[$element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); + } // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/expedition/list.php b/htdocs/expedition/list.php index ebe0bcfd8df..1840569fd0e 100644 --- a/htdocs/expedition/list.php +++ b/htdocs/expedition/list.php @@ -192,7 +192,9 @@ $sql.= " typent.code as typent_code,"; $sql.= " state.code_departement as state_code, state.nom as state_name,"; $sql.= ' e.date_creation as date_creation, e.tms as date_update'; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/fichinter/list.php b/htdocs/fichinter/list.php index 7160eb8152c..7df7eac69b0 100644 --- a/htdocs/fichinter/list.php +++ b/htdocs/fichinter/list.php @@ -209,7 +209,9 @@ if (!empty($conf->contrat->enabled)) { $sql .= ", c.rowid as contrat_id, c.ref as contrat_ref, c.ref_customer as contrat_ref_supplier, c.ref_supplier as contrat_ref_supplier"; } // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 6410f2c9e57..1b1cf0c9b6d 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -492,7 +492,9 @@ $sql.= ' cf.date_creation as date_creation, cf.tms as date_update,'; $sql.= " p.rowid as project_id, p.ref as project_ref, p.title as project_title,"; $sql.= " u.firstname, u.lastname, u.photo, u.login, u.email as user_email"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index 862e4d6ece5..4bd6059df3e 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -277,7 +277,9 @@ $sql.= " p.rowid as project_id, p.ref as project_ref, p.title as project_label"; // TODO Better solution to be able to sort on already payed or remain to pay is to store amount_payed in a denormalized field. if (! $search_all) $sql.= ', SUM(pf.amount) as dynamount_payed'; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/product/stock/movement_card.php b/htdocs/product/stock/movement_card.php index 0278e1572e6..c08fc8078a8 100644 --- a/htdocs/product/stock/movement_card.php +++ b/htdocs/product/stock/movement_card.php @@ -451,7 +451,9 @@ $sql.= " m.type_mouvement,"; $sql.= " pl.rowid as lotid, pl.eatby, pl.sellby,"; $sql.= " u.login, u.photo, u.lastname, u.firstname"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index 73b783e09b9..a4831d46844 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -429,7 +429,9 @@ $sql.= " m.fk_projet,"; $sql.= " pl.rowid as lotid, pl.eatby, pl.sellby,"; $sql.= " u.login, u.photo, u.lastname, u.firstname"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index 59d727c5027..9a5514ff1cc 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -293,8 +293,10 @@ $sql.= ", s.rowid as socid, s.nom as name, s.email"; $sql.= ", cls.code as opp_status_code"; // We'll need these fields in order to filter by categ if ($search_categ) $sql .= ", cs.fk_categorie, cs.fk_project"; -// Add fields for extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +// 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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php index 00ef201aa9f..e13b7092b26 100644 --- a/htdocs/projet/tasks/list.php +++ b/htdocs/projet/tasks/list.php @@ -271,7 +271,9 @@ if (! empty($arrayfields['t.tobill']['checked']) || ! empty($arrayfields['t.bill $sql.=" , SUM(tt.task_duration * ".$db->ifsql("invoice_id IS NULL", "1", "0").") as tobill, SUM(tt.task_duration * ".$db->ifsql("invoice_id IS NULL", "0", "1").") as billed"; } // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/reception/list.php b/htdocs/reception/list.php index 65fdf153dd4..7978f7eaab3 100644 --- a/htdocs/reception/list.php +++ b/htdocs/reception/list.php @@ -427,7 +427,9 @@ $sql.= " typent.code as typent_code,"; $sql.= " state.code_departement as state_code, state.nom as state_name,"; $sql.= ' e.date_creation as date_creation, e.tms as date_update'; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index e29edb07717..7420c417aae 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -388,7 +388,9 @@ if ($search_sale) $sql .= ", sc.fk_soc, sc.fk_user"; if ($search_categ_cus) $sql .= ", cc.fk_categorie, cc.fk_soc"; if ($search_categ_sup) $sql .= ", cs.fk_categorie, cs.fk_soc"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index f36013b289c..687d98911f2 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -250,7 +250,9 @@ $sql.= " p.rowid as project_id, p.ref as project_ref,"; if (! $user->rights->societe->client->voir && ! $socid) $sql .= " sc.fk_soc, sc.fk_user,"; $sql.= " u.firstname, u.lastname, u.photo, u.login"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/user/list.php b/htdocs/user/list.php index d65d852294f..5520465a75d 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -198,7 +198,9 @@ $sql.= " u.tms as date_update, u.datec as date_creation,"; $sql.= " u2.rowid as id2, u2.login as login2, u2.firstname as firstname2, u2.lastname as lastname2, u2.admin as admin2, u2.fk_soc as fk_soc2, u2.email as email2, u2.gender as gender2, u2.photo as photo2, u2.entity as entity2,"; $sql.= " s.nom as name, s.canvas"; // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : ''); +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook From 42d8f276fca2425ea2873c52aa937964c25d58b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 16 Oct 2019 08:17:13 +0200 Subject: [PATCH 330/980] Update mo.class.php --- htdocs/mrp/class/mo.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/mrp/class/mo.class.php b/htdocs/mrp/class/mo.class.php index d485ec0ef16..a459a582bba 100644 --- a/htdocs/mrp/class/mo.class.php +++ b/htdocs/mrp/class/mo.class.php @@ -1,4 +1,3 @@ - * Copyright (C) ---Put here your own copyright and developer email--- From 4bb16770796b07b197c8e1dcdd6fe5a44efd7340 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 16 Oct 2019 10:39:35 +0200 Subject: [PATCH 331/980] Fix - Accountancy - Various payment - Subledger is not recovered in bank journal --- htdocs/accountancy/journal/bankjournal.php | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 8003cf1c523..a532379c358 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -4,12 +4,12 @@ * Copyright (C) 2011 Juanjo Menent * Copyright (C) 2012 Regis Houssin * Copyright (C) 2013 Christophe Battarel - * Copyright (C) 2013-2018 Alexandre Spangaro + * Copyright (C) 2013-2019 Alexandre Spangaro * Copyright (C) 2013-2014 Florian Henry * Copyright (C) 2013-2014 Olivier Geffroy * Copyright (C) 2017-2018 Frédéric France - * Copyright (C) 2018 Ferran Marcet - * Copyright (C) 2018 Eric Seigne + * Copyright (C) 2018 Ferran Marcet + * Copyright (C) 2018 Eric Seigne * * 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 @@ -387,7 +387,9 @@ if ($result) { $tabpay[$obj->rowid]["paymentvariousid"] = $paymentvariousstatic->id; $paymentvariousstatic->fetch($paymentvariousstatic->id); $account_various = (! empty($paymentvariousstatic->accountancy_code) ? $paymentvariousstatic->accountancy_code : 'NotDefined'); // NotDefined is a reserved word - $tabtp[$obj->rowid][$account_various] += $obj->amount; + $account_subledger = (! empty($paymentvariousstatic->subledger_account) ? $paymentvariousstatic->subledger_account : ''); // NotDefined is a reserved word + $tabpay[$obj->rowid]["account_various"] = $account_various; + $tabtp[$obj->rowid][$account_subledger] += $obj->amount; } elseif ($links[$key]['type'] == 'payment_loan') { $paymentloanstatic->id = $links[$key]['url_id']; $paymentloanstatic->ref = $links[$key]['url_id']; @@ -660,11 +662,11 @@ if (! $error && $action == 'writebookkeeping') { $accountingaccount->fetch(null, $k, true); $bookkeeping->label_compte = $accountingaccount->label; } elseif ($tabtype[$key] == 'payment_various') { - $bookkeeping->subledger_account = ''; - $bookkeeping->subledger_label = ''; - $bookkeeping->numero_compte = $k; + $bookkeeping->subledger_account = $k; + $bookkeeping->subledger_label = $tabcompany[$key]['name']; + $bookkeeping->numero_compte = $tabpay[$obj->rowid]["account_various"]; - $accountingaccount->fetch(null, $k, true); + $accountingaccount->fetch(null, $bookkeeping->numero_compte, true); $bookkeeping->label_compte = $accountingaccount->label; } elseif ($tabtype[$key] == 'banktransfert') { $bookkeeping->subledger_account = ''; @@ -1123,6 +1125,7 @@ if (empty($action) || $action == 'view') { if ($tabtype[$key] == 'payment_salary') $account_ledger = $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT; if ($tabtype[$key] == 'payment_vat') $account_ledger = $conf->global->ACCOUNTING_VAT_PAY_ACCOUNT; if ($tabtype[$key] == 'member') $account_ledger = $conf->global->ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT; + if ($tabtype[$key] == 'payment_various') $account_ledger = $tabpay[$key]["account_various"]; $accounttoshow = length_accounta($account_ledger); if (empty($accounttoshow) || $accounttoshow == 'NotDefined') { @@ -1156,7 +1159,7 @@ if (empty($action) || $action == 'view') { // Subledger account print ""; - if (in_array($tabtype[$key], array('payment', 'payment_supplier', 'payment_expensereport', 'payment_salary'))) // Type of payment with subledger + if (in_array($tabtype[$key], array('payment', 'payment_supplier', 'payment_expensereport', 'payment_salary', 'payment_various'))) // Type of payment with subledger { $accounttoshowsubledger = length_accounta($k); if ($accounttoshow != $accounttoshowsubledger) From 5a1682509beb97483b41431dde8f1873d85d4a29 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Wed, 16 Oct 2019 11:11:34 +0200 Subject: [PATCH 332/980] FIX It is not possible to create an expedition if there is no unit data --- htdocs/expedition/class/expedition.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 915177164ac..1a9a249effc 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -325,8 +325,8 @@ class Expedition extends CommonObject $sql.= ", ".$this->sizeS; // TODO Should use this->trueDepth $sql.= ", ".$this->sizeW; // TODO Should use this->trueWidth $sql.= ", ".$this->sizeH; // TODO Should use this->trueHeight - $sql.= ", ".$this->weight_units; - $sql.= ", ".$this->size_units; + $sql.= ", ".($this->weight_units>0?$this->weight_units:'NULL'); + $sql.= ", ".($this->size_units>0?$this->size_units:'NULL'); $sql.= ", ".(!empty($this->note_private)?"'".$this->db->escape($this->note_private)."'":"null"); $sql.= ", ".(!empty($this->note_public)?"'".$this->db->escape($this->note_public)."'":"null"); $sql.= ", ".(!empty($this->model_pdf)?"'".$this->db->escape($this->model_pdf)."'":"null"); From 517fcf45d144c6c3ce1639432fd04a6a46967ac3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 11:23:06 +0200 Subject: [PATCH 333/980] Look and feel v11 --- htdocs/modulebuilder/index.php | 39 +++++++++++++++++++++++++++++++++- htdocs/societe/card.php | 18 ++++++++-------- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 5cd32512713..0f5ab5e2c90 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -537,6 +537,26 @@ if ($dirins && $action == 'initobject' && $module && GETPOST('createtablearray', } else { + /** + * 'type' if the field format ('integer', 'integer:Class:pathtoclass', 'varchar(x)', 'double(24,8)', 'text', 'html', 'datetime', 'timestamp', 'float') + * '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) + * '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) + * '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. + * 'showoncombobox' if value of the field must be visible into the label of the combobox that list record + * 'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel") + */ + /*public $fields=array( 'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'index'=>1, 'position'=>1, 'comment'=>'Id'), 'ref' =>array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'), @@ -562,14 +582,31 @@ if ($dirins && $action == 'initobject' && $module && GETPOST('createtablearray', $i=10; while ($obj = $db->fetch_object($_results)) { + // fieldname $fieldname = $obj->Field; + // type $type = $obj->Type; if ($type == 'int(11)') $type='integer'; + // notnull $notnull = ($obj->Null == 'YES'?0:1); + // label $label = preg_replace('/_/', ' ', ucfirst($fieldname)); if ($fieldname == 'rowid') $label='ID'; + if ($fieldname == 'import_key') $label='ImportKey'; + // visible + $visible = -1; + if ($fieldname == 'entity') $visible = -2; + if ($fieldname == 'model_pdf') $visible = 0; + // enabled + $enabled = 1; + // default + $default = ''; + if ($fieldname == 'entity') $default=1; - $string.= "'".$obj->Field."' =>array('type'=>'".$type."', 'label'=>'".$label."', 'enabled'=>1, 'visible'=>-2"; + $string.= "'".$obj->Field."' =>array('type'=>'".$type."', 'label'=>'".$label."',"; + if ($default != '') $string.= " 'default'=>".$default.","; + $string.= " 'enabled'=>".$enabled.","; + $string.= " 'visible'=>".$visible; if ($notnull) $string.= ", 'notnull'=>".$notnull; if ($fieldname == 'ref') $string.= ", 'showoncombobox'=>1"; $string.= ", 'position'=>".$i."),\n"; diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index e2a8f731856..344fa76fa8d 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -1293,9 +1293,9 @@ else } // Email / Web - print ''.$form->editfieldkey('EMail', 'email', '', $object, 0, 'string', '', $conf->global->SOCIETE_EMAIL_MANDATORY).''; + print ''.img_picto('', 'object_email').' '.$form->editfieldkey('EMail', 'email', '', $object, 0, 'string', '', $conf->global->SOCIETE_EMAIL_MANDATORY).''; print ''; - print ''.$form->editfieldkey('Web', 'url', '', $object, 0).''; + print ''.img_picto('', 'globe').' '.$form->editfieldkey('Web', 'url', '', $object, 0).''; print ''; if (! empty($conf->socialnetworks->enabled)) @@ -1335,9 +1335,9 @@ else } // Phone / Fax - print ''.$form->editfieldkey('Phone', 'phone', '', $object, 0).''; + print ''.img_picto('', 'object_phoning').' '.$form->editfieldkey('Phone', 'phone', '', $object, 0).''; print ''; - print ''.$form->editfieldkey('Fax', 'fax', '', $object, 0).''; + print ''.img_picto('', 'object_phoning_fax').' '.$form->editfieldkey('Fax', 'fax', '', $object, 0).''; print ''; // Prof ids @@ -1916,9 +1916,9 @@ else } // EMail / Web - print ''.$form->editfieldkey('EMail', 'email', '', $object, 0, 'string', '', (! empty($conf->global->SOCIETE_EMAIL_MANDATORY))).''; + print ''.img_picto('', 'object_email').' '.$form->editfieldkey('EMail', 'email', GETPOST('email','alpha'), $object, 0, 'string', '', (! empty($conf->global->SOCIETE_EMAIL_MANDATORY))).''; print ''; - print ''.$form->editfieldkey('Web', 'url', '', $object, 0).''; + print ''.img_picto('', 'globe').' '.$form->editfieldkey('Web', 'url', GETPOST('url','alpha'), $object, 0).''; print ''; if (! empty($conf->socialnetworks->enabled)) @@ -1950,9 +1950,9 @@ else } // Phone / Fax - print ''.$form->editfieldkey('Phone', 'phone', '', $object, 0).''; + print ''.img_picto('', 'object_phoning').' '.$form->editfieldkey('Phone', 'phone', GETPOST('phone', 'alpha'), $object, 0).''; print ''; - print ''.$form->editfieldkey('Fax', 'fax', '', $object, 0).''; + print ''.img_picto('', 'object_phoning_fax').' '.$form->editfieldkey('Fax', 'fax', GETPOST('fax', 'alpha'), $object, 0).''; print ''; // Prof ids @@ -2666,7 +2666,7 @@ else { print ''."\n"; } - + if (! empty($conf->adherent->enabled)) { $adh = new Adherent($db); From 6d05d42c50178f035e07c4342711c7773ca47cb9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 11:26:20 +0200 Subject: [PATCH 334/980] Look and feel v11 --- 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 7bda225978f..b3140c7e051 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -2220,7 +2220,7 @@ function dol_print_socialnetworks($value, $cid, $socid, $type) if (! empty($type)) { $newskype ='
'; - $newskype.=img_picto($langs->trans(strtoupper($type)), $type.'.png', '', false, 0, 0, '', 'paddingright'); + $newskype.=img_picto($langs->trans(strtoupper($type)), $type.'.png', '', false, 0, 0, '', 'paddingright', 0); $newskype.=$value; if ($type == 'skype') { From 8d4960954902e7997009d228abf9958ee674fc4d Mon Sep 17 00:00:00 2001 From: Norbert Penel Date: Wed, 16 Oct 2019 12:28:50 +0200 Subject: [PATCH 335/980] Fix user time instead of server time it seems that we want to use a user time by clicking on now button. IDEA : may i use client time ??? because if page is old, the now button insert an old time. --- htdocs/core/class/html.form.class.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index d9442e43457..19c01f151cf 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5607,10 +5607,10 @@ class Form $reset_scripts = ""; // Generate the date part, depending on the use or not of the javascript calendar - $reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(\''.dol_print_date(dol_now(), 'day').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(\''.dol_print_date(dol_now(), '%d').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(\''.dol_print_date(dol_now(), '%m').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(\''.dol_print_date(dol_now(), '%Y').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(\''.dol_print_date(dol_now(), 'day','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(\''.dol_print_date(dol_now(), '%d','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(\''.dol_print_date(dol_now(), '%m','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(\''.dol_print_date(dol_now(), '%Y','tzuser').'\');'; /*if ($usecalendar == "eldy") { $base=DOL_URL_ROOT.'/core/'; @@ -5627,7 +5627,7 @@ class Form { if ($fullday) $reset_scripts .= " if (jQuery('#fullday:checked').val() == null) {"; //$reset_scripts .= 'this.form.elements[\''.$prefix.'hour\'].value=formatDate(new Date(), \'HH\'); '; - $reset_scripts .= 'jQuery(\'#'.$prefix.'hour\').val(\''.dol_print_date(dol_now(), '%H').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'hour\').val(\''.dol_print_date(dol_now(), '%H','tzuser').'\');'; if ($fullday) $reset_scripts .= ' } '; } // Update the minute part @@ -5635,7 +5635,7 @@ class Form { if ($fullday) $reset_scripts .= " if (jQuery('#fullday:checked').val() == null) {"; //$reset_scripts .= 'this.form.elements[\''.$prefix.'min\'].value=formatDate(new Date(), \'mm\'); '; - $reset_scripts .= 'jQuery(\'#'.$prefix.'min\').val(\''.dol_print_date(dol_now(), '%M').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'min\').val(\''.dol_print_date(dol_now(), '%M','tzuser').'\');'; if ($fullday) $reset_scripts .= ' } '; } // If reset_scripts is not empty, print the link with the reset_scripts in the onClick From e1521b6c7d28efe5fa495197dcac79dfd7024584 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 12:31:44 +0200 Subject: [PATCH 336/980] Fix phpcs --- htdocs/societe/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 344fa76fa8d..e855cb71b8c 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -1916,9 +1916,9 @@ else } // EMail / Web - print ''.img_picto('', 'object_email').' '.$form->editfieldkey('EMail', 'email', GETPOST('email','alpha'), $object, 0, 'string', '', (! empty($conf->global->SOCIETE_EMAIL_MANDATORY))).''; + print ''.img_picto('', 'object_email').' '.$form->editfieldkey('EMail', 'email', GETPOST('email', 'alpha'), $object, 0, 'string', '', (! empty($conf->global->SOCIETE_EMAIL_MANDATORY))).''; print ''; - print ''.img_picto('', 'globe').' '.$form->editfieldkey('Web', 'url', GETPOST('url','alpha'), $object, 0).''; + print ''.img_picto('', 'globe').' '.$form->editfieldkey('Web', 'url', GETPOST('url', 'alpha'), $object, 0).''; print ''; if (! empty($conf->socialnetworks->enabled)) From a9e57fa2b27a8820331885ff0f453d6efd66672e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 12:32:26 +0200 Subject: [PATCH 337/980] Clean page --- htdocs/modulebuilder/index.php | 46 ++++++++++++++++------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 0f5ab5e2c90..2e22e9fb23e 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -1615,7 +1615,7 @@ elseif (! empty($module)) print ''; print '
'; - print load_fiche_titre($langs->trans("DescriptorFile")); + print load_fiche_titre($langs->trans("DescriptorFile"), '', ''); if (! empty($moduleobj)) { @@ -1675,35 +1675,33 @@ elseif (! empty($module)) print ''; print ''; - - print '

'; - - // Readme file - print load_fiche_titre($langs->trans("ReadmeFile")); - - print '
'; - print '
'; - if (dol_is_file($dirread.'/'.$pathtofilereadme)) print $moduleobj->getDescLong(); - else print $langs->trans("ErrorFileNotFound", $pathtofilereadme); - - print '

'; - - // ChangeLog - print load_fiche_titre($langs->trans("ChangeLog")); - - print '
'; - print '
'; - - if (dol_is_file($dirread.'/'.$pathtochangelog)) print $moduleobj->getChangeLog(); - else print $langs->trans("ErrorFileNotFound", $pathtochangelog); - - print '
'; } else { print $langs->trans("ErrorFailedToLoadModuleDescriptorForXXX", $module).'
'; } + if (! empty($moduleobj)) + { + print '

'; + + // Readme file + print load_fiche_titre($langs->trans("ReadmeFile"), '', ''); + + print ''; + if (dol_is_file($dirread.'/'.$pathtofilereadme)) print '
'.$moduleobj->getDescLong().'
'; + else print ''.$langs->trans("ErrorFileNotFound", $pathtofilereadme).''; + + print '

'; + + // ChangeLog + print load_fiche_titre($langs->trans("ChangeLog"), '', ''); + + print ''; + if (dol_is_file($dirread.'/'.$pathtochangelog)) print '
'.$moduleobj->getChangeLog().'
'; + else print ''.$langs->trans("ErrorFileNotFound", $pathtochangelog).''; + } + dol_fiche_end(); } else From bba042c0c31ee10b662bf908996d1dc8aa1dd0e6 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Wed, 16 Oct 2019 10:34:47 +0000 Subject: [PATCH 338/980] Fixing style errors. --- htdocs/core/class/html.form.class.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 19c01f151cf..2130a7d7e38 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5607,10 +5607,10 @@ class Form $reset_scripts = ""; // Generate the date part, depending on the use or not of the javascript calendar - $reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(\''.dol_print_date(dol_now(), 'day','tzuser').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(\''.dol_print_date(dol_now(), '%d','tzuser').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(\''.dol_print_date(dol_now(), '%m','tzuser').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(\''.dol_print_date(dol_now(), '%Y','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(\''.dol_print_date(dol_now(), 'day', 'tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(\''.dol_print_date(dol_now(), '%d', 'tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(\''.dol_print_date(dol_now(), '%m', 'tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(\''.dol_print_date(dol_now(), '%Y', 'tzuser').'\');'; /*if ($usecalendar == "eldy") { $base=DOL_URL_ROOT.'/core/'; @@ -5627,7 +5627,7 @@ class Form { if ($fullday) $reset_scripts .= " if (jQuery('#fullday:checked').val() == null) {"; //$reset_scripts .= 'this.form.elements[\''.$prefix.'hour\'].value=formatDate(new Date(), \'HH\'); '; - $reset_scripts .= 'jQuery(\'#'.$prefix.'hour\').val(\''.dol_print_date(dol_now(), '%H','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'hour\').val(\''.dol_print_date(dol_now(), '%H', 'tzuser').'\');'; if ($fullday) $reset_scripts .= ' } '; } // Update the minute part @@ -5635,7 +5635,7 @@ class Form { if ($fullday) $reset_scripts .= " if (jQuery('#fullday:checked').val() == null) {"; //$reset_scripts .= 'this.form.elements[\''.$prefix.'min\'].value=formatDate(new Date(), \'mm\'); '; - $reset_scripts .= 'jQuery(\'#'.$prefix.'min\').val(\''.dol_print_date(dol_now(), '%M','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'min\').val(\''.dol_print_date(dol_now(), '%M', 'tzuser').'\');'; if ($fullday) $reset_scripts .= ' } '; } // If reset_scripts is not empty, print the link with the reset_scripts in the onClick From 9663205601233fa6fe812ce7d0ec3ce1ad656437 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 13:55:29 +0200 Subject: [PATCH 339/980] FIX css (some buttons not aligned) --- htdocs/theme/eldy/btn.inc.php | 3 ++- htdocs/theme/md/btn.inc.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/btn.inc.php b/htdocs/theme/eldy/btn.inc.php index a3a952925e3..a9b1a6708a3 100644 --- a/htdocs/theme/eldy/btn.inc.php +++ b/htdocs/theme/eldy/btn.inc.php @@ -11,7 +11,8 @@ if (! defined('ISLOADEDBYSTEELSHEET')) die('Must be call by steelsheet'); ?> div.divButAction { margin-bottom: 1.4em; } -div.tabsAction > a.butAction, div.tabsAction > a.butActionRefused { +div.tabsAction > a.butAction, div.tabsAction > a.butActionRefused, div.tabsAction > a.butActionDelete, +div.tabsAction > span.butAction, div.tabsAction > span.butActionRefused, div.tabsAction > span.butActionDelete { margin-bottom: 1.4em !important; } div.tabsActionNoBottom > a.butAction, div.tabsActionNoBottom > a.butActionRefused { diff --git a/htdocs/theme/md/btn.inc.php b/htdocs/theme/md/btn.inc.php index be897e8f841..51cdd1ce11b 100644 --- a/htdocs/theme/md/btn.inc.php +++ b/htdocs/theme/md/btn.inc.php @@ -13,7 +13,8 @@ div.divButAction { margin-bottom: 1.4em; vertical-align: top; } -div.tabsAction > a.butAction, div.tabsAction > a.butActionRefused { +div.tabsAction > a.butAction, div.tabsAction > a.butActionRefused, div.tabsAction > a.butActionDelete, +div.tabsAction > span.butAction, div.tabsAction > span.butActionRefused, div.tabsAction > span.butActionDelete { margin-bottom: 1.4em !important; } From 741627897ee2ff709dd59d68787dc60159a27161 Mon Sep 17 00:00:00 2001 From: Tobias Sekan Date: Wed, 16 Oct 2019 13:56:11 +0200 Subject: [PATCH 340/980] fix interchanged allocation --- htdocs/comm/action/class/actioncomm.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 1ce4dce01a0..42e77c898c3 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1553,7 +1553,7 @@ class ActionComm extends CommonObject else { // use start date as fall-back to avoid import erros on empty end date - $datestart = $dateend; + $dateend = $datestart; } $dateend=$this->db->jdate($obj->datep2)-(empty($conf->global->AGENDA_EXPORT_FIX_TZ)?0:($conf->global->AGENDA_EXPORT_FIX_TZ*3600)); From b9ec45fd49150c01951282b479e2a3b245ed947d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 14:02:13 +0200 Subject: [PATCH 341/980] Clean code --- htdocs/commande/card.php | 20 ++++---- htdocs/compta/facture/card.php | 84 +++++++++++++++++----------------- test/phpunit/FilesLibTest.php | 4 +- 3 files changed, 54 insertions(+), 54 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 0d13537037c..ea423a0a99c 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -2543,19 +2543,19 @@ if ($action == 'create' && $usercancreate) // Send if ($object->statut > Commande::STATUS_DRAFT || !empty($conf->global->COMMANDE_SENDBYEMAIL_FOR_ALL_STATUS)) { if ($usercansend) { - print ''; + print '' . $langs->trans('SendMail') . ''; } else - print ''; + print '' . $langs->trans('SendMail') . ''; } // Valid if ($object->statut == Commande::STATUS_DRAFT && $object->total_ttc >= 0 && $numlines > 0 && $usercanvalidate) { - print ''; + print '' . $langs->trans('Validate') . ''; } // Edit if ($object->statut == Commande::STATUS_VALIDATED && $usercancreate) { - print ''; + print '' . $langs->trans('Modify') . ''; } // Create event /*if ($conf->agenda->enabled && ! empty($conf->global->MAIN_ADD_EVENT_ON_ELEMENT_CARD)) @@ -2572,9 +2572,9 @@ if ($action == 'create' && $usercancreate) if ($object->statut > Commande::STATUS_DRAFT && $object->statut < Commande::STATUS_CLOSED && $object->getNbOfServicesLines() > 0) { if ($user->rights->ficheinter->creer) { - print ''; + print '' . $langs->trans('AddIntervention') . ''; } else { - print ''; + print '' . $langs->trans('AddIntervention') . ''; } } } @@ -2584,7 +2584,7 @@ if ($action == 'create' && $usercancreate) $langs->load("contracts"); if ($user->rights->contrat->creer) { - print ''; + print '' . $langs->trans('AddContract') . ''; } } @@ -2596,13 +2596,13 @@ if ($action == 'create' && $usercancreate) if ($object->statut > Commande::STATUS_DRAFT && $object->statut < Commande::STATUS_CLOSED && ($object->getNbOfProductsLines() > 0 || !empty($conf->global->STOCK_SUPPORTS_SERVICES))) { if (($conf->expedition_bon->enabled && $user->rights->expedition->creer) || ($conf->livraison_bon->enabled && $user->rights->expedition->livraison->creer)) { if ($user->rights->expedition->creer) { - print ''; + print '' . $langs->trans('CreateShipment') . ''; } else { - print ''; + print '' . $langs->trans('CreateShipment') . ''; } } else { $langs->load("errors"); - print ''; + print 'transnoentitiesnoconv("Shipment"))) . '">' . $langs->trans('CreateShipment') . ''; } } } diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 9467cebde59..2a08c55eeba 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4845,20 +4845,20 @@ elseif ($id > 0 || ! empty($ref)) { if ($usercanunvalidate) { - print ''; + print '' . $langs->trans('Modify') . ''; } else { - print '
' . $langs->trans('Modify') . '
'; + print '' . $langs->trans('Modify') . ''; } } elseif (!$object->is_last_in_cycle()) { - print '
' . $langs->trans('Modify') . '
'; + print '' . $langs->trans('Modify') . ''; } else { - print '
' . $langs->trans('Modify') . '
'; + print '' . $langs->trans('Modify') . ''; } } } else { - print '
' . $langs->trans('Modify') . '
'; + print '' . $langs->trans('Modify') . ''; } } @@ -4874,9 +4874,9 @@ elseif ($id > 0 || ! empty($ref)) { if ($object->close_code != 'replaced' || (! $objectidnext)) // Not replaced by another invoice or replaced but the replacement invoice has been deleted { - print ''; + print '' . $langs->trans('ReOpen') . ''; } else { - print '
' . $langs->trans('ReOpen') . '
'; + print '' . $langs->trans('ReOpen') . ''; } } @@ -4884,19 +4884,19 @@ elseif ($id > 0 || ! empty($ref)) if ($object->statut == Facture::STATUS_DRAFT && count($object->lines) > 0 && ((($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA || $object->type == Facture::TYPE_SITUATION) && (! empty($conf->global->FACTURE_ENABLE_NEGATIVE) || $object->total_ttc >= 0)) || ($object->type == Facture::TYPE_CREDIT_NOTE && $object->total_ttc <= 0))) { if ($usercanvalidate) { - print ''; + print '' . $langs->trans('Validate') . ''; } } // Send by mail if (($object->statut == Facture::STATUS_VALIDATED || $object->statut == Facture::STATUS_CLOSED) || ! empty($conf->global->FACTURE_SENDBYEMAIL_FOR_ALL_STATUS)) { if ($objectidnext) { - print '
' . $langs->trans('SendMail') . '
'; + print '' . $langs->trans('SendMail') . ''; } else { if ($usercansend) { - print ''; + print '' . $langs->trans('SendMail') . ''; } else - print ''; + print '' . $langs->trans('SendMail') . ''; } } @@ -4911,7 +4911,7 @@ elseif ($id > 0 || ! empty($ref)) { print ''.$langs->trans("MakeWithdrawRequest").''; } else { - print '
' . $langs->trans('MakeWithdrawRequest') . '
'; + print '' . $langs->trans('MakeWithdrawRequest') . ''; } } else @@ -4930,18 +4930,18 @@ elseif ($id > 0 || ! empty($ref)) { $langs->load("cashdesk"); $receipt_url=DOL_URL_ROOT."/takepos/receipt.php"; - print ''; + print '' . $langs->trans('POSTicket') .''; } // Create payment if ($object->type != Facture::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $usercanissuepayment) { if ($objectidnext) { - print '
' . $langs->trans('DoPayment') . '
'; + print '' . $langs->trans('DoPayment') . ''; } else { //if ($resteapayer == 0) { // Sometimes we can receive more, so we accept to enter more and will offer a button to convert into discount (but it is not a credit note, just a prepayment done) // print '
' . $langs->trans('DoPayment') . '
'; //} else { - print ''; + print '' . $langs->trans('DoPayment') . ''; //} } } @@ -4953,27 +4953,27 @@ elseif ($id > 0 || ! empty($ref)) { if ($resteapayer == 0) { - print '
'.$langs->trans('DoPaymentBack').'
'; + print ''.$langs->trans('DoPaymentBack').''; } else { - print ''; + print ''.$langs->trans('DoPaymentBack').''; } } // For standard invoice with excess received if ($object->type == Facture::TYPE_STANDARD && empty($object->paye) && ($object->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits) < 0 && $usercancreate && empty($discount->id)) { - print ''; + print ''.$langs->trans('ConvertExcessReceivedToReduc').''; } // For credit note if ($object->type == Facture::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $usercancreate && $object->getSommePaiement() == 0) { - print ''; + print '' . $langs->trans('ConvertToReduc') . ''; } // For deposit invoice if ($object->type == Facture::TYPE_DEPOSIT && $usercancreate && $object->statut > 0 && empty($discount->id)) { - print ''; + print ''.$langs->trans('ConvertToReduc').''; } } @@ -4982,7 +4982,7 @@ elseif ($id > 0 || ! empty($ref)) || ($object->type == Facture::TYPE_DEPOSIT && $object->paye == 0 && $object->total_ttc > 0 && $resteapayer == 0 && $usercanissuepayment && empty($discount->id)) ) { - print ''; + print ''.$langs->trans('ClassifyPaid').''; } // Classify 'closed not completely paid' (possible si validee et pas encore classee payee) @@ -4992,7 +4992,7 @@ elseif ($id > 0 || ! empty($ref)) if ($totalpaye > 0 || $totalcreditnotes > 0) { // If one payment or one credit note was linked to this invoice - print ''; + print '' . $langs->trans('ClassifyPaidPartially') . ''; } else { @@ -5000,11 +5000,11 @@ elseif ($id > 0 || ! empty($ref)) { if ($objectidnext) { - print '
' . $langs->trans('ClassifyCanceled') . '
'; + print '' . $langs->trans('ClassifyCanceled') . ''; } else { - print ''; + print '' . $langs->trans('ClassifyCanceled') . ''; } } } @@ -5013,7 +5013,7 @@ elseif ($id > 0 || ! empty($ref)) // Clone if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA) && $usercancreate) { - print ''; + print '' . $langs->trans("ToClone") . ''; } // Clone as predefined / Create template @@ -5021,7 +5021,7 @@ elseif ($id > 0 || ! empty($ref)) { if (! $objectidnext && count($object->lines) > 0) { - print ''; + print '' . $langs->trans("ChangeIntoRepeatableInvoice") . ''; } } @@ -5030,7 +5030,7 @@ elseif ($id > 0 || ! empty($ref)) { if (! $objectidnext) { - print ''; + print '' . $langs->trans("CreateCreditNote") . ''; } } @@ -5045,9 +5045,9 @@ elseif ($id > 0 || ! empty($ref)) { if ($usercanunvalidate) { - print ''; + print '' . $langs->trans("CreateCreditNote") . ''; } else { - print '
' . $langs->trans("CreateCreditNote") . '
'; + print '' . $langs->trans("CreateCreditNote") . ''; } } @@ -5063,22 +5063,22 @@ elseif ($id > 0 || ! empty($ref)) { if(($object->total_ttc - $totalcreditnotes ) == 0 ) { - print ''; + print '' . $langs->trans("RemoveSituationFromCycle") . ''; } else { - print ''; + print '' . $langs->trans("RemoveSituationFromCycle") . ''; } } // Create next situation invoice if ($usercancreate && ($object->type == 5) && ($object->statut == 1 || $object->statut == 2)) { if ($object->is_last_in_cycle() && $object->situation_final != 1) { - print ''; + print '' . $langs->trans('CreateNextSituationInvoice') . ''; } elseif (!$object->is_last_in_cycle()) { - print ''; + print '' . $langs->trans('CreateNextSituationInvoice') . ''; } else { - print ''; + print '' . $langs->trans('CreateNextSituationInvoice') . ''; } } @@ -5088,31 +5088,31 @@ elseif ($id > 0 || ! empty($ref)) { //var_dump($isErasable); if ($isErasable == -4) { - print ''; + print '' . $langs->trans('Delete') . ''; } elseif ($isErasable == -3) { - print ''; + print '' . $langs->trans('Delete') . ''; } elseif ($isErasable == -2) { - print ''; + print '' . $langs->trans('Delete') . ''; } elseif ($isErasable == -1) { - print ''; + print '' . $langs->trans('Delete') . ''; } elseif ($isErasable <= 0) // Any other cases { - print ''; + print '' . $langs->trans('Delete') . ''; } elseif ($objectidnext) { - print ''; + print '' . $langs->trans('Delete') . ''; } else { - print ''; + print '' . $langs->trans('Delete') . ''; } } else { - print ''; + print '' . $langs->trans('Delete') . ''; } } print '
'; diff --git a/test/phpunit/FilesLibTest.php b/test/phpunit/FilesLibTest.php index 9b990d78922..d73d99f7078 100644 --- a/test/phpunit/FilesLibTest.php +++ b/test/phpunit/FilesLibTest.php @@ -413,11 +413,11 @@ class FilesLibTest extends PHPUnit\Framework\TestCase $result=dol_compress_file($filein, $fileout, $format, $errorstring); print __METHOD__." result=".$result."\n"; - $this->assertGreaterThanOrEqual(1, $result, "Pb with dol_compress_file on ".$filein." : ".$errorstring); + $this->assertGreaterThanOrEqual(1, $result, "Pb with dol_compress_file on ".$filein." into ".$fileout." : ".$errorstring); $result=dol_uncompress($fileout, $dirout); print __METHOD__." result=".join(',', $result)."\n"; - $this->assertEquals(0, count($result), "Pb with dol_uncompress_file"); + $this->assertEquals(0, count($result), "Pb with dol_uncompress_file of file ".$fileout); } /** From 86e4ca55dfd9ec41ff43296c622231079037e302 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 13:55:29 +0200 Subject: [PATCH 342/980] Merge --- htdocs/theme/eldy/btn.inc.php | 3 ++- htdocs/theme/md/style.css.php | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/btn.inc.php b/htdocs/theme/eldy/btn.inc.php index 2e42d42acaa..3ee6a164f75 100644 --- a/htdocs/theme/eldy/btn.inc.php +++ b/htdocs/theme/eldy/btn.inc.php @@ -11,7 +11,8 @@ if (! defined('ISLOADEDBYSTEELSHEET')) die('Must be call by steelsheet'); ?> div.divButAction { margin-bottom: 1.4em; } -div.tabsAction > a.butAction, div.tabsAction > a.butActionRefused { +div.tabsAction > a.butAction, div.tabsAction > a.butActionRefused, div.tabsAction > a.butActionDelete, +div.tabsAction > span.butAction, div.tabsAction > span.butActionRefused, div.tabsAction > span.butActionDelete { margin-bottom: 1.4em !important; } div.tabsActionNoBottom > a.butAction, div.tabsActionNoBottom > a.butActionRefused { diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 8e0cf75047b..65436182755 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2571,7 +2571,9 @@ div.divButAction { margin-bottom: 1.4em; vertical-align: top; } -div.tabsAction > a.butAction, div.tabsAction > a.butActionRefused { + +div.tabsAction > a.butAction, div.tabsAction > a.butActionRefused, div.tabsAction > a.butActionDelete, +div.tabsAction > span.butAction, div.tabsAction > span.butActionRefused, div.tabsAction > span.butActionDelete { margin-bottom: 1.4em !important; } From dd97a2e6663484391397796b9e516cbf454dcbff Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 14:11:11 +0200 Subject: [PATCH 343/980] CSS --- htdocs/theme/md/style.css.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 9aec13e5fc7..05249c99b03 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -504,6 +504,9 @@ input[name=weight], input[name=volume], input[name=surface], input[name=sizeheig input[name=surface] { margin-right: 4px; } fieldset { border: 1px solid #AAAAAA !important; } .legendforfieldsetstep { padding-bottom: 10px; } +input#onlinepaymenturl, input#directdownloadlink { + opacity: 0.7; +} div#moretabsListaction { z-index: 5; From f88733f46a9539c4756546645cc62da430f93e0a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 14:14:32 +0200 Subject: [PATCH 344/980] Html code simplest --- htdocs/comm/propal/card.php | 38 ++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 92267d97033..8891c2280f0 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -2471,39 +2471,39 @@ if ($action == 'create') { if ($usercanvalidate) { - print ''; + print '' . $langs->trans('Validate') . ''; } else - print ''; + print '' . $langs->trans('Validate') . ''; } // Create event /*if ($conf->agenda->enabled && ! empty($conf->global->MAIN_ADD_EVENT_ON_ELEMENT_CARD)) // Add hidden condition because this is not a "workflow" action so should appears somewhere else on page. { - print ''; + print '' . $langs->trans("AddAction") . '
'; }*/ // Edit if ($object->statut == Propal::STATUS_VALIDATED && $usercancreate) { - print ''; + print '' . $langs->trans('Modify') . ''; } // ReOpen if (($object->statut == Propal::STATUS_SIGNED || $object->statut == Propal::STATUS_NOTSIGNED || $object->statut == Propal::STATUS_BILLED) && $usercanclose) { - print ''; + print 'global->MAIN_JUMP_TAG) ? '' : '#reopen') . '"'; + print '>' . $langs->trans('ReOpen') . ''; } // Send if ($object->statut == Propal::STATUS_VALIDATED || $object->statut == Propal::STATUS_SIGNED || !empty($conf->global->PROPOSAL_SENDBYEMAIL_FOR_ALL_STATUS)) { if ($usercansend) { - print ''; + print '' . $langs->trans('SendMail') . ''; } else - print ''; + print '' . $langs->trans('SendMail') . ''; } // Create an order if (! empty($conf->commande->enabled) && $object->statut == Propal::STATUS_SIGNED) { if ($usercancreateorder) { - print ''; + print '' . $langs->trans("AddOrder") . ''; } } @@ -2511,7 +2511,7 @@ if ($action == 'create') if (! empty($conf->service->enabled) && ! empty($conf->ficheinter->enabled) && $object->statut == Propal::STATUS_SIGNED) { if ($usercancreateintervention) { $langs->load("interventions"); - print ''; + print '' . $langs->trans("AddIntervention") . ''; } } @@ -2520,7 +2520,7 @@ if ($action == 'create') $langs->load("contracts"); if ($usercancreatecontract) { - print ''; + print '' . $langs->trans('AddContract') . ''; } } @@ -2529,7 +2529,7 @@ if ($action == 'create') { if (! empty($conf->facture->enabled) && $usercancreateinvoice) { - print ''; + print '' . $langs->trans("AddBill") . ''; } $arrayofinvoiceforpropal = $object->getInvoiceArrayList(); @@ -2537,30 +2537,30 @@ if ($action == 'create') { if ($usercanclose) { - print ''; + print 'socid . '">' . $langs->trans("ClassifyBilled") . ''; } else { - print ''; + print '' . $langs->trans("ClassifyBilled") . ''; } } } // Set accepted/refused if ($object->statut == Propal::STATUS_VALIDATED && $usercanclose) { - print ''; + print 'global->MAIN_JUMP_TAG) ? '' : '#close') . '"'; + print '>' . $langs->trans('SetAcceptedRefused') . ''; } // Clone if ($usercancreate) { - print ''; + print '' . $langs->trans("ToClone") . ''; } // Delete if ($usercandelete) { - print ''; + print '' . $langs->trans('Delete') . ''; } } } From b60ddc255c744a17a304a786eb27c68d287ada92 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 14:17:53 +0200 Subject: [PATCH 345/980] Removed useless html tags --- htdocs/product/card.php | 22 +++++++++---------- htdocs/projet/card.php | 48 ++++++++++++++++++++--------------------- htdocs/societe/card.php | 12 +++++------ 3 files changed, 41 insertions(+), 41 deletions(-) diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 22a8af0d270..df195d0c932 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -1058,7 +1058,7 @@ else $statutarray=array('1' => $langs->trans("Finished"), '0' => $langs->trans("RowMaterial")); print $form->selectarray('finished', $statutarray, GETPOST('finished', 'alpha'), 1); print ''; - + // Net Measure print ''.$langs->trans("NetMeasure").''; print ''; @@ -1070,7 +1070,7 @@ else print ''; print $formproduct->selectMeasuringUnits("weight_units", "weight", GETPOSTISSET('weight_units')?GETPOST('weight_units', 'alpha'):(empty($conf->global->MAIN_WEIGHT_DEFAULT_UNIT)?0:$conf->global->MAIN_WEIGHT_DEFAULT_UNIT), 0, 2); print ''; - + // Brut Length if (empty($conf->global->PRODUCT_DISABLE_SIZE)) { @@ -1438,7 +1438,7 @@ else $statutarray=array('-1'=>' ', '1' => $langs->trans("Finished"), '0' => $langs->trans("RowMaterial")); print $form->selectarray('finished', $statutarray, $object->finished); print ''; - + // Net Measure print ''.$langs->trans("NetMeasure").''; print ' '; @@ -1852,7 +1852,7 @@ else print ''.$langs->trans("Nature").''; print $object->getLibFinished(); print ''; - + // Net Measure print ''.$langs->trans("NetMeasure").''; if ($object->net_measure != '') @@ -2035,17 +2035,17 @@ if ($action != 'create' && $action != 'edit') { if ($usercancreate) { - if (! isset($object->no_button_edit) || $object->no_button_edit <> 1) print ''; + if (! isset($object->no_button_edit) || $object->no_button_edit <> 1) print 'id.'">'.$langs->trans("Modify").''; if (! isset($object->no_button_copy) || $object->no_button_copy <> 1) { if (! empty($conf->use_javascript_ajax) && empty($conf->dol_use_jmobile)) { - print '
'.$langs->trans('ToClone').'
'."\n"; + print ''.$langs->trans('ToClone').''."\n"; } else { - print ''; + print 'id.'">'.$langs->trans("ToClone").''; } } } @@ -2057,21 +2057,21 @@ if ($action != 'create' && $action != 'edit') { if (! empty($conf->use_javascript_ajax) && empty($conf->dol_use_jmobile)) { - print '
'.$langs->trans('Delete').'
'."\n"; + print ''.$langs->trans('Delete').''."\n"; } else { - print ''; + print 'id.'">'.$langs->trans("Delete").''; } } else { - print ''; + print ''.$langs->trans("Delete").''; } } else { - print ''; + print ''.$langs->trans("Delete").''; } } diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index 4c04ee6ee23..7469c99c3dd 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -1172,13 +1172,13 @@ elseif ($object->id > 0) // "workflow" action so should appears somewhere else on // page. { - print ''; + print '' . $langs->trans("AddAction") . ''; }*/ // Send if ($object->statut != 2) { - print ''; + print '' . $langs->trans('SendMail').''; } // Modify @@ -1186,11 +1186,11 @@ elseif ($object->id > 0) { if ($userWrite > 0) { - print ''; + print ''.$langs->trans("Modify").''; } else { - print ''; + print ''.$langs->trans('Modify').''; } } @@ -1199,11 +1199,11 @@ elseif ($object->id > 0) { if ($userWrite > 0) { - print ''; + print ''.$langs->trans("Validate").''; } else { - print ''; + print ''.$langs->trans('Validate').''; } } @@ -1212,11 +1212,11 @@ elseif ($object->id > 0) { if ($userWrite > 0) { - print ''; + print ''.$langs->trans("Close").''; } else { - print ''; + print ''.$langs->trans('Close').''; } } @@ -1225,11 +1225,11 @@ elseif ($object->id > 0) { if ($userWrite > 0) { - print ''; + print ''.$langs->trans("ReOpen").''; } else { - print ''; + print ''.$langs->trans('ReOpen').''; } } @@ -1239,52 +1239,52 @@ elseif ($object->id > 0) if (! empty($conf->propal->enabled) && $user->rights->propal->creer) { $langs->load("propal"); - print ''; + print ''.$langs->trans("AddProp").''; } if (! empty($conf->commande->enabled) && $user->rights->commande->creer) { $langs->load("orders"); - print ''; + print ''.$langs->trans("CreateOrder").''; } if (! empty($conf->facture->enabled) && $user->rights->facture->creer) { $langs->load("bills"); - print ''; + print ''.$langs->trans("CreateBill").''; } if (! empty($conf->supplier_proposal->enabled) && $user->rights->supplier_proposal->creer) { $langs->load("supplier_proposal"); - print ''; + print ''.$langs->trans("AddSupplierProposal").''; } if (! empty($conf->supplier_order->enabled) && $user->rights->fournisseur->commande->creer) { $langs->load("suppliers"); - print ''; + print ''.$langs->trans("AddSupplierOrder").''; } if (! empty($conf->supplier_invoice->enabled) && $user->rights->fournisseur->facture->creer) { $langs->load("suppliers"); - print ''; + print ''.$langs->trans("AddSupplierInvoice").''; } if (! empty($conf->ficheinter->enabled) && $user->rights->ficheinter->creer) { $langs->load("interventions"); - print ''; + print ''.$langs->trans("AddIntervention").''; } if (! empty($conf->contrat->enabled) && $user->rights->contrat->creer) { $langs->load("contracts"); - print ''; + print ''.$langs->trans("AddContract").''; } if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->creer) { $langs->load("trips"); - print ''; + print ''.$langs->trans("AddTrip").''; } if (! empty($conf->don->enabled) && $user->rights->don->creer) { $langs->load("donations"); - print ''; + print ''.$langs->trans("AddDonation").''; } } @@ -1293,11 +1293,11 @@ elseif ($object->id > 0) { if ($userWrite > 0) { - print ''; + print ''.$langs->trans('ToClone').''; } else { - print ''; + print ''.$langs->trans('ToClone').''; } } @@ -1306,11 +1306,11 @@ elseif ($object->id > 0) { if ($userDelete > 0 || ($object->statut == 0 && $user->rights->projet->creer)) { - print ''; + print ''.$langs->trans("Delete").''; } else { - print ''; + print ''.$langs->trans('Delete').''; } } } diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index e855cb71b8c..cb11324eb68 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -2654,17 +2654,17 @@ else if (! empty($object->email) || $at_least_one_email_contact) { $langs->load("mails"); - print ''; + print ''.$langs->trans('SendMail').''; } else { $langs->load("mails"); - print ''; + print ''.$langs->trans('SendMail').''; } if ($user->rights->societe->creer) { - print ''."\n"; + print ''.$langs->trans("Modify").'
'."\n"; } if (! empty($conf->adherent->enabled)) @@ -2679,18 +2679,18 @@ else if ($user->rights->societe->supprimer) { - print ''; + print ''.$langs->trans('Merge').''; } if ($user->rights->societe->supprimer) { if ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile)) // We can't use preloaded confirm form with jmobile { - print '
'.$langs->trans('Delete').'
'."\n"; + print ''.$langs->trans('Delete').''."\n"; } else { - print ''."\n"; + print ''.$langs->trans('Delete').''."\n"; } } } From 4ca9fddfcc93ecc829f2ffc5e3710ae87824ba38 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 14:26:49 +0200 Subject: [PATCH 346/980] Update product.class.php --- htdocs/product/class/product.class.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index aa0c575d8d7..2b3fc3ece65 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -787,12 +787,12 @@ class Product extends CommonObject * Update a record into database. * If batch flag is set to on, we create records into llx_product_batch * - * @param int $id Id of product - * @param User $user Object user making update - * @param int $notrigger Disable triggers - * @param string $action Current action for hookmanager ('add' or 'update') - * @param int $updatetype Update product type - * @return int 1 if OK, -1 if ref already exists, -2 if other error + * @param int $id Id of product + * @param User $user Object user making update + * @param int $notrigger Disable triggers + * @param string $action Current action for hookmanager ('add' or 'update') + * @param boolean $updatetype Update product type + * @return int 1 if OK, -1 if ref already exists, -2 if other error */ public function update($id, $user, $notrigger = false, $action = 'update', $updatetype = false) { From 8d75e83e5506219068af85161ac150e06e3eacf1 Mon Sep 17 00:00:00 2001 From: Norbert Penel Date: Wed, 16 Oct 2019 14:32:17 +0200 Subject: [PATCH 347/980] use current local time on Now button use current local time for feed the date according to locale settings --- htdocs/core/class/html.form.class.php | 51 ++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 2130a7d7e38..51e93557417 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5323,7 +5323,7 @@ class Form * @param int $empty 0=Fields required, 1=Empty inputs are allowed, 2=Empty inputs are allowed for hours only * @param string $form_name Not used * @param int $d 1=Show days, month, years - * @param int $addnowlink Add a link "Now" + * @param int $addnowlink Add a link "Now", 1 with server time, 2 with local computer time * @param int $disabled Disable input fields * @param int $fullday When a checkbox with this html name is on, hour and day are set with 00:00 or 23:59 * @param string $addplusone Add a link "+1 hour". Value must be name of another selectDate field. @@ -5605,12 +5605,32 @@ class Form { // Script which will be inserted in the onClick of the "Now" link $reset_scripts = ""; - + if ($addnowlink==2) // local computer time + { + // pad add leading 0 on numbers + $reset_scripts.="Number.prototype.pad = function(size) { + var s = String(this); + while (s.length < (size || 2)) {s = '0' + s;} + return s; + }; + var d = new Date();"; + } + // Generate the date part, depending on the use or not of the javascript calendar - $reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(\''.dol_print_date(dol_now(), 'day', 'tzuser').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(\''.dol_print_date(dol_now(), '%d', 'tzuser').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(\''.dol_print_date(dol_now(), '%m', 'tzuser').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(\''.dol_print_date(dol_now(), '%Y', 'tzuser').'\');'; + if($addnowlink==1) // server time expressed in user time setup + { + $reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(\''.dol_print_date(dol_now(), 'day','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(\''.dol_print_date(dol_now(), '%d','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(\''.dol_print_date(dol_now(), '%m','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(\''.dol_print_date(dol_now(), '%Y','tzuser').'\');'; + } + elseif($addnowlink==2) + { + $reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(d.toLocaleDateString(\''.str_replace('_', '-', $langs->defaultlang).'\'));'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(d.getDate().pad());'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(d.getMonth().pad());'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(d.getFullYear());'; + } /*if ($usecalendar == "eldy") { $base=DOL_URL_ROOT.'/core/'; @@ -5627,7 +5647,15 @@ class Form { if ($fullday) $reset_scripts .= " if (jQuery('#fullday:checked').val() == null) {"; //$reset_scripts .= 'this.form.elements[\''.$prefix.'hour\'].value=formatDate(new Date(), \'HH\'); '; - $reset_scripts .= 'jQuery(\'#'.$prefix.'hour\').val(\''.dol_print_date(dol_now(), '%H', 'tzuser').'\');'; + if($addnowlink==1) + { + $reset_scripts .= 'jQuery(\'#'.$prefix.'hour\').val(\''.dol_print_date(dol_now(), '%H','tzuser').'\');'; + } + elseif($addnowlink==2) + { + $reset_scripts .= 'jQuery(\'#'.$prefix.'hour\').val(d.getHours().pad());'; + } + if ($fullday) $reset_scripts .= ' } '; } // Update the minute part @@ -5635,7 +5663,14 @@ class Form { if ($fullday) $reset_scripts .= " if (jQuery('#fullday:checked').val() == null) {"; //$reset_scripts .= 'this.form.elements[\''.$prefix.'min\'].value=formatDate(new Date(), \'mm\'); '; - $reset_scripts .= 'jQuery(\'#'.$prefix.'min\').val(\''.dol_print_date(dol_now(), '%M', 'tzuser').'\');'; + if($addnowlink==1) + { + $reset_scripts .= 'jQuery(\'#'.$prefix.'min\').val(\''.dol_print_date(dol_now(), '%M','tzuser').'\');'; + } + elseif($addnowlink==2) + { + $reset_scripts .= 'jQuery(\'#'.$prefix.'min\').val(d.getMinutes().pad());'; + } if ($fullday) $reset_scripts .= ' } '; } // If reset_scripts is not empty, print the link with the reset_scripts in the onClick From fce1f1991c9b275dd3fae6c9b64ed3da029207ff Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Wed, 16 Oct 2019 12:34:42 +0000 Subject: [PATCH 348/980] Fixing style errors. --- htdocs/core/class/html.form.class.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 51e93557417..0a069bb2ced 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5619,10 +5619,10 @@ class Form // Generate the date part, depending on the use or not of the javascript calendar if($addnowlink==1) // server time expressed in user time setup { - $reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(\''.dol_print_date(dol_now(), 'day','tzuser').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(\''.dol_print_date(dol_now(), '%d','tzuser').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(\''.dol_print_date(dol_now(), '%m','tzuser').'\');'; - $reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(\''.dol_print_date(dol_now(), '%Y','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(\''.dol_print_date(dol_now(), 'day', 'tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(\''.dol_print_date(dol_now(), '%d', 'tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(\''.dol_print_date(dol_now(), '%m', 'tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(\''.dol_print_date(dol_now(), '%Y', 'tzuser').'\');'; } elseif($addnowlink==2) { @@ -5649,7 +5649,7 @@ class Form //$reset_scripts .= 'this.form.elements[\''.$prefix.'hour\'].value=formatDate(new Date(), \'HH\'); '; if($addnowlink==1) { - $reset_scripts .= 'jQuery(\'#'.$prefix.'hour\').val(\''.dol_print_date(dol_now(), '%H','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'hour\').val(\''.dol_print_date(dol_now(), '%H', 'tzuser').'\');'; } elseif($addnowlink==2) { @@ -5665,7 +5665,7 @@ class Form //$reset_scripts .= 'this.form.elements[\''.$prefix.'min\'].value=formatDate(new Date(), \'mm\'); '; if($addnowlink==1) { - $reset_scripts .= 'jQuery(\'#'.$prefix.'min\').val(\''.dol_print_date(dol_now(), '%M','tzuser').'\');'; + $reset_scripts .= 'jQuery(\'#'.$prefix.'min\').val(\''.dol_print_date(dol_now(), '%M', 'tzuser').'\');'; } elseif($addnowlink==2) { From cd825ba4be226536bcedef860f5b0a51717c4684 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 16 Oct 2019 15:46:46 +0200 Subject: [PATCH 349/980] internationalization --- htdocs/core/modules/expedition/doc/pdf_espadon.modules.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php index ddc07db0380..21658ed32d0 100644 --- a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php @@ -146,7 +146,7 @@ class pdf_espadon extends ModelePdfExpedition /** * Function to build pdf onto disk * - * @param Object $object Object expedition to generate (or id if old method) + * @param Object $object Object expedition to generate (or id if old method) * @param Translate $outputlangs Lang output object * @param string $srctemplatepath Full path of source filename for generator using a template file * @param int $hidedetails Do not show line details @@ -370,7 +370,7 @@ class pdf_espadon extends ModelePdfExpedition // Notes if (! empty($object->note_public)) { - $pdf->SetFont('', '', $default_font_size - 1); // Dans boucle pour gerer multi-page + $pdf->SetFont('', '', $default_font_size - 1); // In loop to manage multi-page $pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top_alt, dol_htmlentitiesbr($object->note_public), 0, 1); } @@ -502,7 +502,7 @@ class pdf_espadon extends ModelePdfExpedition $pdf->setPage($pageposafter); $curY = $tab_top_newpage; } - $pdf->SetFont('', '', $default_font_size - 1); // On repositionne la police par defaut + $pdf->SetFont('', '', $default_font_size - 1); // We reposition the default font // weight From 10fd472392195997bb3326ec34bc7fe7b1caaa67 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 16 Oct 2019 15:59:08 +0200 Subject: [PATCH 350/980] internationalization --- .../expedition/doc/pdf_merou.modules.php | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/htdocs/core/modules/expedition/doc/pdf_merou.modules.php b/htdocs/core/modules/expedition/doc/pdf_merou.modules.php index ad676dba22e..53f46ccc861 100644 --- a/htdocs/core/modules/expedition/doc/pdf_merou.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_merou.modules.php @@ -174,20 +174,20 @@ class pdf_merou extends ModelePdfExpedition $origin = $object->origin; - //Creation de l expediteur + //Create sender $this->expediteur = $mysoc; - //Creation du destinataire + //Create recipient $idcontact = $object->$origin->getIdContact('external', 'SHIPPING'); $this->destinataire = new Contact($this->db); if (! empty($idcontact[0])) $this->destinataire->fetch($idcontact[0]); - //Creation du livreur + //Create deliverer $idcontact = $object->$origin->getIdContact('internal', 'LIVREUR'); $this->livreur = new User($this->db); if (! empty($idcontact[0])) $this->livreur->fetch($idcontact[0]); - // Definition de $dir et $file + // Definition of $dir and $file if ($object->specimen) { $dir = $conf->expedition->dir_output."/sending"; @@ -273,7 +273,7 @@ class pdf_merou extends ModelePdfExpedition $tab_height = $this->page_hauteur - $tab_top - $heightforfooter; $tab_height_newpage = $this->page_hauteur - $tab_top_newpage - $heightforfooter; - // Affiche notes + // Display notes if (! empty($object->note_public)) { $pdf->SetFont('', '', $default_font_size - 1); @@ -314,7 +314,7 @@ class pdf_merou extends ModelePdfExpedition $pdf->setPageOrientation('', 1, $heightforfooter); // The only function to edit the bottom margin of current page to set it. $pageposbefore=$pdf->getPage(); - // Description de la ligne produit + // Description of product line $libelleproduitservice = pdf_writelinedesc($pdf, $object, $i, $outputlangs, 90, 3, 50, $curY, 0, 1); $nexY = $pdf->GetY(); @@ -335,7 +335,7 @@ class pdf_merou extends ModelePdfExpedition $pdf->Rect(10+3, $curY, 3, 3); $pdf->Rect(20+3, $curY, 3, 3); - //Insertion de la reference du produit + //Inserting the product reference $pdf->SetXY(30, $curY); $pdf->SetFont('', 'B', $default_font_size - 3); $pdf->MultiCell(24, 3, $outputlangs->convToOutputCharset($object->lines[$i]->ref), 0, 'L', 0); @@ -404,7 +404,7 @@ class pdf_merou extends ModelePdfExpedition $bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1; } - // Pied de page + // Pagefoot $this->_pagefoot($pdf, $object, $outputlangs); if (method_exists($pdf, 'AliasNbPages')) $pdf->AliasNbPages(); @@ -579,11 +579,11 @@ class pdf_merou extends ModelePdfExpedition } //*********************Entete**************************** - //Nom du Document + //Document name $pdf->SetXY($Xoff, 7); $pdf->SetFont('', 'B', $default_font_size + 2); $pdf->SetTextColor(0, 0, 0); - $pdf->MultiCell(0, 3, $outputlangs->transnoentities("SendingSheet"), '', 'L'); // Bordereau expedition + $pdf->MultiCell(0, 3, $outputlangs->transnoentities("SendingSheet"), '', 'L'); // Sending sheet //Num Expedition $Yoff = $Yoff+7; $Xoff = 142; @@ -601,7 +601,7 @@ class pdf_merou extends ModelePdfExpedition $posy = pdf_writeLinkedObjects($pdf, $object, $outputlangs, $posx, $posy, 100, 3, 'R', $default_font_size - 1, $hookmanager); //$this->Code39($Xoff+43, $Yoff+1, $object->commande->ref,$ext = true, $cks = false, $w = 0.4, $h = 4, $wide = true); - //Definition Emplacement du bloc Societe + //Definition Location of the Company block $Xoff = 110; $blSocX=90; $blSocY=24; @@ -632,7 +632,7 @@ class pdf_merou extends ModelePdfExpedition $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'R'); } - // Date Expedition + // Date delivery $Yoff = $Yoff+7; $pdf->SetXY($blSocX-80, $blSocY+17); @@ -698,7 +698,7 @@ class pdf_merou extends ModelePdfExpedition } // Recipient name - // On peut utiliser le nom de la societe du contact + // You can use the name of the contact company if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $thirdparty = $object->contact; } else { From 75a47eebe043e7a5a48fb49222fe8ea604910b75 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 16:17:51 +0200 Subject: [PATCH 351/980] Fix Method fetchAll must NEVER be used for table with more than 1000 record --- htdocs/accountancy/bookkeeping/list.php | 534 +++++++++++------- .../class/accountancyexport.class.php | 11 +- 2 files changed, 341 insertions(+), 204 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 2958a229d24..b14a118a342 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -155,6 +155,12 @@ $arrayfields=array( if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING)) unset($arrayfields['t.lettering_code']); +$listofformat=AccountancyExport::getType(); +$formatexportset = $conf->global->ACCOUNTING_EXPORT_MODELCSV; +if (empty($listofformat[$formatexportset])) $formatexportset = 1; + +$error = 0; + /* * Actions @@ -373,10 +379,97 @@ if ($action == 'delmouvconfirm' && $user->rights->accounting->mouvements->suppri exit; } } +if ($action == 'setreexport') { + $setreexport = GETPOST('value', 'int'); + if (! dolibarr_set_const($db, "ACCOUNTING_REEXPORT", $setreexport, 'yesno', 0, '', $conf->entity)) $error++; + + if (! $error) { + if ($conf->global->ACCOUNTING_REEXPORT == 1) { + setEventMessages($langs->trans("ExportOfPiecesAlreadyExportedIsEnable"), null, 'mesgs'); + } else { + setEventMessages($langs->trans("ExportOfPiecesAlreadyExportedIsDisable"), null, 'mesgs'); + } + } else { + setEventMessages($langs->trans("Error"), null, 'errors'); + } +} + +// Build and execute select (used by page and export action) +// must de set after the action that set $filter +// -------------------------------------------------------------------- + +$sql = 'SELECT'; +$sql .= ' t.rowid,'; +$sql .= " t.doc_date,"; +$sql .= " t.doc_type,"; +$sql .= " t.doc_ref,"; +$sql .= " t.fk_doc,"; +$sql .= " t.fk_docdet,"; +$sql .= " t.thirdparty_code,"; +$sql .= " t.subledger_account,"; +$sql .= " t.subledger_label,"; +$sql .= " t.numero_compte,"; +$sql .= " t.label_compte,"; +$sql .= " t.label_operation,"; +$sql .= " t.debit,"; +$sql .= " t.credit,"; +$sql .= " t.lettering_code,"; +$sql .= " t.montant,"; +$sql .= " t.sens,"; +$sql .= " t.fk_user_author,"; +$sql .= " t.import_key,"; +$sql .= " t.code_journal,"; +$sql .= " t.journal_label,"; +$sql .= " t.piece_num,"; +$sql .= " t.date_creation,"; +$sql .= " t.tms as date_modification,"; +$sql .= " t.date_export"; +$sql .= ' FROM ' . MAIN_DB_PREFIX . $object->table_element . ' as t'; +// Manage filter +$sqlwhere = array (); +if (count($filter) > 0) { + foreach ($filter as $key => $value) { + if ($key == 't.doc_date') { + $sqlwhere[] = $key . '=\'' . $db->idate($value) . '\''; + } elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=') { + $sqlwhere[] = $key . '\'' . $db->idate($value) . '\''; + } elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.subledger_account>=' || $key == 't.subledger_account<=') { + $sqlwhere[] = $key . '\'' . $db->escape($value) . '\''; + } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') { + $sqlwhere[] = $key . '=' . $value; + } elseif ($key == 't.subledger_account' || $key == 't.numero_compte') { + $sqlwhere[] = $key . ' LIKE \'' . $db->escape($value) . '%\''; + } elseif ($key == 't.date_creation>=' || $key == 't.date_creation<=') { + $sqlwhere[] = $key . '\'' . $db->idate($value) . '\''; + } elseif ($key == 't.tms>=' || $key == 't.tms<=') { + $sqlwhere[] = $key . '\'' . $db->idate($value) . '\''; + } elseif ($key == 't.date_export>=' || $key == 't.date_export<=') { + $sqlwhere[] = $key . '\'' . $db->idate($value) . '\''; + } elseif ($key == 't.credit' || $key == 't.debit') { + $sqlwhere[] = natural_search($key, $value, 1, 1); + } else { + $sqlwhere[] = natural_search($key, $value, 0, 1); + } + } +} +$sql.= ' WHERE t.entity IN (' . getEntity('accountancy') . ')'; +if ($conf->global->ACCOUNTING_REEXPORT == 0) { + $sql .= " AND t.date_export IS NULL"; +} +if (count($sqlwhere) > 0) { + $sql .= ' AND ' . implode(' AND ', $sqlwhere); +} +if (! empty($sortfield)) { + $sql .= $db->order($sortfield, $sortorder); +} +//print $sql; + // Export into a file with format defined into setup (FEC, CSV, ...) +// Must be after definition of $sql if ($action == 'export_file' && $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); if ($result < 0) @@ -387,55 +480,54 @@ if ($action == 'export_file' && $user->rights->accounting->mouvements->export) { { // Export files $accountancyexport = new AccountancyExport($db); - $accountancyexport->export($object->lines); + $accountancyexport->export($object->lines, $formatexportset); if (! empty($accountancyexport->errors)) { setEventMessages('', $accountancyexport->errors, 'errors'); - } else { + } + else + { // Specify as export : update field date_export - // TODO Move in class bookKeeping $error=0; $db->begin(); - if (is_array($object->lines)) { - foreach ($object->lines as $movement) { + if (is_array($object->lines)) + { + foreach ($object->lines as $movement) + { $now = dol_now(); + $sql = " UPDATE " . MAIN_DB_PREFIX . "accounting_bookkeeping"; $sql .= " SET date_export = '" . $db->idate($now) . "'"; $sql .= " WHERE rowid = " . $movement->id; dol_syslog("/accountancy/bookeeping/list.php Function export_file Specify movements as exported sql=" . $sql, LOG_DEBUG); $result = $db->query($sql); - if ($result) { - $db->commit(); - // setEventMessages($langs->trans("AllExportedMovementsWereRecordedAsExported"), null, 'mesgs'); - } else { - $db->rollback(); - // setEventMessages($langs->trans("NotAllExportedMovementsCouldBeRecordedAsExported"), null, 'errors'); + if (! $result) + { + $error++; + break; } } } + + if (! $error) + { + $db->commit(); + // setEventMessages($langs->trans("AllExportedMovementsWereRecordedAsExported"), null, 'mesgs'); + } + else + { + $error++; + $db->rollback(); + setEventMessages($langs->trans("NotAllExportedMovementsCouldBeRecordedAsExported"), null, 'errors'); + } } exit; } } -if ($action == 'setreexport') { - $export = 0; - $setreexport = GETPOST('value', 'int'); - if (! dolibarr_set_const($db, "ACCOUNTING_REEXPORT", $setreexport, 'yesno', 0, '', $conf->entity)) $error++; - - if (! $error) { - if ($conf->global->ACCOUNTING_REEXPORT == 1) { - setEventMessages($langs->trans("ExportOfPiecesAlreadyExportedIsEnable"), null, 'mesgs'); - } else { - setEventMessages($langs->trans("ExportOfPiecesAlreadyExportedIsDisable"), null, 'mesgs'); - } - } else { - setEventMessages($langs->trans("Error"), null, 'errors'); - } -} /* * View @@ -443,24 +535,43 @@ if ($action == 'setreexport') { $title_page = $langs->trans("Bookkeeping"); -llxHeader('', $title_page); - -// List +// Count total nb of records $nbtotalofrecords = ''; -if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { - $nbtotalofrecords = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter, 'AND', $conf->global->ACCOUNTING_REEXPORT); - if ($nbtotalofrecords < 0) { - setEventMessages($object->error, $object->errors, 'errors'); +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) +{ + $resql = $db->query($sql); + $nbtotalofrecords = $db->num_rows($resql); + if (($page * $limit) > $nbtotalofrecords) // if total of record found is smaller than page * limit, goto and load page 0 + { + $page = 0; + $offset = 0; } } +// if total of record found is smaller than limit, no need to do paging and to restart another select with limits set. +if (is_numeric($nbtotalofrecords) && $limit > $nbtotalofrecords) +{ + $num = $nbtotalofrecords; +} +else +{ + $sql.= $db->plimit($limit+1, $offset); -// TODO Do not use this -$result = $object->fetchAll($sortorder, $sortfield, $limit, $offset, $filter, 'AND', $conf->global->ACCOUNTING_REEXPORT); -if ($result < 0) { - setEventMessages($object->error, $object->errors, 'errors'); + $resql=$db->query($sql); + if (! $resql) + { + dol_print_error($db); + exit; + } + + $num = $db->num_rows($resql); } -$num=count($object->lines); + +// Output page +// -------------------------------------------------------------------- + +llxHeader('', $title_page); + if ($action == 'delmouv') { $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?mvt_num='.GETPOST('mvt_num').$param, $langs->trans('DeleteMvt'), $langs->trans('ConfirmDeleteMvtPartial'), 'delmouvconfirm', '', 0, 1); @@ -510,9 +621,6 @@ print ''; print ''; print ''; -$button .= ''; - -$listofformat=AccountancyExport::getType(); if (count($filter)) $buttonLabel = $langs->trans("ExportFilteredList"); else $buttonLabel = $langs->trans("ExportList"); @@ -524,13 +632,13 @@ if (! empty($conf->global->ACCOUNTING_REEXPORT)) { } $newcardbutton.= ''.$langs->trans("IncludeDocsAlreadyExported").''; -$newcardbutton.= dolGetButtonTitle($buttonLabel, $langs->trans("ExportFilteredList").' ('.$listofformat[$conf->global->ACCOUNTING_EXPORT_MODELCSV].')', 'fa fa-file-export paddingleft', $_SERVER["PHP_SELF"].'?action=export_file'.($param?'&'.$param:''), $user->rights->accounting->mouvements->export); +$newcardbutton.= dolGetButtonTitle($buttonLabel, $langs->trans("ExportFilteredList").' ('.$listofformat[$formatexportset].')', 'fa fa-file-export paddingleft', $_SERVER["PHP_SELF"].'?action=export_file'.($param?'&'.$param:''), $user->rights->accounting->mouvements->export); $newcardbutton.= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param); $newcardbutton.= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', './card.php?action=create', '', $user->rights->accounting->mouvements->creer); -print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $result, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit); +print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit); $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields @@ -650,7 +758,6 @@ if (! empty($arrayfields['t.code_journal']['checked'])) print ''; } - // Fields from hook $parameters=array('arrayfields'=>$arrayfields); $reshook=$hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook @@ -727,171 +834,200 @@ print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $ print "\n"; -if ($num > 0) +$line = new BookKeepingLine(); + +// Loop on record +// -------------------------------------------------------------------- +$i=0; +$totalarray=array(); +while ($i < min($num, $limit)) +{ + $obj = $db->fetch_object($resql); + if (empty($obj)) break; // Should not happen + + $line->id = $obj->rowid; + $line->doc_date = $db->jdate($obj->doc_date); + $line->doc_type = $obj->doc_type; + $line->doc_ref = $obj->doc_ref; + $line->fk_doc = $obj->fk_doc; + $line->fk_docdet = $obj->fk_docdet; + $line->thirdparty_code = $obj->thirdparty_code; + $line->subledger_account = $obj->subledger_account; + $line->subledger_label = $obj->subledger_label; + $line->numero_compte = $obj->numero_compte; + $line->label_compte = $obj->label_compte; + $line->label_operation = $obj->label_operation; + $line->debit = $obj->debit; + $line->credit = $obj->credit; + $line->montant = $obj->montant; + $line->sens = $obj->sens; + $line->lettering_code = $obj->lettering_code; + $line->fk_user_author = $obj->fk_user_author; + $line->import_key = $obj->import_key; + $line->code_journal = $obj->code_journal; + $line->journal_label = $obj->journal_label; + $line->piece_num = $obj->piece_num; + $line->date_creation = $db->jdate($obj->date_creation); + $line->date_modification = $db->jdate($obj->date_modification); + $line->date_export = $db->jdate($obj->date_export); + + $total_debit += $line->debit; + $total_credit += $line->credit; + + print ''; + + // Piece number + if (! empty($arrayfields['t.piece_num']['checked'])) + { + print ''; + $object->id = $line->id; + $object->piece_num = $line->piece_num; + print $object->getNomUrl(1, '', 0, '', 1); + print ''; + if (! $i) $totalarray['nbfield']++; + } + + // Document date + if (! empty($arrayfields['t.doc_date']['checked'])) + { + print '' . dol_print_date($line->doc_date, 'day') . ''; + if (! $i) $totalarray['nbfield']++; + } + + // Document ref + if (! empty($arrayfields['t.doc_ref']['checked'])) + { + print '' . $line->doc_ref . ''; + if (! $i) $totalarray['nbfield']++; + } + + // Account number + if (! empty($arrayfields['t.numero_compte']['checked'])) + { + print '' . length_accountg($line->numero_compte) . ''; + if (! $i) $totalarray['nbfield']++; + } + + // Subledger account + if (! empty($arrayfields['t.subledger_account']['checked'])) + { + print '' . length_accounta($line->subledger_account) . ''; + if (! $i) $totalarray['nbfield']++; + } + + // Label operation + if (! empty($arrayfields['t.label_operation']['checked'])) + { + print '' . $line->label_operation . ''; + if (! $i) $totalarray['nbfield']++; + } + + // Amount debit + if (! empty($arrayfields['t.debit']['checked'])) + { + print '' . ($line->debit ? price($line->debit) : ''). ''; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['totaldebitfield']=$totalarray['nbfield']; + $totalarray['totaldebit'] += $line->debit; + } + + // Amount credit + if (! empty($arrayfields['t.credit']['checked'])) + { + print '' . ($line->credit ? price($line->credit) : '') . ''; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['totalcreditfield']=$totalarray['nbfield']; + $totalarray['totalcredit'] += $line->credit; + } + + // Lettering code + if (! empty($arrayfields['t.lettering_code']['checked'])) + { + print '' . $line->lettering_code . ''; + if (! $i) $totalarray['nbfield']++; + } + + // Journal code + if (! empty($arrayfields['t.code_journal']['checked'])) + { + $accountingjournal = new AccountingJournal($db); + $result = $accountingjournal->fetch('', $line->code_journal); + $journaltoshow = (($result > 0)?$accountingjournal->getNomUrl(0, 0, 0, '', 0) : $line->code_journal); + print '' . $journaltoshow . ''; + if (! $i) $totalarray['nbfield']++; + } + + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + + // Creation operation date + if (! empty($arrayfields['t.date_creation']['checked'])) + { + print '' . dol_print_date($line->date_creation, 'dayhour') . ''; + if (! $i) $totalarray['nbfield']++; + } + + // Modification operation date + if (! empty($arrayfields['t.tms']['checked'])) + { + print '' . dol_print_date($line->date_modification, 'dayhour') . ''; + if (! $i) $totalarray['nbfield']++; + } + + // Exported operation date + if (! empty($arrayfields['t.date_export']['checked'])) + { + print '' . dol_print_date($line->date_export, 'dayhour') . ''; + if (! $i) $totalarray['nbfield']++; + } + + // Action column + print ''; + if (empty($line->date_export)) { + if ($user->rights->accounting->mouvements->creer) { + print '' . img_edit() . ''; + } + if ($user->rights->accounting->mouvements->supprimer) { + print ' ' . img_delete() . ''; + } + } + print ''; + + if (! $i) $totalarray['nbfield']++; + + print "\n"; + + $i++; +} + +// Show total line +if (isset($totalarray['totaldebitfield']) || isset($totalarray['totalcreditfield'])) { $i=0; - $totalarray=array(); - while ($i < min($num, $limit)) + print ''; + while ($i < $totalarray['nbfield']) { - $line = $object->lines[$i]; - - $total_debit += $line->debit; - $total_credit += $line->credit; - - print ''; - - // Piece number - if (! empty($arrayfields['t.piece_num']['checked'])) - { - print ''; - $object->id = $line->id; - $object->piece_num = $line->piece_num; - print $object->getNomUrl(1, '', 0, '', 1); - print ''; - if (! $i) $totalarray['nbfield']++; - } - - // Document date - if (! empty($arrayfields['t.doc_date']['checked'])) - { - print '' . dol_print_date($line->doc_date, 'day') . ''; - if (! $i) $totalarray['nbfield']++; - } - - // Document ref - if (! empty($arrayfields['t.doc_ref']['checked'])) - { - print '' . $line->doc_ref . ''; - if (! $i) $totalarray['nbfield']++; - } - - // Account number - if (! empty($arrayfields['t.numero_compte']['checked'])) - { - print '' . length_accountg($line->numero_compte) . ''; - if (! $i) $totalarray['nbfield']++; - } - - // Subledger account - if (! empty($arrayfields['t.subledger_account']['checked'])) - { - print '' . length_accounta($line->subledger_account) . ''; - if (! $i) $totalarray['nbfield']++; - } - - // Label operation - if (! empty($arrayfields['t.label_operation']['checked'])) - { - print '' . $line->label_operation . ''; - if (! $i) $totalarray['nbfield']++; - } - - // Amount debit - if (! empty($arrayfields['t.debit']['checked'])) - { - print '' . ($line->debit ? price($line->debit) : ''). ''; - if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totaldebitfield']=$totalarray['nbfield']; - $totalarray['totaldebit'] += $line->debit; - } - - // Amount credit - if (! empty($arrayfields['t.credit']['checked'])) - { - print '' . ($line->credit ? price($line->credit) : '') . ''; - if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalcreditfield']=$totalarray['nbfield']; - $totalarray['totalcredit'] += $line->credit; - } - - // Lettering code - if (! empty($arrayfields['t.lettering_code']['checked'])) - { - print '' . $line->lettering_code . ''; - if (! $i) $totalarray['nbfield']++; - } - - // Journal code - if (! empty($arrayfields['t.code_journal']['checked'])) - { - $accountingjournal = new AccountingJournal($db); - $result = $accountingjournal->fetch('', $line->code_journal); - $journaltoshow = (($result > 0)?$accountingjournal->getNomUrl(0, 0, 0, '', 0) : $line->code_journal); - print '' . $journaltoshow . ''; - if (! $i) $totalarray['nbfield']++; - } - - // Fields from hook - $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); - $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - - // Creation operation date - if (! empty($arrayfields['t.date_creation']['checked'])) - { - print '' . dol_print_date($line->date_creation, 'dayhour') . ''; - if (! $i) $totalarray['nbfield']++; - } - - // Modification operation date - if (! empty($arrayfields['t.tms']['checked'])) - { - print '' . dol_print_date($line->date_modification, 'dayhour') . ''; - if (! $i) $totalarray['nbfield']++; - } - - // Exported operation date - if (! empty($arrayfields['t.date_export']['checked'])) - { - print '' . dol_print_date($line->date_export, 'dayhour') . ''; - if (! $i) $totalarray['nbfield']++; - } - - // Action column - print ''; - if (empty($line->date_export)) { - if ($user->rights->accounting->mouvements->creer) { - print '' . img_edit() . ''; - } - if ($user->rights->accounting->mouvements->supprimer) { - print ' ' . img_delete() . ''; - } - } - print ''; - - if (! $i) $totalarray['nbfield']++; - - print "\n"; - $i++; - } - - // Show total line - if (isset($totalarray['totaldebitfield']) || isset($totalarray['totalcreditfield'])) - { - $i=0; - print ''; - while ($i < $totalarray['nbfield']) + if ($i == 1) { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totaldebitfield'] == $i) print ''.price($totalarray['totaldebit']).''; - elseif ($totalarray['totalcreditfield'] == $i) print ''.price($totalarray['totalcredit']).''; - else print ''; + if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; + else print ''.$langs->trans("Totalforthispage").''; } - $parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql); - $reshook=$hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - - print ''; + elseif ($totalarray['totaldebitfield'] == $i) print ''.price($totalarray['totaldebit']).''; + elseif ($totalarray['totalcreditfield'] == $i) print ''.price($totalarray['totalcredit']).''; + else print ''; } + $parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql); + $reshook=$hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + + print ''; } + print ""; print ''; diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index f90d5797d09..84a851eea50 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -224,22 +224,23 @@ class AccountancyExport /** * Function who chose which export to use with the default config, and make the export into a file * - * @param array $TData data - * @return void + * @param array $TData Array with data + * @param int $formatexportset Id of export format + * @return void */ - public function export(&$TData) + public function export(&$TData, $formatexportset) { global $conf, $langs; global $search_date_end; // Used into /accountancy/tpl/export_journal.tpl.php // Define name of file to save - $filename = 'general_ledger-'.$this->getFormatCode($conf->global->ACCOUNTING_EXPORT_MODELCSV); + $filename = 'general_ledger-'.$this->getFormatCode($formatexportset); $type_export = 'general_ledger'; include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php'; - switch ($conf->global->ACCOUNTING_EXPORT_MODELCSV) { + switch ($formatexportset) { case self::$EXPORT_TYPE_CONFIGURABLE : $this->exportConfigurable($TData); break; From 8f03813aa9eda51aa29f1ef88f51e0a761808531 Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Wed, 16 Oct 2019 16:26:00 +0200 Subject: [PATCH 352/980] Phone layout and functional improvements --- htdocs/takepos/css/phone.css | 81 +++++++++++++++ htdocs/takepos/invoice.php | 48 ++++----- htdocs/takepos/phone.php | 190 +++++++++++++++++++++++++++++++++++ htdocs/takepos/takepos.php | 2 +- 4 files changed, 291 insertions(+), 30 deletions(-) create mode 100644 htdocs/takepos/css/phone.css create mode 100644 htdocs/takepos/phone.php diff --git a/htdocs/takepos/css/phone.css b/htdocs/takepos/css/phone.css new file mode 100644 index 00000000000..49d833ade17 --- /dev/null +++ b/htdocs/takepos/css/phone.css @@ -0,0 +1,81 @@ +html,body { + box-sizing: border-box; + padding:3px; + margin:0; + height:100%; + width:100%; +} + +.container{ + width: 100%; + height: 100%; + margin: 0 auto; + overflow: visible; + box-sizing: border-box; +} + +.phonerow1{ + margin: 0 auto; + width: 100%; + height: 40%; + min-height: 40%; +} + +.phonerow2{ + margin: 0 auto; + width: 100%; + height: 40%; +} + +.phonebuttonsrow{ + margin: 0 auto; + width: 100%; + height: 5%; +} + +.phonediv1{ + height:100%; + min-height: 100%; + width: 100%; + text-align: center; + box-sizing: border-box; + overflow: auto; + padding-top: 0; + padding-bottom: 10px; + padding-right: 5px; + padding-left: 5px; +} + +.phonediv2{ + height: 100%; + width: 100%; + box-sizing: border-box; + padding-top: 0; + padding-bottom: 10px; + padding-right: 5px; + padding-left: 5px; +} + +.phonediv3{ + height: 100%; + width: 100%; + box-sizing: border-box; + padding-top: 0; + padding-bottom: 10px; + padding-right: 5px; + padding-left: 5px; +} + +button.phonebutton { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ + width:24%; + height:90%; + font-weight: bold; +} diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 1511d3520a1..a2c92aa13e4 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -570,13 +570,19 @@ if ($conf->global->TAKEPOS_BAR_RESTAURANT) $label = $obj->label; $floor = $obj->floor; } - print $langs->trans('Place')." ".$label." - "; - print $langs->trans('Floor')." ".$floor." - "; + // In phone version only show when is invoice page + if ($mobilepage=="invoice" || $mobilepage=="") { + print $langs->trans('Place') . " " . $label . " - "; + print $langs->trans('Floor') . " " . $floor . " - "; + } +} +// In phone version only show when is invoice page +if ($mobilepage=="invoice" || $mobilepage=="") { + print $langs->trans('TotalTTC'); + print ' : ' . price($invoice->total_ttc, 1, '', 1, -1, -1, $conf->currency) . ''; + print '
' . $sectionwithinvoicelink; + print ''; } -print $langs->trans('TotalTTC'); -print ' : '.price($invoice->total_ttc, 1, '', 1, - 1, - 1, $conf->currency).''; -print '
'.$sectionwithinvoicelink; -print ''; if ($_SESSION["basiclayout"]!=1) { print '' . $langs->trans('ReductionShort') . ''; @@ -595,16 +601,14 @@ if ($_SESSION["basiclayout"]==1) $htmlforlines = ''; foreach ($categories as $row){ $htmlforlines.= ''; + $htmlforlines.= '" onclick="LoadProducts(' . $row['id'] . ');">'; $htmlforlines.= ''; $htmlforlines.= $row['label']; $htmlforlines.= ''; $htmlforlines.= ''."\n"; } $htmlforlines.= ''; - $htmlforlines.= '
'; - $htmlforlines.= ''.$langs->trans("Floors").''; - $htmlforlines.= '
'; + $htmlforlines.= ''; print $htmlforlines; } @@ -618,17 +622,13 @@ if ($_SESSION["basiclayout"]==1) $htmlforlines = ''; foreach ($prods as $row) { $htmlforlines.= ''; + $htmlforlines.= '" onclick="AddProduct(\'' . $place . '\', ' . $row->id . ')">'; $htmlforlines.= ''; $htmlforlines.= $row->label; $htmlforlines.= ''; $htmlforlines.= ''."\n"; } $htmlforlines.= ''; - $htmlforlines.= '
'; - $htmlforlines.= ''.$langs->trans("Categories").''; - $htmlforlines.= ''.$langs->trans("Floors").''; - $htmlforlines.= '
'; print $htmlforlines; } @@ -641,24 +641,22 @@ if ($_SESSION["basiclayout"]==1) while($row = $db->fetch_array($resql)){ $rows[] = $row; $htmlforlines.= ''; + $htmlforlines.= '" onclick="LoadPlace(\'' . $row['label'] . '\')">'; $htmlforlines.= ''; $htmlforlines.= $row['label']; $htmlforlines.= ''; $htmlforlines.= ''."\n"; } $htmlforlines.= ''; - $htmlforlines.= '
'; - $htmlforlines.= ''.$langs->trans("Categories").''; - $htmlforlines.= ''.$langs->trans("Floors").''; - $htmlforlines.= '
'; print $htmlforlines; } } if ($placeid > 0) { - if ($_SESSION["basiclayout"]==1 && $mobilepage!="invoice") return; + //In Phone basic layout hide some content depends situation + if ($_SESSION["basiclayout"]==1 && $mobilepage!="invoice" && $action!="order") return; + if (is_array($invoice->lines) && count($invoice->lines)) { $tmplines = array_reverse($invoice->lines); @@ -716,14 +714,6 @@ else { // No invoice generated yet print ''; -if ($_SESSION["basiclayout"]==1 && $mobilepage=="invoice") -{ - print ''; -} - if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takeposterminal"]}) { $soc = new Societe($db); diff --git a/htdocs/takepos/phone.php b/htdocs/takepos/phone.php new file mode 100644 index 00000000000..2bd21626f34 --- /dev/null +++ b/htdocs/takepos/phone.php @@ -0,0 +1,190 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/takepos/phone.php + * \ingroup takepos + * \brief TakePOS Phone screen + */ + +//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Not disabled cause need to load personalized language +//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Not disabled cause need to load personalized language +//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); +//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); +if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); +if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); +if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); +if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); +if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); + +require '../main.inc.php'; // Load $user and permissions +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php'; + +$place = (GETPOST('place', 'int') > 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Ba or Restaurant +$action = GETPOST('action', 'alpha'); +$setterminal = GETPOST('setterminal', 'int'); + +if ($setterminal>0) +{ + $_SESSION["takeposterminal"]=$setterminal; +} + +$langs->loadLangs(array("bills","orders","commercial","cashdesk","receiptprinter")); + +/* + * View + */ + +// Title +$title='TakePOS - Dolibarr '.DOL_VERSION; +if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $title='TakePOS - '.$conf->global->MAIN_APPLICATION_TITLE; +$head=' + + +'; +top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss); + +?> + + + + +global->TAKEPOS_NUM_TERMINALS!="1" && $_SESSION["takeposterminal"]=="") print '
'.$langs->trans('TerminalSelect').'
'; +?> +
+
+ + + + +
+
+
+
+
+
+
+
+ +close(); diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index c49479c7ce1..7ff588b12c0 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -63,7 +63,7 @@ if ($conf->browser->layout == 'phone') if ($_SESSION["takeposterminal"]!="" && $conf->global->TAKEPOS_PHONE_BASIC_LAYOUT==1) { $_SESSION["basiclayout"]=1; - header("Location: invoice.php?mobilepage=invoice"); + header("Location: phone.php?mobilepage=invoice"); exit; } } From 43ce1543d8f482d9cf4125e9bbbe915b201eade8 Mon Sep 17 00:00:00 2001 From: TuxGasy Date: Wed, 16 Oct 2019 17:37:20 +0200 Subject: [PATCH 353/980] Fix width unit label in product import --- htdocs/core/modules/modProduct.class.php | 2 +- htdocs/core/modules/modService.class.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/modProduct.class.php b/htdocs/core/modules/modProduct.class.php index 2b41a76ea45..f3b3cde38e5 100644 --- a/htdocs/core/modules/modProduct.class.php +++ b/htdocs/core/modules/modProduct.class.php @@ -383,7 +383,7 @@ class modProduct extends DolibarrModules 'p.length' => "Length", 'p.length_units' => "LengthUnit", 'p.width' => "Width", - 'p.width_units' => "VolumeUnits", + 'p.width_units' => "WidthUnits", 'p.height' => "Height", 'p.height_units' => "HeightUnit", 'p.surface' => "Surface", diff --git a/htdocs/core/modules/modService.class.php b/htdocs/core/modules/modService.class.php index 2f3e62903a4..20db49d5e69 100644 --- a/htdocs/core/modules/modService.class.php +++ b/htdocs/core/modules/modService.class.php @@ -360,7 +360,7 @@ class modService extends DolibarrModules 'p.length' => "Length", 'p.length_units' => "LengthUnit", 'p.width' => "Width", - 'p.width_units' => "VolumeUnits", + 'p.width_units' => "WidthUnits", 'p.height' => "Height", 'p.height_units' => "HeightUnit", 'p.surface' => "Surface", From 205967976cbc53ec91506ff8b73974c127f59f17 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 18:35:15 +0200 Subject: [PATCH 354/980] Can set a BOM to draft --- htdocs/bom/bom_card.php | 23 ++++++++----------- htdocs/core/actions_addupdatedelete.inc.php | 14 +++++++++++ htdocs/core/boxes/box_task.php | 1 - .../modulebuilder/template/myobject_card.php | 8 +++++-- 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 8e6551e92ea..0949fa1a334 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -405,20 +405,12 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Confirmation of action xxxx - if ($action == 'xxx') + if ($action == 'setdraft') { + $text = $langs->trans('ConfirmSetToDraft', $object->ref); + $formquestion=array(); - /* - $forcecombo=0; - if ($conf->browser->name == 'ie') $forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy - $formquestion = array( - // 'text' => $langs->trans("ConfirmClone"), - // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1), - // array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1), - // array('type' => 'other', 'name' => 'idwarehouse', 'label' => $langs->trans("SelectWarehouseForStockDecrease"), 'value' => $formproduct->selectWarehouses(GETPOST('idwarehouse')?GETPOST('idwarehouse'):'ifone', 'idwarehouse', '', 1, 0, 0, '', 0, $forcecombo)) - ); - */ - $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('XXX'), $text, 'confirm_xxx', $formquestion, 0, 1, 220); + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('SetToDraft'), $text, 'confirm_setdraft', $formquestion, 0, 1, 220); } // Call Hook formConfirm @@ -568,6 +560,11 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Send //print '' . $langs->trans('SendMail') . ''."\n"; + if ($user->rights->bom->write && $object->status == BOM::STATUS_VALIDATED) + { + print '' . $langs->trans("SetToDraft") . ''; + } + // Modify if ($user->rights->bom->write) { @@ -594,7 +591,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Close / Cancel if ($user->rights->bom->write && $object->status == BOM::STATUS_VALIDATED) { - print '' . $langs->trans("Disable") . ''; + print '' . $langs->trans("Disable") . ''; } // Re-open diff --git a/htdocs/core/actions_addupdatedelete.inc.php b/htdocs/core/actions_addupdatedelete.inc.php index 7082bc5e882..e87333e4c01 100644 --- a/htdocs/core/actions_addupdatedelete.inc.php +++ b/htdocs/core/actions_addupdatedelete.inc.php @@ -289,6 +289,20 @@ if ($action == 'confirm_close' && $confirm == 'yes' && $permissionedit) } } +// Action setdraft object +if ($action == 'confirm_setdraft' && $confirm == 'yes' && $permissionedit) +{ + $result = $object->setDraft($user); + if ($result >= 0) + { + // Nothing else done + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } +} + // Action reopen object if ($action == 'confirm_reopen' && $confirm == 'yes' && $permissionedit) { diff --git a/htdocs/core/boxes/box_task.php b/htdocs/core/boxes/box_task.php index dbe1757d55d..67ed84c0797 100644 --- a/htdocs/core/boxes/box_task.php +++ b/htdocs/core/boxes/box_task.php @@ -201,7 +201,6 @@ class box_task extends ModeleBoxes dol_print_error($this->db); } } - } /** diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index c443641ffd6..5727d596a6d 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -114,8 +114,6 @@ $permissiontoadd=$user->rights->mymodule->write; // Used by the include of actio /* * Actions - * - * Put here all code to do according to value of "action" parameter */ $parameters=array(); @@ -437,6 +435,12 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Send print '' . $langs->trans('SendMail') . ''."\n"; + // Back to draft + if (! empty($user->rights->mymodule->write) && $object->status == BOM::STATUS_VALIDATED) + { + print '' . $langs->trans("SetToDraft") . ''; + } + // Modify if (! empty($user->rights->mymodule->write)) { From 012ddd1cdcff471134e3cee971850c475ee8b71e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 18:37:26 +0200 Subject: [PATCH 355/980] Fix bom --- htdocs/bom/class/bom.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index d8e5387f075..9b2646b3e9d 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -95,8 +95,8 @@ class BOM extends CommonObject 'qty' => array('type'=>'real', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'default'=>1, 'position'=>55, 'notnull'=>1, 'isameasure'=>'1', 'css'=>'maxwidth75imp'), 'efficiency' => array('type'=>'real', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>-1, 'default'=>1, 'position'=>100, 'notnull'=>0, 'css'=>'maxwidth50imp', 'help'=>'ValueOfMeansLoss'), 'duration' => array('type'=>'real', 'label'=>'EstimatedDuration', 'enabled'=>1, 'visible'=>-1, 'position'=>101, 'notnull'=>-1, 'css'=>'maxwidth50imp', 'help'=>'EstimatedDurationDesc'), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>-1, 'position'=>161, 'notnull'=>-1,), - 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>-1, 'position'=>162, 'notnull'=>-1,), + 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>-2, 'position'=>161, 'notnull'=>-1,), + 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>-2, 'position'=>162, 'notnull'=>-1,), 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>300, 'notnull'=>1,), 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'position'=>501, 'notnull'=>1,), 'date_valid' => array('type'=>'datetime', 'label'=>'DateValidation', 'enabled'=>1, 'visible'=>-2, 'position'=>502, 'notnull'=>0,), From 41dd53170e8d9c6744098ed8d57f5b901444845a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 19:07:17 +0200 Subject: [PATCH 356/980] Code comment --- htdocs/core/class/conf.class.php | 2 +- htdocs/main.inc.php | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 287d8121213..72aa4bc4265 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -227,7 +227,7 @@ class Conf $filesList = explode(":", $this->global->LOCAL_CONSTS_FILES); foreach ($filesList as $file) { $file=dol_sanitizeFileName($file); - include_once DOL_DOCUMENT_ROOT . "/".$file."/".$file."_consts.php"; // This file must set $this->global->XXX vars. + include_once DOL_DOCUMENT_ROOT . "/".$file."/".$file."_consts.php"; // This file can run code like setting $this->global->XXX vars. } } diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index b7bef1aa46a..4fc94feb1f4 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1926,8 +1926,6 @@ function top_menu_bookmark(User $user, Translate $langs) global $menumanager; $html = ''; - - // Define $bookmarks if (! empty($conf->bookmark->enabled) && $user->rights->bookmark->lire) { @@ -2015,7 +2013,6 @@ function top_menu_search(User $user, Translate $langs) $buttonList.=''; - $searchInput = ''; @@ -2105,7 +2102,6 @@ function top_menu_search(User $user, Translate $langs) '; - return $html; } From 8a7a0b80e2728d910fcf8cdffce1742cf89af5e6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 16 Oct 2019 19:08:31 +0200 Subject: [PATCH 357/980] Fix remove warnings --- htdocs/core/class/conf.class.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index e3b6ac4e524..c595dd17938 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -226,10 +226,7 @@ class Conf $filesList = explode(":", $this->global->LOCAL_CONSTS_FILES); foreach ($filesList as $file) { $file=dol_sanitizeFileName($file); - include_once DOL_DOCUMENT_ROOT . "/".$file."/".$file."_consts.php"; - foreach ($file2bddconsts as $key=>$value) { - $this->global->$key=$value; - } + include_once DOL_DOCUMENT_ROOT . "/".$file."/".$file."_consts.php"; // This file can run code like setting $this->global->XXX vars. } } From e75f7d448c13d789e2c9156d10d65b531d42767b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 16 Oct 2019 20:00:01 +0200 Subject: [PATCH 358/980] Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen --- dev/initdata/generate-thirdparty.php | 1 - dev/setup/codesniffer/ruleset.xml | 12 ++++--- htdocs/accountancy/admin/accountmodel.php | 1 - htdocs/accountancy/admin/card.php | 1 - htdocs/accountancy/admin/categories.php | 2 -- htdocs/accountancy/admin/categories_list.php | 7 ++-- htdocs/accountancy/admin/closure.php | 1 - htdocs/accountancy/admin/defaultaccounts.php | 3 -- htdocs/accountancy/admin/export.php | 3 +- htdocs/accountancy/admin/journals_list.php | 1 - htdocs/accountancy/admin/productaccount.php | 2 -- .../bookkeeping/balancebymonth.php | 1 - htdocs/accountancy/bookkeeping/card.php | 3 -- htdocs/accountancy/bookkeeping/list.php | 5 --- .../accountancy/bookkeeping/listbyaccount.php | 3 -- .../thirdparty_lettering_customer.php | 2 -- .../thirdparty_lettering_supplier.php | 2 -- .../class/accountancyexport.class.php | 5 --- .../class/accountingaccount.class.php | 1 - .../accountancy/class/bookkeeping.class.php | 2 -- htdocs/accountancy/class/lettering.class.php | 1 - htdocs/accountancy/customer/card.php | 1 - htdocs/accountancy/customer/index.php | 4 --- htdocs/accountancy/expensereport/index.php | 3 -- htdocs/accountancy/journal/bankjournal.php | 3 -- .../journal/expensereportsjournal.php | 2 -- .../accountancy/journal/purchasesjournal.php | 2 -- htdocs/accountancy/journal/sellsjournal.php | 2 -- htdocs/accountancy/supplier/index.php | 3 -- htdocs/adherents/class/adherent.class.php | 1 - .../adherents/class/adherent_type.class.php | 1 - htdocs/adherents/document.php | 1 - .../adherents/tpl/linkedobjectblock.tpl.php | 1 - htdocs/adherents/type.php | 1 - htdocs/admin/agenda_other.php | 2 -- htdocs/admin/bank.php | 2 -- htdocs/admin/barcode.php | 3 -- htdocs/admin/bom.php | 2 -- htdocs/admin/boxes.php | 1 - htdocs/admin/commande.php | 3 -- htdocs/admin/company.php | 7 ---- htdocs/admin/compta.php | 1 - htdocs/admin/const.php | 1 - htdocs/admin/contract.php | 3 -- htdocs/admin/delais.php | 8 ----- htdocs/admin/dict.php | 1 - .../admin/dolistore/class/dolistore.class.php | 1 - htdocs/admin/expedition.php | 1 - htdocs/admin/expensereport.php | 3 -- htdocs/admin/external_rss.php | 1 - htdocs/admin/facture.php | 1 - htdocs/admin/fichinter.php | 3 -- htdocs/admin/holiday.php | 3 -- htdocs/admin/limits.php | 1 - htdocs/admin/livraison.php | 2 -- htdocs/admin/mails.php | 2 -- htdocs/admin/mails_emailing.php | 1 - htdocs/admin/menus/edit.php | 1 - htdocs/admin/modules.php | 1 - htdocs/admin/notification.php | 2 -- htdocs/admin/oauthlogintokens.php | 2 -- htdocs/admin/propal.php | 2 -- htdocs/admin/reception_setup.php | 1 - htdocs/admin/security.php | 2 -- htdocs/admin/sms.php | 1 - htdocs/admin/supplier_invoice.php | 2 -- htdocs/admin/supplier_order.php | 1 - htdocs/admin/supplier_payment.php | 2 -- htdocs/admin/supplier_proposal.php | 4 --- htdocs/admin/syslog.php | 1 - htdocs/admin/system/database-tables.php | 1 - htdocs/admin/ticket.php | 1 - htdocs/admin/translation.php | 2 -- htdocs/admin/user.php | 1 - htdocs/admin/usergroup.php | 1 - htdocs/admin/website.php | 1 - htdocs/asset/type.php | 1 - htdocs/barcode/printsheet.php | 1 - htdocs/blockedlog/admin/blockedlog_list.php | 1 - htdocs/blockedlog/ajax/authority.php | 2 -- htdocs/blockedlog/class/authority.class.php | 3 -- htdocs/blockedlog/class/blockedlog.class.php | 3 -- htdocs/bom/class/bom.class.php | 1 - htdocs/bookmarks/bookmarks.lib.php | 1 - htdocs/bookmarks/card.php | 1 - htdocs/cashdesk/admin/cashdesk.php | 2 -- htdocs/cashdesk/class/Facturation.class.php | 33 ------------------- htdocs/cashdesk/facturation.php | 2 -- htdocs/cashdesk/tpl/liste_articles.tpl.php | 2 -- htdocs/cashdesk/tpl/validation1.tpl.php | 5 --- htdocs/categories/class/categorie.class.php | 1 - htdocs/categories/photos.php | 1 - htdocs/categories/viewcat.php | 2 -- htdocs/comm/action/card.php | 1 - htdocs/comm/action/peruser.php | 2 -- htdocs/comm/action/rapport/index.php | 1 - htdocs/comm/index.php | 4 --- htdocs/comm/mailing/advtargetemailing.php | 8 ----- .../mailing/class/advtargetemailing.class.php | 8 ----- .../html.formadvtargetemailing.class.php | 8 ----- htdocs/comm/mailing/class/mailing.class.php | 2 -- htdocs/comm/propal/card.php | 1 - htdocs/comm/propal/class/propal.class.php | 3 -- htdocs/comm/propal/index.php | 1 - htdocs/comm/prospect/index.php | 1 - htdocs/commande/card.php | 1 - htdocs/commande/class/commande.class.php | 3 -- htdocs/commande/index.php | 5 --- htdocs/compta/accounting-files.php | 1 - htdocs/compta/bank/annuel.php | 1 - htdocs/compta/bank/bankentries_list.php | 4 --- htdocs/compta/bank/card.php | 1 - htdocs/compta/bank/categ.php | 3 -- htdocs/compta/bank/class/account.class.php | 2 -- htdocs/compta/bank/document.php | 1 - htdocs/compta/facture/card.php | 5 --- .../facture/class/facture-rec.class.php | 1 - htdocs/compta/facture/class/facture.class.php | 4 --- htdocs/compta/facture/list.php | 1 - htdocs/compta/localtax/card.php | 1 - htdocs/compta/localtax/clients.php | 2 -- htdocs/compta/paiement/cheque/card.php | 1 - .../cheque/class/remisecheque.class.php | 2 -- .../compta/paiement/class/paiement.class.php | 4 --- htdocs/compta/paiement/rapport.php | 1 - htdocs/compta/paiement_charge.php | 1 - .../class/bonprelevement.class.php | 2 -- htdocs/compta/recap-compta.php | 2 -- htdocs/compta/resultat/result.php | 1 - htdocs/compta/sociales/card.php | 1 - .../class/paymentsocialcontribution.class.php | 1 - htdocs/compta/stats/byratecountry.php | 5 --- htdocs/compta/stats/cabyprodserv.php | 5 --- htdocs/compta/stats/cabyuser.php | 5 --- htdocs/compta/stats/casoc.php | 5 --- htdocs/compta/tva/clients.php | 1 - htdocs/contact/class/contact.class.php | 1 - htdocs/contact/consumption.php | 2 -- htdocs/contrat/card.php | 1 - htdocs/contrat/class/contrat.class.php | 4 --- htdocs/contrat/index.php | 1 - htdocs/core/actions_builddoc.inc.php | 1 - htdocs/core/actions_massactions.inc.php | 2 -- htdocs/core/ajax/ajaxdirtree.php | 1 - htdocs/core/ajax/check_notifications.php | 1 - htdocs/core/ajax/price.php | 2 -- htdocs/core/ajax/ziptown.php | 1 - htdocs/core/boxes/box_activity.php | 1 - htdocs/core/boxes/box_goodcustomers.php | 1 - htdocs/core/boxes/box_project.php | 1 - htdocs/core/boxes/box_task.php | 1 - htdocs/core/class/CMailFile.class.php | 1 - htdocs/core/class/CSMSFile.class.php | 1 - .../core/class/commondocgenerator.class.php | 1 - htdocs/core/class/commonobject.class.php | 4 --- htdocs/core/class/discount.class.php | 1 - htdocs/core/class/extrafields.class.php | 2 -- htdocs/core/class/html.form.class.php | 1 - htdocs/core/class/html.formcron.class.php | 1 - htdocs/core/class/html.formother.class.php | 1 - htdocs/core/class/infobox.class.php | 1 - htdocs/core/class/link.class.php | 1 - htdocs/core/class/utils.class.php | 1 - htdocs/core/lib/bank.lib.php | 1 - htdocs/core/lib/functions.lib.php | 1 - htdocs/core/lib/functions2.lib.php | 1 - htdocs/core/lib/json.lib.php | 1 - htdocs/core/lib/ldap.lib.php | 1 - htdocs/core/lib/modulebuilder.lib.php | 1 - htdocs/core/lib/pdf.lib.php | 1 - htdocs/core/lib/product.lib.php | 1 - htdocs/core/lib/ticket.lib.php | 1 - htdocs/core/lib/usergroups.lib.php | 9 ----- .../expedition/doc/pdf_rouget.modules.php | 1 - .../facture/doc/pdf_sponge.modules.php | 4 --- .../modules/printing/printgcp.modules.php | 1 - .../modules/propale/doc/pdf_azur.modules.php | 2 -- .../modules/propale/doc/pdf_cyan.modules.php | 2 -- .../reception/doc/pdf_squille.modules.php | 3 -- .../modGeneratePassStandard.class.php | 1 - .../stock/doc/pdf_stdmovement.modules.php | 1 - htdocs/core/tpl/advtarget.tpl.php | 4 --- htdocs/core/tpl/contacts.tpl.php | 3 -- htdocs/core/tpl/object_discounts.tpl.php | 2 -- htdocs/core/tpl/objectline_create.tpl.php | 1 - htdocs/core/tpl/objectline_edit.tpl.php | 1 - htdocs/core/tpl/resource_view.tpl.php | 1 - .../interface_80_modStripe_Stripe.class.php | 1 - ...rface_90_modSociete_ContactRoles.class.php | 1 - ...face_99_modZapier_ZapierTriggers.class.php | 1 - .../class/actions_datapolicy.class.php | 5 --- .../datapolicy/class/datapolicycron.class.php | 1 - htdocs/datapolicy/mailing.php | 1 - htdocs/don/card.php | 4 --- htdocs/don/class/don.class.php | 1 - htdocs/don/class/paymentdonation.class.php | 1 - htdocs/don/index.php | 1 - htdocs/don/list.php | 1 - htdocs/don/payment/payment.php | 1 - htdocs/expedition/card.php | 1 - htdocs/expedition/class/expedition.class.php | 2 -- htdocs/expedition/note.php | 1 - .../class/expensereport.class.php | 4 --- htdocs/expensereport/export_csv.php | 2 -- .../tpl/linkedobjectblock.tpl.php | 1 - htdocs/fichinter/card-rec.php | 1 - htdocs/fichinter/class/fichinter.class.php | 4 --- .../class/fournisseur.commande.class.php | 4 --- .../fournisseur.commande.dispatch.class.php | 1 - .../fourn/class/fournisseur.facture.class.php | 2 -- .../fourn/class/fournisseur.product.class.php | 2 -- htdocs/fourn/class/paiementfourn.class.php | 1 - htdocs/fourn/commande/card.php | 2 -- htdocs/fourn/commande/dispatch.php | 2 -- htdocs/fourn/commande/index.php | 1 - htdocs/fourn/commande/list.php | 3 -- htdocs/fourn/commande/orderstoinvoice.php | 3 -- htdocs/fourn/facture/card.php | 1 - htdocs/fourn/facture/list.php | 1 - htdocs/fourn/index.php | 1 - htdocs/ftp/admin/ftpclient.php | 1 - htdocs/ftp/index.php | 1 - htdocs/holiday/card.php | 3 -- htdocs/holiday/class/holiday.class.php | 12 ------- htdocs/hrm/establishment/card.php | 1 - htdocs/imports/import.php | 2 -- htdocs/install/check.php | 2 -- htdocs/install/step1.php | 1 - htdocs/install/upgrade2.php | 2 -- htdocs/livraison/card.php | 2 -- htdocs/livraison/class/livraison.class.php | 1 - htdocs/loan/calcmens.php | 1 - htdocs/loan/createschedule.php | 4 --- htdocs/loan/schedule.php | 4 --- htdocs/margin/checkMargins.php | 1 - htdocs/margin/customerMargins.php | 1 - htdocs/margin/productMargins.php | 1 - htdocs/modulebuilder/index.php | 3 -- .../template/class/actions_mymodule.class.php | 2 -- .../template/class/myobject.class.php | 1 - ..._99_modMyModule_MyModuleTriggers.class.php | 1 - htdocs/mrp/class/mo.class.php | 1 - htdocs/opensurvey/card.php | 2 -- .../class/opensurveysondage.class.php | 1 - htdocs/opensurvey/results.php | 3 -- htdocs/opensurvey/wizard/choix_autre.php | 1 - htdocs/opensurvey/wizard/choix_date.php | 5 ++- htdocs/printing/admin/printing.php | 1 - htdocs/product/admin/price_rules.php | 4 --- htdocs/product/admin/product.php | 1 - htdocs/product/admin/product_tools.php | 1 - htdocs/product/ajax/products.php | 3 +- .../canvas/product/tpl/card_create.tpl.php | 1 - .../canvas/service/tpl/card_create.tpl.php | 1 - htdocs/product/card.php | 1 - htdocs/product/class/product.class.php | 3 -- htdocs/product/class/productbatch.class.php | 2 -- .../class/productcustomerprice.class.php | 9 ----- .../class/propalmergepdfproduct.class.php | 2 -- htdocs/product/document.php | 3 -- htdocs/product/price.php | 3 -- htdocs/product/reassort.php | 1 - htdocs/product/stock/card.php | 1 - htdocs/product/stock/class/entrepot.class.php | 1 - .../stock/class/mouvementstock.class.php | 1 - .../class/productstockentrepot.class.php | 1 - htdocs/product/stock/massstockmove.php | 2 -- htdocs/product/stock/movement_card.php | 2 +- htdocs/product/stock/product.php | 6 ---- htdocs/product/stock/productlot_document.php | 2 -- htdocs/product/stock/productlot_list.php | 1 - htdocs/projet/card.php | 1 - htdocs/projet/class/project.class.php | 1 - htdocs/projet/class/task.class.php | 2 -- htdocs/projet/element.php | 2 -- htdocs/projet/ganttview.php | 1 - htdocs/projet/graph_opportunities.inc.php | 1 - htdocs/projet/index.php | 1 - htdocs/public/donations/donateurs_code.php | 1 - htdocs/public/onlinesign/newonlinesign.php | 2 -- htdocs/public/opensurvey/studs.php | 1 - htdocs/public/payment/newpayment.php | 1 - htdocs/public/stripe/ipn.php | 4 --- htdocs/public/test/test_arrays.php | 1 - htdocs/public/ticket/create_ticket.php | 1 - htdocs/public/ticket/list.php | 1 - htdocs/reception/card.php | 2 -- htdocs/reception/class/reception.class.php | 1 - htdocs/reception/list.php | 2 -- htdocs/reception/note.php | 1 - .../class/html.formresource.class.php | 2 -- htdocs/resource/element_resource.php | 3 -- htdocs/salaries/card.php | 1 - htdocs/salaries/class/paymentsalary.class.php | 1 - htdocs/societe/card.php | 2 -- .../societe/class/api_thirdparties.class.php | 2 -- .../class/companybankaccount.class.php | 3 -- htdocs/societe/consumption.php | 2 -- htdocs/societe/paymentmodes.php | 4 --- htdocs/societe/price.php | 8 ----- htdocs/stripe/charge.php | 1 - htdocs/stripe/payment.php | 3 -- htdocs/stripe/payout.php | 1 - htdocs/stripe/transaction.php | 1 - htdocs/supplier_proposal/card.php | 2 -- .../class/supplier_proposal.class.php | 3 -- htdocs/support/inc.php | 1 - htdocs/takepos/admin/terminal.php | 1 - htdocs/theme/eldy/main_menu_fa_icons.inc.php | 1 - htdocs/theme/md/badges.inc.php | 1 - htdocs/ticket/index.php | 1 - htdocs/ticket/list.php | 1 - htdocs/user/card.php | 1 - htdocs/user/class/user.class.php | 1 - htdocs/user/class/userbankaccount.class.php | 1 - htdocs/user/clicktodial.php | 1 - htdocs/user/group/card.php | 1 - htdocs/user/notify/card.php | 1 - htdocs/user/passwordforgotten.php | 2 -- htdocs/variants/admin/admin.php | 1 - htdocs/variants/card.php | 9 ----- .../variants/class/ProductAttribute.class.php | 1 - .../class/ProductAttributeValue.class.php | 1 - .../class/ProductCombination.class.php | 6 ---- htdocs/variants/combinations.php | 12 ------- htdocs/variants/create.php | 1 - htdocs/variants/create_val.php | 1 - htdocs/variants/generator.php | 2 -- htdocs/webservices/server_actioncomm.php | 1 - htdocs/webservices/server_contact.php | 3 -- htdocs/webservices/server_invoice.php | 2 -- htdocs/webservices/server_order.php | 4 --- .../webservices/server_productorservice.php | 1 - htdocs/webservices/server_thirdparty.php | 2 -- htdocs/website/class/website.class.php | 1 - htdocs/website/index.php | 1 - .../accountancy/export-thirdpartyaccount.php | 1 - 337 files changed, 15 insertions(+), 710 deletions(-) diff --git a/dev/initdata/generate-thirdparty.php b/dev/initdata/generate-thirdparty.php index 54e17c7f8d7..f1e0f4f360b 100755 --- a/dev/initdata/generate-thirdparty.php +++ b/dev/initdata/generate-thirdparty.php @@ -116,7 +116,6 @@ for ($s = 0 ; $s < GEN_NUMBER_SOCIETE ; $s++) $contact->firstname = $listoflastname[mt_rand(0, count($listoflastname)-1)]; if ( $contact->create($user) ) { - } } diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 6773e1d2c03..32c44ce91e4 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -122,14 +122,14 @@ - + 0 0 - + @@ -195,7 +195,7 @@ --> - + @@ -213,6 +213,8 @@ 0 + + @@ -337,7 +339,7 @@ - @@ -375,7 +377,7 @@ 0 - + 0 diff --git a/htdocs/accountancy/admin/accountmodel.php b/htdocs/accountancy/admin/accountmodel.php index 06a2fb60d67..2f23cd3eae8 100644 --- a/htdocs/accountancy/admin/accountmodel.php +++ b/htdocs/accountancy/admin/accountmodel.php @@ -677,7 +677,6 @@ if ($id) { foreach ($fieldlist as $field => $value) { - $showfield=1; $class="left"; $valuetoshow=$obj->{$fieldlist[$field]}; diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php index c49ed42741b..f54c477ff52 100644 --- a/htdocs/accountancy/admin/card.php +++ b/htdocs/accountancy/admin/card.php @@ -273,7 +273,6 @@ if ($action == 'create') { print ''; } elseif ($id > 0 || $ref) { - $result = $object->fetch($id, $ref, 1); if ($result > 0) { diff --git a/htdocs/accountancy/admin/categories.php b/htdocs/accountancy/admin/categories.php index a7fe40acefc..5fdd43eb020 100644 --- a/htdocs/accountancy/admin/categories.php +++ b/htdocs/accountancy/admin/categories.php @@ -130,7 +130,6 @@ if (! empty($cat_id)) } if (is_array($accountingcategory->lines_cptbk) && count($accountingcategory->lines_cptbk) > 0) { - print $form->multiselectarray('cpt_bk', $arraykeyvalue, GETPOST('cpt_bk', 'array'), null, null, null, null, "90%"); print '
'; /*print ''; print ''; foreach ($list_account_main as $key) { - print ''; // Param $label = $langs->trans($key); diff --git a/htdocs/accountancy/admin/defaultaccounts.php b/htdocs/accountancy/admin/defaultaccounts.php index 13d3a267956..6b47578761c 100644 --- a/htdocs/accountancy/admin/defaultaccounts.php +++ b/htdocs/accountancy/admin/defaultaccounts.php @@ -83,7 +83,6 @@ if (GETPOST('change_chart', 'alpha')) $chartofaccounts = GETPOST('chartofaccounts', 'int'); if (! empty($chartofaccounts)) { - if (! dolibarr_set_const($db, 'CHARTOFACCOUNTS', $chartofaccounts, 'chaine', 0, '', $conf->entity)) { $error ++; } @@ -144,7 +143,6 @@ print ''; print '
'; foreach ($list_account_main as $key) { - print ''; // Param $label = $langs->trans($key); @@ -172,7 +170,6 @@ print '
'; print '
'; foreach ($list_account as $key) { - print ''; // Param $label = $langs->trans($key); diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php index e13a66998b7..e506f5bf512 100644 --- a/htdocs/accountancy/admin/export.php +++ b/htdocs/accountancy/admin/export.php @@ -114,7 +114,7 @@ if ($action == 'update') { $error ++; } } - } + } if (! $error) { // reload @@ -203,7 +203,6 @@ print "\n"; $num = count($main_option); if ($num) { foreach ($main_option as $key) { - print ''; // Param diff --git a/htdocs/accountancy/admin/journals_list.php b/htdocs/accountancy/admin/journals_list.php index fcdf4de032c..44fe3e936cd 100644 --- a/htdocs/accountancy/admin/journals_list.php +++ b/htdocs/accountancy/admin/journals_list.php @@ -609,7 +609,6 @@ if ($id) $langs->load("accountancy"); foreach ($fieldlist as $field => $value) { - $showfield=1; $class="left"; $valuetoshow=$obj->{$fieldlist[$field]}; diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php index 2922d3bdf23..091018dc909 100644 --- a/htdocs/accountancy/admin/productaccount.php +++ b/htdocs/accountancy/admin/productaccount.php @@ -117,7 +117,6 @@ if ($action == 'update') { ); if (in_array($accounting_product_mode, $accounting_product_modes)) { - if (! dolibarr_set_const($db, 'ACCOUNTING_PRODUCT_MODE', $accounting_product_mode, 'chaine', 0, '', $conf->entity)) { $error ++; } @@ -129,7 +128,6 @@ if ($action == 'update') { if (! empty($btn_changeaccount)) { //$msg = '
' . $langs->trans("Processing") . '...
'; if (! empty($chk_prod)) { - $accounting = new AccountingAccount($db); //$msg .= '
' . count($chk_prod) . ' ' . $langs->trans("SelectedLines") . '
'; diff --git a/htdocs/accountancy/bookkeeping/balancebymonth.php b/htdocs/accountancy/bookkeeping/balancebymonth.php index d0e9b940074..bdc78911513 100644 --- a/htdocs/accountancy/bookkeeping/balancebymonth.php +++ b/htdocs/accountancy/bookkeeping/balancebymonth.php @@ -105,7 +105,6 @@ if ($resql) { $num = $db->num_rows($resql); while ( $i < $num ) { - $row = $db->fetch_row($resql); print ''; diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index 5f9ba37d341..cc6307bae2c 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -83,7 +83,6 @@ $object = new BookKeeping($db); */ if ($action == "confirm_update") { - $error = 0; if ((floatval($debit) != 0.0) && (floatval($credit) != 0.0)) { @@ -585,7 +584,6 @@ if ($action == 'create') if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } else { - print load_fiche_titre($langs->trans("ListeMvts"), '', ''); print ''; @@ -601,7 +599,6 @@ if ($action == 'create') print "
' . length_accountg($row[0]) . '
"; if (count($object->linesmvt) > 0) { - $total_debit = 0; $total_credit = 0; diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index b14a118a342..5158e12ebb6 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -316,7 +316,6 @@ if (empty($reshook)) } if ($action == 'delbookkeeping' && $user->rights->accounting->mouvements->supprimer) { - $import_key = GETPOST('importkey', 'alpha'); if (! empty($import_key)) { @@ -331,7 +330,6 @@ if ($action == 'delbookkeeping' && $user->rights->accounting->mouvements->suppri } } if ($action == 'delbookkeepingyearconfirm' && $user->rights->accounting->mouvements->supprimer_tous) { - $delyear = GETPOST('delyear', 'int'); if ($delyear==-1) { $delyear=0; @@ -362,7 +360,6 @@ if ($action == 'delbookkeepingyearconfirm' && $user->rights->accounting->mouveme } } if ($action == 'delmouvconfirm' && $user->rights->accounting->mouvements->supprimer) { - $mvt_num = GETPOST('mvt_num', 'int'); if (! empty($mvt_num)) { @@ -468,7 +465,6 @@ if (! empty($sortfield)) { // Export into a file with format defined into setup (FEC, CSV, ...) // Must be after definition of $sql if ($action == 'export_file' && $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); @@ -578,7 +574,6 @@ if ($action == 'delmouv') { print $formconfirm; } if ($action == 'delbookkeepingyear') { - $form_question = array (); $delyear = GETPOST('delyear'); $deljournal = GETPOST('deljournal'); diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php index d91772a6ab3..4f275e3e2b0 100644 --- a/htdocs/accountancy/bookkeeping/listbyaccount.php +++ b/htdocs/accountancy/bookkeeping/listbyaccount.php @@ -179,7 +179,6 @@ if (! empty($search_credit)) { if ($action == 'delmouvconfirm') { - $mvt_num = GETPOST('mvt_num', 'int'); if (! empty($mvt_num)) { @@ -229,7 +228,6 @@ if ($action == 'delmouv') { print $formconfirm; } if ($action == 'delbookkeepingyear') { - $form_question = array (); $delyear = GETPOST('delyear'); @@ -338,7 +336,6 @@ while ($i < min($num, $limit)) // Is it a break ? if ($accountg != $displayed_account_number || ! isset($displayed_account_number)) { - // Affiche un Sous-Total par compte comptable if (isset($displayed_account_number)) { print ''; diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php index b7a19101758..4bc60fc904f 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php @@ -100,7 +100,6 @@ if ($result < 0) */ if ($action == 'lettering') { - $result = $lettering->updateLettering($toselect); if ($result < 0) { @@ -251,7 +250,6 @@ if ($resql) { $tmp = ''; while ( $obj = $db->fetch_object($resql) ) { - if ($tmp != $obj->lettering_code || empty($tmp)) $tmp = $obj->lettering_code; /*if ($tmp != $obj->lettering_code || empty($obj->lettering_code))*/ $solde += ($obj->credit - $obj->debit); diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php index eaa741e1722..df513f8d074 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php @@ -99,7 +99,6 @@ if ($result<0) * Action */ if ($action == 'lettering') { - $result = $lettering->updateLettering($toselect); if ($result < 0) { @@ -248,7 +247,6 @@ if ($resql) { $solde = 0; $tmp = ''; while ($obj = $db->fetch_object($resql)) { - if ($tmp != $obj->lettering_code || empty($tmp)) $tmp = $obj->lettering_code; /*if ($tmp != $obj->lettering_code || empty($obj->lettering_code))*/ $solde += ($obj->credit - $obj->debit); diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 84a851eea50..7e8f14f2a53 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -549,7 +549,6 @@ class AccountancyExport $end_line = "\n"; foreach ($objectLines as $line) { - $date = dol_print_date($line->doc_date, '%d%m%Y'); print $line->id . $separator; @@ -585,7 +584,6 @@ class AccountancyExport $end_line = "\n"; foreach ($objectLines as $line) { - $date = dol_print_date($line->doc_date, '%d%m%Y'); print $line->piece_num . $separator; @@ -625,7 +623,6 @@ class AccountancyExport $end_line = "\n"; foreach ($objectLines as $line) { - $date = dol_print_date($line->doc_date, '%d/%m/%Y'); print $date . $separator; @@ -934,7 +931,6 @@ class AccountancyExport $end_line = "\r\n"; foreach ($objectLines as $line) { - $date_document = dol_print_date($line->doc_date, '%Y%m%d'); $date_creation = dol_print_date($line->date_creation, '%Y%m%d'); @@ -1087,7 +1083,6 @@ class AccountancyExport print $end_line; foreach($objectLines as $line) { - $date = dol_print_date($line->doc_date, '%Y%m%d'); print $date . $separator; //Date diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php index f9c2e3391ba..21cbdeb9662 100644 --- a/htdocs/accountancy/class/accountingaccount.class.php +++ b/htdocs/accountancy/class/accountingaccount.class.php @@ -407,7 +407,6 @@ class AccountingAccount extends CommonObject $result = $this->checkUsage(); if ($result > 0) { - $this->db->begin(); // if (! $error) { diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 16dc458d833..24d2936680a 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -1584,9 +1584,7 @@ class BookKeeping extends CommonObject dol_syslog(get_class($this) . "::" . __METHOD__, LOG_DEBUG); $result = $this->db->query($sql); if ($result) { - while ($obj = $this->db->fetch_object($result)) { - $line = new BookKeepingLine(); $line->id = $obj->rowid; diff --git a/htdocs/accountancy/class/lettering.class.php b/htdocs/accountancy/class/lettering.class.php index e20b49dbd25..ef63fc8b15f 100644 --- a/htdocs/accountancy/class/lettering.class.php +++ b/htdocs/accountancy/class/lettering.class.php @@ -149,7 +149,6 @@ class Lettering extends BookKeeping } } } elseif ($obj->type == 'payment') { - $sql = 'SELECT DISTINCT bk.rowid, fac.ref, fac.ref, pay.fk_bank, fac.rowid as fact_id'; $sql .= " FROM " . MAIN_DB_PREFIX . "facture fac "; $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement_facture as payfac ON payfac.fk_facture=fac.rowid"; diff --git a/htdocs/accountancy/customer/card.php b/htdocs/accountancy/customer/card.php index 52057485a30..00c4a945ff9 100644 --- a/htdocs/accountancy/customer/card.php +++ b/htdocs/accountancy/customer/card.php @@ -112,7 +112,6 @@ if (! empty($id)) { $i = 0; if ($num_lines) { - $objp = $db->fetch_object($result); print '' . "\n"; diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index 68649aa264d..f43ca801c25 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -97,7 +97,6 @@ if ($action == 'clean' || $action == 'validatehistory') } if ($action == 'validatehistory') { - $error = 0; $db->begin(); @@ -195,7 +194,6 @@ if ($resql) { $num = $db->num_rows($resql); while ( $row = $db->fetch_row($resql)) { - print ''; for($i = 1; $i <= 12; $i ++) { print ''; diff --git a/htdocs/accountancy/expensereport/index.php b/htdocs/accountancy/expensereport/index.php index d3fc63d3bf8..ea855921c5a 100644 --- a/htdocs/accountancy/expensereport/index.php +++ b/htdocs/accountancy/expensereport/index.php @@ -94,7 +94,6 @@ if ($action == 'clean' || $action == 'validatehistory') } if ($action == 'validatehistory') { - $error = 0; $db->begin(); @@ -187,7 +186,6 @@ if ($resql) { $num = $db->num_rows($resql); while ( $row = $db->fetch_row($resql)) { - print ' diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index b24e3361d16..2848ed4119e 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -94,7 +94,6 @@ $hookmanager->initHooks(array('membertypecard','globalcard')); */ if ($cancel) { - $action=''; if (! empty($backtopage)) { diff --git a/htdocs/admin/agenda_other.php b/htdocs/admin/agenda_other.php index a13b7bd1580..3caa3418af5 100644 --- a/htdocs/admin/agenda_other.php +++ b/htdocs/admin/agenda_other.php @@ -268,7 +268,6 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) // Active if (in_array($name, $def)) { - print ''."\n"; if (! empty($conf->global->AGENDA_USE_EVENT_TYPE)) { - print ''; print ''."\n"; print ''."\n"; diff --git a/htdocs/admin/bank.php b/htdocs/admin/bank.php index 689202c023d..70b273e2fcc 100644 --- a/htdocs/admin/bank.php +++ b/htdocs/admin/bank.php @@ -253,7 +253,6 @@ $i = 0; $nbofbank = count($bankorder); while ($i < $nbofbank) { - print ''; print ''; // Chemin du binaire genbarcode sous linux if (! isset($_SERVER['WINDIR'])) { - print ''; print ''; print ''; print ''; print ''; print ''; print ''; @@ -381,7 +380,6 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { - if (file_exists($dir.'/'.$file)) { $name = substr($file, 4, dol_strlen($file) -16); diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index ca90c836929..1e158bc7a7f 100644 --- a/htdocs/admin/boxes.php +++ b/htdocs/admin/boxes.php @@ -474,7 +474,6 @@ print ''; // Activate FileCache - Developement if ($conf->global->MAIN_FEATURES_LEVEL == 2 || ! empty($conf->global->MAIN_ACTIVATE_FILECACHE)) { - print ''; diff --git a/htdocs/admin/commande.php b/htdocs/admin/commande.php index cb07d741a06..5bb2dbe79ed 100644 --- a/htdocs/admin/commande.php +++ b/htdocs/admin/commande.php @@ -282,7 +282,6 @@ foreach ($dirmodels as $reldir) $handle = opendir($dir); if (is_resource($handle)) { - while (($file = readdir($handle))!==false) { if (substr($file, 0, 13) == 'mod_commande_' && substr($file, dol_strlen($file)-3, 3) == 'php') @@ -299,7 +298,6 @@ foreach ($dirmodels as $reldir) if ($module->isEnabled()) { - print ''; @@ -423,7 +421,6 @@ foreach ($dirmodels as $reldir) { if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { - if (file_exists($dir.'/'.$file)) { $name = substr($file, 4, dol_strlen($file) -16); diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index dde962fe9bc..e6ea9a2cb17 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -470,7 +470,6 @@ print ''."\n"; // Barcode if (! empty($conf->barcode->enabled)) { - print ''; print ''; @@ -555,7 +554,6 @@ print ''; // ProfID1 if ($langs->transcountry("ProfId1", $mysoc->country_code) != '-') { - print ''; @@ -359,7 +357,6 @@ foreach ($dirmodels as $reldir) { if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { - if (file_exists($dir.'/'.$file)) { $name = substr($file, 4, dol_strlen($file) -16); diff --git a/htdocs/admin/delais.php b/htdocs/admin/delais.php index d69a14deb2e..7e724c52280 100644 --- a/htdocs/admin/delais.php +++ b/htdocs/admin/delais.php @@ -265,7 +265,6 @@ print '
'; print ''.$langs->trans("DescWeather").' '; if($action == 'edit') { - $str_mode_std = $langs->trans('MeteoStdModEnabled').' : '.$langs->trans('MeteoUseMod', $langs->transnoentitiesnoconv('MeteoPercentageMod')); $str_mode_percentage = $langs->trans('MeteoPercentageModEnabled').' : '.$langs->trans('MeteoUseMod', $langs->transnoentitiesnoconv('MeteoStdMod')); if(empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) $str_mode_enabled = $str_mode_std; @@ -292,8 +291,6 @@ $text=''; $options='class="valignmiddle" height="60px"'; if ($action == 'edit') { - - print '
global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '' : 'style="display:none;"').'>'; print '
'; @@ -364,9 +361,7 @@ if ($action == 'edit') { global->MAIN_USE_METEO_WITH_PERCENTAGE)) { - print '
'; print '
'; print img_weather($text, 0, $options); @@ -386,7 +381,6 @@ if ($action == 'edit') { print '
'; print '
'; } else { - print '
'; print '
'; print img_weather($text, 0, $options); @@ -411,11 +405,9 @@ if ($action == 'edit') { print '
'; if($action == 'edit') { - print '
'; print '
'; } else { - print '
'; } diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 31ade656480..501a6d18113 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -1728,7 +1728,6 @@ else { if ($showemptyline) { - print '
'; $showemptyline=0; } diff --git a/htdocs/admin/dolistore/class/dolistore.class.php b/htdocs/admin/dolistore/class/dolistore.class.php index 4951f57c22f..e65eb2bbb0a 100644 --- a/htdocs/admin/dolistore/class/dolistore.class.php +++ b/htdocs/admin/dolistore/class/dolistore.class.php @@ -226,7 +226,6 @@ class Dolistore $html .= self::get_categories($cat->id); $html .= "\n"; } else { - } } diff --git a/htdocs/admin/expedition.php b/htdocs/admin/expedition.php index e8dbfab9942..29ef6d40a1e 100644 --- a/htdocs/admin/expedition.php +++ b/htdocs/admin/expedition.php @@ -366,7 +366,6 @@ foreach ($dirmodels as $reldir) { if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { - if (file_exists($dir.'/'.$file)) { $name = substr($file, 4, dol_strlen($file) -16); diff --git a/htdocs/admin/expensereport.php b/htdocs/admin/expensereport.php index 8dde3449b6e..8a5cef82ceb 100644 --- a/htdocs/admin/expensereport.php +++ b/htdocs/admin/expensereport.php @@ -247,7 +247,6 @@ foreach ($dirmodels as $reldir) if ($module->isEnabled()) { - print ''; @@ -367,10 +366,8 @@ foreach ($dirmodels as $reldir) { if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { - if (file_exists($dir.'/'.$file)) { - $name = substr($file, 4, dol_strlen($file) -16); $classname = substr($file, 0, dol_strlen($file) -12); diff --git a/htdocs/admin/external_rss.php b/htdocs/admin/external_rss.php index d16f3e493f5..e3adeaca890 100644 --- a/htdocs/admin/external_rss.php +++ b/htdocs/admin/external_rss.php @@ -300,7 +300,6 @@ if ($resql) // Logo if ($result > 0 && empty($rss->error)) { - print ''; print ""; print ''; @@ -303,7 +302,6 @@ print '
'; if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { - /* * Documents models for Holidays */ @@ -369,7 +367,6 @@ foreach ($dirmodels as $reldir) { if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { - if (file_exists($dir.'/'.$file)) { $name = substr($file, 4, dol_strlen($file) -16); diff --git a/htdocs/admin/limits.php b/htdocs/admin/limits.php index ea19b7034a6..27f99ecb4f1 100644 --- a/htdocs/admin/limits.php +++ b/htdocs/admin/limits.php @@ -172,7 +172,6 @@ if (empty($mysoc->country_code)) } else { - // Show examples print ''.$langs->trans("ExamplesWithCurrentSetup").":
\n"; diff --git a/htdocs/admin/livraison.php b/htdocs/admin/livraison.php index 1f8a74f6eb8..99cd481095b 100644 --- a/htdocs/admin/livraison.php +++ b/htdocs/admin/livraison.php @@ -356,8 +356,6 @@ foreach ($dirmodels as $reldir) { if (file_exists($dir.'/'.$file)) { - - $name = substr($file, 4, dol_strlen($file) -16); $classname = substr($file, 0, dol_strlen($file) -12); diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php index ff2b788a026..79d152fb7bf 100644 --- a/htdocs/admin/mails.php +++ b/htdocs/admin/mails.php @@ -364,7 +364,6 @@ if ($action == 'edit') // ID if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { - $mainstmpid=(! empty($conf->global->MAIN_MAIL_SMTPS_ID)?$conf->global->MAIN_MAIL_SMTPS_ID:''); print ''; print ''; print ''; diff --git a/htdocs/admin/propal.php b/htdocs/admin/propal.php index 4c8f4188e4b..db9efb0e5c7 100644 --- a/htdocs/admin/propal.php +++ b/htdocs/admin/propal.php @@ -294,7 +294,6 @@ foreach ($dirmodels as $reldir) if ($module->isEnabled()) { - print ''; @@ -596,7 +595,6 @@ if (empty($conf->facture->enabled)) $i = 0; while ($i < $num) { - $row = $db->fetch_row($resql); print '
'.$langs->trans("SubTotal").':'.price($sous_total_debit).''.price($sous_total_credit).'
'; if ($row[0] == 'tobind') { @@ -271,7 +269,6 @@ if ($resql) { $num = $db->num_rows($resql); while ( $row = $db->fetch_row($resql)) { - print '
'; if ($row[0] == 'tobind') { @@ -398,7 +395,6 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange. $num = $db->num_rows($resql); while ($row = $db->fetch_row($resql)) { - print '
' . $row[0] . '' . price(price2num($row[$i])) . '
'; if ($row[0] == 'tobind') { @@ -259,7 +257,6 @@ if ($resql) { $num = $db->num_rows($resql); while ( $row = $db->fetch_row($resql)) { - print '
'; if ($row[0] == 'tobind') { diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 2dd4f845c39..6e709835f42 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -167,7 +167,6 @@ $journal_label = $accountingjournalstatic->label; dol_syslog("accountancy/journal/bankjournal.php", LOG_DEBUG); $result = $db->query($sql); if ($result) { - $num = $db->num_rows($result); //print $sql; @@ -268,10 +267,8 @@ if ($result) { // get_url may return -1 which is not traversable if (is_array($links) && count($links) > 0) { - // Now loop on each link of record in bank. foreach ($links as $key => $val) { - if (in_array($links[$key]['type'], array('sc', 'payment_sc', 'payment', 'payment_supplier', 'payment_vat', 'payment_expensereport', 'banktransfert', 'payment_donation', 'member', 'payment_loan', 'payment_salary', 'payment_various'))) { // So we excluded 'company' and 'user' here. We want only payment lines diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php index 23d97360563..6cefc893b39 100644 --- a/htdocs/accountancy/journal/expensereportsjournal.php +++ b/htdocs/accountancy/journal/expensereportsjournal.php @@ -115,7 +115,6 @@ $sql .= " ORDER BY er.date_debut"; dol_syslog('accountancy/journal/expensereportsjournal.php', LOG_DEBUG); $result = $db->query($sql); if ($result) { - $taber = array (); $tabht = array (); $tabtva = array (); @@ -485,7 +484,6 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! } if (empty($action) || $action == 'view') { - llxHeader('', $langs->trans("ExpenseReportsJournal")); $nom = $langs->trans("ExpenseReportsJournal") . ' | ' . $accountingjournalstatic->getNomUrl(0, 1, 1, '', 1); diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index c83c004c6b2..ddf456c85f0 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -242,7 +242,6 @@ if ($action == 'writebookkeeping') { $invoicestatic = new FactureFournisseur($db); foreach ($tabfac as $key => $val) { // Loop on each invoice - $errorforline = 0; $totalcredit = 0; @@ -716,7 +715,6 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! } if (empty($action) || $action == 'view') { - llxHeader('', $langs->trans("PurchasesJournal")); $nom = $langs->trans("PurchasesJournal") . ' | ' . $accountingjournalstatic->getNomUrl(0, 1, 1, '', 1); diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 17b2657b5dc..ed56065df0a 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -255,7 +255,6 @@ if ($action == 'writebookkeeping') { $invoicestatic = new Facture($db); foreach ($tabfac as $key => $val) { // Loop on each invoice - $errorforline = 0; $totalcredit = 0; @@ -654,7 +653,6 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! if (empty($action) || $action == 'view') { - llxHeader('', $langs->trans("SellsJournal")); $nom = $langs->trans("SellsJournal") . ' | ' . $accountingjournalstatic->getNomUrl(0, 1, 1, '', 1); diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index 88a599d1fc5..faa48ac9176 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -95,7 +95,6 @@ if ($action == 'clean' || $action == 'validatehistory') } if ($action == 'validatehistory') { - $error = 0; $db->begin(); @@ -187,7 +186,6 @@ if ($resql) { $num = $db->num_rows($resql); while ( $row = $db->fetch_row($resql)) { - print '
'; if ($row[0] == 'tobind') { @@ -258,7 +256,6 @@ if ($resql) { $num = $db->num_rows($resql); while ( $row = $db->fetch_row($resql)) { - print '
'; if ($row[0] == 'tobind') { diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 2bcbc21c3a0..e9bd50de0ff 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2370,7 +2370,6 @@ class Adherent extends CommonObject $langs->load("orders"); if (! dol_strlen($modele)) { - $modele = 'standard'; if ($this->modelpdf) { diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index a57a90a3aac..94df4b10ba0 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -383,7 +383,6 @@ class AdherentType extends CommonObject $result = $this->db->query($sql); if ($result) { - $this->description = $this->db->escape($this->note); // Multilangs diff --git a/htdocs/adherents/document.php b/htdocs/adherents/document.php index 092827ef731..a6343596632 100644 --- a/htdocs/adherents/document.php +++ b/htdocs/adherents/document.php @@ -90,7 +90,6 @@ if ($id > 0) $result=$membert->fetch($object->typeid); if ($result > 0) { - // Build file list $filearray=dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview.*\.png)$', $sortfield, (strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC), 1); $totalsize=0; diff --git a/htdocs/adherents/tpl/linkedobjectblock.tpl.php b/htdocs/adherents/tpl/linkedobjectblock.tpl.php index 4334a54605b..8e2ec3ba730 100644 --- a/htdocs/adherents/tpl/linkedobjectblock.tpl.php +++ b/htdocs/adherents/tpl/linkedobjectblock.tpl.php @@ -39,7 +39,6 @@ $langs->load("members"); $total=0; foreach($linkedObjectBlock as $key => $objectlink) { - ?>
trans("Subscription"); ?>'."\n"; if ($conf->global->ACTION_EVENT_ADDON_PDF != "$name") { @@ -363,7 +362,6 @@ print '
'.$langs->trans("AGENDA_USE_EVENT_TYPE_DEFAULT").'
' . $bankorder[$i][0] . "\n"; print $bankorder[$i][1]; @@ -341,7 +340,6 @@ foreach ($dirmodels as $reldir) { foreach ($filelist as $file) { if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { - if (file_exists($dir . '/' . $file)) { $name = substr($file, 4, dol_strlen($file) - 16); $classname = substr($file, 0, dol_strlen($file) - 12); diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php index 0475cdfccf1..b6c9a5dec9a 100644 --- a/htdocs/admin/barcode.php +++ b/htdocs/admin/barcode.php @@ -319,7 +319,6 @@ print '
'.$langs->trans("GenbarcodeLocation").''; @@ -335,7 +334,6 @@ if (! isset($_SERVER['WINDIR'])) // Module products if (! empty($conf->product->enabled)) { - print '
'.$langs->trans("SetDefaultBarcodeTypeProducts").''; @@ -346,7 +344,6 @@ if (! empty($conf->product->enabled)) // Module thirdparty if (! empty($conf->societe->enabled)) { - print '
'.$langs->trans("SetDefaultBarcodeTypeThirdParties").''; diff --git a/htdocs/admin/bom.php b/htdocs/admin/bom.php index e5e12d41808..5bf01de1053 100644 --- a/htdocs/admin/bom.php +++ b/htdocs/admin/bom.php @@ -255,7 +255,6 @@ foreach ($dirmodels as $reldir) if ($module->isEnabled()) { - print '
'.$module->name."\n"; print $module->info(); print '
'.$langs->trans("EnableFileCache").''; print $form->selectyesno('MAIN_ACTIVATE_FILECACHE', $conf->global->MAIN_ACTIVATE_FILECACHE, 1); print '
'.$module->name."\n"; print $module->info(); print '
'; print '
'; if (! empty($mysoc->country_code)) { @@ -571,7 +569,6 @@ if ($langs->transcountry("ProfId1", $mysoc->country_code) != '-') // ProfId2 if ($langs->transcountry("ProfId2", $mysoc->country_code) != '-') { - print '
'; if (! empty($mysoc->country_code)) { @@ -587,7 +584,6 @@ if ($langs->transcountry("ProfId2", $mysoc->country_code) != '-') // ProfId3 if ($langs->transcountry("ProfId3", $mysoc->country_code) != '-') { - print '
'; if (! empty($mysoc->country_code)) { @@ -603,7 +599,6 @@ if ($langs->transcountry("ProfId3", $mysoc->country_code) != '-') // ProfId4 if ($langs->transcountry("ProfId4", $mysoc->country_code) != '-') { - print '
'; if (! empty($mysoc->country_code)) { @@ -619,7 +614,6 @@ if ($langs->transcountry("ProfId4", $mysoc->country_code) != '-') // ProfId5 if ($langs->transcountry("ProfId5", $mysoc->country_code) != '-') { - print '
'; if (! empty($mysoc->country_code)) { @@ -635,7 +629,6 @@ if ($langs->transcountry("ProfId5", $mysoc->country_code) != '-') // ProfId6 if ($langs->transcountry("ProfId6", $mysoc->country_code) != '-') { - print '
'; if (! empty($mysoc->country_code)) { diff --git a/htdocs/admin/compta.php b/htdocs/admin/compta.php index bb2bfdde409..0955d7c6d17 100644 --- a/htdocs/admin/compta.php +++ b/htdocs/admin/compta.php @@ -68,7 +68,6 @@ if ($action == 'update') if (in_array($accounting_mode, $accounting_modes)) { - if (!dolibarr_set_const($db, 'ACCOUNTING_MODE', $accounting_mode, 'chaine', 0, '', $conf->entity)) { $error++; } diff --git a/htdocs/admin/const.php b/htdocs/admin/const.php index 53555a35586..37559c3d4ab 100644 --- a/htdocs/admin/const.php +++ b/htdocs/admin/const.php @@ -118,7 +118,6 @@ if (! empty($consts) && $action == 'update') // Mass delete if (! empty($consts) && $action == 'delete') { - $nbdeleted=0; foreach($consts as $const) { diff --git a/htdocs/admin/contract.php b/htdocs/admin/contract.php index e6c8c15c0d4..0aa97dd36e6 100644 --- a/htdocs/admin/contract.php +++ b/htdocs/admin/contract.php @@ -219,7 +219,6 @@ foreach ($dirmodels as $reldir) $handle = opendir($dir); if (is_resource($handle)) { - while (($file = readdir($handle))!==false) { if (substr($file, 0, 13) == 'mod_contract_' && substr($file, dol_strlen($file)-3, 3) == 'php') @@ -236,7 +235,6 @@ foreach ($dirmodels as $reldir) if ($module->isEnabled()) { - print '
'.$module->nom."\n"; print $module->info(); print '
   
'.$module->nom."\n"; print $module->info(); print '
".$langs->trans("Logo")."'; diff --git a/htdocs/admin/facture.php b/htdocs/admin/facture.php index 759038930ef..dccfcdfdda1 100644 --- a/htdocs/admin/facture.php +++ b/htdocs/admin/facture.php @@ -720,7 +720,6 @@ if ($resql) $i = 0; while ($i < $num) { - $row = $db->fetch_row($resql); print '
'.$module->nom."\n"; print $module->info(); print '
'.$langs->trans("MAIN_MAIL_SMTPS_ID").''; // SuperAdministrator access only @@ -384,7 +383,6 @@ if ($action == 'edit') // PW if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { - $mainsmtppw=(! empty($conf->global->MAIN_MAIL_SMTPS_PW)?$conf->global->MAIN_MAIL_SMTPS_PW:''); print '
'.$langs->trans("MAIN_MAIL_SMTPS_PW").''; // SuperAdministrator access only diff --git a/htdocs/admin/mails_emailing.php b/htdocs/admin/mails_emailing.php index 3d6cfc2d228..94f3820c5b9 100644 --- a/htdocs/admin/mails_emailing.php +++ b/htdocs/admin/mails_emailing.php @@ -316,7 +316,6 @@ if ($action == 'edit') // ID if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE_EMAILING) && in_array($conf->global->MAIN_MAIL_SENDMODE_EMAILING, array('smtps', 'swiftmailer')))) { - $mainstmpid=(! empty($conf->global->MAIN_MAIL_SMTPS_ID_EMAILING)?$conf->global->MAIN_MAIL_SMTPS_ID_EMAILING:''); print '
'.$langs->trans("MAIN_MAIL_SMTPS_ID").''; // SuperAdministrator access only diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php index 43888d3e061..5a54a9e5c9f 100644 --- a/htdocs/admin/menus/edit.php +++ b/htdocs/admin/menus/edit.php @@ -323,7 +323,6 @@ if ($action == 'create') $res = $db->query($sql); if ($res) { - while ($menu = $db->fetch_array($res)) { $parent_rowid = $menu['rowid']; diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index f26e657679a..687c3750c89 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -729,7 +729,6 @@ if ($mode == 'common') print ''; } else { - print ''; print img_picto($langs->trans("Activated"), 'switch_on'); print ''; diff --git a/htdocs/admin/notification.php b/htdocs/admin/notification.php index cc1d53d14f8..6d1a5c57cf6 100644 --- a/htdocs/admin/notification.php +++ b/htdocs/admin/notification.php @@ -164,7 +164,6 @@ print ''; $i=0; foreach($listofnotifiedevents as $notifiedevent) { - $label=$langs->trans("Notify_".$notifiedevent['code']); //!=$langs->trans("Notify_".$notifiedevent['code'])?$langs->trans("Notify_".$notifiedevent['code']):$notifiedevent['label']; $elementLabel = $langs->trans(ucfirst($notifiedevent['elementtype'])); @@ -209,7 +208,6 @@ $listofnotifiedevents=$notificationtrigger->getListOfManagedEvents(); foreach($listofnotifiedevents as $notifiedevent) { - $label=$langs->trans("Notify_".$notifiedevent['code']); //!=$langs->trans("Notify_".$notifiedevent['code'])?$langs->trans("Notify_".$notifiedevent['code']):$notifiedevent['label']; $elementLabel = $langs->trans(ucfirst($notifiedevent['elementtype'])); diff --git a/htdocs/admin/oauthlogintokens.php b/htdocs/admin/oauthlogintokens.php index 20c0ae222eb..bb3c83c2ee2 100644 --- a/htdocs/admin/oauthlogintokens.php +++ b/htdocs/admin/oauthlogintokens.php @@ -122,7 +122,6 @@ dol_fiche_head($head, 'tokengeneration', '', -1, 'technic'); if ($mode == 'setup' && $user->admin) { - print $langs->trans("OAuthSetupForLogin")."

\n"; foreach($list as $key) @@ -381,7 +380,6 @@ if ($mode == 'userconf' && $user->admin) $sql = 'SELECT p.rowid, p.printer_name, p.printer_location, p.printer_id, p.copy, p.module, p.driver, p.userid, u.login FROM '.MAIN_DB_PREFIX.'printing as p, '.MAIN_DB_PREFIX.'user as u WHERE p.userid=u.rowid'; $resql = $db->query($sql); while ($row=$db->fetch_array($resql)) { - print '
'.$row['login'].''.$row['module'].'
'.$module->nom."\n"; print $module->info(); print '
'; diff --git a/htdocs/admin/sms.php b/htdocs/admin/sms.php index 73cad8f69ad..833d6c25d22 100644 --- a/htdocs/admin/sms.php +++ b/htdocs/admin/sms.php @@ -207,7 +207,6 @@ if ($action == 'edit') } else { - if (! count($listofmethods)) print '
'.$langs->trans("NoSmsEngine", 'DoliStore').'
'; print '
'; diff --git a/htdocs/admin/supplier_invoice.php b/htdocs/admin/supplier_invoice.php index 27a126c7ef6..9cb387aedc9 100644 --- a/htdocs/admin/supplier_invoice.php +++ b/htdocs/admin/supplier_invoice.php @@ -237,7 +237,6 @@ foreach ($dirmodels as $reldir) $handle = opendir($dir); if (is_resource($handle)) { - while (($file = readdir($handle))!==false) { if (substr($file, 0, 24) == 'mod_facture_fournisseur_' && substr($file, dol_strlen($file)-3, 3) == 'php') @@ -365,7 +364,6 @@ foreach ($dirmodels as $reldir) if (is_dir($dir)) { - $handle=opendir($dir); diff --git a/htdocs/admin/supplier_order.php b/htdocs/admin/supplier_order.php index ac7d5e98539..6369efb1361 100644 --- a/htdocs/admin/supplier_order.php +++ b/htdocs/admin/supplier_order.php @@ -267,7 +267,6 @@ foreach ($dirmodels as $reldir) $handle = opendir($dir); if (is_resource($handle)) { - while (($file = readdir($handle))!==false) { if (substr($file, 0, 25) == 'mod_commande_fournisseur_' && substr($file, dol_strlen($file)-3, 3) == 'php') diff --git a/htdocs/admin/supplier_payment.php b/htdocs/admin/supplier_payment.php index 65bb18fcc5f..8da430a9fa1 100644 --- a/htdocs/admin/supplier_payment.php +++ b/htdocs/admin/supplier_payment.php @@ -213,7 +213,6 @@ foreach ($dirmodels as $reldir) $handle = opendir($dir); if (is_resource($handle)) { - while (($file = readdir($handle))!==false) { if (! is_dir($dir.$file) || (substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS')) @@ -337,7 +336,6 @@ foreach ($dirmodels as $reldir) if (is_dir($dir)) { - $handle=opendir($dir); diff --git a/htdocs/admin/supplier_proposal.php b/htdocs/admin/supplier_proposal.php index 55fb4329d39..bd2cb10a3ad 100644 --- a/htdocs/admin/supplier_proposal.php +++ b/htdocs/admin/supplier_proposal.php @@ -246,7 +246,6 @@ foreach ($dirmodels as $reldir) $handle = opendir($dir); if (is_resource($handle)) { - while (($file = readdir($handle))!==false) { if (substr($file, 0, 22) == 'mod_supplier_proposal_' && substr($file, dol_strlen($file)-3, 3) == 'php') @@ -263,7 +262,6 @@ foreach ($dirmodels as $reldir) if ($module->isEnabled()) { - print ''; @@ -537,7 +535,6 @@ print ''; if ($conf->banque->enabled) { - print ''; } diff --git a/htdocs/admin/syslog.php b/htdocs/admin/syslog.php index 92823045a62..bd93d7a9fc5 100644 --- a/htdocs/admin/syslog.php +++ b/htdocs/admin/syslog.php @@ -50,7 +50,6 @@ foreach ($dirsyslogs as $reldir) { $handle = opendir($newdir); if (is_resource($handle)) { - while (($file = readdir($handle)) !== false) { if (substr($file, 0, 11) == 'mod_syslog_' && substr($file, dol_strlen($file) - 3, 3) == 'php') { $file = substr($file, 0, dol_strlen($file) - 4); diff --git a/htdocs/admin/system/database-tables.php b/htdocs/admin/system/database-tables.php index 195b5c83143..01836dd4a72 100644 --- a/htdocs/admin/system/database-tables.php +++ b/htdocs/admin/system/database-tables.php @@ -202,7 +202,6 @@ else if ($resql) { while ($row = $db->fetch_row($resql)) { - $rescount = $db->query("SELECT COUNT(*) FROM " . $row[0]); if ($rescount) { $row_count = $db->fetch_row($rescount); diff --git a/htdocs/admin/ticket.php b/htdocs/admin/ticket.php index d97252dc53b..8bb39f0056b 100644 --- a/htdocs/admin/ticket.php +++ b/htdocs/admin/ticket.php @@ -214,7 +214,6 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { - while (($file = readdir($handle)) !== false) { if (preg_match('/^(mod_.*)\.php$/i', $file, $reg)) { $file = $reg[1]; diff --git a/htdocs/admin/translation.php b/htdocs/admin/translation.php index ba2dde77bec..4d234e266e8 100644 --- a/htdocs/admin/translation.php +++ b/htdocs/admin/translation.php @@ -108,7 +108,6 @@ if ($action == 'update') } else { - $db->rollback(); if ($db->lasterrno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { @@ -158,7 +157,6 @@ if ($action == 'add') } else { - $db->rollback(); if ($db->lasterrno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { diff --git a/htdocs/admin/user.php b/htdocs/admin/user.php index 2ead8e03210..ba6c3660bcd 100644 --- a/htdocs/admin/user.php +++ b/htdocs/admin/user.php @@ -239,7 +239,6 @@ foreach ($dirmodels as $reldir) { if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { - if (file_exists($dir.'/'.$file)) { $name = substr($file, 4, dol_strlen($file) -16); diff --git a/htdocs/admin/usergroup.php b/htdocs/admin/usergroup.php index c0c4e3c57d8..190391b462b 100644 --- a/htdocs/admin/usergroup.php +++ b/htdocs/admin/usergroup.php @@ -186,7 +186,6 @@ foreach ($dirmodels as $reldir) { if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { - if (file_exists($dir.'/'.$file)) { $name = substr($file, 4, dol_strlen($file) -16); diff --git a/htdocs/admin/website.php b/htdocs/admin/website.php index 1c7fe75f0de..0343fecf69d 100644 --- a/htdocs/admin/website.php +++ b/htdocs/admin/website.php @@ -572,7 +572,6 @@ if ($id) // Lines with values while ($i < $num) { - $obj = $db->fetch_object($resql); //print_r($obj); print ''; diff --git a/htdocs/asset/type.php b/htdocs/asset/type.php index 6803f9d65e7..459bd2d8edc 100644 --- a/htdocs/asset/type.php +++ b/htdocs/asset/type.php @@ -83,7 +83,6 @@ $hookmanager->initHooks(array('assettypecard','globalcard')); */ if ($cancel) { - $action=''; if (! empty($backtopage)) diff --git a/htdocs/barcode/printsheet.php b/htdocs/barcode/printsheet.php index a0bb66f2b81..1ed7c449868 100644 --- a/htdocs/barcode/printsheet.php +++ b/htdocs/barcode/printsheet.php @@ -197,7 +197,6 @@ if ($action == 'builddoc') // For labels if ($mode == 'label') { - $txtforsticker="%PHOTO%"; // Photo will be barcode image, %BARCODE% posible when using TCPDF generator $textleft=make_substitutions((empty($conf->global->BARCODE_LABEL_LEFT_TEXT)?$txtforsticker:$conf->global->BARCODE_LABEL_LEFT_TEXT), $substitutionarray); $textheader=make_substitutions((empty($conf->global->BARCODE_LABEL_HEADER_TEXT)?'':$conf->global->BARCODE_LABEL_HEADER_TEXT), $substitutionarray); diff --git a/htdocs/blockedlog/admin/blockedlog_list.php b/htdocs/blockedlog/admin/blockedlog_list.php index b44f27f7fe8..1f0c82e780b 100644 --- a/htdocs/blockedlog/admin/blockedlog_list.php +++ b/htdocs/blockedlog/admin/blockedlog_list.php @@ -92,7 +92,6 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' } if ($action === 'downloadblockchain') { - $auth = new BlockedLogAuthority($db); $bc = $auth->getLocalBlockChain(); diff --git a/htdocs/blockedlog/ajax/authority.php b/htdocs/blockedlog/ajax/authority.php index bcbb4a66f91..45479c1e4db 100644 --- a/htdocs/blockedlog/ajax/authority.php +++ b/htdocs/blockedlog/ajax/authority.php @@ -51,7 +51,6 @@ if($auth->fetch(0, $signature)<=0) { if(!empty($hash)) { - echo $auth->checkBlockchain($hash) ? 'hashisok' : 'hashisjunk'; } elseif(!empty($newblock)){ @@ -62,7 +61,6 @@ elseif(!empty($newblock)){ echo 'blockadded'; } else{ - echo 'blockalreadyadded'; } } diff --git a/htdocs/blockedlog/class/authority.class.php b/htdocs/blockedlog/class/authority.class.php index 7325f9ae50c..cec6410b7b6 100644 --- a/htdocs/blockedlog/class/authority.class.php +++ b/htdocs/blockedlog/class/authority.class.php @@ -310,17 +310,14 @@ class BlockedLogAuthority $signature=$block_static->getSignature(); foreach($blocks as &$block) { - $url = $conf->global->BLOCKEDLOG_AUTHORITY_URL.'/blockedlog/ajax/authority.php?s='.$signature.'&b='.$block->signature; $res = file_get_contents($url); echo $block->signature.' '.$url. ' '.$res.'
'; if($res === 'blockalreadyadded' || $res === 'blockadded') { - $block->setCertified(); } else { - $this->error = $langs->trans('ImpossibleToContactAuthority ', $url); return -1; } diff --git a/htdocs/blockedlog/class/blockedlog.class.php b/htdocs/blockedlog/class/blockedlog.class.php index 14366f46de7..24548f736f2 100644 --- a/htdocs/blockedlog/class/blockedlog.class.php +++ b/htdocs/blockedlog/class/blockedlog.class.php @@ -977,7 +977,6 @@ class BlockedLog if (empty($cachedlogs)) $cachedlogs=array(); if ($element=='all') { - $sql="SELECT rowid FROM ".MAIN_DB_PREFIX."blockedlog WHERE entity=".$conf->entity; } @@ -1006,7 +1005,6 @@ class BlockedLog $res = $this->db->query($sql); if($res) { - $results=array(); $i = 0; @@ -1046,7 +1044,6 @@ class BlockedLog global $db,$conf,$mysoc; if (empty($conf->global->BLOCKEDLOG_ENTITY_FINGERPRINT)) { // creation of a unique fingerprint - require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/security.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php'; diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 9b2646b3e9d..84560d5a533 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -943,7 +943,6 @@ class BOM extends CommonObject $langs->load("mrp"); if (! dol_strlen($modele)) { - $modele = 'standard'; if ($this->modelpdf) { diff --git a/htdocs/bookmarks/bookmarks.lib.php b/htdocs/bookmarks/bookmarks.lib.php index 1e54cc816fd..8128815ef3b 100644 --- a/htdocs/bookmarks/bookmarks.lib.php +++ b/htdocs/bookmarks/bookmarks.lib.php @@ -38,7 +38,6 @@ function printBookmarksList($aDb, $aLangs) $ret = ''."\n"; if (! empty($conf->use_javascript_ajax)) { // Bookmark autosubmit can't work when javascript is off. - require_once DOL_DOCUMENT_ROOT.'/bookmarks/class/bookmark.class.php'; if (! isset($conf->global->BOOKMARKS_SHOW_IN_MENU)) $conf->global->BOOKMARKS_SHOW_IN_MENU=5; diff --git a/htdocs/bookmarks/card.php b/htdocs/bookmarks/card.php index 0ba6d7569b5..7feb0aac37a 100644 --- a/htdocs/bookmarks/card.php +++ b/htdocs/bookmarks/card.php @@ -54,7 +54,6 @@ $object=new Bookmark($db); if ($action == 'add' || $action == 'addproduct' || $action == 'update') { - if ($action == 'update') { $invertedaction = 'edit'; } else { diff --git a/htdocs/cashdesk/admin/cashdesk.php b/htdocs/cashdesk/admin/cashdesk.php index 22b8fea0a05..f9c438149e7 100644 --- a/htdocs/cashdesk/admin/cashdesk.php +++ b/htdocs/cashdesk/admin/cashdesk.php @@ -125,7 +125,6 @@ print $form->select_company($conf->global->CASHDESK_ID_THIRDPARTY, 'socid', '(s. print ''; if (! empty($conf->banque->enabled)) { - print ''; print ''; // Force warehouse (this is not a default value) print ''); } else { - echo (''); } ?> @@ -87,16 +85,13 @@ $langs->loadLangs(array("main","bills","banks")); getsetPaymentMode() == 'DIF' ) { - echo (''); } else { - echo (''); } // Affichage du montant rendu (reglement en especes) if ( $obj_facturation->montantRendu() ) { - echo (''); } diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index 48bb4179afc..cd3885b77b1 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -1637,7 +1637,6 @@ class Categorie extends CommonObject { $nbfile = count($file['name']); for ($i = 0; $i <= $nbfile; $i ++) { - $originImage = $dir . $file['name'][$i]; // Cree fichier en taille origine diff --git a/htdocs/categories/photos.php b/htdocs/categories/photos.php index 70cf6e3e8f7..6def65666a0 100644 --- a/htdocs/categories/photos.php +++ b/htdocs/categories/photos.php @@ -69,7 +69,6 @@ if ($id > 0) if (isset($_FILES['userfile']) && $_FILES['userfile']['size'] > 0 && $_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC)) { if ($object->id) { - $file = $_FILES['userfile']; if (is_array($file['name']) && count($file['name']) > 0) { diff --git a/htdocs/categories/viewcat.php b/htdocs/categories/viewcat.php index 737b488c090..fb246b5358b 100644 --- a/htdocs/categories/viewcat.php +++ b/htdocs/categories/viewcat.php @@ -125,7 +125,6 @@ if ($id > 0 && $removeelem > 0) $elementtype = 'member'; } elseif ($type == Categorie::TYPE_CONTACT && $user->rights->societe->creer) { - require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; $tmpobject = new Contact($db); $result = $tmpobject->fetch($removeelem); @@ -644,7 +643,6 @@ if ($type == Categorie::TYPE_CONTACT) } else { - print ''; print ''; print ''; diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index cc3accde763..6e8c5535f03 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -278,7 +278,6 @@ if (empty($reshook) && $action == 'add') $taskid = GETPOST('taskid', 'int'); if(!empty($taskid)){ - $taskProject = new Task($db); if($taskProject->fetch($taskid)>0){ $object->fk_project = $taskProject->fk_project; diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index e6ee5e9d1d0..fc343f443a2 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -631,7 +631,6 @@ $currentdaytoshow = $firstdaytoshow; echo '
'; while($currentdaytoshow<$lastdaytoshow) { - echo '
'.$module->nom."\n"; print $module->info(); print '
'; print $langs->trans("BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL").' '; if (! empty($conf->use_javascript_ajax)) @@ -559,7 +556,6 @@ if ($conf->banque->enabled) } else { - print '
'; print $langs->trans("BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL").' '.$langs->trans('NotAvailable').'
'.$langs->trans("CashDeskBankAccountForSell").''; $form->select_comptes($conf->global->CASHDESK_ID_BANKACCOUNT_CASH, 'CASHDESK_ID_BANKACCOUNT_CASH', 0, "courant=2", 1); @@ -146,7 +145,6 @@ if (! empty($conf->banque->enabled)) if (! empty($conf->stock->enabled)) { - print '
'.$langs->trans("CashDeskDoNotDecreaseStock").''; if (empty($conf->productbatch->enabled)) { diff --git a/htdocs/cashdesk/class/Facturation.class.php b/htdocs/cashdesk/class/Facturation.class.php index 40b338ccca6..2f8a993829e 100644 --- a/htdocs/cashdesk/class/Facturation.class.php +++ b/htdocs/cashdesk/class/Facturation.class.php @@ -296,12 +296,10 @@ class Facturation } elseif ( $aId == 'RESET' ) { - $this->id = null; } else { - $this->id = $aId; } } @@ -343,7 +341,6 @@ class Facturation } elseif ( $aQte == 'RESET' ) { - $this->qte = null; } else @@ -408,13 +405,10 @@ class Facturation { if (is_null($aMontantRemise)) { - return $this->montant_remise; } elseif ( $aMontantRemise == 'RESET' ) { - $this->montant_remise = null; } else { - $this->montant_remise = $aMontantRemise; } } @@ -429,13 +423,10 @@ class Facturation { if (is_null($aPrix)) { - return $this->prix; } elseif ( $aPrix == 'RESET' ) { - $this->prix = null; } else { - $this->prix = $aPrix; } } @@ -449,13 +440,10 @@ class Facturation public function tva($aTva = null) { if (is_null($aTva)) { - return $this->tva; } elseif ( $aTva == 'RESET' ) { - $this->tva = null; } else { - $this->tva = $aTva; } } @@ -469,13 +457,10 @@ class Facturation public function numInvoice($aNumFacture = null) { if (is_null($aNumFacture)) { - return $this->num_facture; } elseif ( $aNumFacture == 'RESET' ) { - $this->num_facture = null; } else { - $this->num_facture = $aNumFacture; } } @@ -490,13 +475,10 @@ class Facturation { if (is_null($aModeReglement)) { - return $this->mode_reglement; } elseif ( $aModeReglement == 'RESET' ) { - $this->mode_reglement = null; } else { - $this->mode_reglement = $aModeReglement; } } @@ -511,13 +493,10 @@ class Facturation { if (is_null($aMontantEncaisse)) { - return $this->montant_encaisse; } elseif ( $aMontantEncaisse == 'RESET' ) { - $this->montant_encaisse = null; } else { - $this->montant_encaisse = $aMontantEncaisse; } } @@ -532,13 +511,10 @@ class Facturation { if (is_null($aMontantRendu)) { - return $this->montant_rendu; } elseif ( $aMontantRendu == 'RESET' ) { - $this->montant_rendu = null; } else { - $this->montant_rendu = $aMontantRendu; } } @@ -552,13 +528,10 @@ class Facturation public function paiementLe($aPaiementLe = null) { if (is_null($aPaiementLe)) { - return $this->paiement_le; } elseif ( $aPaiementLe == 'RESET' ) { - $this->paiement_le = null; } else { - $this->paiement_le = $aPaiementLe; } } @@ -572,13 +545,10 @@ class Facturation public function prixTotalHt($aTotalHt = null) { if (is_null($aTotalHt)) { - return $this->prix_total_ht; } elseif ( $aTotalHt == 'RESET' ) { - $this->prix_total_ht = null; } else { - $this->prix_total_ht = $aTotalHt; } } @@ -592,13 +562,10 @@ class Facturation public function montantTva($aMontantTva = null) { if (is_null($aMontantTva)) { - return $this->montant_tva; } elseif ( $aMontantTva == 'RESET' ) { - $this->montant_tva = null; } else { - $this->montant_tva = $aMontantTva; } } diff --git a/htdocs/cashdesk/facturation.php b/htdocs/cashdesk/facturation.php index f7e7c3af501..c52ecccef77 100644 --- a/htdocs/cashdesk/facturation.php +++ b/htdocs/cashdesk/facturation.php @@ -36,7 +36,6 @@ $form=new Form($db); // Get list of articles (in warehouse '$conf_fkentrepot' if defined and stock module enabled) if ( GETPOST('filtre', 'alpha') ) { - // Avec filtre $ret=array(); $i=0; @@ -88,7 +87,6 @@ if ( GETPOST('filtre', 'alpha') ) { } $tab_designations=$ret; } else { - // Sans filtre $ret=array(); $i=0; diff --git a/htdocs/cashdesk/tpl/liste_articles.tpl.php b/htdocs/cashdesk/tpl/liste_articles.tpl.php index a35abb46789..d892c1df0e6 100644 --- a/htdocs/cashdesk/tpl/liste_articles.tpl.php +++ b/htdocs/cashdesk/tpl/liste_articles.tpl.php @@ -57,10 +57,8 @@ else echo ('

'.$tab[$i]['ref'].' - '.$tab[$i]['label'].'

'."\n"); if ( $tab[$i]['remise_percent'] > 0 ) { - $remise_percent = ' -'.$tab[$i]['remise_percent'].'%'; } else { - $remise_percent = ''; } diff --git a/htdocs/cashdesk/tpl/validation1.tpl.php b/htdocs/cashdesk/tpl/validation1.tpl.php index 64f340983ff..e8c16712b74 100644 --- a/htdocs/cashdesk/tpl/validation1.tpl.php +++ b/htdocs/cashdesk/tpl/validation1.tpl.php @@ -39,12 +39,10 @@ $langs->loadLangs(array("main","bills","banks")); montantTva() ) { - echo ('
'.$langs->trans("VAT").''.price(price2num($obj_facturation->montantTva(), 'MT'), 0, $langs, 0, 0, -1, $conf->currency).'
'.$langs->trans("VAT").''.$langs->trans("NoVAT").'
'.$langs->trans("DateDue").''.$obj_facturation->paiementLe().'
'.$langs->trans("Received").''.price(price2num($obj_facturation->montantEncaisse(), 'MT'), 0, $langs, 0, 0, -1, $conf->currency).'
'.$langs->trans("Change").''.price(price2num($obj_facturation->montantRendu(), 'MT'), 0, $langs, 0, 0, -1, $conf->currency).'
'; echo ''; @@ -779,7 +778,6 @@ while($currentdaytoshow<$lastdaytoshow) { $i = 0; for ($iter_day = 0; $iter_day < 8; $iter_day++) { - if (($i + 1) < $begin_d || ($i + 1) > $end_d) { $i++; diff --git a/htdocs/comm/action/rapport/index.php b/htdocs/comm/action/rapport/index.php index 5d1b7ba919e..8cc1774cba2 100644 --- a/htdocs/comm/action/rapport/index.php +++ b/htdocs/comm/action/rapport/index.php @@ -144,7 +144,6 @@ if ($resql) if ($obj) { - print ''; // Date diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php index c0d2c4703ca..43af4f8f1c0 100644 --- a/htdocs/comm/index.php +++ b/htdocs/comm/index.php @@ -208,7 +208,6 @@ if (! empty($conf->propal->enabled) && $user->rights->propal->lire) } else { - print ''; } print "
'.$langs->trans("NoProposal").'

"; @@ -379,7 +378,6 @@ if (! empty($conf->commande->enabled) && $user->rights->commande->lire) } else { - print ''.$langs->trans("NoOrder").''; } print ""; @@ -430,7 +428,6 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->commande $nbofloop=min($num, (empty($conf->global->MAIN_MAXLIST_OVERLOAD)?500:$conf->global->MAIN_MAXLIST_OVERLOAD)); while ($i < $nbofloop) { - $obj = $db->fetch_object($resql); print ''; $supplierorderstatic->id=$obj->rowid; @@ -470,7 +467,6 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->commande } else { - print ''.$langs->trans("NoSupplierOrder").''; } print ""; diff --git a/htdocs/comm/mailing/advtargetemailing.php b/htdocs/comm/mailing/advtargetemailing.php index 9544a394508..1049431b7f2 100644 --- a/htdocs/comm/mailing/advtargetemailing.php +++ b/htdocs/comm/mailing/advtargetemailing.php @@ -114,7 +114,6 @@ if ($action == 'loadfilter') { } if ($action == 'add') { - $user_contact_query = false; $array_query = array (); @@ -168,7 +167,6 @@ if ($action == 'add') { } if (preg_match("/^contact_/", $key)) { - $array_query[$key] = GETPOST($key); $specials_date_key = array ( @@ -262,7 +260,6 @@ if ($action == 'clear') { } if ($action == 'savefilter' || $action == 'createfilter') { - $template_name = GETPOST('template_name'); $error = 0; @@ -272,7 +269,6 @@ if ($action == 'savefilter' || $action == 'createfilter') { } if (empty($error)) { - $array_query = array (); // Get extra fields @@ -325,7 +321,6 @@ if ($action == 'savefilter' || $action == 'createfilter') { } if (preg_match("/^contact_/", $key)) { - $array_query[$key] = GETPOST($key); $specials_date_key = array ( @@ -359,7 +354,6 @@ if ($action == 'savefilter' || $action == 'createfilter') { setEventMessages($advTarget->error, $advTarget->errors, 'errors'); } } elseif ($action == 'savefilter') { - $result = $advTarget->update($user); if ($result < 0) { setEventMessages($advTarget->error, $advTarget->errors, 'errors'); @@ -421,7 +415,6 @@ $formcompany = new FormCompany($db); $formother = new FormOther($db); if ($object->fetch($id) >= 0) { - $head = emailing_prepare_head($object); dol_fiche_head($head, 'advtargets', $langs->trans("Mailing"), 0, 'email'); @@ -465,7 +458,6 @@ if ($object->fetch($id) >= 0) { // Show email selectors if ($object->statut == 0 && $user->rights->mailing->creer) { - include DOL_DOCUMENT_ROOT . '/core/tpl/advtarget.tpl.php'; } } diff --git a/htdocs/comm/mailing/class/advtargetemailing.class.php b/htdocs/comm/mailing/class/advtargetemailing.class.php index 7346bf87543..465bf7dcc50 100644 --- a/htdocs/comm/mailing/class/advtargetemailing.class.php +++ b/htdocs/comm/mailing/class/advtargetemailing.class.php @@ -556,7 +556,6 @@ class AdvanceTargetingMailing extends CommonObject $sqlwhere[]= 't.entity IN ('.getEntity('societe').')'; if (count($arrayquery)>0) { - if (array_key_exists('cust_saleman', $arrayquery)) { $sql.= " LEFT OUTER JOIN " . MAIN_DB_PREFIX . "societe_commerciaux as saleman ON saleman.fk_soc=t.rowid "; } @@ -565,7 +564,6 @@ class AdvanceTargetingMailing extends CommonObject } if (!empty($arrayquery['cust_name'])) { - $sqlwhere[]= $this->transformToSQL('t.nom', $arrayquery['cust_name']); } if (!empty($arrayquery['cust_code'])) { @@ -617,13 +615,11 @@ class AdvanceTargetingMailing extends CommonObject //Standard Extrafield feature if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) { - $elementtype = Societe::$table_element; $extrafields->fetch_name_optionals_label($elementtype); foreach($extrafields->attributes[$elementtype]['label'] as $key=>$val) { - if (($extrafields->attributes[$elementtype]['type'][$key] == 'varchar') || ($extrafields->attributes[$elementtype]['type'][$key] == 'text')) { if (!empty($arrayquery['options_'.$key])) { @@ -713,7 +709,6 @@ class AdvanceTargetingMailing extends CommonObject $sqlwhere[]= 't.entity IN ('.getEntity('socpeople').')'; if (count($arrayquery)>0) { - if (array_key_exists('contact_categ', $arrayquery)) { $sql.= " LEFT OUTER JOIN " . MAIN_DB_PREFIX . "categorie_contact as contactcateg ON contactcateg.fk_socpeople=t.rowid "; } @@ -767,7 +762,6 @@ class AdvanceTargetingMailing extends CommonObject $extrafields->fetch_name_optionals_label($elementtype); foreach($extrafields->attributes[$elementtype]['label'] as $key=>$val) { - if (($extrafields->attributes[$elementtype]['type'][$key] == 'varchar') || ($extrafields->attributes[$elementtype]['type'][$key] == 'text')) { if (!empty($arrayquery['options_'.$key.'_cnct'])) { @@ -809,7 +803,6 @@ class AdvanceTargetingMailing extends CommonObject } if (!empty($arrayquery['cust_name'])) { - $sqlwhere[]= $this->transformToSQL('ts.nom', $arrayquery['cust_name']); } if (!empty($arrayquery['cust_code'])) { @@ -870,7 +863,6 @@ class AdvanceTargetingMailing extends CommonObject $extrafields->fetch_name_optionals_label($elementtype); foreach($extrafields->attributes[$elementtype]['label'] as $key=>$val) { - if (($extrafields->attributes[$elementtype]['type'][$key] == 'varchar') || ($extrafields->attributes[$elementtype]['type'][$key] == 'text')) { if (!empty($arrayquery['options_'.$key])) { diff --git a/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php b/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php index 55b7177eb73..67ec7414e7c 100644 --- a/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php +++ b/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php @@ -114,7 +114,6 @@ class FormAdvTargetEmailing extends Form dol_syslog(get_class($this) . "::select_country sql=" . $sql); $resql = $this->db->query($sql); if ($resql) { - $num = $this->db->num_rows($resql); $i = 0; if ($num) { @@ -175,7 +174,6 @@ class FormAdvTargetEmailing extends Form $resql_usr = $this->db->query($sql_usr); if ($resql_usr) { while ( $obj_usr = $this->db->fetch_object($resql_usr) ) { - $label = $obj_usr->firstname . " " . $obj_usr->name . " (" . $obj_usr->login . ')'; $options_array [$obj_usr->rowid] = $label; @@ -249,7 +247,6 @@ class FormAdvTargetEmailing extends Form $sql = 'SELECT ' . $keyList . ', ' . $InfoFieldList [1]; $sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList [0]; if (! empty($InfoFieldList [3])) { - // We have to join on extrafield table if (strpos($InfoFieldList [3], 'extra') !== false) { $sql .= ' as main, ' . MAIN_DB_PREFIX . $InfoFieldList [0] . '_extrafields as extra'; @@ -266,7 +263,6 @@ class FormAdvTargetEmailing extends Form dol_syslog(get_class($this) . "::".__METHOD__, LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) { - $num = $this->db->num_rows($resql); $i = 0; if ($num) { @@ -306,7 +302,6 @@ class FormAdvTargetEmailing extends Form $resql=$this->db->query($sql); if ($resql) { - $num = $this->db->num_rows($resql); $i = 0; if ($num) @@ -396,7 +391,6 @@ class FormAdvTargetEmailing extends Form $resql=$this->db->query($sql); if ($resql) { - $num = $this->db->num_rows($resql); $i = 0; if ($num) @@ -442,8 +436,6 @@ class FormAdvTargetEmailing extends Form dol_syslog(get_class($this) . "::".__METHOD__, LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) { - - $out .= ''; print ''; diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index 4e72c6312e6..5cd3902b7d1 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -265,7 +265,6 @@ class Account extends CommonObject $string = ''; foreach ($this->getFieldsToShow() as $val) { - if ($val == 'BankCode') { $string .= $this->code_banque.' '; } elseif ($val == 'BankAccountNumber') { @@ -493,7 +492,6 @@ class Account extends CommonObject } if ($accline->insert() > 0) { - if ($categorie>0) { $sql = "INSERT INTO ".MAIN_DB_PREFIX."bank_class ("; $sql .= "lineid, fk_categ"; diff --git a/htdocs/compta/bank/document.php b/htdocs/compta/bank/document.php index 0d517a43fec..32bfe66f7d1 100644 --- a/htdocs/compta/bank/document.php +++ b/htdocs/compta/bank/document.php @@ -97,7 +97,6 @@ $form = new Form($db); if ($id > 0 || !empty($ref)) { if ($object->fetch($id, $ref)) { - $upload_dir = $conf->bank->dir_output . '/' . $object->ref; // Onglets diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 2a08c55eeba..f7ec617ee1d 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -1822,7 +1822,6 @@ if (empty($reshook)) } if (! $error && ($qty >= 0) && (! empty($product_desc) || ! empty($idprod))) { - $ret = $object->fetch($id); if ($ret < 0) { dol_print_error($db, $object->error); @@ -2327,7 +2326,6 @@ if (empty($reshook)) // Change each progression persent on each lines foreach($object->lines as $line) { - // no traitement for special product if ($line->product_type == 9 ) continue; @@ -3185,7 +3183,6 @@ if ($action == 'create') if (! empty($conf->global->INVOICE_USE_SITUATION)) { if($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY){ - $rwStyle = 'display:none;'; if(GETPOST('type', 'int') == Facture::TYPE_SITUATION){ $rwStyle = ''; @@ -4347,7 +4344,6 @@ elseif ($id > 0 || ! empty($ref)) // List of previous situation invoices if (($object->situation_cycle_ref > 0) && ! empty($conf->global->INVOICE_USE_SITUATION)) { - print ''; @@ -4660,7 +4656,6 @@ elseif ($id > 0 || ! empty($ref)) // Retained warranty : usualy use on construction industry if(!empty($object->situation_final) && !empty($object->retained_warranty) && $displayWarranty){ - // Billed - retained warranty if($object->type == Facture::TYPE_SITUATION) { diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index 18d153dc597..9ff90b7b025 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -1839,7 +1839,6 @@ class FactureLigneRec extends CommonInvoiceLine $result = $this->db->query($sql); if ($result) { - $objp = $this->db->fetch_object($result); $this->id = $objp->rowid; diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 6149a161694..84835fa9608 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -848,7 +848,6 @@ class Facture extends CommonInvoice if (! $error) { - $result=$this->update_price(1); if ($result > 0) { @@ -1933,7 +1932,6 @@ class Facture extends CommonInvoice if (! $error) { - $this->ref_client = $ref_client; $this->db->commit(); @@ -3465,7 +3463,6 @@ class Facture extends CommonInvoice $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { - $dir = dol_buildpath($reldir."core/modules/facture/"); // Load file with numbering class (if found) @@ -5216,7 +5213,6 @@ class FactureLigne extends CommonInvoiceLine $returnPercent = floatval($res['situation_percent']); if($include_credit_note) { - $sql = 'SELECT fd.situation_percent FROM ' . MAIN_DB_PREFIX . 'facturedet fd'; $sql.= ' JOIN ' . MAIN_DB_PREFIX . 'facture f ON (f.rowid = fd.fk_facture) '; $sql.= ' WHERE fd.fk_prev_id =' . $this->fk_prev_id; diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 77abac6e4d1..1fed45f09cd 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -356,7 +356,6 @@ if ($massaction == 'withdrawrequest') } else { - $db->rollback(); setEventMessages($aBill->error, $aBill->errors, 'errors'); } diff --git a/htdocs/compta/localtax/card.php b/htdocs/compta/localtax/card.php index 86388fd7e87..e7762b834e4 100644 --- a/htdocs/compta/localtax/card.php +++ b/htdocs/compta/localtax/card.php @@ -61,7 +61,6 @@ if ($_POST["cancel"] == $langs->trans("Cancel") && ! $id) if ($action == 'add' && $_POST["cancel"] <> $langs->trans("Cancel")) { - $db->begin(); $datev=dol_mktime(12, 0, 0, $_POST["datevmonth"], $_POST["datevday"], $_POST["datevyear"]); diff --git a/htdocs/compta/localtax/clients.php b/htdocs/compta/localtax/clients.php index 1e6ab5b4da1..97f97bbc735 100644 --- a/htdocs/compta/localtax/clients.php +++ b/htdocs/compta/localtax/clients.php @@ -195,7 +195,6 @@ if($calc ==0 || $calc == 2) { if(($min == 0 || ($min > 0 && $coll->amount > $min)) && ($local==1?$coll->localtax1:$coll->localtax2) !=0) { - $intra = str_replace($find, $replace, $coll->tva_intra); if(empty($intra)) { @@ -269,7 +268,6 @@ if($calc ==0 || $calc == 1){ { if(($min == 0 || ($min > 0 && $coll->amount > $min)) && ($local==1?$coll->localtax1:$coll->localtax2) != 0) { - $intra = str_replace($find, $replace, $coll->tva_intra); if(empty($intra)) { diff --git a/htdocs/compta/paiement/cheque/card.php b/htdocs/compta/paiement/cheque/card.php index 9ab469376e5..3afce69e94b 100644 --- a/htdocs/compta/paiement/cheque/card.php +++ b/htdocs/compta/paiement/cheque/card.php @@ -444,7 +444,6 @@ if ($action == 'new') foreach ($accounts as $bid => $account_label) { - print ' '; } elseif (GETPOST('action') == 'confirm_delete' && GETPOST('confirm') == 'yes' && GETPOST('socid') > 0) { - // La suppression n'a pas été possible require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; $societe = new Societe($this->db); $societe->fetch(GETPOST('socid')); // On vérifie si il est utilisé if ((in_array($object->forme_juridique_code, array(11, 12, 13, 15, 17, 18, 19, 35, 60, 200, 311, 312, 316, 401, 600, 700, 1005)) || $societe->typent_id == 8) && $societe->isObjectUsed(GETPOST('socid'))) { - require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php'; $form = new Form($this->db); echo $form->formconfirm($_SERVER["PHP_SELF"] . "?socid=" . GETPOST('socid'), substr($langs->trans("DATAPOLICIES_POPUP_ANONYME_TITLE"), 0, strlen($langs->trans("DATAPOLICIES_POPUP_ANONYME_TITLE")) - 2), $langs->trans("DATAPOLICIES_POPUP_ANONYME_TEXTE"), 'anonymiser', '', '', 1); @@ -428,7 +424,6 @@ class ActionsDatapolicy $societe->fetch(GETPOST('socid')); if (!in_array($object->forme_juridique_code, array(11, 12, 13, 15, 17, 18, 19, 35, 60, 200, 311, 312, 316, 401, 600, 700, 1005)) && $societe->typent_id != 8) { - require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php'; $jsscript .= ' -trans("OtherSetup"), '', 'title_setup'); diff --git a/htdocs/admin/contract.php b/htdocs/admin/contract.php index 0aa97dd36e6..7f123c0f367 100644 --- a/htdocs/admin/contract.php +++ b/htdocs/admin/contract.php @@ -406,7 +406,7 @@ foreach ($dirmodels as $reldir) } print ''; - // Info + // Info $htmltooltip = ''.$langs->trans("Name").': '.$module->name; $htmltooltip.='
'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); if ($module->type == 'pdf') diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 501a6d18113..af61dd1c09f 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -551,27 +551,27 @@ $elementList = array(); $sourceList=array(); if ($id == 11) { - $elementList = array( - '' => '', - 'societe' => $langs->trans('ThirdParty'), -// 'proposal' => $langs->trans('Proposal'), -// 'order' => $langs->trans('Order'), -// 'invoice' => $langs->trans('Bill'), - 'supplier_proposal' => $langs->trans('SupplierProposal'), - 'order_supplier' => $langs->trans('SupplierOrder'), - 'invoice_supplier' => $langs->trans('SupplierBill'), -// 'intervention' => $langs->trans('InterventionCard'), -// 'contract' => $langs->trans('Contract'), - 'project' => $langs->trans('Project'), - 'project_task' => $langs->trans('Task'), - 'agenda' => $langs->trans('Agenda'), - 'dolresource' => $langs->trans('Resource'), - // old deprecated - 'propal' => $langs->trans('Proposal'), - 'commande' => $langs->trans('Order'), - 'facture' => $langs->trans('Bill'), - 'fichinter' => $langs->trans('InterventionCard'), - 'contrat' => $langs->trans('Contract') + $elementList = array( + '' => '', + 'societe' => $langs->trans('ThirdParty'), + // 'proposal' => $langs->trans('Proposal'), + // 'order' => $langs->trans('Order'), + // 'invoice' => $langs->trans('Bill'), + 'supplier_proposal' => $langs->trans('SupplierProposal'), + 'order_supplier' => $langs->trans('SupplierOrder'), + 'invoice_supplier' => $langs->trans('SupplierBill'), + // 'intervention' => $langs->trans('InterventionCard'), + // 'contract' => $langs->trans('Contract'), + 'project' => $langs->trans('Project'), + 'project_task' => $langs->trans('Task'), + 'agenda' => $langs->trans('Agenda'), + 'dolresource' => $langs->trans('Resource'), + // old deprecated + 'propal' => $langs->trans('Proposal'), + 'commande' => $langs->trans('Order'), + 'facture' => $langs->trans('Bill'), + 'fichinter' => $langs->trans('InterventionCard'), + 'contrat' => $langs->trans('Contract'), ); if (! empty($conf->global->MAIN_SUPPORT_SHARED_CONTACT_BETWEEN_THIRDPARTIES)) $elementList["societe"] = $langs->trans('ThirdParty'); @@ -589,13 +589,13 @@ $localtax_typeList = array(); if ($id == 10) { $localtax_typeList = array( - "0" => $langs->trans("No"), - "1" => $langs->trans("Yes").' ('.$langs->trans("Type")." 1)", //$langs->trans("%ageOnAllWithoutVAT"), - "2" => $langs->trans("Yes").' ('.$langs->trans("Type")." 2)", //$langs->trans("%ageOnAllBeforeVAT"), - "3" => $langs->trans("Yes").' ('.$langs->trans("Type")." 3)", //$langs->trans("%ageOnProductsWithoutVAT"), - "4" => $langs->trans("Yes").' ('.$langs->trans("Type")." 4)", //$langs->trans("%ageOnProductsBeforeVAT"), - "5" => $langs->trans("Yes").' ('.$langs->trans("Type")." 5)", //$langs->trans("%ageOnServiceWithoutVAT"), - "6" => $langs->trans("Yes").' ('.$langs->trans("Type")." 6)" //$langs->trans("%ageOnServiceBeforeVAT"), + "0" => $langs->trans("No"), + "1" => $langs->trans("Yes").' ('.$langs->trans("Type")." 1)", //$langs->trans("%ageOnAllWithoutVAT"), + "2" => $langs->trans("Yes").' ('.$langs->trans("Type")." 2)", //$langs->trans("%ageOnAllBeforeVAT"), + "3" => $langs->trans("Yes").' ('.$langs->trans("Type")." 3)", //$langs->trans("%ageOnProductsWithoutVAT"), + "4" => $langs->trans("Yes").' ('.$langs->trans("Type")." 4)", //$langs->trans("%ageOnProductsBeforeVAT"), + "5" => $langs->trans("Yes").' ('.$langs->trans("Type")." 5)", //$langs->trans("%ageOnServiceWithoutVAT"), + "6" => $langs->trans("Yes").' ('.$langs->trans("Type")." 6)" //$langs->trans("%ageOnServiceBeforeVAT"), ); } @@ -636,8 +636,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) && (! in_array($listfield[$f], array('decalage','module','accountancy_code','accountancy_code_sell','accountancy_code_buy','tracking')) // Fields that are not mandatory && (! ($id == 10 && $listfield[$f] == 'code')) // Code is mandatory fir table 10 ) - ) - { + ) { $ok=0; $fieldnamekey=$listfield[$f]; // We take translate key of field @@ -1562,18 +1561,18 @@ if ($id) $class="center"; } elseif ($fieldlist[$field]=='localtax1_type') { - if ($obj->localtax1 != 0) - $valuetoshow=$localtax_typeList[$valuetoshow]; - else - $valuetoshow = ''; - $align="center"; + if ($obj->localtax1 != 0) + $valuetoshow=$localtax_typeList[$valuetoshow]; + else + $valuetoshow = ''; + $align="center"; } elseif ($fieldlist[$field]=='localtax2_type') { - if ($obj->localtax2 != 0) - $valuetoshow=$localtax_typeList[$valuetoshow]; - else - $valuetoshow = ''; - $align="center"; + if ($obj->localtax2 != 0) + $valuetoshow=$localtax_typeList[$valuetoshow]; + else + $valuetoshow = ''; + $align="center"; } elseif ($fieldlist[$field]=='taux') { $valuetoshow = price($valuetoshow, 0, $langs, 0, 0); diff --git a/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php b/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php index c6262e84a79..4f1fad15343 100644 --- a/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php +++ b/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php @@ -423,17 +423,20 @@ class PrestaShopWebservice */ public function delete($options) { - if (isset($options['url'])) + if (isset($options['url'])) { $url = $options['url']; - elseif (isset($options['resource']) && isset($options['id'])) + } elseif (isset($options['resource']) && isset($options['id'])) { if (is_array($options['id'])) $url = $this->url.'/api/'.$options['resource'].'/?id=['.implode(',', $options['id']).']'; else - $url = $this->url.'/api/'.$options['resource'].'/'.$options['id']; - if (isset($options['id_shop'])) - $url .= '&id_shop='.$options['id_shop']; - if (isset($options['id_group_shop'])) - $url .= '&id_group_shop='.$options['id_group_shop']; + $url = $this->url.'/api/'.$options['resource'].'/'.$options['id']; + } + if (isset($options['id_shop'])) { + $url .= '&id_shop='.$options['id_shop']; + } + if (isset($options['id_group_shop'])) { + $url .= '&id_group_shop='.$options['id_group_shop']; + } $request = self::executeRequest($url, array(CURLOPT_CUSTOMREQUEST => 'DELETE')); self::checkStatusCode($request['status_code']);// check the response validity return true; diff --git a/htdocs/admin/dolistore/class/dolistore.class.php b/htdocs/admin/dolistore/class/dolistore.class.php index e65eb2bbb0a..22029b2c691 100644 --- a/htdocs/admin/dolistore/class/dolistore.class.php +++ b/htdocs/admin/dolistore/class/dolistore.class.php @@ -32,8 +32,8 @@ class Dolistore * beginning of pagination * @var int */ + public $start; - public $start; /** * end of pagination * @var int diff --git a/htdocs/admin/emailcollector_card.php b/htdocs/admin/emailcollector_card.php index 255fdb68a0d..daa0c896809 100644 --- a/htdocs/admin/emailcollector_card.php +++ b/htdocs/admin/emailcollector_card.php @@ -513,7 +513,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $noparam=array(); foreach($arrayoftypes as $key => $value) { - if ($value['noparam']) $noparam[]=$key; + if ($value['noparam']) $noparam[]=$key; } print '})'; print ''."\n"; diff --git a/htdocs/admin/expedition.php b/htdocs/admin/expedition.php index 29ef6d40a1e..7cc2e7dff44 100644 --- a/htdocs/admin/expedition.php +++ b/htdocs/admin/expedition.php @@ -415,7 +415,7 @@ foreach ($dirmodels as $reldir) } print ''; - // Info + // Info $htmltooltip = ''.$langs->trans("Name").': '.$module->name; $htmltooltip.='
'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); if ($module->type == 'pdf') diff --git a/htdocs/admin/external_rss.php b/htdocs/admin/external_rss.php index e3adeaca890..4bb2bf1c964 100644 --- a/htdocs/admin/external_rss.php +++ b/htdocs/admin/external_rss.php @@ -79,7 +79,7 @@ if ($action == 'add' || GETPOST("modify")) if ($_POST["modify"]) { // Supprime boite box_external_rss de definition des boites -/* $sql = "UPDATE ".MAIN_DB_PREFIX."boxes_def"; + /* $sql = "UPDATE ".MAIN_DB_PREFIX."boxes_def"; $sql.= " SET name = '".$boxlabel."'"; $sql.= " WHERE file ='box_external_rss.php' AND note like '".$_POST["norss"]." %'"; @@ -89,7 +89,7 @@ if ($action == 'add' || GETPOST("modify")) dol_print_error($db,"sql=$sql"); exit; } -*/ + */ } else { diff --git a/htdocs/admin/fichinter.php b/htdocs/admin/fichinter.php index f9f051dc272..876f4b90abb 100644 --- a/htdocs/admin/fichinter.php +++ b/htdocs/admin/fichinter.php @@ -207,8 +207,7 @@ elseif ($action == 'set_FICHINTER_PRINT_PRODUCTS') } } elseif ($action == 'set_FICHINTER_USE_SERVICE_DURATION') { $val = GETPOST('FICHINTER_USE_SERVICE_DURATION', 'alpha'); -$res = dolibarr_set_const($db, "FICHINTER_USE_SERVICE_DURATION", ($val == 'on' ? 1 : 0), 'bool', 0, '', - $conf->entity); + $res = dolibarr_set_const($db, "FICHINTER_USE_SERVICE_DURATION", ($val == 'on' ? 1 : 0), 'bool', 0, '', $conf->entity); if (!$res > 0) { $error++; @@ -220,33 +219,31 @@ $res = dolibarr_set_const($db, "FICHINTER_USE_SERVICE_DURATION", ($val == 'on' ? setEventMessages($langs->trans("Error"), null, 'errors'); } } elseif ($action == 'set_FICHINTER_WITHOUT_DURATION') { - $val = GETPOST('FICHINTER_WITHOUT_DURATION', 'alpha'); - $res = dolibarr_set_const($db, "FICHINTER_WITHOUT_DURATION", ($val == 'on' ? 1 : 0), 'bool', 0, '', - $conf->entity); + $val = GETPOST('FICHINTER_WITHOUT_DURATION', 'alpha'); + $res = dolibarr_set_const($db, "FICHINTER_WITHOUT_DURATION", ($val == 'on' ? 1 : 0), 'bool', 0, '', $conf->entity); - if (!$res > 0) { - $error++; - } + if (!$res > 0) { + $error++; + } - if (!$error) { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } else { - setEventMessages($langs->trans("Error"), null, 'errors'); - } + if (!$error) { + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); + } else { + setEventMessages($langs->trans("Error"), null, 'errors'); + } } elseif ($action == 'set_FICHINTER_DATE_WITHOUT_HOUR') { - $val = GETPOST('FICHINTER_DATE_WITHOUT_HOUR', 'alpha'); - $res = dolibarr_set_const($db, "FICHINTER_DATE_WITHOUT_HOUR", ($val == 'on' ? 1 : 0), 'bool', 0, '', - $conf->entity); + $val = GETPOST('FICHINTER_DATE_WITHOUT_HOUR', 'alpha'); + $res = dolibarr_set_const($db, "FICHINTER_DATE_WITHOUT_HOUR", ($val == 'on' ? 1 : 0), 'bool', 0, '', $conf->entity); - if (!$res > 0) { - $error++; - } + if (!$res > 0) { + $error++; + } - if (!$error) { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } else { - setEventMessages($langs->trans("Error"), null, 'errors'); - } + if (!$error) { + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); + } else { + setEventMessages($langs->trans("Error"), null, 'errors'); + } } diff --git a/htdocs/admin/holiday.php b/htdocs/admin/holiday.php index 58ea3dcdbaa..2d3f986e6a1 100644 --- a/htdocs/admin/holiday.php +++ b/htdocs/admin/holiday.php @@ -300,8 +300,14 @@ print ''; print '
'; -if ($conf->global->MAIN_FEATURES_LEVEL >= 2) -{ +if ($conf->global->MAIN_FEATURES_LEVEL < 2) { + dol_fiche_end(); + // End of page + llxFooter(); + $db->close(); + exit; +} + /* * Documents models for Holidays */ @@ -317,8 +323,8 @@ $sql.= " AND entity = ".$conf->entity; $resql=$db->query($sql); if ($resql) { - $i = 0; - $num_rows=$db->num_rows($resql); + $i = 0; + $num_rows=$db->num_rows($resql); while ($i < $num_rows) { $array = $db->fetch_array($resql); @@ -416,7 +422,7 @@ foreach ($dirmodels as $reldir) } print ''; - // Info + // Info $htmltooltip = ''.$langs->trans("Name").': '.$module->name; $htmltooltip.='
'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); if ($module->type == 'pdf') @@ -518,7 +524,7 @@ print ''; print ''; print ''; -} + dol_fiche_end(); diff --git a/htdocs/admin/ldap_users.php b/htdocs/admin/ldap_users.php index cba9481849d..8d1f7d3279e 100644 --- a/htdocs/admin/ldap_users.php +++ b/htdocs/admin/ldap_users.php @@ -478,7 +478,7 @@ if (function_exists("ldap_connect")) } } else - { + { setEventMessages($ldap->error, $ldap->errors, 'errors'); } diff --git a/htdocs/admin/livraison.php b/htdocs/admin/livraison.php index 99cd481095b..794020cfc95 100644 --- a/htdocs/admin/livraison.php +++ b/htdocs/admin/livraison.php @@ -139,7 +139,7 @@ if ($action == 'set') if ($action == 'del') { - $ret = delDocumentModel($value, $type); + $ret = delDocumentModel($value, $type); if ($ret > 0) { if ($conf->global->LIVRAISON_ADDON_PDF == "$value") dolibarr_del_const($db, 'LIVRAISON_ADDON_PDF', $conf->entity); diff --git a/htdocs/admin/mails_templates.php b/htdocs/admin/mails_templates.php index 0dbdf90b53b..7ac91d51c8d 100644 --- a/htdocs/admin/mails_templates.php +++ b/htdocs/admin/mails_templates.php @@ -45,11 +45,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php'; // Load translation files required by the page $langs->loadLangs(array("errors","admin","mails","languages")); -$action = GETPOST('action', 'alpha')?GETPOST('action', 'alpha'):'view'; -$confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation +$action = GETPOST('action', 'alpha')?GETPOST('action', 'alpha'):'view'; +$confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation -$id = GETPOST('id', 'int'); -$rowid = GETPOST('rowid', 'alpha'); +$id = GETPOST('id', 'int'); +$rowid = GETPOST('rowid', 'alpha'); $search_label=GETPOST('search_label', 'alphanohtml'); // Must allow value like 'Abc Def' or '(MyTemplateName)' $search_type_template=GETPOST('search_type_template', 'alpha'); $search_lang=GETPOST('search_lang', 'alpha'); @@ -327,7 +327,7 @@ if (empty($reshook)) $i++; } $sql.= " WHERE ".$rowidcol." = '".$rowid."'"; -//print $sql;exit; + //print $sql;exit; dol_syslog("actionmodify", LOG_DEBUG); //print $sql; $resql = $db->query($sql); diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 88ad0acf097..8bdfb978219 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -923,19 +923,17 @@ if ($mode == 'marketplace')  
- -
- + '; + print ''; - '; - print '
'; + print ''; + print '
'; - ?> + ?>
    diff --git a/htdocs/admin/propal.php b/htdocs/admin/propal.php index db9efb0e5c7..a0f817a40c1 100644 --- a/htdocs/admin/propal.php +++ b/htdocs/admin/propal.php @@ -467,7 +467,7 @@ foreach ($dirmodels as $reldir) } print ''; - // Info + // Info $htmltooltip = $langs->trans("Name").': '.$module->name; $htmltooltip.='
    '.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); if ($module->type == 'pdf') diff --git a/htdocs/admin/reception_setup.php b/htdocs/admin/reception_setup.php index 07d448c5d11..27564d6b4e0 100644 --- a/htdocs/admin/reception_setup.php +++ b/htdocs/admin/reception_setup.php @@ -420,7 +420,7 @@ foreach ($dirmodels as $reldir) } print ''; - // Info + // Info $htmltooltip = ''.$langs->trans("Name").': '.$module->name; $htmltooltip.='
    '.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); if ($module->type == 'pdf') diff --git a/htdocs/admin/sms.php b/htdocs/admin/sms.php index 833d6c25d22..1f37a36ec4f 100644 --- a/htdocs/admin/sms.php +++ b/htdocs/admin/sms.php @@ -262,11 +262,11 @@ else if (count($listofmethods) && ! empty($conf->global->MAIN_SMS_SENDMODE)) { - print ''.$langs->trans("DoTestSend").''; + print ''.$langs->trans("DoTestSend").''; } else { - print ''.$langs->trans("DoTestSend").''; + print ''.$langs->trans("DoTestSend").''; } print '
'; diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php index 42daea12861..51bf959bb72 100644 --- a/htdocs/admin/stock.php +++ b/htdocs/admin/stock.php @@ -113,12 +113,12 @@ print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; - print '\n\n"; $found++; -print ''; + print ''; print ''; - print '\n\n"; $found++; } @@ -284,15 +284,15 @@ else { print ''; print ''; - print ''; print ''; - print '\n"; - print "\n"; + print '\n"; + print "\n"; } if($conf->order->enabled) { print ''; print ''; - print '\n"; print "\n"; } @@ -368,13 +368,13 @@ if($conf->expedition->enabled) { print ''; print ''; - print '\n"; print "\n"; } @@ -383,27 +383,30 @@ print '
'.$langs->trans("DeStockOnBill").''; if (! empty($conf->facture->enabled)) { -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_CALCULATE_ON_BILL'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_CALCULATE_ON_BILL", $arrval, $conf->global->STOCK_CALCULATE_ON_BILL); -} + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_CALCULATE_ON_BILL'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_CALCULATE_ON_BILL", $arrval, $conf->global->STOCK_CALCULATE_ON_BILL); + } } else { @@ -133,12 +133,12 @@ print ''.$langs->trans("DeStockOnValidateOrder").''; if (! empty($conf->commande->enabled)) { -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_CALCULATE_ON_VALIDATE_ORDER'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_CALCULATE_ON_VALIDATE_ORDER", $arrval, $conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER); -} + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_CALCULATE_ON_VALIDATE_ORDER'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_CALCULATE_ON_VALIDATE_ORDER", $arrval, $conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER); + } } else { @@ -155,12 +155,12 @@ print ''.$langs->trans("DeStockOnShipment").''; if (! empty($conf->expedition->enabled)) { -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_CALCULATE_ON_SHIPMENT'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_CALCULATE_ON_SHIPMENT", $arrval, $conf->global->STOCK_CALCULATE_ON_SHIPMENT); -} + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_CALCULATE_ON_SHIPMENT'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_CALCULATE_ON_SHIPMENT", $arrval, $conf->global->STOCK_CALCULATE_ON_SHIPMENT); + } } else { @@ -175,12 +175,12 @@ print ''.$langs->trans("DeStockOnShipmentOnClosing").''; if (! empty($conf->expedition->enabled)) { -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_CALCULATE_ON_SHIPMENT_CLOSE'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_CALCULATE_ON_SHIPMENT_CLOSE", $arrval, $conf->global->STOCK_CALCULATE_ON_SHIPMENT_CLOSE); -} + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_CALCULATE_ON_SHIPMENT_CLOSE'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_CALCULATE_ON_SHIPMENT_CLOSE", $arrval, $conf->global->STOCK_CALCULATE_ON_SHIPMENT_CLOSE); + } } else { @@ -215,12 +215,12 @@ print ''.$langs->trans("ReStockOnBill").''; if (! empty($conf->fournisseur->enabled)) { -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_CALCULATE_ON_SUPPLIER_BILL'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_CALCULATE_ON_SUPPLIER_BILL", $arrval, $conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL); -} + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_CALCULATE_ON_SUPPLIER_BILL'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_CALCULATE_ON_SUPPLIER_BILL", $arrval, $conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL); + } } else { @@ -236,12 +236,12 @@ print ''.$langs->trans("ReStockOnValidateOrder").''; if (! empty($conf->fournisseur->enabled)) { -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER", $arrval, $conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER); -} + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER", $arrval, $conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER); + } } else { @@ -254,29 +254,29 @@ if (!empty($conf->reception->enabled)) { print '
'.$langs->trans("StockOnReception").''; + print ''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_CALCULATE_ON_RECEPTION", $arrval, $conf->global->STOCK_CALCULATE_ON_RECEPTION); -} + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_CALCULATE_ON_RECEPTION", $arrval, $conf->global->STOCK_CALCULATE_ON_RECEPTION); + } print "
'.$langs->trans("StockOnReceptionOnClosing").''; + print ''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION_CLOSE'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_CALCULATE_ON_RECEPTION_CLOSE", $arrval, $conf->global->STOCK_CALCULATE_ON_RECEPTION_CLOSE); -} + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION_CLOSE'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_CALCULATE_ON_RECEPTION_CLOSE", $arrval, $conf->global->STOCK_CALCULATE_ON_RECEPTION_CLOSE); + } print "
'.$langs->trans("ReStockOnDispatchOrder").''; + print ''; if (! empty($conf->fournisseur->enabled)) { -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER", $arrval, $conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER); -} + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER", $arrval, $conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER); + } } else { @@ -338,28 +338,28 @@ if($conf->invoice->enabled) { print '
'.$langs->trans("StockMustBeEnoughForInvoice").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_INVOICE'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_MUST_BE_ENOUGH_FOR_INVOICE", $arrval, $conf->global->STOCK_MUST_BE_ENOUGH_FOR_INVOICE); -} - print "
'; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_INVOICE'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_MUST_BE_ENOUGH_FOR_INVOICE", $arrval, $conf->global->STOCK_MUST_BE_ENOUGH_FOR_INVOICE); + } + print "
'.$langs->trans("StockMustBeEnoughForOrder").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_ORDER'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_MUST_BE_ENOUGH_FOR_ORDER", $arrval, $conf->global->STOCK_MUST_BE_ENOUGH_FOR_ORDER); -} + print ''; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_ORDER'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_MUST_BE_ENOUGH_FOR_ORDER", $arrval, $conf->global->STOCK_MUST_BE_ENOUGH_FOR_ORDER); + } print "
'.$langs->trans("StockMustBeEnoughForShipment").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT", $arrval, $conf->global->STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT); -} + print ''; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT", $arrval, $conf->global->STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT); + } print "
'; print '
'; $virtualdiffersfromphysical=0; -if (! empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT) - || ! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER) - ) $virtualdiffersfromphysical=1; // According to increase/decrease stock options, virtual and physical stock may differs. +if ( + ! empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT) + || ! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER) +) { + $virtualdiffersfromphysical=1; // According to increase/decrease stock options, virtual and physical stock may differs. +} if ($virtualdiffersfromphysical) { -print ''; -print ''; + print '
'; + print ''; print "\n"; - print ''."\n"; + print ''."\n"; print ''."\n"; print ''; print ''; - print '\n"; print "\n"; print '
".$langs->trans("RuleForStockReplenishment")." ".img_help('help', $langs->trans("VirtualDiffersFromPhysical"))."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("UseVirtualStockByDefault").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STOCK_USE_VIRTUAL_STOCK'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STOCK_USE_VIRTUAL_STOCK", $arrval, $conf->global->STOCK_USE_VIRTUAL_STOCK); -} + print ''; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STOCK_USE_VIRTUAL_STOCK'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STOCK_USE_VIRTUAL_STOCK", $arrval, $conf->global->STOCK_USE_VIRTUAL_STOCK); + } print "
'; @@ -504,7 +507,6 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) print $form->selectarray("INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT", $arrval, $conf->global->INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT); } print ''; - print ''; } @@ -512,8 +514,6 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) If not used by a module, I still need to understand in which case user may need this now we can set rule on product page. if ($conf->global->PRODUIT_SOUSPRODUITS) { - - print ''; print ''.$langs->trans("IndependantSubProductStock").''; print ''; diff --git a/htdocs/admin/supplier_order.php b/htdocs/admin/supplier_order.php index 6369efb1361..c2a7a5d4077 100644 --- a/htdocs/admin/supplier_order.php +++ b/htdocs/admin/supplier_order.php @@ -413,8 +413,8 @@ foreach ($dirmodels as $reldir) print "\n"; require_once $dir.$file; $module = new $classname($db, $specimenthirdparty); - if (method_exists($module, 'info')) print $module->info($langs); - else print $module->description; + if (method_exists($module, 'info')) print $module->info($langs); + else print $module->description; print "\n"; // Active diff --git a/htdocs/admin/supplier_proposal.php b/htdocs/admin/supplier_proposal.php index bd2cb10a3ad..30a85f2af3b 100644 --- a/htdocs/admin/supplier_proposal.php +++ b/htdocs/admin/supplier_proposal.php @@ -433,7 +433,7 @@ foreach ($dirmodels as $reldir) } print ''; - // Info + // Info $htmltooltip = ''.$langs->trans("Name").': '.$module->name; $htmltooltip.='
'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); if ($module->type == 'pdf') diff --git a/htdocs/admin/system/database-tables.php b/htdocs/admin/system/database-tables.php index 01836dd4a72..01fc5ff5fc1 100644 --- a/htdocs/admin/system/database-tables.php +++ b/htdocs/admin/system/database-tables.php @@ -189,8 +189,8 @@ else if ($base == 4) { // Sqlite by PDO or by Sqlite3 - print '
'; - print ''; + print '
'; + print '
'; print ''; print ''; print ''; diff --git a/htdocs/admin/system/index.php b/htdocs/admin/system/index.php index d08eb564f17..928b193b1ee 100644 --- a/htdocs/admin/system/index.php +++ b/htdocs/admin/system/index.php @@ -94,10 +94,10 @@ if ($db->type == 'pgsql') { // Check option standard_conforming_strings is on $paramarray=$db->getServerParametersValues('standard_conforming_strings'); -// if ($paramarray['standard_conforming_strings'] != 'on' && $paramarray['standard_conforming_strings'] != 1) -// { -// $langs->load("errors"); -// } + // if ($paramarray['standard_conforming_strings'] != 'on' && $paramarray['standard_conforming_strings'] != 1) + // { + // $langs->load("errors"); + // } } print '
'; diff --git a/htdocs/admin/tools/dolibarr_export.php b/htdocs/admin/tools/dolibarr_export.php index 109b2a748fb..f1759ec6c06 100644 --- a/htdocs/admin/tools/dolibarr_export.php +++ b/htdocs/admin/tools/dolibarr_export.php @@ -111,13 +111,15 @@ jQuery(document).ready(function() { } }); - -}); -\n"; print load_fiche_titre($langs->trans("Backup"), '', 'title_setup'); //print_barre_liste($langs->trans("Backup"), '', '', '', '', '', $langs->trans("BackupDesc",DOL_DATA_ROOT), 0, 0, 'title_setup'); @@ -127,24 +129,17 @@ print $langs->trans("BackupDesc", DOL_DATA_ROOT); print ''; print '
'; -?> +print "\n"; +print ''; +print ''; +print ''; +print '
1'; - - - -
1 - -trans("BackupDesc3", $dolibarr_main_db_name).'
'; //print $langs->trans("BackupDescY").'
'; print '
'; -?> -
- -'; print load_fiche_titre($title?$title:$langs->trans("BackupDumpWizard")); @@ -155,275 +150,296 @@ print $langs->trans("DatabaseName").' : '.$dolibarr_main_db_name.'
'; print ''; print '
'; print ''; print '
'.$langs->trans("TableName").''.$langs->trans("NbOfRecord").'
'; -?> - - - - -
+print ''; +print ''; +print ' - '; +print ''; +print ''; +print '
'; -
-
trans("ExportMethod"); ?> - -
- -
-
-
- -
- -
- -
- -
-
+print '
'; +print '
'.$langs->trans("ExportMethod").''; +if (in_array($type, array('mysql', 'mysqli'))) { + print '
'; + print ''; + print '
'; + print '
'; + print '
'; + print ''; + print '
'; +} elseif (in_array($type, array('pgsql'))) { + print '
'; + print ''; + print '
'; +} else { + print 'No method available with database '.$label; +} +print '
'; +print '
'; -
+print ''; -
- -
trans("MySqlExportParameters"); ?> +print '
'; +if (in_array($type, array('mysql', 'mysqli'))) { + print "\n"; + print '
'.$langs->trans("MySqlExportParameters").''; -
trans("FullPathToMysqldumpCommand"); - if (empty($conf->global->SYSTEMTOOLS_MYSQLDUMP)) - { - $fullpathofmysqldump=$db->getPathOfDump(); - } - else - { - $fullpathofmysqldump=$conf->global->SYSTEMTOOLS_MYSQLDUMP; - } - ?>
-
+ print '
'.$langs->trans("FullPathToMysqldumpCommand"); + if (empty($conf->global->SYSTEMTOOLS_MYSQLDUMP)) + { + $fullpathofmysqldump=$db->getPathOfDump(); + } + else + { + $fullpathofmysqldump=$conf->global->SYSTEMTOOLS_MYSQLDUMP; + } + print '
'; + print '
'; -
-
trans("ExportOptions"); ?> -
+ print '
'; + print '
'.$langs->trans("ExportOptions").''; + print '
'; + print ''; + print ''; -
+ print '
'; - global->MYSQL_OLD_OPTION_DISABLE_FK)) { ?> -
-
- + if (! empty($conf->global->MYSQL_OLD_OPTION_DISABLE_FK)) { + print '
'; + print ''; + print ''; + print '
'; + } - + print ''; -
- -
+ print ''; + print '
'; + print ''; + print '
'; -
-
id="checkbox_dump_drop" />
-
+ print '
'; + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + print '
'; -
-

+ print '
'; + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; -
+ print ''; + print ''; + print '
'; -
+ print ''; + print ''; + print '
'; -
+ print ''; + print ''; + print '
'; -
+ print ''; + print ''; + print '
'; -
+ print ''; + print ''; + print '
'; -
+ print ''; + print ''; + print '
'; -
-
+ print '
'; + print ''; + print "\n"; + print '
'; + print ''.$langs->trans("MySqlExportParameters").''; + print '
'; + print ''.$langs->trans("ExportOptions").''; + print '
'; + print ''; + print ''; - -
trans("MySqlExportParameters"); ?> -
- trans("ExportOptions"); ?> -
+ print '
'; + if (! empty($conf->global->MYSQL_OLD_OPTION_DISABLE_FK)) { + print '
'; + print ''; + print ''; + print '
'; + } + print '
'; -
- global->MYSQL_OLD_OPTION_DISABLE_FK)) { ?> -
-
- -
+ print '
'; + print '
'.$langs->trans('ExportStructure').''; + print ''; + print ''; + print '
'; + print '
'; -
-
trans('ExportStructure') ?> id="checkbox_dump_drop" />
-
+ print '
'; + print '
'; + print ''.$langs->trans("Datas").''; -
-
- trans("Datas"); ?> + print ''; + print ''; + print '
'; -
+ print ''; + print ''; + print '
'; -
+ print ''; + print ''; + print '
'; -
+ print ''; + print ''; + print '
'; -
+ print '
'; + print '
'; +} -
- +if (in_array($type, array('pgsql'))) { + print "\n"; + print '
'.$langs->trans("PostgreSqlExportParameters").''; - '.$langs->trans("FullPathToPostgreSQLdumpCommand"); + if (empty($conf->global->SYSTEMTOOLS_POSTGRESQLDUMP)) { + $fullpathofpgdump=$db->getPathOfDump(); + } + else + { + $fullpathofpgdump=$conf->global->SYSTEMTOOLS_POSTGRESQLDUMP; + } + print '
'; + print '
'; - if (in_array($type, array('pgsql'))) - { - ?> -
trans("PostgreSqlExportParameters"); ?> + print '
'; + print '
'; + print ''.$langs->trans("ExportOptions").''; + print ''; + print ''; + print '
'; + print ''; + print '
'; + print '
'; + print '
'; + print ''; + print ''; + print ''; + print ''; + print '
'; + print '
'; + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + print '
'; + print '
'; +} +print ''; -
trans("FullPathToPostgreSQLdumpCommand"); - if (empty($conf->global->SYSTEMTOOLS_POSTGRESQLDUMP)) - { - $fullpathofpgdump=$db->getPathOfDump(); - } - else - { - $fullpathofpgdump=$conf->global->SYSTEMTOOLS_POSTGRESQLDUMP; - } - ?>
-
+print '
'; -
-
trans("ExportOptions"); ?> - -
- -
- -
-
- -
-

- -
- - - - -
- - - -
-
- -->'; +print '
'; +print ''; +print '
'; $prefix='dump'; $ext='.sql'; -if (in_array($type, array('mysql', 'mysqli'))) { $prefix='mysqldump'; $ext='sql'; } -//if ($label == 'PostgreSQL') { $prefix='pg_dump'; $ext='dump'; } -if (in_array($type, array('pgsql'))) { $prefix='pg_dump'; $ext='sql'; } +if (in_array($type, array('mysql', 'mysqli'))) { + $prefix='mysqldump'; + $ext='sql'; +} +//if ($label == 'PostgreSQL') { +// $prefix='pg_dump'; +// $ext='dump'; +//} +if (in_array($type, array('pgsql'))) { + $prefix='pg_dump'; + $ext='sql'; +} $file=$prefix.'_'.$dolibarr_main_db_name.'_'.dol_sanitizeFileName(DOL_VERSION).'_'.strftime("%Y%m%d%H%M").'.'.$ext; -echo $file; -?>" />
-
- -'; +print '
'; +print '
'; // Define compressions array $compression=array(); -if (in_array($type, array('mysql', 'mysqli'))) -{ - $compression['none'] = array('function' => '', 'id' => 'radio_compression_none', 'label' => $langs->trans("None")); - $compression['gz'] = array('function' => 'gzopen', 'id' => 'radio_compression_gzip', 'label' => $langs->trans("Gzip")); - // $compression['zip']= array('function' => 'dol_compress', 'id' => 'radio_compression_zip', 'label' => $langs->trans("FormatZip")); // Not open source format. Must implement dol_compress function - $compression['bz'] = array('function' => 'bzopen', 'id' => 'radio_compression_bzip', 'label' => $langs->trans("Bzip2")); +if (in_array($type, array('mysql', 'mysqli'))) { + $compression['none'] = array( + 'function' => '', + 'id' => 'radio_compression_none', + 'label' => $langs->trans("None") + ); + $compression['gz'] = array( + 'function' => 'gzopen', + 'id' => 'radio_compression_gzip', + 'label' => $langs->trans("Gzip") + ); + // Not open source format. Must implement dol_compress function + // $compression['zip']= array( + // 'function' => 'dol_compress', + // 'id' => 'radio_compression_zip', + // 'label' => $langs->trans("FormatZip") + // ); + $compression['bz'] = array( + 'function' => 'bzopen', + 'id' => 'radio_compression_bzip', + 'label' => $langs->trans("Bzip2") + ); } else { - $compression['none'] = array('function' => '', 'id' => 'radio_compression_none', 'label' => $langs->trans("Default")); - $compression['gz'] = array('function' => 'gzopen', 'id' => 'radio_compression_gzip', 'label' => $langs->trans("Gzip")); + $compression['none'] = array( + 'function' => '', + 'id' => 'radio_compression_none', + 'label' => $langs->trans("Default") + ); + $compression['gz'] = array( + 'function' => 'gzopen', + 'id' => 'radio_compression_gzip', + 'label' => $langs->trans("Gzip") + ); } // Show compression choices @@ -434,13 +450,14 @@ print $langs->trans("Compression").':   '; foreach($compression as $key => $val) { - if (! $val['function'] || function_exists($val['function'])) // Enabled export format - { + if (! $val['function'] || function_exists($val['function'])) { + // Enabled export format print ''; print ' '; } - else // Disabled export format + else { + // Disabled export format print ''; print ' '; print ' ('.$langs->trans("NotAvailable").')'; @@ -451,20 +468,18 @@ foreach($compression as $key => $val) print ''; print "\n"; -?> +print " \n"; +print '
'; +print '
'; +print ''; +print ''; +print '
'; +print '
'; -
-
- " id="buttonGo"> - -
-
- -'.$langs->trans("RunCommandSummary").':
'."\n"; + print '
'.$langs->trans("RunCommandSummary").':
'."\n"; print '
'."\n"; print '
'; @@ -491,71 +506,51 @@ if (! empty($_SESSION["commandbackuptorun"])) $_SESSION["commandbackuptorun"]=''; $_SESSION["commandbackupresult"]=''; } -?> -
+print "
\n"; -
'; - -?> - -
+print " \n"; -
-
+print '
'; +print '
'; -admin->dir_output.'/backup', 'files', 0, '', '', $sortfield, (strtolower($sortorder)=='asc'?SORT_ASC:SORT_DESC), 1); $result=$formfile->list_of_documents($filearray, null, 'systemtools', '', 1, 'backup/', 1, 0, $langs->trans("NoBackupFileAvailable"), 0, $langs->trans("PreviousDumpFiles")); print '
'; -?> +print '
'; +print '
'; +print ''; +print ''; -
-
- - +print "
\n"; +print "\n"; -
- +print '
'; +print ''; +print ''; - - - +print '
2'; -
2 - -trans("BackupDesc2", DOL_DATA_ROOT).'
'; print $langs->trans("BackupDescX").'

'; -?> - -
- -'; print load_fiche_titre($title?$title:$langs->trans("BackupDumpWizard")); -?> -
-'.$langs->trans("FileNameToGenerate").'
'; $prefix='documents'; $ext='zip'; - $file=$prefix.'_'.$dolibarr_main_db_name.'_'.dol_sanitizeFileName(DOL_VERSION).'_'.strftime("%Y%m%d%H%M").'.'.$ext; -echo $file; -?>" />
-
+print '
'; +print '
'; -'; print "\n"; @@ -584,32 +579,26 @@ foreach($filecompression as $key => $val) print '
'; print "\n"; -?> -
-
" id="buttonGo" />
-
-
+print '
'; +print '
'; +print '
'; +print '
'; +print '
'; - +print ''; -
-
+print '
'; +print '
'; -admin->dir_output.'/documents', 'files', 0, '', '', $sortfield, (strtolower($sortorder)=='asc'?SORT_ASC:SORT_DESC), 1); $result=$formfile->list_of_documents($filearray, null, 'systemtools', '', 1, 'documents/', 1, 0, $langs->trans("NoBackupFileAvailable"), 0, $langs->trans("PreviousDumpFiles")); print '
'; -?> +print '
'; +print '
'; -
-
- -
- - -'; +print ''; // End of page llxFooter(); diff --git a/htdocs/admin/tools/dolibarr_import.php b/htdocs/admin/tools/dolibarr_import.php index a5d52eb2929..c6c31fe7f45 100644 --- a/htdocs/admin/tools/dolibarr_import.php +++ b/htdocs/admin/tools/dolibarr_import.php @@ -99,21 +99,21 @@ print $langs->trans("RestoreDesc3", $dolibarr_main_db_name).'

'; + ?>
/>
- + ?>
/>
- trans("RestoreDesc3", $dolibarr_main_db_name).'

'; -
- trans('RestoreMySQL') ?> -
- '; + print ''.$langs->trans('RestoreMySQL').''; + print '
'; // Parameteres execution $command=$db->getPathOfRestore(); if (preg_match("/\s/", $command)) $command=$command=escapeshellarg($command); // Use quotes on command @@ -157,20 +155,18 @@ if (in_array($type, array('mysql', 'mysqli'))) print '
'; print ajax_autoselect('restorecommand'); - if (empty($_GET["showpass"]) && $dolibarr_main_db_pass) print '
'.$langs->trans("UnHidePassword").''; - //else print '
'.$langs->trans("HidePassword").''; - ?> -
-
-'.$langs->trans("UnHidePassword").''; + } + //else print '
'.$langs->trans("HidePassword").''; + print ''; + print '
'; } elseif (in_array($type, array('pgsql'))) { -?> -
- Restore PostgreSQL -
- '; + print 'Restore PostgreSQL'; + print '
'; // Parameteres execution $command=$db->getPathOfRestore(); if (preg_match("/\s/", $command)) $command=$command=escapeshellarg($command); // Use quotes on command @@ -198,20 +194,16 @@ elseif (in_array($type, array('pgsql'))) print ajax_autoselect('restorecommand'); //if (empty($_GET["showpass"]) && $dolibarr_main_db_pass) print '
'.$langs->trans("UnHidePassword").''; //else print '
'.$langs->trans("HidePassword").''; - ?> -
-
-'; + print ''; } -?> - +print ''; - - +print ''; +print ''; -close(); diff --git a/htdocs/admin/tools/listsessions.php b/htdocs/admin/tools/listsessions.php index 7db64a8a3ed..1fedf9e40de 100644 --- a/htdocs/admin/tools/listsessions.php +++ b/htdocs/admin/tools/listsessions.php @@ -37,8 +37,8 @@ $confirm=GETPOST('confirm', 'alpha'); // Security check if ($user->societe_id > 0) { - $action = ''; - $socid = $user->societe_id; + $action = ''; + $socid = $user->societe_id; } $sortfield = GETPOST("sortfield", 'alpha'); diff --git a/htdocs/admin/tools/purge.php b/htdocs/admin/tools/purge.php index 3c99e3e10b8..f991bb5752e 100644 --- a/htdocs/admin/tools/purge.php +++ b/htdocs/admin/tools/purge.php @@ -97,9 +97,9 @@ if (! empty($conf->syslog->enabled)) $filelogparam=$filelog; if ($user->admin && preg_match('/^dolibarr.*\.log$/', basename($filelog))) { - $filelogparam =''.$filelog.''; + $filelogparam =''.$filelog.''; } print '> '.$langs->trans("PurgeDeleteLogFile", $filelogparam); print '

'; diff --git a/htdocs/admin/user.php b/htdocs/admin/user.php index ba6c3660bcd..1b4c59505db 100644 --- a/htdocs/admin/user.php +++ b/htdocs/admin/user.php @@ -288,9 +288,9 @@ foreach ($dirmodels as $reldir) } print ''; - // Info - $htmltooltip = ''.$langs->trans("Name").': '.$module->name; - $htmltooltip.='
'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); + // Info + $htmltooltip = ''.$langs->trans("Name").': '.$module->name; + $htmltooltip.= '
'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); if ($module->type == 'pdf') { $htmltooltip.='
'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur; diff --git a/htdocs/admin/usergroup.php b/htdocs/admin/usergroup.php index 190391b462b..bd8ae3d5e92 100644 --- a/htdocs/admin/usergroup.php +++ b/htdocs/admin/usergroup.php @@ -235,7 +235,7 @@ foreach ($dirmodels as $reldir) } print ''; - // Info + // Info $htmltooltip = ''.$langs->trans("Name").': '.$module->name; $htmltooltip.='
'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); if ($module->type == 'pdf') diff --git a/htdocs/core/class/html.formcron.class.php b/htdocs/core/class/html.formcron.class.php index 42fec36ef6a..0277630ae78 100644 --- a/htdocs/core/class/html.formcron.class.php +++ b/htdocs/core/class/html.formcron.class.php @@ -77,23 +77,23 @@ class FormCron extends Form $out.=''; } } else { - $out=''; - if ($selected=='command') { - $selected_attr=' selected '; - } else { - $selected_attr=''; - } - $out.= ''; + if ($selected=='command') { + $selected_attr=' selected '; + } else { + $selected_attr=''; + } + $out.= ''; - if ($selected=='method') { - $selected_attr=' selected '; - } else { - $selected_attr=''; - } - $out.= ''; + if ($selected=='method') { + $selected_attr=' selected '; + } else { + $selected_attr=''; + } + $out.= ''; - $out.=''; + $out.=''; } return $out; diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 4ac7fb6e716..970d4841fbf 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -660,20 +660,20 @@ if ($dirins && $action == 'initobject' && $module && $objectname) { // Copy some files $filetogenerate = array( - 'myobject_card.php'=>strtolower($objectname).'_card.php', - 'myobject_note.php'=>strtolower($objectname).'_note.php', - 'myobject_document.php'=>strtolower($objectname).'_document.php', - 'myobject_agenda.php'=>strtolower($objectname).'_agenda.php', - 'myobject_list.php'=>strtolower($objectname).'_list.php', - 'lib/mymodule_myobject.lib.php'=>'lib/'.strtolower($module).'_'.strtolower($objectname).'.lib.php', - //'test/phpunit/MyObjectTest.php'=>'test/phpunit/'.strtolower($objectname).'Test.php', - 'sql/llx_mymodule_myobject.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.sql', - 'sql/llx_mymodule_myobject_extrafields.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'_extrafields.sql', - 'sql/llx_mymodule_myobject.key.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.key.sql', - //'scripts/mymodule.php'=>'scripts/'.strtolower($objectname).'.php', - 'img/object_myobject.png'=>'img/object_'.strtolower($objectname).'.png', - 'class/myobject.class.php'=>'class/'.strtolower($objectname).'.class.php', - //'class/api_mymodule.class.php'=>'class/api_'.strtolower($module).'.class.php' + 'myobject_card.php'=>strtolower($objectname).'_card.php', + 'myobject_note.php'=>strtolower($objectname).'_note.php', + 'myobject_document.php'=>strtolower($objectname).'_document.php', + 'myobject_agenda.php'=>strtolower($objectname).'_agenda.php', + 'myobject_list.php'=>strtolower($objectname).'_list.php', + 'lib/mymodule_myobject.lib.php'=>'lib/'.strtolower($module).'_'.strtolower($objectname).'.lib.php', + //'test/phpunit/MyObjectTest.php'=>'test/phpunit/'.strtolower($objectname).'Test.php', + 'sql/llx_mymodule_myobject.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.sql', + 'sql/llx_mymodule_myobject_extrafields.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'_extrafields.sql', + 'sql/llx_mymodule_myobject.key.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.key.sql', + //'scripts/mymodule.php'=>'scripts/'.strtolower($objectname).'.php', + 'img/object_myobject.png'=>'img/object_'.strtolower($objectname).'.png', + 'class/myobject.class.php'=>'class/'.strtolower($objectname).'.class.php', + //'class/api_mymodule.class.php'=>'class/api_'.strtolower($module).'.class.php', ); foreach($filetogenerate as $srcfile => $destfile) @@ -696,68 +696,81 @@ if ($dirins && $action == 'initobject' && $module && $objectname) //if (! $error) // If there is error copying 1 file, we still have to make the replacement //{ - // Scan for object class files - $listofobject = dol_dir_list($destdir.'/class', 'files', 0, '\.class\.php$'); + // Scan for object class files + $listofobject = dol_dir_list($destdir.'/class', 'files', 0, '\.class\.php$'); - $firstobjectname=''; - foreach($listofobject as $fileobj) + $firstobjectname=''; + foreach($listofobject as $fileobj) + { + if (preg_match('/^api_/', $fileobj['name'])) continue; + if (preg_match('/^actions_/', $fileobj['name'])) continue; + + $tmpcontent=file_get_contents($fileobj['fullname']); + $reg=array(); + if (preg_match('/class\s+([^\s]*)\s+extends\s+CommonObject/ims', $tmpcontent, $reg)) { - if (preg_match('/^api_/', $fileobj['name'])) continue; - if (preg_match('/^actions_/', $fileobj['name'])) continue; - - $tmpcontent=file_get_contents($fileobj['fullname']); - $reg=array(); - if (preg_match('/class\s+([^\s]*)\s+extends\s+CommonObject/ims', $tmpcontent, $reg)) - { - $objectnameloop = $reg[1]; - if (empty($firstobjectname)) $firstobjectname = $objectnameloop; - } - - // Regenerate left menu entry in descriptor for $objectname - $stringtoadd=" -\t\t\$this->menu[\$r++]=array( - 'fk_menu'=>'fk_mainmenu=mymodule', // '' 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 MyObject', - 'mainmenu'=>'mymodule', - 'leftmenu'=>'mymodule_myobject', - 'url'=>'/mymodule/myobject_list.php', - 'langs'=>'mymodule@mymodule', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. - 'position'=>1100+\$r, - 'enabled'=>'\$conf->mymodule->enabled', // Define condition to show or hide menu entry. Use '\$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '\$leftmenu==\'system\'' to show if leftmenu system is selected. - 'perms'=>'1', // Use 'perms'=>'\$user->rights->mymodule->level1->level2' if you want your menu with a permission rules - 'target'=>'', - 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both -\t\t\$this->menu[\$r++]=array( - 'fk_menu'=>'fk_mainmenu=mymodule,fk_leftmenu=mymodule_myobject', // '' 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 MyObject', - 'mainmenu'=>'mymodule', - 'leftmenu'=>'mymodule_myobject', - 'url'=>'/mymodule/myobject_card.php?action=create', - 'langs'=>'mymodule@mymodule', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. - 'position'=>1100+\$r, - 'enabled'=>'\$conf->mymodule->enabled', // Define condition to show or hide menu entry. Use '\$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '\$leftmenu==\'system\'' to show if leftmenu system is selected. - 'perms'=>'1', // Use 'perms'=>'\$user->rights->mymodule->level1->level2' if you want your menu with a permission rules - 'target'=>'', - 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both - "; - $stringtoadd = preg_replace('/MyObject/', $objectnameloop, $stringtoadd); - $stringtoadd = preg_replace('/mymodule/', strtolower($module), $stringtoadd); - $stringtoadd = preg_replace('/myobject/', strtolower($objectnameloop), $stringtoadd); - - $moduledescriptorfile=$destdir.'/core/modules/mod'.$module.'.class.php'; - - // TODO Allow a replace with regex using dolReplaceInFile with param arryreplacementisregex to 1 - // TODO Avoid duplicate addition - - dolReplaceInFile($moduledescriptorfile, array('END MODULEBUILDER LEFTMENU MYOBJECT */' => '*/'."\n".$stringtoadd."\n\t\t/* END MODULEBUILDER LEFTMENU MYOBJECT */")); - - // Add module descriptor to list of files to replace "MyObject' string with real name of object. - $filetogenerate[]='core/modules/mod'.$module.'.class.php'; - - // TODO + $objectnameloop = $reg[1]; + if (empty($firstobjectname)) $firstobjectname = $objectnameloop; } + + // Regenerate left menu entry in descriptor for $objectname + $stringtoadd = " + \$this->menu[\$r++]=array( + // '' 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 + 'fk_menu'=>'fk_mainmenu=mymodule', + // This is a Left menu entry + 'type'=>'left', + 'titre'=>'List MyObject', + 'mainmenu'=>'mymodule', + 'leftmenu'=>'mymodule_myobject', + 'url'=>'/mymodule/myobject_list.php', + // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'langs'=>'mymodule@mymodule', + 'position'=>1100+\$r, + // Define condition to show or hide menu entry. Use '\$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '\$leftmenu==\'system\'' to show if leftmenu system is selected. + 'enabled'=>'\$conf->mymodule->enabled', + // Use 'perms'=>'\$user->rights->mymodule->level1->level2' if you want your menu with a permission rules + 'perms'=>'1', + 'target'=>'', + // 0=Menu for internal users, 1=external users, 2=both + 'user'=>2, + ); + \$this->menu[\$r++]=array( + // '' 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 + 'fk_menu'=>'fk_mainmenu=mymodule,fk_leftmenu=mymodule_myobject', + // This is a Left menu entry + 'type'=>'left', + 'titre'=>'New MyObject', + 'mainmenu'=>'mymodule', + 'leftmenu'=>'mymodule_myobject', + 'url'=>'/mymodule/myobject_card.php?action=create', + // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'langs'=>'mymodule@mymodule', + 'position'=>1100+\$r, + // Define condition to show or hide menu entry. Use '\$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '\$leftmenu==\'system\'' to show if leftmenu system is selected. + 'enabled'=>'\$conf->mymodule->enabled', + // Use 'perms'=>'\$user->rights->mymodule->level1->level2' if you want your menu with a permission rules + 'perms'=>'1', + 'target'=>'', + // 0=Menu for internal users, 1=external users, 2=both + 'user'=>2 + );\n"; + $stringtoadd = preg_replace('/MyObject/', $objectnameloop, $stringtoadd); + $stringtoadd = preg_replace('/mymodule/', strtolower($module), $stringtoadd); + $stringtoadd = preg_replace('/myobject/', strtolower($objectnameloop), $stringtoadd); + + $moduledescriptorfile=$destdir.'/core/modules/mod'.$module.'.class.php'; + + // TODO Allow a replace with regex using dolReplaceInFile with param arryreplacementisregex to 1 + // TODO Avoid duplicate addition + + dolReplaceInFile($moduledescriptorfile, array('END MODULEBUILDER LEFTMENU MYOBJECT */' => '*/'."\n".$stringtoadd."\n\t\t/* END MODULEBUILDER LEFTMENU MYOBJECT */")); + + // Add module descriptor to list of files to replace "MyObject' string with real name of object. + $filetogenerate[]='core/modules/mod'.$module.'.class.php'; + + // TODO + } //} } @@ -888,11 +901,12 @@ if ($dirins && $action == 'addproperty' && !empty($module) && ! empty($tabobj)) if (! $error) { $addfieldentry = array( - 'name'=>GETPOST('propname', 'aZ09'),'label'=>GETPOST('proplabel', 'alpha'),'type'=>GETPOST('proptype', 'alpha'), - 'arrayofkeyval'=>GETPOST('proparrayofkeyval', 'none'), // Example json string '{"0":"Draft","1":"Active","-1":"Cancel"}' - 'visible'=>GETPOST('propvisible', 'int'),'enabled'=>GETPOST('propenabled', 'int'), - 'position'=>GETPOST('propposition', 'int'),'notnull'=>GETPOST('propnotnull', 'int'),'index'=>GETPOST('propindex', 'int'),'searchall'=>GETPOST('propsearchall', 'int'), - 'isameasure'=>GETPOST('propisameasure', 'int'), 'comment'=>GETPOST('propcomment', 'alpha'),'help'=>GETPOST('prophelp', 'alpha')); + 'name'=>GETPOST('propname', 'aZ09'),'label'=>GETPOST('proplabel', 'alpha'),'type'=>GETPOST('proptype', 'alpha'), + 'arrayofkeyval'=>GETPOST('proparrayofkeyval', 'none'), // Example json string '{"0":"Draft","1":"Active","-1":"Cancel"}' + 'visible'=>GETPOST('propvisible', 'int'),'enabled'=>GETPOST('propenabled', 'int'), + 'position'=>GETPOST('propposition', 'int'),'notnull'=>GETPOST('propnotnull', 'int'),'index'=>GETPOST('propindex', 'int'),'searchall'=>GETPOST('propsearchall', 'int'), + 'isameasure'=>GETPOST('propisameasure', 'int'), 'comment'=>GETPOST('propcomment', 'alpha'),'help'=>GETPOST('prophelp', 'alpha') + ); if (! empty($addfieldentry['arrayofkeyval']) && ! is_array($addfieldentry['arrayofkeyval'])) { diff --git a/htdocs/modulebuilder/template/test/phpunit/MyModuleFunctionalTest.php b/htdocs/modulebuilder/template/test/phpunit/MyModuleFunctionalTest.php index b4057cf178e..d7077d750b5 100644 --- a/htdocs/modulebuilder/template/test/phpunit/MyModuleFunctionalTest.php +++ b/htdocs/modulebuilder/template/test/phpunit/MyModuleFunctionalTest.php @@ -69,14 +69,14 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase ), // Geckodriver does not keep the session at the moment?! // XPath selectors also don't seem to work -// array( -// 'browser' => 'Mozilla Firefox on Linux', -// 'browserName' => 'firefox', -// 'sessionStrategy' => 'shared', -// 'desiredCapabilities' => array( -// 'marionette' => true -// ) -// ) + //array( + // 'browser' => 'Mozilla Firefox on Linux', + // 'browserName' => 'firefox', + // 'sessionStrategy' => 'shared', + // 'desiredCapabilities' => array( + // 'marionette' => true, + // ), + //) ); /** @@ -224,7 +224,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase { $this->url('/custom/mymodule/admin/about.php'); $this->authenticate(); -return $this->assertEquals( + return $this->assertEquals( 'Dolibarr Module Template (aka My Module)', $this->byTag('h1')->text(), "Readme title" @@ -254,7 +254,7 @@ return $this->assertEquals( { $this->url('/admin/triggers.php'); $this->authenticate(); -return $this->assertContains( + return $this->assertContains( 'interface_99_modMyModule_MyModuleTriggers.class.php', $this->byTag('body')->text(), "Trigger declared" @@ -271,7 +271,7 @@ return $this->assertContains( { $this->url('/admin/triggers.php'); $this->authenticate(); -return $this->assertContains( + return $this->assertContains( 'tick.png', $this->byXPath('//td[text()="interface_99_modMyModule_MyTrigger.class.php"]/following::img')->attribute('src'), "Trigger enabled" From 4d7a18e1e018b72ea7dd98533ed37616e7855455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 20 Oct 2019 01:13:45 +0200 Subject: [PATCH 432/980] restablish original rules --- dev/setup/codesniffer/ruleset.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 0b4be95e692..32c44ce91e4 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -185,15 +185,16 @@ - - + From 66b0c27645d0936100e4a42c433e74ab17f2dc18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 20 Oct 2019 09:58:31 +0200 Subject: [PATCH 433/980] clean indent in commande dir --- .travis.yml | 7 +- dev/setup/codesniffer/ruleset.xml | 3 +- htdocs/commande/card.php | 7 +- htdocs/commande/class/api_orders.class.php | 2 +- htdocs/commande/class/commande.class.php | 6 +- htdocs/commande/contact.php | 27 +++--- htdocs/commande/document.php | 27 +++--- htdocs/commande/info.php | 27 +++--- htdocs/commande/note.php | 29 ++++--- htdocs/commande/tpl/linkedobjectblock.tpl.php | 87 ++++++++----------- 10 files changed, 108 insertions(+), 114 deletions(-) diff --git a/.travis.yml b/.travis.yml index d5583ef6ff2..e487822ad24 100644 --- a/.travis.yml +++ b/.travis.yml @@ -295,7 +295,8 @@ script: set -e # Exclusions are defined in the ruleset.xml file #phpcs -s -n -p -d memory_limit=-1 --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 . - if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true .; fi + #if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true .; fi + phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true . set +e echo @@ -347,7 +348,7 @@ script: mysql -e 'DROP DATABASE IF EXISTS travis;' mysql -e 'CREATE DATABASE IF NOT EXISTS travis;' mysql -e 'GRANT ALL PRIVILEGES ON travis.* TO travis@127.0.0.1;' - mysql -e 'FLUSH PRIVILEGES;' + mysql -e 'FLUSH PRIVILEGES;' mysql -D travis < dev/initdemo/mysqldump_dolibarr_3.5.0.sql fi if [ "$DB" = 'postgresql' ]; then @@ -362,7 +363,7 @@ script: #echo 'ALTER TABLE "llx_accounting_account" DROP CONSTRAINT "idx_16390_primary"' | psql travis fi echo - + - | echo "Upgrading Dolibarr" # Ensure we catch errors. Set this to +e if you want to go to the end to see log files. diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 32c44ce91e4..82582d2d18c 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -186,7 +186,7 @@ - diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 6fdd1e36feb..3854c51e29d 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -44,8 +44,9 @@ require_once DOL_DOCUMENT_ROOT . '/comm/action/class/actioncomm.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/order.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php'; -if (! empty($conf->propal->enabled)) +if (! empty($conf->propal->enabled)) { require_once DOL_DOCUMENT_ROOT . '/comm/propal/class/propal.class.php'; +} if (! empty($conf->projet->enabled)) { require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php'; @@ -757,8 +758,8 @@ if (empty($reshook)) $price_base_type = $prod->multiprices_base_type[$object->thirdparty->price_level]; if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility { - if (isset($prod->multiprices_tva_tx[$object->thirdparty->price_level])) $tva_tx=$prod->multiprices_tva_tx[$object->thirdparty->price_level]; - if (isset($prod->multiprices_recuperableonly[$object->thirdparty->price_level])) $tva_npr=$prod->multiprices_recuperableonly[$object->thirdparty->price_level]; + if (isset($prod->multiprices_tva_tx[$object->thirdparty->price_level])) $tva_tx=$prod->multiprices_tva_tx[$object->thirdparty->price_level]; + if (isset($prod->multiprices_recuperableonly[$object->thirdparty->price_level])) $tva_npr=$prod->multiprices_recuperableonly[$object->thirdparty->price_level]; } } // If price per customer diff --git a/htdocs/commande/class/api_orders.class.php b/htdocs/commande/class/api_orders.class.php index fb044b1fafa..2559510dea8 100644 --- a/htdocs/commande/class/api_orders.class.php +++ b/htdocs/commande/class/api_orders.class.php @@ -437,7 +437,7 @@ class Orders extends DolibarrApi return $this->commande; } - /** + /** * Delete a contact type of given order * * @param int $id Id of order to update diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 6fe2104556b..4cc922a8cbf 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -1995,9 +1995,9 @@ class Commande extends CommonOrder // multilangs if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($objp->fk_product) && ! empty($loadalsotranslation)) { - $line = new Product($this->db); - $line->fetch($objp->fk_product); - $line->getMultiLangs(); + $line = new Product($this->db); + $line->fetch($objp->fk_product); + $line->getMultiLangs(); } $this->lines[$i] = $line; diff --git a/htdocs/commande/contact.php b/htdocs/commande/contact.php index 82d24ad3646..57e37f9f903 100644 --- a/htdocs/commande/contact.php +++ b/htdocs/commande/contact.php @@ -164,20 +164,21 @@ if ($id > 0 || ! empty($ref)) $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->commande->creer) { - if ($action != 'classify') + if ($action != 'classify') { //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.='
'; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.='
'; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); - } + $morehtmlref.=' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.='
'; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.='
'; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php index 515e14095bd..fa825086c4a 100644 --- a/htdocs/commande/document.php +++ b/htdocs/commande/document.php @@ -127,20 +127,21 @@ if ($id > 0 || ! empty($ref)) $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->commande->creer) { - if ($action != 'classify') + if ($action != 'classify') { //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.='
'; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.='
'; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); - } + $morehtmlref.=' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.='
'; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.='
'; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/commande/info.php b/htdocs/commande/info.php index f42a9fc5b60..7d8e319c5ae 100644 --- a/htdocs/commande/info.php +++ b/htdocs/commande/info.php @@ -84,20 +84,21 @@ if (! empty($conf->projet->enabled)) $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->commande->creer) { - if ($action != 'classify') - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; + if ($action != 'classify') { + //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.='
'; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.='
'; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); - } + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.='
'; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.='
'; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/commande/note.php b/htdocs/commande/note.php index 0931067f155..2cb69bd698b 100644 --- a/htdocs/commande/note.php +++ b/htdocs/commande/note.php @@ -97,20 +97,21 @@ if ($id > 0 || ! empty($ref)) $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->commande->creer) { - if ($action != 'classify') - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.='
'; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.='
'; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + if ($action != 'classify') { + //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; + $morehtmlref.=' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.='
'; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.='
'; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/commande/tpl/linkedobjectblock.tpl.php b/htdocs/commande/tpl/linkedobjectblock.tpl.php index 86f98f4f0e9..459940dcc64 100644 --- a/htdocs/commande/tpl/linkedobjectblock.tpl.php +++ b/htdocs/commande/tpl/linkedobjectblock.tpl.php @@ -18,17 +18,12 @@ */ // Protection to avoid direct call of template -if (empty($conf) || ! is_object($conf)) -{ +if (empty($conf) || ! is_object($conf)) { print "Error, template page can't be called as URL"; exit; } -?> - - - -\n"; global $user; global $noMoreLinkedObjectBlockAfter; @@ -41,54 +36,48 @@ $langs->load("orders"); $linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); -$total=0; $ilink=0; +$total=0; +$ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { $ilink++; $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; -?> - - trans("CustomerOrder"); ?> - global->MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES) print ' - - getNomUrl(1); ?> - ref_client; ?> - date, 'day'); ?> - rights->commande->lire) { - $total = $total + $objectlink->total_ht; - echo price($objectlink->total_ht); - } ?> - getLibStatut(3); ?> - - element != 'shipping') { - ?> - ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?> - - - -'; + echo ''.$langs->trans("CustomerOrder"); + if (!empty($showImportButton) && $conf->global->MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES) { + print ' '; + echo ''.$objectlink->getNomUrl(1).''; + echo ''.$objectlink->ref_client.''; + echo ''.dol_print_date($objectlink->date, 'day').''; + echo ''; + if ($user->rights->commande->lire) { + $total = $total + $objectlink->total_ht; + echo price($objectlink->total_ht); + } + echo ''; + echo ''.$objectlink->getLibStatut(3).''; + echo ''; + // For now, shipments must stay linked to order, so link is not deletable + if($object->element != 'shipping') { + echo ''.img_picto($langs->transnoentitiesnoconv("RemoveLink"), 'unlink').''; + } + echo ''; + echo "\n"; } -if (count($linkedObjectBlock) > 1) -{ - ?> - - trans("Total"); ?> - - - - - - - - 1) { + echo ''; + echo ''.$langs->trans("Total").''; + echo ''; + echo ''; + echo ''; + echo ''.price($total).''; + echo ''; + echo ''; + echo "\n"; } -?> - +echo "\n"; From 33c35780e01a143fb5856cdf9bc56b7154dfd933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 20 Oct 2019 11:17:54 +0200 Subject: [PATCH 434/980] wip --- htdocs/api/admin/explorer.php | 2 +- htdocs/api/class/api.class.php | 6 +- htdocs/api/class/api_setup.class.php | 14 +- htdocs/blockedlog/admin/blockedlog_list.php | 4 +- htdocs/blockedlog/class/blockedlog.class.php | 4 +- htdocs/bom/tpl/objectline_create.tpl.php | 136 ++++---- htdocs/bom/tpl/objectline_edit.tpl.php | 143 ++++---- htdocs/bom/tpl/objectline_title.tpl.php | 7 +- htdocs/bom/tpl/objectline_view.tpl.php | 161 +++++---- htdocs/core/ajax/ajaxdirpreview.php | 4 +- htdocs/core/ajax/box.php | 2 +- .../connectors/php/commands.php | 2 +- .../core/filemanagerdol/connectors/php/io.php | 8 +- htdocs/core/js/lib_head.js.php | 20 +- htdocs/core/js/lib_notification.js.php | 2 +- htdocs/core/lib/agenda.lib.php | 10 +- htdocs/core/lib/bank.lib.php | 6 +- htdocs/core/lib/files.lib.php | 6 +- htdocs/core/lib/functions.lib.php | 78 ++--- htdocs/core/lib/json.lib.php | 12 +- htdocs/core/lib/project.lib.php | 322 +++++++++--------- htdocs/core/lib/reception.lib.php | 16 +- htdocs/core/lib/xcal.lib.php | 4 +- .../interface_20_all_Logevents.class.php | 4 +- ...terface_50_modAgenda_ActionsAuto.class.php | 8 +- ...face_99_modZapier_ZapierTriggers.class.php | 4 +- 26 files changed, 479 insertions(+), 506 deletions(-) diff --git a/htdocs/api/admin/explorer.php b/htdocs/api/admin/explorer.php index 0f541b93708..0fd34788adf 100644 --- a/htdocs/api/admin/explorer.php +++ b/htdocs/api/admin/explorer.php @@ -148,7 +148,7 @@ foreach ($modulesdir as $dir) }*/ //$listofapis[]=array('classname'=>$classname, 'fullpath'=>$file_searched); - /* } + /* } }*/ } diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php index c0e81bc77cb..7660144f7ca 100644 --- a/htdocs/api/class/api.class.php +++ b/htdocs/api/class/api.class.php @@ -262,9 +262,9 @@ class DolibarrApi if ($tmp[$i]==')') $counter--; if ($counter < 0) { - $error="Bad sqlfilters=".$sqlfilters; - dol_syslog($error, LOG_WARNING); - return false; + $error="Bad sqlfilters=".$sqlfilters; + dol_syslog($error, LOG_WARNING); + return false; } $i++; } diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 1d4bb6a8cb7..60f5a54eeba 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -383,7 +383,7 @@ class Setup extends DolibarrApi return $list; } - + /** * Get the list of contacts types. * @@ -533,13 +533,15 @@ class Setup extends DolibarrApi if (!empty($multicurrency)) $sql.= " , cr.date_sync, cr.rate "; $sql.= " FROM ".MAIN_DB_PREFIX."c_currencies as t"; if (!empty($multicurrency)) { - $sql.= " JOIN ".MAIN_DB_PREFIX."multicurrency as m ON m.code=t.code_iso"; - $sql.= " JOIN ".MAIN_DB_PREFIX."multicurrency_rate as cr ON (m.rowid = cr.fk_multicurrency)"; + $sql.= " JOIN ".MAIN_DB_PREFIX."multicurrency as m ON m.code=t.code_iso"; + $sql.= " JOIN ".MAIN_DB_PREFIX."multicurrency_rate as cr ON (m.rowid = cr.fk_multicurrency)"; } $sql.= " WHERE t.active = ".$active; if (!empty($multicurrency)) { - $sql.= " AND m.entity IN (".getEntity('multicurrency').")"; - if (!empty($multicurrency) && $multicurrency != 2) $sql.= " AND cr.date_sync = (SELECT MAX(cr2.date_sync) FROM ".MAIN_DB_PREFIX."multicurrency_rate AS cr2 WHERE cr2.fk_multicurrency = m.rowid)"; + $sql.= " AND m.entity IN (".getEntity('multicurrency').")"; + if (!empty($multicurrency) && $multicurrency != 2) { + $sql.= " AND cr.date_sync = (SELECT MAX(cr2.date_sync) FROM ".MAIN_DB_PREFIX."multicurrency_rate AS cr2 WHERE cr2.fk_multicurrency = m.rowid)"; + } } // Add sql filters @@ -924,7 +926,7 @@ class Setup extends DolibarrApi $sql = "SELECT rowid, code, pos, label, use_default, description"; $sql.= " FROM ".MAIN_DB_PREFIX."c_ticket_category as t"; - $sql.= " WHERE t.active = ".$active; + $sql.= " WHERE t.active = ".$active; // Add sql filters if ($sqlfilters) { diff --git a/htdocs/blockedlog/admin/blockedlog_list.php b/htdocs/blockedlog/admin/blockedlog_list.php index 1f0c82e780b..6ce788a5790 100644 --- a/htdocs/blockedlog/admin/blockedlog_list.php +++ b/htdocs/blockedlog/admin/blockedlog_list.php @@ -574,7 +574,7 @@ jQuery(document).ready(function () { if(!empty($conf->global->BLOCKEDLOG_USE_REMOTE_AUTHORITY) && !empty($conf->global->BLOCKEDLOG_AUTHORITY_URL)) { -?> + ?> -thirdparty as $key=>$value) { if (in_array($key, $arrayoffieldstoexclude)) continue; // Discard some properties - if (! in_array($key, array( + if (! in_array($key, array( 'name','name_alias','ref_ext','address','zip','town','state_code','country_code','idprof1','idprof2','idprof3','idprof4','idprof5','idprof6','phone','fax','email','barcode', 'tva_intra', 'localtax1_assuj', 'localtax1_value', 'localtax2_assuj', 'localtax2_value', 'managers', 'capital', 'typent_code', 'forme_juridique_code', 'code_client', 'code_fournisseur' ))) continue; // Discard if not into a dedicated list @@ -592,7 +592,7 @@ class BlockedLog foreach($tmpobject as $key=>$value) { if (in_array($key, $arrayoffieldstoexclude)) continue; // Discard some properties - if (! in_array($key, array( + if (! in_array($key, array( 'ref','ref_client','ref_supplier','date','datef','type','total_ht','total_tva','total_ttc','localtax1','localtax2','revenuestamp','datepointoftax','note_public' ))) continue; // Discard if not into a dedicated list if (!is_object($value)) diff --git a/htdocs/bom/tpl/objectline_create.tpl.php b/htdocs/bom/tpl/objectline_create.tpl.php index b7eb1608e9e..cd654c7a596 100644 --- a/htdocs/bom/tpl/objectline_create.tpl.php +++ b/htdocs/bom/tpl/objectline_create.tpl.php @@ -47,22 +47,20 @@ $colspan = 3; // Columns: total ht + col edit + col delete // Lines for extrafield $objectline = new BOMLine($this->db); -?> - -\n"; + $nolinesbefore=(count($this->lines) == 0 || $forcetoshowtitlelines); if ($nolinesbefore) { -?> - - global->MAIN_VIEW_LINE_NUMBER)) { ?> - - - -
trans('AddNewLine'); ?>trans("FreeZone"); ?> - - trans('Qty'); ?> - '; + if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) { + print ''; + } + print ''; + print '
'.$langs->trans('AddNewLine').''; + // echo $langs->trans("FreeZone"); + print ''; + print ''.$langs->trans('Qty').''; if ($conf->global->PRODUCT_USE_UNITS) { print ''; @@ -70,76 +68,68 @@ if ($nolinesbefore) { print $langs->trans('Unit'); print ''; } - ?> - textwithpicto($langs->trans('ManufacturingEfficiency'), $langs->trans('ValueOfMeansLoss')); ?> -   - -'.$form->textwithpicto($langs->trans('ManufacturingEfficiency'), $langs->trans('ValueOfMeansLoss')).''; + print ' '; + print ''; } -?> - -global->MAIN_VIEW_LINE_NUMBER)) { - $coldisplay++; - echo ''; - } +print ''; +$coldisplay=0; +// Adds a line numbering column +if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) { $coldisplay++; - ?> - + echo ''; +} - product->enabled) || ! empty($conf->service->enabled)) +$coldisplay++; +print ''; + +// Predefined product/service +if (! empty($conf->product->enabled) || ! empty($conf->service->enabled)) +{ + if ($forceall >= 0 && $freelines) echo '
'; + echo ''; + $filtertype=''; + if (! empty($object->element) && $object->element == 'contrat' && empty($conf->global->CONTRACT_SUPPORT_PRODUCTS)) $filtertype='1'; + + $statustoshow = -1; + if (! empty($conf->global->ENTREPOT_EXTRA_STATUS)) { - if ($forceall >= 0 && $freelines) echo '
'; - echo ''; - $filtertype=''; - if (! empty($object->element) && $object->element == 'contrat' && empty($conf->global->CONTRACT_SUPPORT_PRODUCTS)) $filtertype='1'; - - $statustoshow = -1; - if (! empty($conf->global->ENTREPOT_EXTRA_STATUS)) - { - // hide products in closed warehouse, but show products for internal transfer - $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, 'warehouseopen,warehouseinternal', GETPOST('combinations', 'array')); - } - else - { - $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, '', GETPOST('combinations', 'array')); - } - - echo ''; + // hide products in closed warehouse, but show products for internal transfer + $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, 'warehouseopen,warehouseinternal', GETPOST('combinations', 'array')); + } + else + { + $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, '', GETPOST('combinations', 'array')); } - $coldisplay++; - ?> - "> - - global->PRODUCT_USE_UNITS) - { - $coldisplay++; - print ''; - print $form->selectUnits($line->fk_unit, "units"); - print ''; - } + echo '
'; +} - $coldisplay++; - ?> - "> - '; +print ''; +if($conf->global->PRODUCT_USE_UNITS) +{ + $coldisplay++; + print ''; + print $form->selectUnits($line->fk_unit, "units"); + print ''; +} - $coldisplay+=$colspan; - ?> - - - - +$coldisplay++; + +print ''; +print ''; +print ''; + + +$coldisplay += $colspan; +print ''; +print ''; +print ''; +print ''; -showOptionals($extrafields, 'edit', array('style'=>$bcnd[$var], 'colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1); } diff --git a/htdocs/bom/tpl/objectline_edit.tpl.php b/htdocs/bom/tpl/objectline_edit.tpl.php index 05b9094d10e..d887b9ab68d 100644 --- a/htdocs/bom/tpl/objectline_edit.tpl.php +++ b/htdocs/bom/tpl/objectline_edit.tpl.php @@ -49,22 +49,19 @@ $colspan = 3; // Columns: total ht + col edit + col delete // Lines for extrafield $objectline = new BOMLine($this->db); -?> - +print "\n"; - - - global->MAIN_VIEW_LINE_NUMBER)) { ?> - - '; +// Adds a line numbering column +if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) { + print ''.($i+1).''; $coldisplay++; - ?> +} + +$coldisplay++; +?>
@@ -74,72 +71,66 @@ $coldisplay=0; - fk_product > 0) { - $tmpproduct = new Product($object->db); - $tmpproduct->fetch($line->fk_product); - print $tmpproduct->getNomUrl(1); - } - - if (is_object($hookmanager)) - { - $fk_parent_line = (GETPOST('fk_parent_line') ? GETPOST('fk_parent_line') : $line->fk_parent_line); - $parameters=array('line'=>$line,'fk_parent_line'=>$fk_parent_line,'var'=>$var,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer); - $reshook=$hookmanager->executeHooks('formEditProductOptions', $parameters, $this, $action); - } - - ?> - - - element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') // We must have same test in printObjectLines - { - $coldisplay++; - ?> - - - - info_bits & 2) != 2) { - // I comment this because it shows info even when not required - // for example always visible on invoice but must be visible only if stock module on and stock decrease option is on invoice validation and status is not validated - // must also not be output for most entities (proposal, intervention, ...) - //if($line->qty > $line->stock) print img_picto($langs->trans("StockTooLow"),"warning", 'style="vertical-align: bottom;"')." "; - print ''; - } - ?> - - - global->PRODUCT_USE_UNITS) - { - $coldisplay++; - print ''; - print $form->selectUnits($line->fk_unit, "units"); - print ''; - } - - $coldisplay++; - ?> - - - - ">
- "> - - - fk_product > 0) { + $tmpproduct = new Product($object->db); + $tmpproduct->fetch($line->fk_product); + print $tmpproduct->getNomUrl(1); +} + +if (is_object($hookmanager)) +{ + $fk_parent_line = (GETPOST('fk_parent_line') ? GETPOST('fk_parent_line') : $line->fk_parent_line); + $parameters=array('line'=>$line,'fk_parent_line'=>$fk_parent_line,'var'=>$var,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer); + $reshook=$hookmanager->executeHooks('formEditProductOptions', $parameters, $this, $action); +} + +print ''; + +/*if ($object->element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') // We must have same test in printObjectLines +{ + $coldisplay++; +?> + +'; +if (($line->info_bits & 2) != 2) { + // I comment this because it shows info even when not required + // for example always visible on invoice but must be visible only if stock module on and stock decrease option is on invoice validation and status is not validated + // must also not be output for most entities (proposal, intervention, ...) + //if($line->qty > $line->stock) print img_picto($langs->trans("StockTooLow"),"warning", 'style="vertical-align: bottom;"')." "; + print ''; +} +print ''; + +if ($conf->global->PRODUCT_USE_UNITS) +{ + $coldisplay++; + print ''; + print $form->selectUnits($line->fk_unit, "units"); + print ''; +} + +$coldisplay++; +print ''; +print ''; + +$coldisplay+=$colspan; +print ''; +$coldisplay+=$colspan; +print ''; +print '
'; +print ''; +print ''; +print ''; + if (is_object($objectline)) { print $objectline->showOptionals($extrafields, 'edit', array('style'=>$bcnd[$var], 'colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1); } -?> - +print "\n"; diff --git a/htdocs/bom/tpl/objectline_title.tpl.php b/htdocs/bom/tpl/objectline_title.tpl.php index 26010a70eb8..721cc5b501f 100644 --- a/htdocs/bom/tpl/objectline_title.tpl.php +++ b/htdocs/bom/tpl/objectline_title.tpl.php @@ -39,9 +39,7 @@ if (empty($object) || ! is_object($object)) print "Error, template page can't be called as URL"; exit; } -?> - -\n"; // Title line print "\n"; @@ -79,6 +77,5 @@ if ($action == 'selectlines') print "\n"; print "\n"; -?> - +print "\n"; diff --git a/htdocs/bom/tpl/objectline_view.tpl.php b/htdocs/bom/tpl/objectline_view.tpl.php index 9582e69f967..f569516e535 100644 --- a/htdocs/bom/tpl/objectline_view.tpl.php +++ b/htdocs/bom/tpl/objectline_view.tpl.php @@ -59,100 +59,93 @@ $domData .= ' data-product_type="'.$line->product_type.'"'; // Lines for extrafield $objectline = new BOMLine($object->db); -?> - - - > - global->MAIN_VIEW_LINE_NUMBER)) { ?> - - -
- db); - $tmpproduct->fetch($line->fk_product); - print $tmpproduct->getNomUrl(1); - ?> - - - qty, 0, '', 0, 0); // Yes, it is a quantity, not a price, but we just want the formating role of function price - ?> - +$coldisplay=0; +print "\n"; +print ''; +if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) { + print ''.($i+1).''; + $coldisplay++; +} +print ''; +print '
'; +$coldisplay++; +$tmpproduct = new Product($object->db); +$tmpproduct->fetch($line->fk_product); +print $tmpproduct->getNomUrl(1); +print ''; +print ''; +$coldisplay++; +echo price($line->qty, 0, '', 0, 0); // Yes, it is a quantity, not a price, but we just want the formating role of function price +print ''; - global->PRODUCT_USE_UNITS) - { - print ''; - $label = $line->getLabelOfUnit('short'); - if ($label !== '') { - print $langs->trans($label); +if($conf->global->PRODUCT_USE_UNITS) +{ + print ''; + $label = $line->getLabelOfUnit('short'); + if ($label !== '') { + print $langs->trans($label); + } + print ''; +} +print ''; +$coldisplay++; +echo $line->efficiency; +print ''; + +if ($this->statut == 0 && ($object_rights->write) && $action != 'selectlines' ) { + print ''; + $coldisplay++; + if (($line->info_bits & 2) == 2 || ! empty($disableedit)) { + } else { + print 'id.'#line_'.$line->id.'">'.img_edit().''; + } + print ''; + + print ''; + $coldisplay++; + if (($line->fk_prev_id == null ) && empty($disableremove)) { + //La suppression n'est autorisée que si il n'y a pas de ligne dans une précédente situation + print 'id . '">'; + print img_delete(); + print ''; + } + print ''; + + if ($num > 1 && $conf->browser->layout != 'phone' && empty($disablemove)) { + print ''; + $coldisplay++; + if ($i > 0) { + print 'id.'">'; + echo img_up('default', 0, 'imgupforline'); + print ''; + } + if ($i < $num-1) { + print 'id.'">'; + echo img_down('default', 0, 'imgdownforline'); + print ''; } print ''; + } else { + print 'browser->layout != 'phone' && empty($disablemove)) ?' class="linecolmove tdlineupdown center"':' class="linecolmove center"').'>'; + $coldisplay++; } - ?> - - efficiency; - ?> - - '; + $coldisplay=$coldisplay+3; +} - if ($this->statut == 0 && ($object_rights->write) && $action != 'selectlines' ) { ?> - - info_bits & 2) == 2 || ! empty($disableedit)) { ?> - - id.'#line_'.$line->id; ?>"> - - - - +if ($action == 'selectlines') { + print ''; + print ''; + print ''; +} - - fk_prev_id == null ) && empty($disableremove)) { //La suppression n'est autorisée que si il n'y a pas de ligne dans une précédente situation - print 'id . '">'; - print img_delete(); - print ''; - } - ?> - +print ''; - 1 && $conf->browser->layout != 'phone' && empty($disablemove)) { ?> - - 0) { ?> - id; ?>"> - - - - - id; ?>"> - - - - - - browser->layout != 'phone' && empty($disablemove)) ?' class="linecolmove tdlineupdown center"':' class="linecolmove center"'); ?>> - - - - - - - - - -showOptionals($extrafields, 'view', array('style'=>'class="drag drop oddeven"','colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1); } -?> - +print "\n"; diff --git a/htdocs/core/ajax/ajaxdirpreview.php b/htdocs/core/ajax/ajaxdirpreview.php index f1f42266735..d6a2ba77f05 100644 --- a/htdocs/core/ajax/ajaxdirpreview.php +++ b/htdocs/core/ajax/ajaxdirpreview.php @@ -155,8 +155,8 @@ $type='directory'; // This test if file exists should be useless. We keep it to find bug more easily if (! dol_is_dir($upload_dir)) { -// dol_mkdir($upload_dir); -/* $langs->load("install"); + //dol_mkdir($upload_dir); + /*$langs->load("install"); dol_print_error(0,$langs->trans("ErrorDirDoesNotExists",$upload_dir)); exit;*/ } diff --git a/htdocs/core/ajax/box.php b/htdocs/core/ajax/box.php index d37374e45a5..200c6208896 100644 --- a/htdocs/core/ajax/box.php +++ b/htdocs/core/ajax/box.php @@ -73,7 +73,7 @@ if ($boxorder && $zone != '' && $userid > 0) $langs->load("boxes"); if (! GETPOST('closing')) { - setEventMessages($langs->trans("BoxAdded"), null); + setEventMessages($langs->trans("BoxAdded"), null); } } } diff --git a/htdocs/core/filemanagerdol/connectors/php/commands.php b/htdocs/core/filemanagerdol/connectors/php/commands.php index 9e26e1583a6..2f6dbf16943 100644 --- a/htdocs/core/filemanagerdol/connectors/php/commands.php +++ b/htdocs/core/filemanagerdol/connectors/php/commands.php @@ -318,7 +318,7 @@ function FileUpload($resourceType, $currentFolder, $sCommand, $CKEcallback = '') else { //issue the CKEditor Callback -SendCKEditorResults( + SendCKEditorResults( $CKEcallback, $sFileUrl, ($sErrorNumber != 0 ? 'Error '. $sErrorNumber. ' upload failed.' : 'Upload Successful') diff --git a/htdocs/core/filemanagerdol/connectors/php/io.php b/htdocs/core/filemanagerdol/connectors/php/io.php index 17f847b9a37..b66f2abcd8b 100644 --- a/htdocs/core/filemanagerdol/connectors/php/io.php +++ b/htdocs/core/filemanagerdol/connectors/php/io.php @@ -401,11 +401,11 @@ EOF; */ function SendCKEditorResults($callback, $sFileUrl, $customMsg = '') { - echo ''; + echo ''; } diff --git a/htdocs/core/js/lib_head.js.php b/htdocs/core/js/lib_head.js.php index c35318dc7ae..54c0f02abde 100644 --- a/htdocs/core/js/lib_head.js.php +++ b/htdocs/core/js/lib_head.js.php @@ -1039,16 +1039,16 @@ function price2numjs(amount) { if (amount == '') return ''; transnoentitiesnoconv("SeparatorDecimal") != "SeparatorDecimal") { - $dec = $langs->transnoentitiesnoconv("SeparatorDecimal"); - } - if ($langs->transnoentitiesnoconv("SeparatorThousand") != "SeparatorThousand") { - $thousand = $langs->transnoentitiesnoconv("SeparatorThousand"); - } - if ($thousand == 'Space') $thousand=' '; - print "var dec='" . dol_escape_js($dec) . "'; var thousand='" . dol_escape_js($thousand) . "';\n"; // Set var in javascript + $dec = ','; + $thousand = ' '; + if ($langs->transnoentitiesnoconv("SeparatorDecimal") != "SeparatorDecimal") { + $dec = $langs->transnoentitiesnoconv("SeparatorDecimal"); + } + if ($langs->transnoentitiesnoconv("SeparatorThousand") != "SeparatorThousand") { + $thousand = $langs->transnoentitiesnoconv("SeparatorThousand"); + } + if ($thousand == 'Space') $thousand=' '; + print "var dec='" . dol_escape_js($dec) . "'; var thousand='" . dol_escape_js($thousand) . "';\n"; // Set var in javascript ?> var main_max_dec_shown = global->MAIN_MAX_DECIMALS_SHOWN); ?>; diff --git a/htdocs/core/js/lib_notification.js.php b/htdocs/core/js/lib_notification.js.php index 6c7f3e2c35c..cb8a80bbd78 100644 --- a/htdocs/core/js/lib_notification.js.php +++ b/htdocs/core/js/lib_notification.js.php @@ -140,5 +140,5 @@ if (! ($_SERVER['HTTP_REFERER'] === $dolibarr_main_url_root . '/' || $_SERVER['H time_js_next_test += time_auto_update; console.log('Updated time_js_next_test. New value is '+time_js_next_test); } -id=$obj->id; print ''.$staticaction->getNomUrl(1, 34).''; - // print ''.dol_trunc($obj->label,22).''; + // print ''.dol_trunc($obj->label,22).''; print ''; if ($obj->rowid > 0) @@ -414,10 +414,10 @@ function agenda_prepare_head() if ($conf->global->MAIN_FEATURES_LEVEL > 0) { - $head[$h][0] = DOL_URL_ROOT."/admin/agenda_reminder.php"; - $head[$h][1] = $langs->trans("Reminders"); - $head[$h][2] = 'reminders'; - $h++; + $head[$h][0] = DOL_URL_ROOT."/admin/agenda_reminder.php"; + $head[$h][1] = $langs->trans("Reminders"); + $head[$h][2] = 'reminders'; + $h++; } $head[$h][0] = DOL_URL_ROOT."/admin/agenda_xcal.php"; diff --git a/htdocs/core/lib/bank.lib.php b/htdocs/core/lib/bank.lib.php index 2230bfac5a1..91e0b719734 100644 --- a/htdocs/core/lib/bank.lib.php +++ b/htdocs/core/lib/bank.lib.php @@ -47,13 +47,13 @@ function bank_prepare_head(Account $object) $head[$h][2] = 'journal'; $h++; -// if ($conf->global->MAIN_FEATURES_LEVEL >= 1) -// { + // if ($conf->global->MAIN_FEATURES_LEVEL >= 1) + // { $head[$h][0] = DOL_URL_ROOT . "/compta/bank/treso.php?account=" . $object->id; $head[$h][1] = $langs->trans("PlannedTransactions"); $head[$h][2] = 'cash'; $h++; -// } + // } $head[$h][0] = DOL_URL_ROOT . "/compta/bank/annuel.php?account=" . $object->id; $head[$h][1] = $langs->trans("IOMonthlyReporting"); diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 1730d51383d..f1fd6ed220f 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -624,7 +624,7 @@ function dolReplaceInFile($srcfile, $arrayreplacement, $destfile = '', $newmask if (empty($arrayreplacementisregex)) { - $content = make_substitutions($content, $arrayreplacement, null); + $content = make_substitutions($content, $arrayreplacement, null); } else { @@ -1044,8 +1044,8 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disable $checkvirusarray=dolCheckVirus($src_file); if (count($checkvirusarray)) { - dol_syslog('Files.lib::dol_move_uploaded_file File "'.$src_file.'" (target name "'.$dest_file.'") KO with antivirus: errors='.join(',', $checkvirusarray), LOG_WARNING); - return 'ErrorFileIsInfectedWithAVirus: '.join(',', $checkvirusarray); + dol_syslog('Files.lib::dol_move_uploaded_file File "'.$src_file.'" (target name "'.$dest_file.'") KO with antivirus: errors='.join(',', $checkvirusarray), LOG_WARNING); + return 'ErrorFileIsInfectedWithAVirus: '.join(',', $checkvirusarray); } } diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 8a17b961adb..ecdebb1c27a 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -464,36 +464,36 @@ function GETPOST($paramname, $check = 'none', $method = 0, $filter = null, $opti $maxloop=20; $loopnb=0; // Protection against infinite loop while (preg_match('/__([A-Z0-9]+_?[A-Z0-9]+)__/i', $out, $reg) && ($loopnb < $maxloop)) // Detect '__ABCDEF__' as key 'ABCDEF' and '__ABC_DEF__' as key 'ABC_DEF'. Detection is also correct when 2 vars are side by side. { - $loopnb++; $newout = ''; + $loopnb++; $newout = ''; - if ($reg[1] == 'DAY') { $tmp=dol_getdate(dol_now(), true); $newout = $tmp['mday']; } - elseif ($reg[1] == 'MONTH') { $tmp=dol_getdate(dol_now(), true); $newout = $tmp['mon']; } - elseif ($reg[1] == 'YEAR') { $tmp=dol_getdate(dol_now(), true); $newout = $tmp['year']; } - elseif ($reg[1] == 'PREVIOUS_DAY') { $tmp=dol_getdate(dol_now(), true); $tmp2=dol_get_prev_day($tmp['mday'], $tmp['mon'], $tmp['year']); $newout = $tmp2['day']; } - elseif ($reg[1] == 'PREVIOUS_MONTH') { $tmp=dol_getdate(dol_now(), true); $tmp2=dol_get_prev_month($tmp['mon'], $tmp['year']); $newout = $tmp2['month']; } - elseif ($reg[1] == 'PREVIOUS_YEAR') { $tmp=dol_getdate(dol_now(), true); $newout = ($tmp['year'] - 1); } - elseif ($reg[1] == 'NEXT_DAY') { $tmp=dol_getdate(dol_now(), true); $tmp2=dol_get_next_day($tmp['mday'], $tmp['mon'], $tmp['year']); $newout = $tmp2['day']; } - elseif ($reg[1] == 'NEXT_MONTH') { $tmp=dol_getdate(dol_now(), true); $tmp2=dol_get_next_month($tmp['mon'], $tmp['year']); $newout = $tmp2['month']; } - elseif ($reg[1] == 'NEXT_YEAR') { $tmp=dol_getdate(dol_now(), true); $newout = ($tmp['year'] + 1); } - elseif ($reg[1] == 'MYCOMPANY_COUNTRY_ID' || $reg[1] == 'MYCOUNTRY_ID' || $reg[1] == 'MYCOUNTRYID') - { - $newout = $mysoc->country_id; - } - elseif ($reg[1] == 'USER_ID' || $reg[1] == 'USERID') - { - $newout = $user->id; - } - elseif ($reg[1] == 'USER_SUPERVISOR_ID' || $reg[1] == 'SUPERVISOR_ID' || $reg[1] == 'SUPERVISORID') - { - $newout = $user->fk_user; - } - elseif ($reg[1] == 'ENTITY_ID' || $reg[1] == 'ENTITYID') - { - $newout = $conf->entity; - } - else $newout = ''; // Key not found, we replace with empty string - //var_dump('__'.$reg[1].'__ -> '.$newout); - $out = preg_replace('/__'.preg_quote($reg[1], '/').'__/', $newout, $out); + if ($reg[1] == 'DAY') { $tmp=dol_getdate(dol_now(), true); $newout = $tmp['mday']; } + elseif ($reg[1] == 'MONTH') { $tmp=dol_getdate(dol_now(), true); $newout = $tmp['mon']; } + elseif ($reg[1] == 'YEAR') { $tmp=dol_getdate(dol_now(), true); $newout = $tmp['year']; } + elseif ($reg[1] == 'PREVIOUS_DAY') { $tmp=dol_getdate(dol_now(), true); $tmp2=dol_get_prev_day($tmp['mday'], $tmp['mon'], $tmp['year']); $newout = $tmp2['day']; } + elseif ($reg[1] == 'PREVIOUS_MONTH') { $tmp=dol_getdate(dol_now(), true); $tmp2=dol_get_prev_month($tmp['mon'], $tmp['year']); $newout = $tmp2['month']; } + elseif ($reg[1] == 'PREVIOUS_YEAR') { $tmp=dol_getdate(dol_now(), true); $newout = ($tmp['year'] - 1); } + elseif ($reg[1] == 'NEXT_DAY') { $tmp=dol_getdate(dol_now(), true); $tmp2=dol_get_next_day($tmp['mday'], $tmp['mon'], $tmp['year']); $newout = $tmp2['day']; } + elseif ($reg[1] == 'NEXT_MONTH') { $tmp=dol_getdate(dol_now(), true); $tmp2=dol_get_next_month($tmp['mon'], $tmp['year']); $newout = $tmp2['month']; } + elseif ($reg[1] == 'NEXT_YEAR') { $tmp=dol_getdate(dol_now(), true); $newout = ($tmp['year'] + 1); } + elseif ($reg[1] == 'MYCOMPANY_COUNTRY_ID' || $reg[1] == 'MYCOUNTRY_ID' || $reg[1] == 'MYCOUNTRYID') + { + $newout = $mysoc->country_id; + } + elseif ($reg[1] == 'USER_ID' || $reg[1] == 'USERID') + { + $newout = $user->id; + } + elseif ($reg[1] == 'USER_SUPERVISOR_ID' || $reg[1] == 'SUPERVISOR_ID' || $reg[1] == 'SUPERVISORID') + { + $newout = $user->fk_user; + } + elseif ($reg[1] == 'ENTITY_ID' || $reg[1] == 'ENTITYID') + { + $newout = $conf->entity; + } + else $newout = ''; // Key not found, we replace with empty string + //var_dump('__'.$reg[1].'__ -> '.$newout); + $out = preg_replace('/__'.preg_quote($reg[1], '/').'__/', $newout, $out); } } @@ -876,7 +876,7 @@ function dol_string_unaccent($str) else { // See http://www.ascii-code.com/ -$string = strtr( + $string = strtr( $str, "\xC0\xC1\xC2\xC3\xC4\xC5\xC7 \xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1 @@ -3829,7 +3829,7 @@ function dol_print_error($db = '', $error = '', $errors = null) if (! empty($conf->modules)) { - $out.="".$langs->trans("Modules").": ".join(', ', $conf->modules)."
\n"; + $out.="".$langs->trans("Modules").": ".join(', ', $conf->modules)."
\n"; } if (is_object($db)) @@ -5867,7 +5867,7 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null, // Add SIGNATURE into substitutionarray first, so, when we will make the substitution, // this will include signature content first and then replace var found into content of signature $signature = $user->signature; -$substitutionarray=array_merge($substitutionarray, array( + $substitutionarray=array_merge($substitutionarray, array( '__USER_SIGNATURE__' => (string) (($signature && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN)) ? ($onlykey == 2 ? dol_trunc(dol_string_nohtmltag($signature), 30) : $signature) : '') ) ); @@ -5877,7 +5877,7 @@ $substitutionarray=array_merge($substitutionarray, array( $substitutionarray['__SIGNATURE__'] = (string) (($signature && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN)) ? ($onlykey == 2 ? dol_trunc(dol_string_nohtmltag($signature), 30) : $signature) : ''); } -$substitutionarray=array_merge($substitutionarray, array( + $substitutionarray=array_merge($substitutionarray, array( '__USER_ID__' => (string) $user->id, '__USER_LOGIN__' => (string) $user->login, '__USER_LASTNAME__' => (string) $user->lastname, @@ -5890,7 +5890,7 @@ $substitutionarray=array_merge($substitutionarray, array( } if ((empty($exclude) || ! in_array('mycompany', $exclude)) && is_object($mysoc)) { -$substitutionarray=array_merge($substitutionarray, array( + $substitutionarray=array_merge($substitutionarray, array( '__MYCOMPANY_NAME__' => $mysoc->name, '__MYCOMPANY_EMAIL__' => $mysoc->email, '__MYCOMPANY_PROFID1__' => $mysoc->idprof1, @@ -6388,11 +6388,11 @@ function dolGetFirstLastname($firstname, $lastname, $nameorder = -1) } elseif ($nameorder == 2 || $nameorder == 3) { - $ret.=$firstname; - if (empty($ret) && $nameorder == 3) - { - $ret.=$lastname; - } + $ret.=$firstname; + if (empty($ret) && $nameorder == 3) + { + $ret.=$lastname; + } } else { diff --git a/htdocs/core/lib/json.lib.php b/htdocs/core/lib/json.lib.php index 5eb45b261a0..2ec1532a9a9 100644 --- a/htdocs/core/lib/json.lib.php +++ b/htdocs/core/lib/json.lib.php @@ -317,19 +317,19 @@ function utf162utf8($utf16) switch(true) { case ((0x7F & $bytes) == $bytes): - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return chr($bytes); case (0x07FF & $bytes) == $bytes: - // return a 2-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + // return a 2-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return chr(0xC0 | (($bytes >> 6) & 0x1F)) . chr(0x80 | ($bytes & 0x3F)); case (0xFFFF & $bytes) == $bytes: - // return a 3-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + // return a 3-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return chr(0xE0 | (($bytes >> 12) & 0x0F)) . chr(0x80 | (($bytes >> 6) & 0x3F)) . chr(0x80 | ($bytes & 0x3F)); diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index d6dc59d1dcc..106ce8336a8 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -780,171 +780,171 @@ function projectLinesPerAction(&$inc, $parent, $fuser, $lines, &$level, &$projec //if ($lines[$i]->fk_task_parent == $parent) //{ - // If we want all or we have a role on task, we show it - if (empty($mine) || ! empty($tasksrole[$lines[$i]->id])) + // If we want all or we have a role on task, we show it + if (empty($mine) || ! empty($tasksrole[$lines[$i]->id])) + { + //dol_syslog("projectLinesPerWeek Found line ".$i.", a qualified task (i have role or want to show all tasks) with id=".$lines[$i]->id." project id=".$lines[$i]->fk_project); + + // Break on a new project + if ($parent == 0 && $lines[$i]->fk_project != $lastprojectid) { - //dol_syslog("projectLinesPerWeek Found line ".$i.", a qualified task (i have role or want to show all tasks) with id=".$lines[$i]->id." project id=".$lines[$i]->fk_project); - - // Break on a new project - if ($parent == 0 && $lines[$i]->fk_project != $lastprojectid) + $lastprojectid=$lines[$i]->fk_project; + if ($preselectedday) { - $lastprojectid=$lines[$i]->fk_project; - if ($preselectedday) - { - $projectstatic->id = $lines[$i]->fk_project; - } + $projectstatic->id = $lines[$i]->fk_project; } - - if (empty($workloadforid[$projectstatic->id])) - { - if ($preselectedday) - { - $projectstatic->loadTimeSpent($preselectedday, 0, $fuser->id); // Load time spent from table projet_task_time for the project into this->weekWorkLoad and this->weekWorkLoadPerTask for all days of a week - $workloadforid[$projectstatic->id]=1; - } - } - - $projectstatic->id=$lines[$i]->fk_project; - $projectstatic->ref=$lines[$i]->project_ref; - $projectstatic->title=$lines[$i]->project_label; - $projectstatic->public=$lines[$i]->public; - - $taskstatic->id=$lines[$i]->task_id; - $taskstatic->ref=($lines[$i]->task_ref?$lines[$i]->task_ref:$lines[$i]->task_id); - $taskstatic->label=$lines[$i]->task_label; - $taskstatic->date_start=$lines[$i]->date_start; - $taskstatic->date_end=$lines[$i]->date_end; - - $thirdpartystatic->id=$lines[$i]->socid; - $thirdpartystatic->name=$lines[$i]->thirdparty_name; - $thirdpartystatic->email=$lines[$i]->thirdparty_email; - - if (empty($oldprojectforbreak) || ($oldprojectforbreak != -1 && $oldprojectforbreak != $projectstatic->id)) - { - print ''."\n"; - print ''; - print $projectstatic->getNomUrl(1, '', 0, $langs->transnoentitiesnoconv("YourRole").': '.$projectsrole[$lines[$i]->fk_project]); - if ($projectstatic->title) - { - print ' - '; - print $projectstatic->title; - } - print ''; - print ''; - } - - if ($oldprojectforbreak != -1) $oldprojectforbreak = $projectstatic->id; - - print ''."\n"; - - // User - /* - print ''; - print $fuser->getNomUrl(1, 'withproject', 'time'); - print ''; - */ - - // Project - print ""; - if ($oldprojectforbreak == -1) - { - print $projectstatic->getNomUrl(1, '', 0, $langs->transnoentitiesnoconv("YourRole").': '.$projectsrole[$lines[$i]->fk_project]); - print '
'.$projectstatic->title; - } - print ""; - - // Thirdparty - print ''; - if ($thirdpartystatic->id > 0) print $thirdpartystatic->getNomUrl(1, 'project', 10); - print ''; - - // Ref - print ''; - print ''; - for ($k = 0 ; $k < $level ; $k++) print "   "; - print $taskstatic->getNomUrl(1, 'withproject', 'time'); - // Label task - print '
'; - for ($k = 0 ; $k < $level ; $k++) print "   "; - print $taskstatic->label; - //print "
"; - //for ($k = 0 ; $k < $level ; $k++) print "   "; - //print get_date_range($lines[$i]->date_start,$lines[$i]->date_end,'',$langs,0); - print "\n"; - - // Date - print ''; - print dol_print_date($lines[$i]->timespent_datehour, 'day'); - print ''; - - $disabledproject=1;$disabledtask=1; - //print "x".$lines[$i]->fk_project; - //var_dump($lines[$i]); - //var_dump($projectsrole[$lines[$i]->fk_project]); - // If at least one role for project - if ($lines[$i]->public || ! empty($projectsrole[$lines[$i]->fk_project]) || $user->rights->projet->all->creer) - { - $disabledproject=0; - $disabledtask=0; - } - // If $restricteditformytask is on and I have no role on task, i disable edit - if ($restricteditformytask && empty($tasksrole[$lines[$i]->id])) - { - $disabledtask=1; - } - - // Hour - print ''; - print dol_print_date($lines[$i]->timespent_datehour, 'hour'); - print ''; - - $cssonholiday=''; - if (! $isavailable[$preselectedday]['morning'] && ! $isavailable[$preselectedday]['afternoon']) $cssonholiday.='onholidayallday '; - elseif (! $isavailable[$preselectedday]['morning']) $cssonholiday.='onholidaymorning '; - elseif (! $isavailable[$preselectedday]['afternoon']) $cssonholiday.='onholidayafternoon '; - - // Duration - print ''; - - $dayWorkLoad = $lines[$i]->timespent_duration; - $totalforeachline[$preselectedday]+=$lines[$i]->timespent_duration; - - $alreadyspent=''; - if ($dayWorkLoad > 0) $alreadyspent=convertSecondToTime($lines[$i]->timespent_duration, 'allhourmin'); - - print convertSecondToTime($lines[$i]->timespent_duration, 'allhourmin'); - - $modeinput='hours'; - - print ''; - - print ''; - - // Note - print ''; - print ''; - print ''; - - // Warning - print ''; - /*if ((! $lines[$i]->public) && $disabledproject) print $form->textwithpicto('',$langs->trans("UserIsNotContactOfProject")); - else if ($disabledtask) - { - $titleassigntask = $langs->trans("AssignTaskToMe"); - if ($fuser->id != $user->id) $titleassigntask = $langs->trans("AssignTaskToUser", '...'); - - print $form->textwithpicto('',$langs->trans("TaskIsNotAssignedToUser", $titleassigntask)); - }*/ - print ''; - - print "\n"; } + + if (empty($workloadforid[$projectstatic->id])) + { + if ($preselectedday) + { + $projectstatic->loadTimeSpent($preselectedday, 0, $fuser->id); // Load time spent from table projet_task_time for the project into this->weekWorkLoad and this->weekWorkLoadPerTask for all days of a week + $workloadforid[$projectstatic->id]=1; + } + } + + $projectstatic->id=$lines[$i]->fk_project; + $projectstatic->ref=$lines[$i]->project_ref; + $projectstatic->title=$lines[$i]->project_label; + $projectstatic->public=$lines[$i]->public; + + $taskstatic->id=$lines[$i]->task_id; + $taskstatic->ref=($lines[$i]->task_ref?$lines[$i]->task_ref:$lines[$i]->task_id); + $taskstatic->label=$lines[$i]->task_label; + $taskstatic->date_start=$lines[$i]->date_start; + $taskstatic->date_end=$lines[$i]->date_end; + + $thirdpartystatic->id=$lines[$i]->socid; + $thirdpartystatic->name=$lines[$i]->thirdparty_name; + $thirdpartystatic->email=$lines[$i]->thirdparty_email; + + if (empty($oldprojectforbreak) || ($oldprojectforbreak != -1 && $oldprojectforbreak != $projectstatic->id)) + { + print ''."\n"; + print ''; + print $projectstatic->getNomUrl(1, '', 0, $langs->transnoentitiesnoconv("YourRole").': '.$projectsrole[$lines[$i]->fk_project]); + if ($projectstatic->title) + { + print ' - '; + print $projectstatic->title; + } + print ''; + print ''; + } + + if ($oldprojectforbreak != -1) $oldprojectforbreak = $projectstatic->id; + + print ''."\n"; + + // User + /* + print ''; + print $fuser->getNomUrl(1, 'withproject', 'time'); + print ''; + */ + + // Project + print ""; + if ($oldprojectforbreak == -1) + { + print $projectstatic->getNomUrl(1, '', 0, $langs->transnoentitiesnoconv("YourRole").': '.$projectsrole[$lines[$i]->fk_project]); + print '
'.$projectstatic->title; + } + print ""; + + // Thirdparty + print ''; + if ($thirdpartystatic->id > 0) print $thirdpartystatic->getNomUrl(1, 'project', 10); + print ''; + + // Ref + print ''; + print ''; + for ($k = 0 ; $k < $level ; $k++) print "   "; + print $taskstatic->getNomUrl(1, 'withproject', 'time'); + // Label task + print '
'; + for ($k = 0 ; $k < $level ; $k++) print "   "; + print $taskstatic->label; + //print "
"; + //for ($k = 0 ; $k < $level ; $k++) print "   "; + //print get_date_range($lines[$i]->date_start,$lines[$i]->date_end,'',$langs,0); + print "\n"; + + // Date + print ''; + print dol_print_date($lines[$i]->timespent_datehour, 'day'); + print ''; + + $disabledproject=1;$disabledtask=1; + //print "x".$lines[$i]->fk_project; + //var_dump($lines[$i]); + //var_dump($projectsrole[$lines[$i]->fk_project]); + // If at least one role for project + if ($lines[$i]->public || ! empty($projectsrole[$lines[$i]->fk_project]) || $user->rights->projet->all->creer) + { + $disabledproject=0; + $disabledtask=0; + } + // If $restricteditformytask is on and I have no role on task, i disable edit + if ($restricteditformytask && empty($tasksrole[$lines[$i]->id])) + { + $disabledtask=1; + } + + // Hour + print ''; + print dol_print_date($lines[$i]->timespent_datehour, 'hour'); + print ''; + + $cssonholiday=''; + if (! $isavailable[$preselectedday]['morning'] && ! $isavailable[$preselectedday]['afternoon']) $cssonholiday.='onholidayallday '; + elseif (! $isavailable[$preselectedday]['morning']) $cssonholiday.='onholidaymorning '; + elseif (! $isavailable[$preselectedday]['afternoon']) $cssonholiday.='onholidayafternoon '; + + // Duration + print ''; + + $dayWorkLoad = $lines[$i]->timespent_duration; + $totalforeachline[$preselectedday]+=$lines[$i]->timespent_duration; + + $alreadyspent=''; + if ($dayWorkLoad > 0) $alreadyspent=convertSecondToTime($lines[$i]->timespent_duration, 'allhourmin'); + + print convertSecondToTime($lines[$i]->timespent_duration, 'allhourmin'); + + $modeinput='hours'; + + print ''; + + print ''; + + // Note + print ''; + print ''; + print ''; + + // Warning + print ''; + /*if ((! $lines[$i]->public) && $disabledproject) print $form->textwithpicto('',$langs->trans("UserIsNotContactOfProject")); + else if ($disabledtask) + { + $titleassigntask = $langs->trans("AssignTaskToMe"); + if ($fuser->id != $user->id) $titleassigntask = $langs->trans("AssignTaskToUser", '...'); + + print $form->textwithpicto('',$langs->trans("TaskIsNotAssignedToUser", $titleassigntask)); + }*/ + print ''; + + print "\n"; + } //} //else //{ diff --git a/htdocs/core/lib/reception.lib.php b/htdocs/core/lib/reception.lib.php index af27cea4292..15ca4de37e0 100644 --- a/htdocs/core/lib/reception.lib.php +++ b/htdocs/core/lib/reception.lib.php @@ -105,18 +105,18 @@ function reception_admin_prepare_head() if (! empty($conf->global->MAIN_SUBMODULE_RECEPTION)) { - $head[$h][0] = DOL_URL_ROOT.'/admin/reception_extrafields.php'; - $head[$h][1] = $langs->trans("ExtraFields"); - $head[$h][2] = 'attributes_reception'; - $h++; + $head[$h][0] = DOL_URL_ROOT.'/admin/reception_extrafields.php'; + $head[$h][1] = $langs->trans("ExtraFields"); + $head[$h][2] = 'attributes_reception'; + $h++; } if (! empty($conf->global->MAIN_SUBMODULE_RECEPTION)) { - $head[$h][0] = DOL_URL_ROOT.'/admin/commande_fournisseur_dispatch_extrafields.php'; - $head[$h][1] = $langs->trans("ExtraFieldsLines"); - $head[$h][2] = 'attributeslines_reception'; - $h++; + $head[$h][0] = DOL_URL_ROOT.'/admin/commande_fournisseur_dispatch_extrafields.php'; + $head[$h][1] = $langs->trans("ExtraFieldsLines"); + $head[$h][2] = 'attributeslines_reception'; + $h++; } diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php index a4ddb68dbd3..b45eaa4b7a9 100644 --- a/htdocs/core/lib/xcal.lib.php +++ b/htdocs/core/lib/xcal.lib.php @@ -180,7 +180,7 @@ function build_calfile($format, $title, $desc, $events_array, $outputfile) if (! empty($location)) fwrite($calfileh, "LOCATION:".$encoding.$location."\n"); if ($fulldayevent) fwrite($calfileh, "X-FUNAMBOL-ALLDAY:1\n"); - + // see https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxcical/0f262da6-c5fd-459e-9f18-145eba86b5d2 if ($fulldayevent) fwrite($calfileh, "X-MICROSOFT-CDO-ALLDAYEVENT:TRUE\n"); @@ -320,7 +320,7 @@ function build_rssfile($format, $title, $desc, $events_array, $outputfile, $filt fwrite($fichier, $form); $form=''."\n". -// 'fr'."\n". + // 'fr'."\n". 'Dolibarr'."\n". ''.$date.''."\n". 'Dolibarr'."\n"; diff --git a/htdocs/core/triggers/interface_20_all_Logevents.class.php b/htdocs/core/triggers/interface_20_all_Logevents.class.php index 6be5e3904ab..93d1b37c690 100644 --- a/htdocs/core/triggers/interface_20_all_Logevents.class.php +++ b/htdocs/core/triggers/interface_20_all_Logevents.class.php @@ -177,13 +177,13 @@ class InterfaceLogevents extends DolibarrTriggers } // If not found -/* + /* else { dol_syslog("Trigger '".$this->name."' for action '$action' was ran by ".__FILE__." but no handler found for this action."); return 0; } -*/ + */ // Add more information into desc from the context property if (! empty($desc) && ! empty($object->context['audit'])) $desc.=' - '.$object->context['audit']; diff --git a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php index 5676bb82cfb..e72da40d6b0 100644 --- a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php +++ b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php @@ -251,7 +251,7 @@ class InterfaceActionsAuto extends DolibarrTriggers } elseif ($action == 'BILL_UNVALIDATE') { - // Load translation files required by the page + // Load translation files required by the page $langs->loadLangs(array("agenda","other","bills")); if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceBackToDraftInDolibarr", $object->ref); @@ -808,9 +808,9 @@ class InterfaceActionsAuto extends DolibarrTriggers $object->actionmsg=$langs->transnoentities("TICKET_ASSIGNEDInDolibarr", $object->ref); if ($object->oldcopy->fk_user_assign > 0) { - $tmpuser=new User($this->db); - $tmpuser->fetch($object->oldcopy->fk_user_assign); - $object->actionmsg.="\n".$langs->transnoentities("OldUser").': '.$tmpuser->getFullName($langs); + $tmpuser=new User($this->db); + $tmpuser->fetch($object->oldcopy->fk_user_assign); + $object->actionmsg.="\n".$langs->transnoentities("OldUser").': '.$tmpuser->getFullName($langs); } else { diff --git a/htdocs/core/triggers/interface_99_modZapier_ZapierTriggers.class.php b/htdocs/core/triggers/interface_99_modZapier_ZapierTriggers.class.php index 301d565c2ba..b9dbd340d88 100644 --- a/htdocs/core/triggers/interface_99_modZapier_ZapierTriggers.class.php +++ b/htdocs/core/triggers/interface_99_modZapier_ZapierTriggers.class.php @@ -181,7 +181,7 @@ class InterfaceZapierTriggers extends DolibarrTriggers case 'CONTACT_MODIFY': case 'CONTACT_DELETE': case 'CONTACT_ENABLEDISABLE': - + break; // Products // case 'PRODUCT_CREATE': // case 'PRODUCT_MODIFY': @@ -221,7 +221,7 @@ class InterfaceZapierTriggers extends DolibarrTriggers case 'LINEORDER_INSERT': case 'LINEORDER_UPDATE': case 'LINEORDER_DELETE': - + break; // Supplier orders // case 'ORDER_SUPPLIER_CREATE': // case 'ORDER_SUPPLIER_CLONE': From 66a2dc4994244c0325665b92189ce83aac0d3553 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sun, 20 Oct 2019 09:18:55 +0000 Subject: [PATCH 435/980] Fixing style errors. --- htdocs/core/lib/json.lib.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/json.lib.php b/htdocs/core/lib/json.lib.php index 2ec1532a9a9..8c97bbb348f 100644 --- a/htdocs/core/lib/json.lib.php +++ b/htdocs/core/lib/json.lib.php @@ -317,19 +317,19 @@ function utf162utf8($utf16) switch(true) { case ((0x7F & $bytes) == $bytes): - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return chr($bytes); case (0x07FF & $bytes) == $bytes: - // return a 2-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + // return a 2-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return chr(0xC0 | (($bytes >> 6) & 0x1F)) . chr(0x80 | ($bytes & 0x3F)); case (0xFFFF & $bytes) == $bytes: - // return a 3-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + // return a 3-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return chr(0xE0 | (($bytes >> 12) & 0x0F)) . chr(0x80 | (($bytes >> 6) & 0x3F)) . chr(0x80 | ($bytes & 0x3F)); From 4d13c724d921416f48212b3d9a87bfd039b69355 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 20 Oct 2019 11:20:25 +0200 Subject: [PATCH 436/980] restablish original rules --- dev/setup/codesniffer/ruleset.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 82582d2d18c..32c44ce91e4 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -186,7 +186,7 @@ - + From 7581275316bae01e53ce32325965bdc6dce5dbda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 20 Oct 2019 11:59:21 +0200 Subject: [PATCH 437/980] wip --- dev/setup/codesniffer/ruleset.xml | 3 +- htdocs/categories/class/categorie.class.php | 14 +- .../class/opensurveysondage.class.php | 2 +- htdocs/product/admin/price_rules.php | 8 +- htdocs/product/admin/product.php | 2 +- .../canvas/product/tpl/card_create.tpl.php | 4 +- .../canvas/product/tpl/card_view.tpl.php | 2 +- .../canvas/service/tpl/card_create.tpl.php | 4 +- .../canvas/service/tpl/card_view.tpl.php | 2 +- htdocs/product/card.php | 16 +-- htdocs/product/class/product.class.php | 134 +++++++++--------- .../product/inventory/ajax/ajax.inventory.php | 66 ++++----- htdocs/product/price.php | 34 ++--- htdocs/product/stock/card.php | 4 +- .../stock/class/mouvementstock.class.php | 4 +- htdocs/product/stock/massstockmove.php | 8 +- htdocs/product/stock/movement_list.php | 4 +- htdocs/product/stock/product.php | 4 +- htdocs/product/stock/productlot_card.php | 6 +- htdocs/product/stock/productlot_list.php | 6 +- htdocs/product/stock/replenish.php | 4 +- .../product/stock/tpl/stockcorrection.tpl.php | 94 ++++++------ .../product/stock/tpl/stocktransfer.tpl.php | 110 +++++++------- htdocs/projet/activity/perweek.php | 26 ++-- htdocs/projet/class/project.class.php | 36 ++--- htdocs/projet/class/task.class.php | 18 +-- htdocs/projet/element.php | 16 +-- htdocs/projet/graph_opportunities.inc.php | 8 +- htdocs/projet/list.php | 6 +- htdocs/projet/stats/index.php | 8 +- htdocs/projet/tasks.php | 6 +- htdocs/projet/tasks/contact.php | 4 +- htdocs/projet/tasks/task.php | 2 +- test/phpunit/BankAccountTest.php | 2 +- test/phpunit/BonPrelevementTest.php | 4 +- test/phpunit/ContratTest.php | 2 +- test/phpunit/ExportTest.php | 4 +- test/phpunit/FactureFournisseurTest.php | 2 +- test/phpunit/FactureTest.php | 2 +- test/phpunit/FichinterTest.php | 2 +- test/phpunit/FilesLibTest.php | 20 +-- test/phpunit/ImagesLibTest.php | 10 +- test/phpunit/PropalTest.php | 2 +- test/phpunit/RestAPIUserTest.php | 126 ++++++++-------- test/phpunit/SupplierProposalTest.php | 2 +- .../functional/TakePosFunctionalTest.php | 16 +-- 46 files changed, 429 insertions(+), 430 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 32c44ce91e4..82582d2d18c 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -186,7 +186,7 @@ - diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index cd3885b77b1..d60b3251f0d 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -1835,13 +1835,13 @@ class Categorie extends CommonObject } } - // Call trigger - $result = $this->call_trigger('CATEGORY_SET_MULTILANGS', $user); - if ($result < 0) { - $this->error = $this->db->lasterror(); - return -1; - } - // End call triggers + // Call trigger + $result = $this->call_trigger('CATEGORY_SET_MULTILANGS', $user); + if ($result < 0) { + $this->error = $this->db->lasterror(); + return -1; + } + // End call triggers return 1; } diff --git a/htdocs/opensurvey/class/opensurveysondage.class.php b/htdocs/opensurvey/class/opensurveysondage.class.php index 48c633126ce..786ed7220b5 100644 --- a/htdocs/opensurvey/class/opensurveysondage.class.php +++ b/htdocs/opensurvey/class/opensurveysondage.class.php @@ -267,7 +267,7 @@ class Opensurveysondage extends CommonObject $this->db->free($resql); } else - { + { $this->error="Error ".$this->db->lasterror(); $ret=-1; } diff --git a/htdocs/product/admin/price_rules.php b/htdocs/product/admin/price_rules.php index 299f78c1a7d..885af18d63d 100644 --- a/htdocs/product/admin/price_rules.php +++ b/htdocs/product/admin/price_rules.php @@ -168,10 +168,10 @@ $genPriceOptions = function ($level) use ($price_options) { echo $langs->trans('SellingPrice').' '.$i; // Label of price $keyforlabel='PRODUIT_MULTIPRICES_LABEL'.$i; - if (! empty($conf->global->$keyforlabel)) { - print ' - '.$langs->trans($conf->global->$keyforlabel); - } - ?> + if (! empty($conf->global->$keyforlabel)) { + print ' - '.$langs->trans($conf->global->$keyforlabel); + } + ?> diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index 5fd289c5514..d6f636bf4c9 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -483,7 +483,7 @@ foreach ($dirmodels as $reldir) } print ''; - // Info + // Info $htmltooltip = ''.$langs->trans("Name").': '.$module->name; $htmltooltip.='
'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); if ($module->type == 'pdf') diff --git a/htdocs/product/canvas/product/tpl/card_create.tpl.php b/htdocs/product/canvas/product/tpl/card_create.tpl.php index 03e57a0c859..b12a0d41370 100644 --- a/htdocs/product/canvas/product/tpl/card_create.tpl.php +++ b/htdocs/product/canvas/product/tpl/card_create.tpl.php @@ -113,7 +113,7 @@ dol_fiche_head(''); trans("SellingPrice"); ?> -price_base_type; ?> + price_base_type; ?> trans("MinPrice"); ?> @@ -121,7 +121,7 @@ dol_fiche_head(''); trans("VATRate"); ?> -tva_tx; ?> + tva_tx; ?> diff --git a/htdocs/product/canvas/product/tpl/card_view.tpl.php b/htdocs/product/canvas/product/tpl/card_view.tpl.php index 473b717c916..594fd6c1b9b 100644 --- a/htdocs/product/canvas/product/tpl/card_view.tpl.php +++ b/htdocs/product/canvas/product/tpl/card_view.tpl.php @@ -57,7 +57,7 @@ dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); photos) { ?> -photos; ?> + photos; ?> diff --git a/htdocs/product/canvas/service/tpl/card_create.tpl.php b/htdocs/product/canvas/service/tpl/card_create.tpl.php index 0b33d722837..d51e1541278 100644 --- a/htdocs/product/canvas/service/tpl/card_create.tpl.php +++ b/htdocs/product/canvas/service/tpl/card_create.tpl.php @@ -85,7 +85,7 @@ dol_fiche_head(''); trans("SellingPrice"); ?> -price_base_type; ?> + price_base_type; ?> trans("MinPrice"); ?> @@ -93,7 +93,7 @@ dol_fiche_head(''); trans("VATRate"); ?> -tva_tx; ?> + tva_tx; ?> diff --git a/htdocs/product/canvas/service/tpl/card_view.tpl.php b/htdocs/product/canvas/service/tpl/card_view.tpl.php index c789853868a..a0fc691d75d 100644 --- a/htdocs/product/canvas/service/tpl/card_view.tpl.php +++ b/htdocs/product/canvas/service/tpl/card_view.tpl.php @@ -57,7 +57,7 @@ dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); photos) { ?> -photos; ?> + photos; ?> diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 0af901b5abf..86a5cbe07c1 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -1453,13 +1453,13 @@ else print ''; if (empty($conf->global->PRODUCT_DISABLE_SIZE)) { - // Brut Length - print ''.$langs->trans("Length").' x '.$langs->trans("Width").' x '.$langs->trans("Height").''; - print 'x'; - print 'x'; - print ' '; - print $formproduct->selectMeasuringUnits("size_units", "size", $object->length_units, 0, 2); - print ''; + // Brut Length + print ''.$langs->trans("Length").' x '.$langs->trans("Width").' x '.$langs->trans("Height").''; + print 'x'; + print 'x'; + print ' '; + print $formproduct->selectMeasuringUnits("size_units", "size", $object->length_units, 0, 2); + print ''; } if (empty($conf->global->PRODUCT_DISABLE_SURFACE)) { @@ -2104,7 +2104,7 @@ if (! empty($conf->global->PRODUCT_ADD_FORM_ADD_TO) && $object->id && ($action = $html .= ''; } else - { + { $html .= ''; $html .= $langs->trans("AddToDraftProposals").''; $html .= $langs->trans("NoDraftProposals"); diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index d7ab4e99c78..c55e888e405 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -1603,85 +1603,85 @@ class Product extends CommonObject $price_base_type = $this->price_base_type; // If price per segment - if (! empty($conf->global->PRODUIT_MULTIPRICES) && ! empty($thirdparty_buyer->price_level)) + if (! empty($conf->global->PRODUIT_MULTIPRICES) && ! empty($thirdparty_buyer->price_level)) { - $pu_ht = $this->multiprices[$thirdparty_buyer->price_level]; - $pu_ttc = $this->multiprices_ttc[$thirdparty_buyer->price_level]; - $price_min = $this->multiprices_min[$thirdparty_buyer->price_level]; - $price_base_type = $this->multiprices_base_type[$thirdparty_buyer->price_level]; - if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility - { - if (isset($this->multiprices_tva_tx[$thirdparty_buyer->price_level])) $tva_tx=$this->multiprices_tva_tx[$thirdparty_buyer->price_level]; - if (isset($this->multiprices_recuperableonly[$thirdparty_buyer->price_level])) $tva_npr=$this->multiprices_recuperableonly[$thirdparty_buyer->price_level]; - if (empty($tva_tx)) $tva_npr=0; - } - } + $pu_ht = $this->multiprices[$thirdparty_buyer->price_level]; + $pu_ttc = $this->multiprices_ttc[$thirdparty_buyer->price_level]; + $price_min = $this->multiprices_min[$thirdparty_buyer->price_level]; + $price_base_type = $this->multiprices_base_type[$thirdparty_buyer->price_level]; + if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility + { + if (isset($this->multiprices_tva_tx[$thirdparty_buyer->price_level])) $tva_tx=$this->multiprices_tva_tx[$thirdparty_buyer->price_level]; + if (isset($this->multiprices_recuperableonly[$thirdparty_buyer->price_level])) $tva_npr=$this->multiprices_recuperableonly[$thirdparty_buyer->price_level]; + if (empty($tva_tx)) $tva_npr=0; + } + } // If price per customer - elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) + elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { - require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php'; + require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php'; - $prodcustprice = new Productcustomerprice($db); + $prodcustprice = new Productcustomerprice($db); - $filter = array('t.fk_product' => $this->id,'t.fk_soc' => $thirdparty_buyer->id); + $filter = array('t.fk_product' => $this->id,'t.fk_soc' => $thirdparty_buyer->id); - $result = $prodcustprice->fetch_all('', '', 0, 0, $filter); - if ($result) { - if (count($prodcustprice->lines) > 0) { - $pu_ht = price($prodcustprice->lines[0]->price); - $pu_ttc = price($prodcustprice->lines[0]->price_ttc); - $price_base_type = $prodcustprice->lines[0]->price_base_type; - $tva_tx = $prodcustprice->lines[0]->tva_tx; - if ($prodcustprice->lines[0]->default_vat_code && ! preg_match('/\(.*\)/', $tva_tx)) $tva_tx.= ' ('.$prodcustprice->lines[0]->default_vat_code.')'; - $tva_npr = $prodcustprice->lines[0]->recuperableonly; - if (empty($tva_tx)) $tva_npr=0; - } - } + $result = $prodcustprice->fetch_all('', '', 0, 0, $filter); + if ($result) { + if (count($prodcustprice->lines) > 0) { + $pu_ht = price($prodcustprice->lines[0]->price); + $pu_ttc = price($prodcustprice->lines[0]->price_ttc); + $price_base_type = $prodcustprice->lines[0]->price_base_type; + $tva_tx = $prodcustprice->lines[0]->tva_tx; + if ($prodcustprice->lines[0]->default_vat_code && ! preg_match('/\(.*\)/', $tva_tx)) $tva_tx.= ' ('.$prodcustprice->lines[0]->default_vat_code.')'; + $tva_npr = $prodcustprice->lines[0]->recuperableonly; + if (empty($tva_tx)) $tva_npr=0; } + } + } // If price per quantity - elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY)) + elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY)) { - if ($this->prices_by_qty[0]) // yes, this product has some prices per quantity + if ($this->prices_by_qty[0]) // yes, this product has some prices per quantity + { + // Search price into product_price_by_qty from $this->id + foreach($this->prices_by_qty_list[0] as $priceforthequantityarray) + { + if ($priceforthequantityarray['rowid'] != $pqp) continue; + // We found the price + if ($priceforthequantityarray['price_base_type'] == 'HT') { - // Search price into product_price_by_qty from $this->id - foreach($this->prices_by_qty_list[0] as $priceforthequantityarray) - { - if ($priceforthequantityarray['rowid'] != $pqp) continue; - // We found the price - if ($priceforthequantityarray['price_base_type'] == 'HT') - { - $pu_ht = $priceforthequantityarray['unitprice']; - } - else - { - $pu_ttc = $priceforthequantityarray['unitprice']; - } - break; - } + $pu_ht = $priceforthequantityarray['unitprice']; } + else + { + $pu_ttc = $priceforthequantityarray['unitprice']; + } + break; } + } + } // If price per quantity and customer - elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) + elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) { - if ($this->prices_by_qty[$thirdparty_buyer->price_level]) // yes, this product has some prices per quantity + if ($this->prices_by_qty[$thirdparty_buyer->price_level]) // yes, this product has some prices per quantity + { + // Search price into product_price_by_qty from $this->id + foreach($this->prices_by_qty_list[$thirdparty_buyer->price_level] as $priceforthequantityarray) + { + if ($priceforthequantityarray['rowid'] != $pqp) continue; + // We found the price + if ($priceforthequantityarray['price_base_type'] == 'HT') { - // Search price into product_price_by_qty from $this->id - foreach($this->prices_by_qty_list[$thirdparty_buyer->price_level] as $priceforthequantityarray) - { - if ($priceforthequantityarray['rowid'] != $pqp) continue; - // We found the price - if ($priceforthequantityarray['price_base_type'] == 'HT') - { - $pu_ht = $priceforthequantityarray['unitprice']; - } - else - { - $pu_ttc = $priceforthequantityarray['unitprice']; - } - break; - } + $pu_ht = $priceforthequantityarray['unitprice']; } + else + { + $pu_ttc = $priceforthequantityarray['unitprice']; + } + break; } + } + } return array('pu_ht'=>$pu_ht, 'pu_ttc'=>$pu_ttc, 'price_min'=>$price_min, 'price_base_type'=>$price_base_type, 'tva_tx'=>$tva_tx, 'tva_npr'=>$tva_npr); } @@ -4293,14 +4293,14 @@ class Product extends CommonObject { switch ($type) { - case 0: + case 0: return $this->LibStatut($this->status, $mode, $type); - case 1: + case 1: return $this->LibStatut($this->status_buy, $mode, $type); - case 2: + case 2: return $this->LibStatut($this->status_batch, $mode, $type); - default: - //Simulate previous behavior but should return an error string + default: + //Simulate previous behavior but should return an error string return $this->LibStatut($this->status_buy, $mode, $type); } } diff --git a/htdocs/product/inventory/ajax/ajax.inventory.php b/htdocs/product/inventory/ajax/ajax.inventory.php index f94a383f666..ced76050e31 100644 --- a/htdocs/product/inventory/ajax/ajax.inventory.php +++ b/htdocs/product/inventory/ajax/ajax.inventory.php @@ -6,45 +6,45 @@ require_once DOL_DOCUMENT_ROOT.'/product/inventory/class/inventory.class.php'; $get = GETPOST('get', 'alpha'); $put = GETPOST('put', 'alpha'); - switch ($put) - { - case 'qty': - if (empty($user->rights->stock->creer)) { echo -1; exit; } +switch ($put) +{ + case 'qty': + if (empty($user->rights->stock->creer)) { echo -1; exit; } - $fk_det_inventory = GETPOST('fk_det_inventory'); + $fk_det_inventory = GETPOST('fk_det_inventory'); - $det = new InventoryLine($db); - if( $det->fetch($fk_det_inventory)) - { - $det->qty_view+=GETPOST('qty'); - $res = $det->update($user); + $det = new InventoryLine($db); + if( $det->fetch($fk_det_inventory)) + { + $det->qty_view+=GETPOST('qty'); + $res = $det->update($user); - echo $det->qty_view; - } - else - { - echo -2; - } + echo $det->qty_view; + } + else + { + echo -2; + } - break; + break; - case 'pmp': - if (empty($user->rights->stock->creer) || empty($user->rights->stock->changePMP)) { echo -1; exit; } + case 'pmp': + if (empty($user->rights->stock->creer) || empty($user->rights->stock->changePMP)) { echo -1; exit; } - $fk_det_inventory = GETPOST('fk_det_inventory'); + $fk_det_inventory = GETPOST('fk_det_inventory'); - $det = new InventoryLine($db); - if( $det->fetch($fk_det_inventory)) - { - $det->new_pmp=price2num(GETPOST('pmp')); - $det->update($user); + $det = new InventoryLine($db); + if( $det->fetch($fk_det_inventory)) + { + $det->new_pmp=price2num(GETPOST('pmp')); + $det->update($user); - echo $det->new_pmp; - } - else - { - echo -2; - } + echo $det->new_pmp; + } + else + { + echo -2; + } - break; - } + break; +} diff --git a/htdocs/product/price.php b/htdocs/product/price.php index 139fd681ee0..e8e332d95b5 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -475,10 +475,10 @@ if (empty($reshook)) { $priceid = GETPOST('priceid', 'int'); if (!empty($rowid)) { - $sql = "DELETE FROM " . MAIN_DB_PREFIX . "product_price_by_qty"; - $sql .= " WHERE fk_product_price = " . $priceid; + $sql = "DELETE FROM " . MAIN_DB_PREFIX . "product_price_by_qty"; + $sql .= " WHERE fk_product_price = " . $priceid; - $result = $db->query($sql); + $result = $db->query($sql); } else { setEventMessages(('delete_price_by_qty'.$langs->transnoentities(MissingIds)), null, 'errors'); } @@ -755,17 +755,17 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUI if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility { - // TVA - print '' . $langs->trans("DefaultTaxRate") . ''; + // TVA + print '' . $langs->trans("DefaultTaxRate") . ''; - $positiverates=''; - if (price2num($object->multiprices_tva_tx[$soc->price_level])) $positiverates.=($positiverates?'/':'').price2num($object->multiprices_tva_tx[$soc->price_level]); - if (price2num($object->multiprices_localtax1_type[$soc->price_level])) $positiverates.=($positiverates?'/':'').price2num($object->multiprices_localtax1_tx[$soc->price_level]); - if (price2num($object->multiprices_localtax2_type[$soc->price_level])) $positiverates.=($positiverates?'/':'').price2num($object->multiprices_localtax2_tx[$soc->price_level]); - if (empty($positiverates)) $positiverates='0'; - echo vatrate($positiverates.($object->default_vat_code?' ('.$object->default_vat_code.')':''), '%', $object->tva_npr); - //print vatrate($object->multiprices_tva_tx[$soc->price_level], true); - print ''; + $positiverates=''; + if (price2num($object->multiprices_tva_tx[$soc->price_level])) $positiverates.=($positiverates?'/':'').price2num($object->multiprices_tva_tx[$soc->price_level]); + if (price2num($object->multiprices_localtax1_type[$soc->price_level])) $positiverates.=($positiverates?'/':'').price2num($object->multiprices_localtax1_tx[$soc->price_level]); + if (price2num($object->multiprices_localtax2_type[$soc->price_level])) $positiverates.=($positiverates?'/':'').price2num($object->multiprices_localtax2_tx[$soc->price_level]); + if (empty($positiverates)) $positiverates='0'; + echo vatrate($positiverates.($object->default_vat_code?' ('.$object->default_vat_code.')':''), '%', $object->tva_npr); + //print vatrate($object->multiprices_tva_tx[$soc->price_level], true); + print ''; } else { @@ -791,10 +791,10 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUI { if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility { - // We show only vat for level 1 - print '' . $langs->trans("DefaultTaxRate") . ''; - print '' . vatrate($object->multiprices_tva_tx[1], true) . ''; - print ''; + // We show only vat for level 1 + print '' . $langs->trans("DefaultTaxRate") . ''; + print '' . vatrate($object->multiprices_tva_tx[1], true) . ''; + print ''; } else { diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 94a379c4e90..94012c1b9cf 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -68,8 +68,8 @@ $extrafields->fetch_name_optionals_label($object->table_element); // Load object if ($id > 0 || ! empty($ref)) { $ret = $object->fetch($id, $ref); -// if ($ret > 0) -// $ret = $object->fetch_thirdparty(); + // if ($ret > 0) + // $ret = $object->fetch_thirdparty(); if ($ret <= 0) { setEventMessages($object->error, $object->errors, 'errors'); $action = ''; diff --git a/htdocs/product/stock/class/mouvementstock.class.php b/htdocs/product/stock/class/mouvementstock.class.php index 2b92a759ffa..24d8e89e03b 100644 --- a/htdocs/product/stock/class/mouvementstock.class.php +++ b/htdocs/product/stock/class/mouvementstock.class.php @@ -947,8 +947,8 @@ class MouvementStock extends CommonObject $result=dol_include_once('/'.$origintype.'/class/'.$origintype.'.class.php'); if ($result) { - $classname = ucfirst($origintype); - $origin = new $classname($this->db); + $classname = ucfirst($origintype); + $origin = new $classname($this->db); } } break; diff --git a/htdocs/product/stock/massstockmove.php b/htdocs/product/stock/massstockmove.php index 24d2af3a358..5324ef80243 100644 --- a/htdocs/product/stock/massstockmove.php +++ b/htdocs/product/stock/massstockmove.php @@ -195,7 +195,7 @@ if ($action == 'createmovements') if (empty($conf->productbatch->enabled) || ! $product->hasbatch()) // If product does not need lot/serial { // Remove stock - $result1=$product->correct_stock( + $result1=$product->correct_stock( $user, $id_sw, $qty, @@ -211,7 +211,7 @@ if ($action == 'createmovements') } // Add stock - $result2=$product->correct_stock( + $result2=$product->correct_stock( $user, $id_tw, $qty, @@ -243,7 +243,7 @@ if ($action == 'createmovements') } // Remove stock - $result1=$product->correct_stock_batch( + $result1=$product->correct_stock_batch( $user, $id_sw, $qty, @@ -262,7 +262,7 @@ if ($action == 'createmovements') } // Add stock - $result2=$product->correct_stock_batch( + $result2=$product->correct_stock_batch( $user, $id_tw, $qty, diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index ac00062cc6e..ef307842017 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -202,7 +202,7 @@ if ($action == "correct_stock") $eatby=dol_mktime(0, 0, 0, GETPOST('eatbymonth'), GETPOST('eatbyday'), GETPOST('eatbyyear')); $sellby=dol_mktime(0, 0, 0, GETPOST('sellbymonth'), GETPOST('sellbyday'), GETPOST('sellbyyear')); - $result=$product->correct_stock_batch( + $result=$product->correct_stock_batch( $user, $id, GETPOST("nbpiece", 'int'), @@ -217,7 +217,7 @@ if ($action == "correct_stock") } else { - $result=$product->correct_stock( + $result=$product->correct_stock( $user, $id, GETPOST("nbpiece", 'int'), diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index dbcd0a2cf61..060bcc57960 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -374,7 +374,7 @@ if ($action == "transfert_stock" && ! $cancel) if (! $error) { // Remove stock - $result1=$object->correct_stock_batch( + $result1=$object->correct_stock_batch( $user, $srcwarehouseid, GETPOST("nbpiece", 'int'), @@ -389,7 +389,7 @@ if ($action == "transfert_stock" && ! $cancel) if (! $error) { // Add stock - $result2=$object->correct_stock_batch( + $result2=$object->correct_stock_batch( $user, GETPOST("id_entrepot_destination", 'int'), GETPOST("nbpiece", 'int'), diff --git a/htdocs/product/stock/productlot_card.php b/htdocs/product/stock/productlot_card.php index 76a4b0a46f7..00299c94459 100644 --- a/htdocs/product/stock/productlot_card.php +++ b/htdocs/product/stock/productlot_card.php @@ -180,7 +180,7 @@ if (empty($reshook)) { // Creation KO if (! empty($object->errors)) setEventMessages(null, $object->errors, 'errors'); - else setEventMessages($object->error, null, 'errors'); + else setEventMessages($object->error, null, 'errors'); $action='create'; } } @@ -369,7 +369,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea if (empty($reshook)) { -/*TODO if ($user->rights->stock->lire) + /*TODO if ($user->rights->stock->lire) { print ''."\n"; } @@ -378,7 +378,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea { print ''."\n"; } -*/ + */ } print ''."\n"; diff --git a/htdocs/product/stock/productlot_list.php b/htdocs/product/stock/productlot_list.php index eedde6dcb31..9596c87c9d3 100644 --- a/htdocs/product/stock/productlot_list.php +++ b/htdocs/product/stock/productlot_list.php @@ -107,10 +107,10 @@ $arrayfields=array( // Extra fields if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) { - foreach($extrafields->attribute_label as $key => $val) - { + foreach($extrafields->attribute_label as $key => $val) + { if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + } } // Load object if id or ref is provided as parameter diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php index 6e7cdbc585b..b992be282d4 100644 --- a/htdocs/product/stock/replenish.php +++ b/htdocs/product/stock/replenish.php @@ -492,7 +492,7 @@ if ($sref || $snom || $sall || $salert || $draftorder || GETPOST('search', 'alph $filters .= '&mode=' . $mode; $filters .= '&fk_supplier=' . $fk_supplier; $filters .= '&fk_entrepot=' . $fk_entrepot; -print_barre_liste( + print_barre_liste( $texte, $page, 'replenish.php', @@ -511,7 +511,7 @@ print_barre_liste( $filters .= '&mode=' . $mode; $filters .= '&fk_supplier=' . $fk_supplier; $filters .= '&fk_entrepot=' . $fk_entrepot; -print_barre_liste( + print_barre_liste( $texte, $page, 'replenish.php', diff --git a/htdocs/product/stock/tpl/stockcorrection.tpl.php b/htdocs/product/stock/tpl/stockcorrection.tpl.php index a17ce086e6c..63b80636d67 100644 --- a/htdocs/product/stock/tpl/stockcorrection.tpl.php +++ b/htdocs/product/stock/tpl/stockcorrection.tpl.php @@ -66,28 +66,28 @@ if (empty($conf) || ! is_object($conf)) { // Warehouse or product print ''; - if ($object->element == 'product') - { - print ''.$langs->trans("Warehouse").''; - print ''; - print $formproduct->selectWarehouses((GETPOST("dwid")?GETPOST("dwid", 'int'):(GETPOST('id_entrepot')?GETPOST('id_entrepot', 'int'):($object->element=='product' && $object->fk_default_warehouse?$object->fk_default_warehouse:'ifone'))), 'id_entrepot', 'warehouseopen,warehouseinternal', 1, 0, 0, '', 0, 0, null, 'minwidth100'); - print '   '; - print ''; - } - if ($object->element == 'stock') - { - print ''.$langs->trans("Product").''; - print ''; - print $form->select_produits(GETPOST('product_id', 'int'), 'product_id', (empty($conf->global->STOCK_SUPPORTS_SERVICES)?'0':''), 0, 0, -1, 2, '', 0, null, 0, 1, 0, 'maxwidth500'); - print '   '; - print ''; - } +if ($object->element == 'product') +{ + print ''.$langs->trans("Warehouse").''; + print ''; + print $formproduct->selectWarehouses((GETPOST("dwid")?GETPOST("dwid", 'int'):(GETPOST('id_entrepot')?GETPOST('id_entrepot', 'int'):($object->element=='product' && $object->fk_default_warehouse?$object->fk_default_warehouse:'ifone'))), 'id_entrepot', 'warehouseopen,warehouseinternal', 1, 0, 0, '', 0, 0, null, 'minwidth100'); + print '   '; + print ''; +} +if ($object->element == 'stock') +{ + print ''.$langs->trans("Product").''; + print ''; + print $form->select_produits(GETPOST('product_id', 'int'), 'product_id', (empty($conf->global->STOCK_SUPPORTS_SERVICES)?'0':''), 0, 0, -1, 2, '', 0, null, 0, 1, 0, 'maxwidth500'); + print '   '; + print ''; +} print ''.$langs->trans("NumberOfUnit").''; print ''; print ''; @@ -96,37 +96,37 @@ if (empty($conf) || ! is_object($conf)) { print ''; print ''.$langs->trans("UnitPurchaseValue").''; print ''; - if (! empty($conf->projet->enabled)) - { - print ''.$langs->trans('Project').''; - print ''; - $formproject->select_projects(-1, '', 'projectid', 0, 0, 1, 0, 0, 0, 0, '', 0, 0, 'maxwidth300'); - print ''; - } +if (! empty($conf->projet->enabled)) +{ + print ''.$langs->trans('Project').''; + print ''; + $formproject->select_projects(-1, '', 'projectid', 0, 0, 1, 0, 0, 0, 0, '', 0, 0, 'maxwidth300'); + print ''; +} print ''; // Serial / Eat-by date - if (! empty($conf->productbatch->enabled) && +if (! empty($conf->productbatch->enabled) && (($object->element == 'product' && $object->hasbatch()) || ($object->element == 'stock')) ) - { - print ''; - print 'element == 'stock'?'': ' class="fieldrequired"').'>'.$langs->trans("batch_number").''; - print ''; - print ''; - print ''; - print ''; - print ''.$langs->trans("EatByDate").''; - $eatbyselected=dol_mktime(0, 0, 0, GETPOST('eatbymonth'), GETPOST('eatbyday'), GETPOST('eatbyyear')); - print $form->selectDate($eatbyselected, 'eatby', '', '', 1, ""); - print ''; - print ''.$langs->trans("SellByDate").''; - $sellbyselected=dol_mktime(0, 0, 0, GETPOST('sellbymonth'), GETPOST('sellbyday'), GETPOST('sellbyyear')); - print $form->selectDate($sellbyselected, 'sellby', '', '', 1, ""); - print ''; - print ''; - } +{ + print ''; + print 'element == 'stock'?'': ' class="fieldrequired"').'>'.$langs->trans("batch_number").''; + print ''; + print ''; + print ''; + print ''; + print ''.$langs->trans("EatByDate").''; + $eatbyselected=dol_mktime(0, 0, 0, GETPOST('eatbymonth'), GETPOST('eatbyday'), GETPOST('eatbyyear')); + print $form->selectDate($eatbyselected, 'eatby', '', '', 1, ""); + print ''; + print ''.$langs->trans("SellByDate").''; + $sellbyselected=dol_mktime(0, 0, 0, GETPOST('sellbymonth'), GETPOST('sellbyday'), GETPOST('sellbyyear')); + print $form->selectDate($sellbyselected, 'sellby', '', '', 1, ""); + print ''; + print ''; +} // Label of mouvement of id of inventory $valformovementlabel=((GETPOST("label") && (GETPOST('label') != $langs->trans("MovementCorrectStock", ''))) ? GETPOST("label") : $langs->trans("MovementCorrectStock", $productref)); diff --git a/htdocs/product/stock/tpl/stocktransfer.tpl.php b/htdocs/product/stock/tpl/stocktransfer.tpl.php index 2f02df78eec..dc814e54790 100644 --- a/htdocs/product/stock/tpl/stocktransfer.tpl.php +++ b/htdocs/product/stock/tpl/stocktransfer.tpl.php @@ -40,18 +40,18 @@ if (empty($conf) || ! is_object($conf)) { $pdluo = new Productbatch($db); - if ($pdluoid > 0) - { - $result=$pdluo->fetch($pdluoid); - if ($result > 0) - { - $pdluoid=$pdluo->id; - } - else - { - dol_print_error($db, $pdluo->error, $pdluo->errors); - } - } +if ($pdluoid > 0) +{ + $result=$pdluo->fetch($pdluoid); + if ($result > 0) + { + $pdluoid=$pdluo->id; + } + else + { + dol_print_error($db, $pdluo->error, $pdluo->errors); + } +} print load_fiche_titre($langs->trans("StockTransfer"), '', 'generic'); @@ -62,28 +62,28 @@ if (empty($conf) || ! is_object($conf)) { print ''; print ''; print ''; - if ($pdluoid) - { - print ''; - } +if ($pdluoid) +{ + print ''; +} print ''; // Source warehouse or product print ''; - if ($object->element == 'product') - { - print ''; - print ''; - } - if ($object->element == 'stock') - { - print ''; - print ''; - } +if ($object->element == 'product') +{ + print ''; + print ''; +} +if ($object->element == 'stock') +{ + print ''; + print ''; +} print ''; // Serial / Eat-by date - if (! empty($conf->productbatch->enabled) && +if (! empty($conf->productbatch->enabled) && (($object->element == 'product' && $object->hasbatch()) || ($object->element == 'stock')) ) - { - print ''; - print 'element == 'stock'?'': ' class="fieldrequired"').'>'.$langs->trans("batch_number").''; - print ''; +{ + print ''; + print 'element == 'stock'?'': ' class="fieldrequired"').'>'.$langs->trans("batch_number").''; + print ''; - print ''; - print ''; - print ''; - print ''; - } + print ''; + print ''; + print ''; + print ''; +} // Label $valformovementlabel=(GETPOST("label")?GETPOST("label"):$langs->trans("MovementTransferStock", $productref)); diff --git a/htdocs/projet/activity/perweek.php b/htdocs/projet/activity/perweek.php index f5db207a42e..e51b2e4b404 100644 --- a/htdocs/projet/activity/perweek.php +++ b/htdocs/projet/activity/perweek.php @@ -813,23 +813,23 @@ if (count($tasksarray) > 0) print ' - '.$langs->trans("ExpectedWorkedHours").': '.price($usertoprocess->weeklyhours, 1, $langs, 0, 0).''; print ''; - for ($idw = 0; $idw < 7; $idw++) + for ($idw = 0; $idw < 7; $idw++) { - $cssweekend=''; - if (($idw + 1) < $numstartworkingday || ($idw + 1) > $numendworkingday) // This is a day is not inside the setup of working days, so we use a week-end css. - { - $cssweekend='weekend'; - } + $cssweekend=''; + if (($idw + 1) < $numstartworkingday || ($idw + 1) > $numendworkingday) // This is a day is not inside the setup of working days, so we use a week-end css. + { + $cssweekend='weekend'; + } - $tmpday=dol_time_plus_duree($firstdaytoshow, $idw, 'd'); + $tmpday=dol_time_plus_duree($firstdaytoshow, $idw, 'd'); - $cssonholiday=''; - if (! $isavailable[$tmpday]['morning'] && ! $isavailable[$tmpday]['afternoon']) $cssonholiday.='onholidayallday '; - elseif (! $isavailable[$tmpday]['morning']) $cssonholiday.='onholidaymorning '; - elseif (! $isavailable[$tmpday]['afternoon']) $cssonholiday.='onholidayafternoon '; + $cssonholiday=''; + if (! $isavailable[$tmpday]['morning'] && ! $isavailable[$tmpday]['afternoon']) $cssonholiday.='onholidayallday '; + elseif (! $isavailable[$tmpday]['morning']) $cssonholiday.='onholidaymorning '; + elseif (! $isavailable[$tmpday]['afternoon']) $cssonholiday.='onholidayafternoon '; - print ''; - } + print ''; + } print ''; } diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index da2d41512e1..a873b53dbc0 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -401,7 +401,7 @@ class Project extends CommonObject $result = 1; } else - { + { $this->db->rollback(); $result = -1; } @@ -1222,7 +1222,7 @@ class Project extends CommonObject // No filter. Use this if user has permission to see all project } - $sql.= $filter; + $sql.= $filter; //print $sql; $resql = $this->db->query($sql); @@ -1722,23 +1722,23 @@ class Project extends CommonObject $num = $this->db->num_rows($resql); $i = 0; // Loop on each record found, so each couple (project id, task id) - while ($i < $num) + while ($i < $num) { - $obj=$this->db->fetch_object($resql); - $day=$this->db->jdate($obj->task_date); // task_date is date without hours - if (empty($daylareadyfound[$day])) - { - $this->weekWorkLoad[$day] = $obj->task_duration; - $this->weekWorkLoadPerTask[$day][$obj->fk_task] = $obj->task_duration; - } - else - { - $this->weekWorkLoad[$day] += $obj->task_duration; - $this->weekWorkLoadPerTask[$day][$obj->fk_task] += $obj->task_duration; - } - $daylareadyfound[$day]=1; - $i++; - } + $obj=$this->db->fetch_object($resql); + $day=$this->db->jdate($obj->task_date); // task_date is date without hours + if (empty($daylareadyfound[$day])) + { + $this->weekWorkLoad[$day] = $obj->task_duration; + $this->weekWorkLoadPerTask[$day][$obj->fk_task] = $obj->task_duration; + } + else + { + $this->weekWorkLoad[$day] += $obj->task_duration; + $this->weekWorkLoadPerTask[$day][$obj->fk_task] += $obj->task_duration; + } + $daylareadyfound[$day]=1; + $i++; + } $this->db->free($resql); return 1; } diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php index e35b4b4bdad..1bd044bc985 100644 --- a/htdocs/projet/class/task.class.php +++ b/htdocs/projet/class/task.class.php @@ -852,15 +852,15 @@ class Task extends CommonObject $sql.=" t.rowid, t.ref, t.label, t.description, t.fk_task_parent, t.duration_effective, t.progress, t.fk_statut,"; $sql.=" t.dateo, t.datee, t.planned_workload, t.rang,"; $sql.=" s.rowid, s.nom, s.email,"; - $sql.=" p.fk_opp_status, p.opp_amount, p.opp_percent, p.budget_amount"; - if (!empty($extrafields->attributes['projet']['label'])) - { - foreach ($extrafields->attributes['projet']['label'] as $key => $val) $sql.=($extrafields->attributes['projet']['type'][$key] != 'separate' ? ",efp.".$key : ''); - } - if (!empty($extrafields->attributes['projet_task']['label'])) - { - foreach ($extrafields->attributes['projet_task']['label'] as $key => $val) $sql.=($extrafields->attributes['projet_task']['type'][$key] != 'separate' ? ",efpt.".$key : ''); - } + $sql.=" p.fk_opp_status, p.opp_amount, p.opp_percent, p.budget_amount"; + if (!empty($extrafields->attributes['projet']['label'])) + { + foreach ($extrafields->attributes['projet']['label'] as $key => $val) $sql.=($extrafields->attributes['projet']['type'][$key] != 'separate' ? ",efp.".$key : ''); + } + if (!empty($extrafields->attributes['projet_task']['label'])) + { + foreach ($extrafields->attributes['projet_task']['label'] as $key => $val) $sql.=($extrafields->attributes['projet_task']['type'][$key] != 'separate' ? ",efpt.".$key : ''); + } } $sql.= " ORDER BY p.ref, t.rang, t.dateo"; diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index 3a2886229a0..44b803571ba 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -863,8 +863,8 @@ foreach ($listofreferent as $key => $value) if (canApplySubtotalOn($tablename)) { - // Sort - $elementarray = sortElementsByClientName($elementarray); + // Sort + $elementarray = sortElementsByClientName($elementarray); } $num=count($elementarray); @@ -1077,9 +1077,9 @@ foreach ($listofreferent as $key => $value) if ($othermessage) print $othermessage; if (isset($total_ht_by_line)) { - if (! $qualifiedfortotal) print ''; - print price($total_ht_by_line); - if (! $qualifiedfortotal) print ''; + if (! $qualifiedfortotal) print ''; + print price($total_ht_by_line); + if (! $qualifiedfortotal) print ''; } if ($warning) print ' '.img_warning($warning); print ''; @@ -1124,9 +1124,9 @@ foreach ($listofreferent as $key => $value) if ($othermessage) print $othermessage; if (isset($total_ttc_by_line)) { - if (! $qualifiedfortotal) print ''; - print price($total_ttc_by_line); - if (! $qualifiedfortotal) print ''; + if (! $qualifiedfortotal) print ''; + print price($total_ttc_by_line); + if (! $qualifiedfortotal) print ''; } if ($warning) print ' '.img_warning($warning); print ''; diff --git a/htdocs/projet/graph_opportunities.inc.php b/htdocs/projet/graph_opportunities.inc.php index 5c5cd398354..7d75544ef93 100644 --- a/htdocs/projet/graph_opportunities.inc.php +++ b/htdocs/projet/graph_opportunities.inc.php @@ -35,11 +35,11 @@ if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) $valsamount[$obj->opp_status]=$obj->opp_amount; $totalnb+=$obj->nb; if ($obj->opp_status) $totaloppnb+=$obj->nb; - if (! in_array($obj->code, array('WON', 'LOST'))) + if (! in_array($obj->code, array('WON', 'LOST'))) { - $totalamount+=$obj->opp_amount; - $ponderated_opp_amount+=$obj->ponderated_opp_amount; - } + $totalamount+=$obj->opp_amount; + $ponderated_opp_amount+=$obj->ponderated_opp_amount; + } } $total+=$row[0]; } diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index 9a5514ff1cc..8524e940f36 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -143,10 +143,10 @@ $arrayfields=array( // Extra fields if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) { - foreach($extrafields->attribute_label as $key => $val) - { + foreach($extrafields->attribute_label as $key => $val) + { if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + } } diff --git a/htdocs/projet/stats/index.php b/htdocs/projet/stats/index.php index 9353f968116..f8480f8f322 100644 --- a/htdocs/projet/stats/index.php +++ b/htdocs/projet/stats/index.php @@ -108,7 +108,7 @@ if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) unset($data1); if ($nocolor) -$px->SetDataColor(array ( + $px->SetDataColor(array ( array ( 220, 220, @@ -130,9 +130,9 @@ $px->SetDataColor(array ( )); $px->SetTitle($langs->trans('OpportunitiesStatusForProjects')); $result=$px->draw($filenamenb, $fileurlnb); - if ($result<0) { - setEventMessages($px->error, null, 'errors'); - } + if ($result<0) { + setEventMessages($px->error, null, 'errors'); + } } else { setEventMessages(null, $mesgs, 'errors'); } diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index 3d4077790c7..2abfea6e64e 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -645,7 +645,7 @@ elseif ($id > 0 || ! empty($ref)) print '
'; -// Link to create task + // Link to create task $linktocreatetaskParam = array(); $linktocreatetaskUserRight = false; if ($user->rights->projet->all->creer || $user->rights->projet->creer) { @@ -787,8 +787,8 @@ elseif ($id > 0 || ! empty($ref)) print_liste_field_titre("TaskProgressSummary", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center '); if ($object->usage_bill_time) { - print_liste_field_titre("TimeToBill", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); - print_liste_field_titre("TimeBilled", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); + print_liste_field_titre("TimeToBill", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); + print_liste_field_titre("TimeBilled", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); } if (! empty($conf->global->PROJECT_SHOW_CONTACTS_IN_LIST)) print_liste_field_titre("TaskRessourceLinks", $_SERVER["PHP_SELF"], '', '', '', $sortfield, $sortorder); print_liste_field_titre('', $_SERVER["PHP_SELF"], "", '', '', 'width="80"', $sortfield, $sortorder, 'center maxwidthsearch '); diff --git a/htdocs/projet/tasks/contact.php b/htdocs/projet/tasks/contact.php index 2448088c6b1..b09d8345177 100644 --- a/htdocs/projet/tasks/contact.php +++ b/htdocs/projet/tasks/contact.php @@ -356,7 +356,7 @@ if ($id > 0 || ! empty($ref)) /* * Lines of contacts */ -/* + /* // Contacts lines (modules that overwrite templates must declare this into descriptor) $dirtpls=array_merge($conf->modules_parts['tpl'],array('/core/tpl')); foreach($dirtpls as $reldir) @@ -364,7 +364,7 @@ if ($id > 0 || ! empty($ref)) $res=@include dol_buildpath($reldir.'/contacts.tpl.php'); if ($res) break; } -*/ + */ /* * Add a new contact line diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index d9730946377..78431f983a4 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -616,7 +616,7 @@ if ($id > 0 || ! empty($ref)) { if (! $object->hasChildren() && ! $object->hasTimeSpent()) { - print ''.$langs->trans('Delete').''; + print ''.$langs->trans('Delete').''; } else { diff --git a/test/phpunit/BankAccountTest.php b/test/phpunit/BankAccountTest.php index 48e2a8ddb65..416a17f0c0f 100644 --- a/test/phpunit/BankAccountTest.php +++ b/test/phpunit/BankAccountTest.php @@ -169,7 +169,7 @@ class BankAccountTest extends PHPUnit\Framework\TestCase return $localobject; } - /** + /** * testBankAccountOther * * @param Object $localobject Object contract diff --git a/test/phpunit/BonPrelevementTest.php b/test/phpunit/BonPrelevementTest.php index eb830e1f827..135c77dfa2d 100644 --- a/test/phpunit/BonPrelevementTest.php +++ b/test/phpunit/BonPrelevementTest.php @@ -173,7 +173,7 @@ class BonPrelevementTest extends PHPUnit\Framework\TestCase * @depends testBonPrelevementOther * The depends says test is run only if previous is ok */ -/* public function testBonPrelevementDelete($id) + /* public function testBonPrelevementDelete($id) { global $conf,$user,$langs,$db; $conf=$this->savconf; @@ -189,5 +189,5 @@ class BonPrelevementTest extends PHPUnit\Framework\TestCase $this->assertLessThan($result, 0); return $result; } -*/ + */ } diff --git a/test/phpunit/ContratTest.php b/test/phpunit/ContratTest.php index b64d3242edb..7c302105aa2 100644 --- a/test/phpunit/ContratTest.php +++ b/test/phpunit/ContratTest.php @@ -166,7 +166,7 @@ class ContratTest extends PHPUnit\Framework\TestCase return $localobject; } - /** + /** * testContratOther * * @param Object $localobject Object contract diff --git a/test/phpunit/ExportTest.php b/test/phpunit/ExportTest.php index 66ef42a9e15..7f440bf067d 100644 --- a/test/phpunit/ExportTest.php +++ b/test/phpunit/ExportTest.php @@ -265,7 +265,7 @@ class ExportTest extends PHPUnit\Framework\TestCase public function testExportPersonalizedWithFilter() { global $conf,$user,$langs,$db; -/* + /* $sql = "SELECT f.ref as f_ref, f.total as f_total, f.tva as f_tva FROM ".MAIN_DB_PREFIX."facture f"; $objexport=new Export($db); @@ -303,7 +303,7 @@ class ExportTest extends PHPUnit\Framework\TestCase $result=$objexport->build_file($user, $model, $datatoexport, $array_selected, $array_filtervalue, $sql); $expectedresult=1; $this->assertEquals($expectedresult,$result); -*/ + */ return true; } diff --git a/test/phpunit/FactureFournisseurTest.php b/test/phpunit/FactureFournisseurTest.php index f346909e8b8..b277ba5c1b3 100644 --- a/test/phpunit/FactureFournisseurTest.php +++ b/test/phpunit/FactureFournisseurTest.php @@ -214,7 +214,7 @@ class FactureFournisseurTest extends PHPUnit\Framework\TestCase return $localobject; } - /** + /** * testFactureFournisseurOther * * @param Object $localobject Supplier invoice diff --git a/test/phpunit/FactureTest.php b/test/phpunit/FactureTest.php index 34dd42b63f6..4e361895fcc 100644 --- a/test/phpunit/FactureTest.php +++ b/test/phpunit/FactureTest.php @@ -241,7 +241,7 @@ class FactureTest extends PHPUnit\Framework\TestCase return $localobject; } - /** + /** * testFactureOther * * @param Object $localobject Invoice diff --git a/test/phpunit/FichinterTest.php b/test/phpunit/FichinterTest.php index 60be4024e69..ba9408441a1 100644 --- a/test/phpunit/FichinterTest.php +++ b/test/phpunit/FichinterTest.php @@ -190,7 +190,7 @@ class FichinterTest extends PHPUnit\Framework\TestCase return $localobject; } - /** + /** * testFichinterValid * * @param Object $localobject Object intervention diff --git a/test/phpunit/FilesLibTest.php b/test/phpunit/FilesLibTest.php index d73d99f7078..776e783a6b0 100644 --- a/test/phpunit/FilesLibTest.php +++ b/test/phpunit/FilesLibTest.php @@ -150,11 +150,11 @@ class FilesLibTest extends PHPUnit\Framework\TestCase } - /** - * testDolCountNbOfLine - * - * @return int - */ + /** + * testDolCountNbOfLine + * + * @return int + */ public function testDolCountNbOfLine() { global $conf,$user,$langs,$db; @@ -171,11 +171,11 @@ class FilesLibTest extends PHPUnit\Framework\TestCase return $result; } - /** - * testDolIsFileDir - * - * @return int - */ + /** + * testDolIsFileDir + * + * @return int + */ public function testDolIsFileDir() { global $conf,$user,$langs,$db; diff --git a/test/phpunit/ImagesLibTest.php b/test/phpunit/ImagesLibTest.php index a7fcaba25ce..71474ba1847 100644 --- a/test/phpunit/ImagesLibTest.php +++ b/test/phpunit/ImagesLibTest.php @@ -118,11 +118,11 @@ class ImagesLibTest extends PHPUnit\Framework\TestCase print __METHOD__."\n"; } - /** - * testDolCountNbOfLine - * - * @return int - */ + /** + * testDolCountNbOfLine + * + * @return int + */ public function testgetImageSize() { $file=dirname(__FILE__).'/img250x50.jpg'; diff --git a/test/phpunit/PropalTest.php b/test/phpunit/PropalTest.php index 955024baa91..709c5bbcfb7 100644 --- a/test/phpunit/PropalTest.php +++ b/test/phpunit/PropalTest.php @@ -239,7 +239,7 @@ class PropalTest extends PHPUnit\Framework\TestCase return $localobject; } - /** + /** * testPropalOther * * @param Propal $localobject Proposal diff --git a/test/phpunit/RestAPIUserTest.php b/test/phpunit/RestAPIUserTest.php index b9658818d48..ea3970e5a4b 100644 --- a/test/phpunit/RestAPIUserTest.php +++ b/test/phpunit/RestAPIUserTest.php @@ -149,30 +149,30 @@ class RestAPIUserTest extends PHPUnit\Framework\TestCase */ public function testRestGetUser() { - global $conf,$user,$langs,$db; + global $conf,$user,$langs,$db; - $url = $this->api_url.'/users/123456789?api_key='.$this->api_key; - //$addheaders=array('Content-Type: application/json'); + $url = $this->api_url.'/users/123456789?api_key='.$this->api_key; + //$addheaders=array('Content-Type: application/json'); - print __METHOD__." Request GET url=".$url."\n"; - $result=getURLContent($url, 'GET', '', 1, array()); - //print __METHOD__." Result for unexisting user: ".var_export($result, true)."\n"; - print __METHOD__." curl_error_no: ".$result['curl_error_no']."\n"; - $this->assertEquals($result['curl_error_no'], ''); - $object=json_decode($result['content'], true); - $this->assertNotNull($object, "Parsing of json result must no be null"); - $this->assertEquals(404, $object['error']['code']); + print __METHOD__." Request GET url=".$url."\n"; + $result=getURLContent($url, 'GET', '', 1, array()); + //print __METHOD__." Result for unexisting user: ".var_export($result, true)."\n"; + print __METHOD__." curl_error_no: ".$result['curl_error_no']."\n"; + $this->assertEquals($result['curl_error_no'], ''); + $object=json_decode($result['content'], true); + $this->assertNotNull($object, "Parsing of json result must no be null"); + $this->assertEquals(404, $object['error']['code']); - $url = $this->api_url.'/users/1?api_key='.$this->api_key; + $url = $this->api_url.'/users/1?api_key='.$this->api_key; - print __METHOD__." Request GET url=".$url."\n"; - $result=getURLContent($url, 'GET', '', 1, array()); - //print __METHOD__." Result for existing user user: ".var_export($result, true)."\n"; - print __METHOD__." curl_error_no: ".$result['curl_error_no']."\n"; - $this->assertEquals($result['curl_error_no'], ''); - $object=json_decode($result['content'], true); - $this->assertNotNull($object, "Parsing of json result must no be null"); - $this->assertEquals(1, $object['statut']); + print __METHOD__." Request GET url=".$url."\n"; + $result=getURLContent($url, 'GET', '', 1, array()); + //print __METHOD__." Result for existing user user: ".var_export($result, true)."\n"; + print __METHOD__." curl_error_no: ".$result['curl_error_no']."\n"; + $this->assertEquals($result['curl_error_no'], ''); + $object=json_decode($result['content'], true); + $this->assertNotNull($object, "Parsing of json result must no be null"); + $this->assertEquals(1, $object['statut']); } /** @@ -183,52 +183,52 @@ class RestAPIUserTest extends PHPUnit\Framework\TestCase public function testRestCreateUser() { - // attemp to create without mandatory fields : - $url = $this->api_url.'/users?api_key='.$this->api_key; - $addheaders=array('Content-Type: application/json'); + // attemp to create without mandatory fields : + $url = $this->api_url.'/users?api_key='.$this->api_key; + $addheaders=array('Content-Type: application/json'); - $bodyobj = array( - "lastname"=>"testRestUser", - "password"=>"testRestPassword", - "email"=>"test@restuser.com" - ); - $body = json_encode($bodyobj); + $bodyobj = array( + "lastname"=>"testRestUser", + "password"=>"testRestPassword", + "email"=>"test@restuser.com" + ); + $body = json_encode($bodyobj); - print __METHOD__." Request POST url=".$url."\n"; - $result=getURLContent($url, 'POST', $body, 1, $addheaders); - //print __METHOD__." Result for creating incomplete user".var_export($result, true)."\n"; - print __METHOD__." curl_error_no: ".$result['curl_error_no']."\n"; - $this->assertEquals($result['curl_error_no'], ''); - $object=json_decode($result['content'], true); - $this->assertNotNull($object, "Parsing of json result must no be null"); - $this->assertEquals(500, $object['error']['code'], $object['error']['code'].' '.$object['error']['message']); + print __METHOD__." Request POST url=".$url."\n"; + $result=getURLContent($url, 'POST', $body, 1, $addheaders); + //print __METHOD__." Result for creating incomplete user".var_export($result, true)."\n"; + print __METHOD__." curl_error_no: ".$result['curl_error_no']."\n"; + $this->assertEquals($result['curl_error_no'], ''); + $object=json_decode($result['content'], true); + $this->assertNotNull($object, "Parsing of json result must no be null"); + $this->assertEquals(500, $object['error']['code'], $object['error']['code'].' '.$object['error']['message']); - // create regular user - unset($result); - $bodyobj = array( - "login"=>"testRestLogin".mt_rand(), - "lastname"=>"testRestUser", - "password"=>"testRestPassword", - "email"=>"test@restuser.com" - ); - $body = json_encode($bodyobj); - print __METHOD__." Request POST url=".$url."\n"; - $result=getURLContent($url, 'POST', $body, 1, $addheaders); - print __METHOD__." Result code for creating user ".var_export($result, true)."\n"; - print __METHOD__." curl_error_no: ".$result['curl_error_no']."\n"; - $this->assertEquals($result['curl_error_no'], ''); - $resid=json_decode($result['content'], true); - $this->assertNotNull($resid, "Parsing of json result must no be null"); - $this->assertGreaterThan(0, $resid, $object['error']['code'].' '.$object['error']['message']); + // create regular user + unset($result); + $bodyobj = array( + "login"=>"testRestLogin".mt_rand(), + "lastname"=>"testRestUser", + "password"=>"testRestPassword", + "email"=>"test@restuser.com" + ); + $body = json_encode($bodyobj); + print __METHOD__." Request POST url=".$url."\n"; + $result=getURLContent($url, 'POST', $body, 1, $addheaders); + print __METHOD__." Result code for creating user ".var_export($result, true)."\n"; + print __METHOD__." curl_error_no: ".$result['curl_error_no']."\n"; + $this->assertEquals($result['curl_error_no'], ''); + $resid=json_decode($result['content'], true); + $this->assertNotNull($resid, "Parsing of json result must no be null"); + $this->assertGreaterThan(0, $resid, $object['error']['code'].' '.$object['error']['message']); - // attempt to create duplicated user - print __METHOD__." Request POST url=".$url."\n"; - $result=getURLContent($url, 'POST', $body, 1, $addheaders); - //print __METHOD__." Result for creating duplicate user".var_export($result, true)."\n"; - print __METHOD__." curl_error_no: ".$result['curl_error_no']."\n"; - $this->assertEquals($result['curl_error_no'], ''); - $object=json_decode($result['content'], true); - $this->assertNotNull($object, "Parsing of json result must no be null"); - $this->assertEquals(500, $object['error']['code'], $object['error']['code'].' '.$object['error']['message']); + // attempt to create duplicated user + print __METHOD__." Request POST url=".$url."\n"; + $result=getURLContent($url, 'POST', $body, 1, $addheaders); + //print __METHOD__." Result for creating duplicate user".var_export($result, true)."\n"; + print __METHOD__." curl_error_no: ".$result['curl_error_no']."\n"; + $this->assertEquals($result['curl_error_no'], ''); + $object=json_decode($result['content'], true); + $this->assertNotNull($object, "Parsing of json result must no be null"); + $this->assertEquals(500, $object['error']['code'], $object['error']['code'].' '.$object['error']['message']); } } diff --git a/test/phpunit/SupplierProposalTest.php b/test/phpunit/SupplierProposalTest.php index aa91e8d533b..42d7e5842a6 100644 --- a/test/phpunit/SupplierProposalTest.php +++ b/test/phpunit/SupplierProposalTest.php @@ -231,7 +231,7 @@ class SupplierProposalTest extends PHPUnit\Framework\TestCase return $localobject; } - /** + /** * testSupplierProposalOther * * @param SupplierProposal $localobject Proposal diff --git a/test/phpunit/functional/TakePosFunctionalTest.php b/test/phpunit/functional/TakePosFunctionalTest.php index e33a050cecf..597a893c67b 100644 --- a/test/phpunit/functional/TakePosFunctionalTest.php +++ b/test/phpunit/functional/TakePosFunctionalTest.php @@ -67,14 +67,14 @@ class TakePosFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase ), // Geckodriver does not keep the session at the moment?! // XPath selectors also don't seem to work -// array( -// 'browser' => 'Mozilla Firefox on Linux', -// 'browserName' => 'firefox', -// 'sessionStrategy' => 'shared', -// 'desiredCapabilities' => array( -// 'marionette' => true -// ) -// ) + //array( + // 'browser' => 'Mozilla Firefox on Linux', + // 'browserName' => 'firefox', + // 'sessionStrategy' => 'shared', + // 'desiredCapabilities' => array( + // 'marionette' => true + // ) + //) ); /** From e5ef19cd0e25942696a755882940f5b72ad4a754 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 20 Oct 2019 12:10:07 +0200 Subject: [PATCH 438/980] restablish original rules --- .travis.yml | 3 +-- dev/setup/codesniffer/ruleset.xml | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index e487822ad24..3a996915ca7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -295,8 +295,7 @@ script: set -e # Exclusions are defined in the ruleset.xml file #phpcs -s -n -p -d memory_limit=-1 --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 . - #if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true .; fi - phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true . + if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true .; fi set +e echo diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 82582d2d18c..32c44ce91e4 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -186,7 +186,7 @@ - + From bf1b2242ea94f4408c3569ab382678ed015b0848 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 13:22:29 +0200 Subject: [PATCH 439/980] Fix no focus if we are on edit mode directly --- htdocs/admin/accountant.php | 4 +-- htdocs/admin/company.php | 2 +- htdocs/admin/openinghours.php | 68 ++++++++++++++--------------------- htdocs/langs/en_US/other.lang | 1 + 4 files changed, 30 insertions(+), 45 deletions(-) diff --git a/htdocs/admin/accountant.php b/htdocs/admin/accountant.php index e48f122c4b0..bfde50618cc 100644 --- a/htdocs/admin/accountant.php +++ b/htdocs/admin/accountant.php @@ -114,7 +114,7 @@ print ''."\n"; +print 'global->MAIN_OPTIMIZEFORTEXTBROWSER) ? '' : ' autofocus="autofocus"').'>'."\n"; // Address print ''."\n"; // Code print ''."\n"; +print ''."\n"; // Note print ''."\n"; +print 'global->MAIN_OPTIMIZEFORTEXTBROWSER) ? '' : ' autofocus="autofocus"').'>'."\n"; // Addresse diff --git a/htdocs/admin/openinghours.php b/htdocs/admin/openinghours.php index d931cdbf230..c29f6816a05 100644 --- a/htdocs/admin/openinghours.php +++ b/htdocs/admin/openinghours.php @@ -29,7 +29,7 @@ $action=GETPOST('action', 'aZ09'); $contextpage=GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'adminaccoutant'; // To manage different context of search // Load translation files required by the page -$langs->loadLangs(array('admin', 'companies')); +$langs->loadLangs(array('admin', 'companies', 'other')); if (! $user->admin) accessforbidden(); @@ -66,6 +66,8 @@ if ( ($action == 'update' && ! GETPOST("cancel", 'alpha')) * View */ +$form = new Form($db); + $help_url=''; llxHeader('', $langs->trans("CompanyFoundation"), $help_url); @@ -75,12 +77,10 @@ $head = company_admin_prepare_head(); dol_fiche_head($head, 'openinghours', $langs->trans("Company"), -1, 'company'); -$form=new Form($db); - print ''.$langs->trans("OpeningHoursDesc")."
\n"; print "
\n"; -if ($action == 'edit' || $action == 'updateedit') +if (empty($action) || $action == 'edit' || $action == 'updateedit') { /** * Edit parameters @@ -92,66 +92,50 @@ if ($action == 'edit' || $action == 'updateedit') print '
'.$langs->trans("WarehouseSource").''; - print $formproduct->selectWarehouses((GETPOST("dwid")?GETPOST("dwid", 'int'):(GETPOST('id_entrepot')?GETPOST('id_entrepot', 'int'):($object->element=='product' && $object->fk_default_warehouse?$object->fk_default_warehouse:'ifone'))), 'id_entrepot', 'warehouseopen,warehouseinternal', 1); - print ''.$langs->trans("Product").''; - print $form->select_produits(GETPOST('product_id', 'int'), 'product_id', (empty($conf->global->STOCK_SUPPORTS_SERVICES)?'0':''), 0, 0, -1, 2, '', 0, null, 0, 1, 0, 'maxwidth500'); - print ''.$langs->trans("WarehouseSource").''; + print $formproduct->selectWarehouses((GETPOST("dwid")?GETPOST("dwid", 'int'):(GETPOST('id_entrepot')?GETPOST('id_entrepot', 'int'):($object->element=='product' && $object->fk_default_warehouse?$object->fk_default_warehouse:'ifone'))), 'id_entrepot', 'warehouseopen,warehouseinternal', 1); + print ''.$langs->trans("Product").''; + print $form->select_produits(GETPOST('product_id', 'int'), 'product_id', (empty($conf->global->STOCK_SUPPORTS_SERVICES)?'0':''), 0, 0, -1, 2, '', 0, null, 0, 1, 0, 'maxwidth500'); + print ''.$langs->trans("WarehouseTarget").''; print $formproduct->selectWarehouses(GETPOST('id_entrepot_destination'), 'id_entrepot_destination', 'warehouseopen,warehouseinternal', 1); @@ -92,35 +92,35 @@ if (empty($conf) || ! is_object($conf)) { print '
'; - if ($pdluoid > 0) - { - // If form was opened for a specific pdluoid, field is disabled - print ''; - print ''; - } - else - { - print ''; - } - print '
'; + if ($pdluoid > 0) + { + // If form was opened for a specific pdluoid, field is disabled + print ''; + print ''; + } + else + { + print ''; + } + print '
'.$langs->trans("EatByDate").''; - print $form->selectDate(($d_eatby?$d_eatby:$pdluo->eatby), 'eatby', '', '', 1, "", 1, 0, ($pdluoid > 0 ? 1 : 0)); // If form was opened for a specific pdluoid, field is disabled - print ''.$langs->trans("SellByDate").''; - print $form->selectDate(($d_sellby?$d_sellby:$pdluo->sellby), 'sellby', '', '', 1, "", 1, 0, ($pdluoid > 0 ? 1 : 0)); // If form was opened for a specific pdluoid, field is disabled - print '
'.$langs->trans("EatByDate").''; + print $form->selectDate(($d_eatby?$d_eatby:$pdluo->eatby), 'eatby', '', '', 1, "", 1, 0, ($pdluoid > 0 ? 1 : 0)); // If form was opened for a specific pdluoid, field is disabled + print ''.$langs->trans("SellByDate").''; + print $form->selectDate(($d_sellby?$d_sellby:$pdluo->sellby), 'sellby', '', '', 1, "", 1, 0, ($pdluoid > 0 ? 1 : 0)); // If form was opened for a specific pdluoid, field is disabled + print '
 
 
 
'.$langs // Name print '
'; -print '
'; @@ -156,7 +156,7 @@ print '
'; -print '
'; diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index e6ea9a2cb17..912995d7817 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -409,7 +409,7 @@ print '
'.$langs->trans( // Name print '
'; -print '
'; print ''."\n"; - print ''."\n"; + print ''."\n"; - print ''."\n"; - print ''."\n"; - print ''."\n"; - print ''."\n"; - print ''."\n"; - print ''."\n"; print '
'.$langs->trans("Day").''.$langs->trans("Value").'
'; - print '
'; + print $form->textwithpicto($langs->trans("Monday"), $langs->trans("OpeningHoursFormatDesc")); + print ''; + print 'global->MAIN_OPTIMIZEFORTEXTBROWSER) ? '' : ' autofocus="autofocus"').'>
'; + print '
'; + print $form->textwithpicto($langs->trans("Tuesday"), $langs->trans("OpeningHoursFormatDesc")); + print ''; print '
'; + print '
'; + print $form->textwithpicto($langs->trans("Wednesday"), $langs->trans("OpeningHoursFormatDesc")); + print ''; print '
'; + print '
'; + print $form->textwithpicto($langs->trans("Thursday"), $langs->trans("OpeningHoursFormatDesc")); + print ''; print '
'; + print '
'; + print $form->textwithpicto($langs->trans("Friday"), $langs->trans("OpeningHoursFormatDesc")); + print ''; print '
'; + print '
'; + print $form->textwithpicto($langs->trans("Saturday"), $langs->trans("OpeningHoursFormatDesc")); + print ''; print '
'; + print '
'; + print $form->textwithpicto($langs->trans("Sunday"), $langs->trans("OpeningHoursFormatDesc")); + print ''; print '
'; print '
'; print ''; - print '     '; - print ''; print '
'; print '
'; print ''; } -else -{ - /* - * Show parameters - */ - - print '
'; - print ''; - print ''; - - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - - print '
'.$langs->trans("Day").''.$langs->trans("Value").'
'.$langs->trans("Monday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_MONDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_MONDAY) . '
'.$langs->trans("Tuesday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_TUESDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_TUESDAY) . '
'.$langs->trans("Wednesday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_WEDNESDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_WEDNESDAY) . '
'.$langs->trans("Thursday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_THURSDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_THURSDAY) . '
'.$langs->trans("Friday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_FRIDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_FRIDAY) . '
'.$langs->trans("Saturday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_SATURDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_SATURDAY) . '
'.$langs->trans("Sunday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_SUNDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_SUNDAY) . '
'; - print "
"; - - print ''; - - // Actions buttons - print '
'; - print ''; - print '
'; -} llxFooter(); diff --git a/htdocs/langs/en_US/other.lang b/htdocs/langs/en_US/other.lang index 34590a924be..6e9b6d66f32 100644 --- a/htdocs/langs/en_US/other.lang +++ b/htdocs/langs/en_US/other.lang @@ -252,6 +252,7 @@ ThirdPartyCreatedByEmailCollector=Third party created by email collector from em ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s +OpeningHoursFormatDesc=Use a - to separate opening and closing hours.
Use a space to enter different ranges.
Example: 8-12 14-18 ##### Export ##### ExportsArea=Exports area From 1f1945fc5c0bed38fa8a6de964950d44d8dd5cd3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 13:32:27 +0200 Subject: [PATCH 440/980] Update index.php --- htdocs/mrp/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index b4f90b758a9..edc4ca4dff9 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -212,7 +212,7 @@ if ($resql) } } else { print ''; - print '' . $langs->trans("None") . ''; + print '' . $langs->trans("None") . ''; print ''; } print ""; From 54b78863319cda11b4f556b0e65809e569725802 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 13:40:18 +0200 Subject: [PATCH 441/980] Update api_orders.class.php --- htdocs/commande/class/api_orders.class.php | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/htdocs/commande/class/api_orders.class.php b/htdocs/commande/class/api_orders.class.php index 40732fbd045..5dddf4d0f6f 100644 --- a/htdocs/commande/class/api_orders.class.php +++ b/htdocs/commande/class/api_orders.class.php @@ -103,24 +103,6 @@ class Orders extends DolibarrApi return $this->_fetch('', '', $ref_ext, '', $contact_list); } - /** - * Get properties of an order object by ref_int - * - * Return an array with order informations - * - * @param string $ref_int Internal reference of object - * @param int $contact_list 0: Returned array of contacts/addresses contains all properties, 1: Return array contains just id - * @return array|mixed data without useless information - * - * @url GET byRefInt/{ref_int} - * - * @throws RestException - */ - public function getByRefInt($ref_int, $contact_list = 1) - { - return $this->_fetch('', '', '', $ref_int, $contact_list); - } - /** * Get properties of an order object * From 3b5e62947d1fdb21fbc889dbc55bfcbf4e5a9b1b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 13:44:28 +0200 Subject: [PATCH 442/980] Update smtps.class.php --- htdocs/core/class/smtps.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/smtps.class.php b/htdocs/core/class/smtps.class.php index e8016b4bcfc..0c2a35f9f3f 100644 --- a/htdocs/core/class/smtps.class.php +++ b/htdocs/core/class/smtps.class.php @@ -514,8 +514,9 @@ class SMTPs $_retVal = $this->socket_send_str(base64_encode($this->_smtpsPW), '235'); break; } - if(!$_retVal) + if (! $_retVal) { $this->_setErr(130, 'Invalid Authentication Credentials.'); + } } else { From e95861c3610334b943c1c966eae954131b7aa8b4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 13:48:01 +0200 Subject: [PATCH 443/980] Update smtps.class.php --- htdocs/core/class/smtps.class.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/core/class/smtps.class.php b/htdocs/core/class/smtps.class.php index 0c2a35f9f3f..cd6f64c3242 100644 --- a/htdocs/core/class/smtps.class.php +++ b/htdocs/core/class/smtps.class.php @@ -496,6 +496,10 @@ class SMTPs return $_retVal; } } + + // Default authentication method is LOGIN + if (empty($conf->global->MAIL_SMTP_AUTH_TYPE)) $conf->global->MAIL_SMTP_AUTH_TYPE = 'LOGIN'; + // Send Authentication to Server // Check for errors along the way switch ($conf->global->MAIL_SMTP_AUTH_TYPE) { From 89b0730483d6ee174d9668c1e3a7224af1d5fb94 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 13:49:36 +0200 Subject: [PATCH 444/980] Update actioncomm.class.php --- htdocs/comm/action/class/actioncomm.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 6dbc0e832ef..d51eddb3898 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1566,7 +1566,7 @@ class ActionComm extends CommonObject $event['url']=$url; $event['created']=$this->db->jdate($obj->datec)-(empty($conf->global->AGENDA_EXPORT_FIX_TZ)?0:($conf->global->AGENDA_EXPORT_FIX_TZ*3600)); $event['modified']=$this->db->jdate($obj->datem)-(empty($conf->global->AGENDA_EXPORT_FIX_TZ)?0:($conf->global->AGENDA_EXPORT_FIX_TZ*3600)); - + if ($qualified && $datestart) { $eventarray[]=$event; From 8ce6197314cbf75a2afbb3c4500d51852b6939ec Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 14:37:15 +0200 Subject: [PATCH 445/980] Update commondocgenerator.class.php --- htdocs/core/class/commondocgenerator.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index d158d9756dd..16919677260 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -598,7 +598,7 @@ abstract class CommonDocGenerator $columns .= "$key, "; } $columns = substr($columns, 0, strlen($columns) - 2); - $resql = $this->db->query("SELECT $columns FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields AS ex INNER JOIN " . MAIN_DB_PREFIX . "product_fournisseur_price AS f ON ex.fk_object = f.rowid WHERE f.ref_fourn = '" . $line->ref_fourn . "'"); + $resql = $this->db->query("SELECT $columns FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields AS ex INNER JOIN " . MAIN_DB_PREFIX . "product_fournisseur_price AS f ON ex.fk_object = f.rowid WHERE f.ref_fourn = '" . $line->ref_supplier . "'"); if ($this->db->num_rows($resql) > 0) { $resql = $this->db->fetch_object($resql); foreach ($extralabels as $key => $value) { From d79114c1f813810b33ab3bf17e989cee459c73f5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 15:16:40 +0200 Subject: [PATCH 446/980] Clean code --- htdocs/contact/class/contact.class.php | 2 +- htdocs/core/class/utils.class.php | 2 +- htdocs/core/lib/functions.lib.php | 2 +- htdocs/expensereport/export_csv.php | 195 ------------------------- htdocs/install/lib/repair.lib.php | 2 +- htdocs/mrp/index.php | 58 +------- htdocs/product/admin/price_rules.php | 3 +- htdocs/takepos/ajax/ajax.php | 29 +++- htdocs/takepos/takepos.php | 2 +- 9 files changed, 34 insertions(+), 261 deletions(-) delete mode 100644 htdocs/expensereport/export_csv.php diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index a17f6f27259..3465b3478a0 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -628,7 +628,7 @@ class Contact extends CommonObject if ($this->birthday_alert) { //check existing - $sql_check = "SELECT * FROM ".MAIN_DB_PREFIX."user_alert WHERE type=1 AND fk_contact=".$this->db->escape($id)." AND fk_user=".$user->id; + $sql_check = "SELECT rowid FROM ".MAIN_DB_PREFIX."user_alert WHERE type=1 AND fk_contact=".$this->db->escape($id)." AND fk_user=".$user->id; $result_check = $this->db->query($sql_check); if (! $result_check || ($this->db->num_rows($result_check)<1)) { diff --git a/htdocs/core/class/utils.class.php b/htdocs/core/class/utils.class.php index cb4e7ef9e5a..3b381bc5796 100644 --- a/htdocs/core/class/utils.class.php +++ b/htdocs/core/class/utils.class.php @@ -1004,7 +1004,7 @@ class Utils if (GETPOST("nobin_disable_fk")) fwrite($handle, "ALTER TABLE `".$table."` DISABLE KEYS;\n"); else fwrite($handle, "/*!40000 ALTER TABLE `".$table."` DISABLE KEYS */;\n"); - $sql='SELECT * FROM '.$table; + $sql='SELECT * FROM '.$table; // Here SELECT * is allowed because we don't have definition of columns to take $result = $db->query($sql); while($row = $db->fetch_row($result)) { diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index ecdebb1c27a..24f01827e15 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -7928,7 +7928,7 @@ function getDictvalue($tablename, $field, $id, $checkentity = false, $rowidfield if (!isset($dictvalues[$tablename])) { $dictvalues[$tablename] = array(); - $sql = 'SELECT * FROM '.$tablename.' WHERE 1'; + $sql = 'SELECT * FROM '.$tablename.' WHERE 1'; // Here select * is allowed as it is generic code and we don't have list of fields if ($checkentity) $sql.= ' AND entity IN (0,'.getEntity($tablename).')'; $resql = $db->query($sql); diff --git a/htdocs/expensereport/export_csv.php b/htdocs/expensereport/export_csv.php deleted file mode 100644 index d3f2518a53c..00000000000 --- a/htdocs/expensereport/export_csv.php +++ /dev/null @@ -1,195 +0,0 @@ - - * Copyright (C) 2018 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 - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/** - * \file htdocs/expensereport/index.php - * \ingroup expensereport - * \brief Page list of expenses - */ - -require '../main.inc.php'; -require_once DOL_DOCUMENT_ROOT . '/core/class/html.formfile.class.php'; -require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php'; - -// Load translation files required by the page -$langs->loadlangs(array('users', 'trips')); - -if(!$user->rights->expensereport->export_csv) { - accessforbidden(); - exit(); -} - -// Security check -$socid = $_GET["socid"]?$_GET["socid"]:''; -if ($user->societe_id) $socid=$user->societe_id; -$result = restrictedArea($user, 'expensereport', '', ''); - -$req = "SELECT * FROM ".MAIN_DB_PREFIX."rights_def WHERE id = '178'"; -$result = $db->query($req); -$num = $db->num_rows($result); - -if($num < 1) { - $insert = "INSERT INTO ".MAIN_DB_PREFIX."rights_def ("; - $insert.= "`id` ,"; - $insert.= "`libelle` ,"; - $insert.= "`module` ,"; - $insert.= "`entity` ,"; - $insert.= "`perms` ,"; - $insert.= "`subperms` ,"; - $insert.= "`type` ,"; - $insert.= "`bydefault`"; - $insert.= ")"; - $insert.= "VALUES ("; - $insert.= "'178', 'Exporter les notes de frais au format CSV', 'expensereport', '1', 'export_csv', NULL , 'r', '0'"; - $insert.= ")"; - - $req = $db->query($insert); -} - - -/* - * View - */ - -llxHeader(); - -print load_fiche_titre($langs->trans("ExportTripCSV")); - -print '
'; - -print '
'; -print ''; -print '

Choisir le mois à exporter : '; - -$year = date('Y', time()); -$month = date('m', time()); - -print ' '; - -print ' '; - -print ''; -print '

'; -print '
'."\n"; - -// Si c'est une action -if (isset($_POST['action'])) -{ - if($_POST['action'] == 'export') - { - $dateselected = $_POST['annee'].'-'.$_POST['mois']; - - //var_dump($conf->expensereport->dir_output.'/export/'); - if (!file_exists($conf->expensereport->dir_output.'/export/')) - { - dol_mkdir($conf->expensereport->dir_output.'/export/'); - } - - $dir = $conf->expensereport->dir_output.'/export/expensereport-'.$dateselected.'.csv'; - $outputlangs = $langs; - $outputlangs->charset_output = 'UTF-8'; - - $sql = "SELECT d.rowid, d.ref, d.total_ht, d.total_tva, d.total_ttc"; - $sql.= " FROM ".MAIN_DB_PREFIX."expensereport as d"; - $sql.= ' AND d.entity IN ('.getEntity('expensereport').')'; - $sql.= " ORDER BY d.rowid"; - - $result = $db->query($sql); - $num = $db->num_rows($result); - if ($num) - { - $open = fopen($dir, "w+"); - - $ligne = "ID, Référence, ----, Date paiement, Montant HT, TVA, Montant TTC\n"; - for ($i = 0; $i < $num; $i++) - { - $ligne.= "----, ----, ----, ----, ----, ----, ----\n"; - $objet = $db->fetch_object($result); - $objet->total_ht = number_format($objet->total_ht, 2); - $objet->total_tva = number_format($objet->total_tva, 2); - $objet->total_ttc = number_format($objet->total_ttc, 2); - $objet->ref = trim($objet->ref); - $ligne.= "{$objet->rowid}, {$objet->ref}, ----, {$objet->total_ht}, {$objet->total_tva}, {$objet->total_ttc}\n"; - - $ligne.= "--->, Ligne, Type, Description, ----, ----, ----\n"; - - - $sql2 = "SELECT de.rowid, t.label as libelle, de.comments, de.total_ht, de.total_tva, de.total_ttc"; - $sql2.= " FROM ".MAIN_DB_PREFIX."expensereport_det as de,"; - $sql2.= " ".MAIN_DB_PREFIX."c_type_fees as t"; - $sql2.= " WHERE de.fk_c_type_fees = t.id"; - $sql2.= " AND de.fk_expensereport = '".$objet->rowid."'"; - $sql2.= " ORDER BY de.date"; - - $result2 = $db->query($sql2); - $num2 = $db->num_rows($result2); - - if($num2) { - for ($a = 0; $a < $num2; $a++) - { - $objet2 = $db->fetch_object($result2); - $objet2->total_ht = number_format($objet2->total_ht, 2); - $objet2->total_tva = number_format($objet2->total_tva, 2); - $objet2->total_ttc = number_format($objet2->total_ttc, 2); - $objet2->comments = str_replace(',', ';', $objet2->comments); - $objet2->comments = str_replace("\r\n", ' ', $objet2->comments); - $objet2->comments = str_replace("\n", ' ', $objet2->comments); - - $ligne.= "--->, {$objet2->rowid}, {$objet2->libelle}, {$objet2->comments}, {$objet2->total_ht}, {$objet2->total_tva}, {$objet2->total_ttc}\n"; - } - } - } - - $ligne = $outputlangs->convToOutputCharset($ligne); - - fwrite($open, $ligne); - fclose($open); - - print 'Télécharger le fichier expensereport-'.$dateselected.'.csv'; - } else { - print ''.$langs->trans('NoTripsToExportCSV').''; - } - } -} - -print '
'; - -// End of page -llxFooter(); -$db->close(); diff --git a/htdocs/install/lib/repair.lib.php b/htdocs/install/lib/repair.lib.php index 98eac2437fa..dc6544fc2be 100644 --- a/htdocs/install/lib/repair.lib.php +++ b/htdocs/install/lib/repair.lib.php @@ -72,7 +72,7 @@ function checkLinkedElements($sourcetype, $targettype) $out = $langs->trans('SourceType').': '.$sourcetype.' => '.$langs->trans('TargetType').': '.$targettype.' '; - $sql = 'SELECT * FROM '.MAIN_DB_PREFIX .'element_element'; + $sql = 'SELECT rowid, fk_source, fk_target FROM '.MAIN_DB_PREFIX .'element_element'; $sql.= ' WHERE sourcetype="'.$sourcetype.'" AND targettype="'.$targettype.'"'; $resql=$db->query($sql); if ($resql) diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index b6c20cde620..098aef21144 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -60,17 +60,9 @@ print '
'; if ($conf->use_javascript_ajax) { -/* $sql = "SELECT p.fk_opp_status as opp_status, cls.code, COUNT(p.rowid) as nb, SUM(p.opp_amount) as opp_amount, SUM(p.opp_amount * p.opp_percent) as ponderated_opp_amount"; - $sql.= " FROM ".MAIN_DB_PREFIX."mrp_xxx as p"; - $sql.= " WHERE p.entity IN (".getEntity('project').")"; - $sql.= " AND p.fk_opp_status = cls.rowid"; - $sql.= " AND p.fk_statut = 1"; // Opend projects only - if ($mine || empty($user->rights->projet->all->lire)) $sql.= " AND p.rowid IN (".$projectsListId.")"; - if ($socid) $sql.= " AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = ".$socid.")"; - $sql.= " GROUP BY p.fk_opp_status, cls.code"; - */ - $sql= "SELECT * FROM ".MAIN_DB_PREFIX."bom_bom WHERE 1 = 2"; - + $sql= "SELECT COUNT(t.rowid) as nb, status"; + $sql.=" FROM ".MAIN_DB_PREFIX."mrp_mo as t"; + $sql.=" GROUP BY t.status"; $resql = $db->query($sql); if ($resql) @@ -79,11 +71,6 @@ if ($conf->use_javascript_ajax) $i = 0; $totalnb=0; - $totaloppnb=0; - $totalamount=0; - $ponderated_opp_amount=0; - $valsnb=array(); - $valsamount=array(); $dataseries=array(); // -1=Canceled, 0=Draft, 1=Validated, (2=Accepted/On process not managed for customer orders), 3=Closed (Sent/Received, billed or not) while ($i < $num) @@ -93,50 +80,18 @@ if ($conf->use_javascript_ajax) { //if ($row[1]!=-1 && ($row[1]!=3 || $row[2]!=1)) { - $valsnb[$obj->opp_status]=$obj->nb; - $valsamount[$obj->opp_status]=$obj->opp_amount; + $dataseries[$obj->status]=$obj->nb; $totalnb+=$obj->nb; - if ($obj->opp_status) $totaloppnb+=$obj->nb; - if (! in_array($obj->code, array('WON', 'LOST'))) - { - $totalamount+=$obj->opp_amount; - $ponderated_opp_amount+=$obj->ponderated_opp_amount; - } } - $total+=$row[0]; } $i++; } $db->free($resql); - $ponderated_opp_amount = $ponderated_opp_amount / 100; - print '
'; print ''; print ''."\n"; - /*$listofstatus=array_keys($listofoppstatus); - foreach ($listofstatus as $status) - { - $labelstatus = ''; - - $code = dol_getIdFromCode($db, $status, 'c_lead_status', 'rowid', 'code'); - if ($code) $labelstatus = $langs->trans("OppStatus".$code); - if (empty($labelstatus)) $labelstatus=$listofopplabel[$status]; - - //$labelstatus .= ' ('.$langs->trans("Coeff").': '.price2num($listofoppstatus[$status]).')'; - //$labelstatus .= ' - '.price2num($listofoppstatus[$status]).'%'; - - $dataseries[]=array($labelstatus, (isset($valsamount[$status])?(float) $valsamount[$status]:0)); - if (! $conf->use_javascript_ajax) - { - - print ''; - print ''; - print ''; - print "\n"; - } - }*/ - if ($conf->use_javascript_ajax) + if ($conf->use_javascript_ajax) { print ''; } - //if ($totalinprocess != $total) print "
'.$langs->trans("Statistics").'
'.$labelstatus.''.price((isset($valsamount[$status])?(float) $valsamount[$status]:0), 0, '', 1, -1, -1, $conf->currency).'
'; @@ -149,11 +104,10 @@ if ($conf->use_javascript_ajax) $dolgraph->setWidth('100%'); $dolgraph->SetHeight(180); $dolgraph->draw('idgraphstatus'); - print $dolgraph->show($totaloppnb?0:1); + print $dolgraph->show($totalnb?0:1); print '
"; print "
"; diff --git a/htdocs/product/admin/price_rules.php b/htdocs/product/admin/price_rules.php index 885af18d63d..ea3f8b5e663 100644 --- a/htdocs/product/admin/price_rules.php +++ b/htdocs/product/admin/price_rules.php @@ -97,7 +97,8 @@ if ($_POST) { * View */ -$sql = "SELECT * FROM ".MAIN_DB_PREFIX."product_pricerules"; +$sql = "SELECT rowid, level, fk_level, var_percent, var_min_percent"; +$sql.= " FROM ".MAIN_DB_PREFIX."product_pricerules"; $query = $db->query($sql); $rules = array(); diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 3574b4d29a2..69228b5efb5 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -45,18 +45,31 @@ $term = GETPOST('term', 'alpha'); if ($action=="getProducts") { $object = new Categorie($db); $result=$object->fetch($category); - $prods = $object->getObjectsInCateg("product"); - echo json_encode($prods); + if ($result) + { + $prods = $object->getObjectsInCateg("product"); + echo json_encode($prods); + } + else + { + echo 'Failed to load category with id='.$category; + } } elseif ($action=="search" && $term != '') { - $sql = 'SELECT * FROM '.MAIN_DB_PREFIX.'product'; + $sql = 'SELECT rowid, ref, label, tosell, tobuy FROM '.MAIN_DB_PREFIX.'product'; $sql.= ' WHERE entity IN ('.getEntity('product').')'; $sql.= ' AND tosell = 1'; $sql.= natural_search(array('ref','label','barcode'), $term); $resql = $db->query($sql); - $rows = array(); - while ($row = $db->fetch_array($resql)) { - $rows[] = $row; - } - echo json_encode($rows); + if ($resql) + { + $rows = array(); + while ($row = $db->fetch_object($resql)) { + $rows[] = $row; + } + echo json_encode($rows); + } + else { + echo 'Failed to search product : '.$db->lasterror(); + } } diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index 37258da056c..eec367b1af0 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -254,7 +254,7 @@ function LoadProducts(position, issubcat) { idata=0; //product data counter $.getJSON('/takepos/ajax/ajax.php?action=getProducts&category='+currentcat, function(data) { console.log("Call ajax.php (in LoadProducts) to get Products of category "+currentcat+" then loop on result to fill image thumbs"); - + console.log(data); while (ishow < maxproduct) { //console.log("ishow"+ishow+" idata="+idata); console.log(data[idata]); From f999430fd33eb9479b1b2f504410dc57e79779df Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 15:24:52 +0200 Subject: [PATCH 447/980] FIX Clean the + of categories on the product view only in POS module --- htdocs/takepos/takepos.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index eec367b1af0..d3a0f466fc8 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -419,7 +419,7 @@ function New() { function Search2() { console.log("Search2 Call ajax search to replace products"); pageproducts=0; - jQuery(".catwatermark").hide(); + jQuery(".wrapper2 .catwatermark").hide(); $.getJSON('/takepos/ajax/ajax.php?action=search&term='+$('#search').val(), function(data) { for (i = 0; i < ; i++) { if (typeof (data[i]) == "undefined"){ From 4fb0d03500b6932c1dac73c64a7e75da8e6f111f Mon Sep 17 00:00:00 2001 From: c3do Date: Sun, 20 Oct 2019 15:25:18 +0200 Subject: [PATCH 448/980] NEW Add API to get Country by code and iso --- htdocs/api/class/api_setup.class.php | 57 ++++++++++++++++++++++++++-- htdocs/core/class/ccountry.class.php | 26 +++++++------ 2 files changed, 68 insertions(+), 15 deletions(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 60f5a54eeba..4048ec62f8a 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -197,13 +197,64 @@ class Setup extends DolibarrApi * @throws RestException */ public function getCountryByID($id, $lang = '') + { + return $this->_fetchCcountry($id, '', '', $lang); + } + + /** + * Get country by Code. + * + * @param string $code Code of country + * @param string $lang Code of the language the name of the + * country must be translated to + * @return array Array of cleaned object properties + * + * @url GET dictionary/countries/byCode/{code} + * + * @throws RestException + */ + public function getCountryByCode($code, $lang = '') + { + return $this->_fetchCcountry('', $code, '', $lang); + } + + /** + * Get country by Iso. + * + * @param string $iso ISO of country + * @param string $lang Code of the language the name of the + * country must be translated to + * @return array Array of cleaned object properties + * + * @url GET dictionary/countries/byISO/{iso} + * + * @throws RestException + */ + public function getCountryByISO($iso, $lang = '') + { + return $this->_fetchCcountry('', '', $iso, $lang); + } + + /** + * Get country. + * + * @param int $id ID of country + * @param string $code Code of country + * @param string $iso ISO of country + * @param string $lang Code of the language the name of the + * country must be translated to + * @return array Array of cleaned object properties + * + * @throws RestException + */ + private function _fetchCcountry($id, $code = '', $iso = '', $lang = '') { $country = new Ccountry($this->db); - if ($country->fetch($id) < 0) { + $result = $country->fetch($id, $code, $iso); + if ($result < 0) { throw new RestException(503, 'Error when retrieving country : '.$country->error); - } - elseif ($country->fetch($id) == 0) { + } elseif ($result == 0) { throw new RestException(404, 'country not found'); } diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php index 84defbfd163..edbceec50fd 100644 --- a/htdocs/core/class/ccountry.class.php +++ b/htdocs/core/class/ccountry.class.php @@ -163,22 +163,24 @@ class Ccountry // extends CommonObject /** * Load object in memory from database * - * @param int $id Id object - * @param string $code Code + * @param int $id Id object + * @param string $code Code + * @param string $code_iso Code ISO * @return int >0 if OK, 0 if not found, <0 if KO */ - public function fetch($id, $code = '') + public function fetch($id, $code = '', $code_iso = '') { global $langs; - $sql = "SELECT"; - $sql.= " t.rowid,"; - $sql.= " t.code,"; - $sql.= " t.code_iso,"; - $sql.= " t.label,"; - $sql.= " t.active"; - $sql.= " FROM ".MAIN_DB_PREFIX."c_country as t"; - if ($id) $sql.= " WHERE t.rowid = ".$id; - elseif ($code) $sql.= " WHERE t.code = '".$this->db->escape($code)."'"; + $sql = "SELECT"; + $sql.= " t.rowid,"; + $sql.= " t.code,"; + $sql.= " t.code_iso,"; + $sql.= " t.label,"; + $sql.= " t.active"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_country as t"; + if ($id) $sql.= " WHERE t.rowid = ".$id; + elseif ($code) $sql.= " WHERE t.code = '".$this->db->escape($code)."'"; + elseif ($code_iso) $sql.= " WHERE t.code_iso = '".$this->db->escape($code_iso)."'"; dol_syslog(get_class($this)."::fetch", LOG_DEBUG); $resql=$this->db->query($sql); From e224170dc2691a679ff3a63be65b8c9b7d904c16 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 15:24:52 +0200 Subject: [PATCH 449/980] FIX Clean the + of categories on the product view only in POS module Conflicts: htdocs/takepos/takepos.php --- htdocs/takepos/takepos.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index 311bcd00d8b..57ecf5d776b 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -408,9 +408,9 @@ function New() { function Search2() { console.log("Search2"); pageproducts=0; - jQuery(".catwatermark").hide(); - $.getJSON('./ajax.php?action=search&term='+$('#search').val(), function(data) { - for (i = 0; i < 30; i++) { + jQuery(".wrapper2 .catwatermark").hide(); + $.getJSON('/takepos/ajax/ajax.php?action=search&term='+$('#search').val(), function(data) { + for (i = 0; i < ; i++) { if (typeof (data[i]) == "undefined"){ $("#prodesc"+i).text(""); $("#proimg"+i).attr("src","genimg/empty.png"); From 45d64e468fad3e244f2e2d26331154e6f78dff03 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 15:29:15 +0200 Subject: [PATCH 450/980] Fix regression --- htdocs/takepos/takepos.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index 57ecf5d776b..339bbaa0643 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -409,7 +409,7 @@ function Search2() { console.log("Search2"); pageproducts=0; jQuery(".wrapper2 .catwatermark").hide(); - $.getJSON('/takepos/ajax/ajax.php?action=search&term='+$('#search').val(), function(data) { + $.getJSON('./ajax.php?action=search&term='+$('#search').val(), function(data) { for (i = 0; i < ; i++) { if (typeof (data[i]) == "undefined"){ $("#prodesc"+i).text(""); From 05352a62e546c4fdd358361c5f6a0491fa6dd97b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 15:37:20 +0200 Subject: [PATCH 451/980] css --- htdocs/takepos/css/pos.css | 2 +- htdocs/takepos/invoice.php | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/htdocs/takepos/css/pos.css b/htdocs/takepos/css/pos.css index 91c29d73ac1..db3ddfdfa34 100644 --- a/htdocs/takepos/css/pos.css +++ b/htdocs/takepos/css/pos.css @@ -132,7 +132,7 @@ table.postablelines tr td { div.paymentbordline { width:50%; - background-color:#666; + background-color:#888; border-radius: 8px; margin-bottom: 4px; } diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index fad734591ed..6a67d9d03f9 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -658,7 +658,7 @@ if ($placeid > 0) { //In Phone basic layout hide some content depends situation if ($_SESSION["basiclayout"]==1 && $mobilepage!="invoice" && $action!="order") return; - + if (is_array($invoice->lines) && count($invoice->lines)) { $tmplines = array_reverse($invoice->lines); @@ -718,10 +718,12 @@ print ''; if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takeposterminal"]}) { - $soc = new Societe($db); + $constforcompanyid='CASHDESK_ID_THIRDPARTY'.$_SESSION["takeposterminal"]; + $soc = new Societe($db); if ($invoice->socid > 0) $soc->fetch($invoice->socid); - else $soc->fetch($conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takeposterminal"]}); - print '

'; + else $soc->fetch($conf->global->$constforcompanyid); + print ''; + print '

'; print $langs->trans("Customer").': '.$soc->name; $constantforkey = 'CASHDESK_NO_DECREASE_STOCK'.$_SESSION["takeposterminal"]; @@ -732,15 +734,13 @@ if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takep $warehouse->fetch($conf->global->$constantforkey); print '
'.$langs->trans("Warehouse").': '.$warehouse->ref; } - print '

'; // Module Adherent if (! empty($conf->adherent->enabled)) { require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; $langs->load("members"); - print '

'; - print $langs->trans("Member").': '; + print '
'.$langs->trans("Member").': '; $adh=new Adherent($db); $result=$adh->fetch('', '', $invoice->socid); if ($result > 0) @@ -765,8 +765,8 @@ if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takep { print ''.$langs->trans("ThirdpartyNotLinkedToMember").''; } - print '

'; } + print '

'; } if ($action == "search") From bc6fb547982051002650a092e137782530e478c2 Mon Sep 17 00:00:00 2001 From: c3do Date: Sun, 20 Oct 2019 15:56:27 +0200 Subject: [PATCH 452/980] New Add API to get List of Shipment methods --- htdocs/api/class/api_setup.class.php | 60 ++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 4048ec62f8a..6223744955e 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -371,6 +371,66 @@ class Setup extends DolibarrApi } } + /** + * Get the list of shipment methods. + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Number of items per page + * @param int $page Page number (starting from zero) + * @param int $active Payment term is active or not {@min 0} {@max 1} + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)" + * + * @return array List of shipment methods + * + * @url GET dictionary/shipment_methods + * + * @throws RestException + */ + public function getListOfShipmentMethods($sortfield = "rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $active = 1, $sqlfilters = '') + { + $list = array(); + $sql = "SELECT t.code, t.libelle, t.description, t.tracking"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_shipment_mode as t"; + $sql.= " WHERE t.active = ".$active; + // Add sql filters + if ($sqlfilters) + { + if (! DolibarrApi::_checkFilters($sqlfilters)) + { + throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); + } + $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; + $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } + + + $sql.= $this->db->order($sortfield, $sortorder); + + if ($limit) { + if ($page < 0) { + $page = 0; + } + $offset = $limit * $page; + + $sql .= $this->db->plimit($limit, $offset); + } + + $result = $this->db->query($sql); + + if ($result) { + $num = $this->db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + for ($i = 0; $i < $min; $i++) { + $list[] = $this->db->fetch_object($result); + } + } else { + throw new RestException(503, 'Error when retrieving list of shipment methods : '.$this->db->lasterror()); + } + + return $list; + } + /** * Get the list of events types. * From e909d16880d25313f6abe633b48ff48eaa0827f4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Oct 2019 15:57:32 +0200 Subject: [PATCH 453/980] Doc --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index d1c8b22d96f..f2add251e28 100644 --- a/ChangeLog +++ b/ChangeLog @@ -17,6 +17,7 @@ FIX: #12041 FIX: #12054 FIX: #12083 FIX: #12088 +FIX: Clean the + of categories on the product view only in POS module FIX: access to public interface when origin email has an alias. FIX: Alias name is not into the email recipient label. FIX: allow standalone credit note even if no invoice From 0ede8175880bf9dc51922d3d35cd115d081e76a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 20 Oct 2019 16:56:47 +0200 Subject: [PATCH 454/980] do not ignore lines with mix od tabs and spaces --- dev/setup/codesniffer/ruleset.xml | 2 +- .../interface_20_modWorkflow_WorkflowManager.class.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 32c44ce91e4..8c01eea6d99 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -201,7 +201,7 @@ - + diff --git a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php index f9d33495764..2e14d0c7f47 100644 --- a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php +++ b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php @@ -131,7 +131,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); $ret = 0; - + // First classify billed the order to allow the proposal classify process if (! empty($conf->commande->enabled) && ! empty($conf->workflow->enabled) && ! empty($conf->global->WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER)) { @@ -175,7 +175,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers } } } - + return $ret; } From 86f22c45633f9c0ac4dd5297889099a253b06b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 20 Oct 2019 17:17:22 +0200 Subject: [PATCH 455/980] do not ignore lines with mix od tabs and spaces --- dev/initdata/generate-invoice.php | 2 +- dev/initdata/generate-proposal.php | 4 ++-- htdocs/bom/bom_list.php | 6 +++--- htdocs/bom/class/api_boms.class.php | 2 +- htdocs/comm/action/class/actioncomm.class.php | 2 +- htdocs/comm/mailing/info.php | 8 ++++---- htdocs/compta/deplacement/info.php | 6 +++--- htdocs/compta/paiement/class/cpaiement.class.php | 2 +- htdocs/core/class/html.form.class.php | 2 +- htdocs/core/class/lessc.class.php | 2 +- htdocs/core/class/smtps.class.php | 4 ++-- htdocs/core/class/translate.class.php | 2 +- htdocs/core/lib/invoice.lib.php | 4 ++-- htdocs/core/lib/loan.lib.php | 2 +- htdocs/core/lib/member.lib.php | 2 +- htdocs/core/lib/memory.lib.php | 8 ++++---- htdocs/core/menus/standard/auguria_menu.php | 6 +++--- htdocs/core/menus/standard/eldy_menu.php | 2 +- htdocs/core/modules/modProduct.class.php | 2 +- htdocs/core/modules/propale/doc/pdf_cyan.modules.php | 2 +- .../core/tpl/extrafields_list_print_fields.tpl.php | 2 +- htdocs/hrm/admin/admin_hrm.php | 12 ++++++------ htdocs/product/class/product.class.php | 4 ++-- htdocs/product/inventory/list.php | 6 +++--- htdocs/product/stats/facture.php | 2 +- htdocs/societe/class/api_thirdparties.class.php | 6 +++--- htdocs/takepos/admin/receipt.php | 4 ++-- test/phpunit/BOMTest.php | 2 +- 28 files changed, 54 insertions(+), 54 deletions(-) diff --git a/dev/initdata/generate-invoice.php b/dev/initdata/generate-invoice.php index bfdda2896a1..0c754b1c874 100755 --- a/dev/initdata/generate-invoice.php +++ b/dev/initdata/generate-invoice.php @@ -152,7 +152,7 @@ while ($i < GEN_NUMBER_FACTURE && $result >= 0) $fuser = new User($db); $fuser->fetch(mt_rand(1, 2)); $fuser->getRights(); - + $result=$object->create($fuser); if ($result >= 0) { diff --git a/dev/initdata/generate-proposal.php b/dev/initdata/generate-proposal.php index 30c9471a281..ad8cf6025bb 100755 --- a/dev/initdata/generate-proposal.php +++ b/dev/initdata/generate-proposal.php @@ -176,7 +176,7 @@ while ($i < GEN_NUMBER_PROPAL && $result >= 0) $fuser = new User($db); $fuser->fetch(mt_rand(1, 2)); $fuser->getRights(); - + $object->contactid = $contids[$socids[$socid]][0]; $object->socid = $socids[$socid]; $object->datep = $dates[mt_rand(1, count($dates)-1)]; @@ -200,7 +200,7 @@ while ($i < GEN_NUMBER_PROPAL && $result >= 0) } $xnbp++; } - + $result=$object->valid($fuser); if ($result > 0) { diff --git a/htdocs/bom/bom_list.php b/htdocs/bom/bom_list.php index 46473d52ddb..6e192a06545 100644 --- a/htdocs/bom/bom_list.php +++ b/htdocs/bom/bom_list.php @@ -454,12 +454,12 @@ while ($i < min($num, $limit)) $cssforfield=(empty($val['css'])?'':$val['css']); if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; elseif ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; - + if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; elseif ($key == 'ref') $cssforfield.=($cssforfield?' ':'').'nowrap'; - + if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $key != 'status') $cssforfield.=($cssforfield?' ':'').'right'; - + if (! empty($arrayfields['t.'.$key]['checked'])) { print ''; diff --git a/htdocs/bom/class/api_boms.class.php b/htdocs/bom/class/api_boms.class.php index f6b25d0cca7..471fb4f2cce 100644 --- a/htdocs/bom/class/api_boms.class.php +++ b/htdocs/bom/class/api_boms.class.php @@ -100,7 +100,7 @@ class Boms extends DolibarrApi $obj_ret = array(); $tmpobject = new BOM($db); - + $socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : ''; $restrictonsocid = 0; // Set to 1 if there is a field socid in table of object diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 1314463cd2a..871ec6b9ed2 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1543,7 +1543,7 @@ class ActionComm extends CommonObject $event['uid']='dolibarragenda-'.$this->db->database_name.'-'.$obj->id."@".$_SERVER["SERVER_NAME"]; $event['type']=$type; $datestart=$this->db->jdate($obj->datep)-(empty($conf->global->AGENDA_EXPORT_FIX_TZ)?0:($conf->global->AGENDA_EXPORT_FIX_TZ*3600)); - + // fix for -> Warning: A non-numeric value encountered if(is_numeric($this->db->jdate($obj->datep2))) { diff --git a/htdocs/comm/mailing/info.php b/htdocs/comm/mailing/info.php index 0dbc6fc07ab..7b270e460c8 100644 --- a/htdocs/comm/mailing/info.php +++ b/htdocs/comm/mailing/info.php @@ -58,11 +58,11 @@ if ($object->fetch($id) >= 0) $morehtmlright=''; if ($object->statut == 2) $morehtmlright.=' ('.$object->countNbOfTargets('alreadysent').'/'.$object->nbemail.') '; - + dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', '', '', 0, '', $morehtmlright); - + print '

'; - + //print '
'; $object->user_creation=$object->user_creat; $object->date_creation=$object->date_creat; @@ -70,7 +70,7 @@ if ($object->fetch($id) >= 0) $object->date_validation=$object->date_valid; dol_print_object_info($object, 0); //print '
'; - + dol_fiche_end(); } diff --git a/htdocs/compta/deplacement/info.php b/htdocs/compta/deplacement/info.php index a0accd11a87..510675265a0 100644 --- a/htdocs/compta/deplacement/info.php +++ b/htdocs/compta/deplacement/info.php @@ -47,15 +47,15 @@ if ($id) $object = new Deplacement($db); $object->fetch($id); $object->info($id); - + $head = trip_prepare_head($object); - + dol_fiche_head($head, 'info', $langs->trans("TripCard"), 0, 'trip'); print '
'; dol_print_object_info($object); print '
'; - + print '
'; } diff --git a/htdocs/compta/paiement/class/cpaiement.class.php b/htdocs/compta/paiement/class/cpaiement.class.php index a4e115dfdb0..37614f7e36e 100644 --- a/htdocs/compta/paiement/class/cpaiement.class.php +++ b/htdocs/compta/paiement/class/cpaiement.class.php @@ -34,7 +34,7 @@ class Cpaiement * @var string Id to identify managed objects */ public $element = 'cpaiement'; - + /** * @var string Name of table without prefix where object is stored */ diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 61558434105..6d26e585435 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5614,7 +5614,7 @@ class Form }; var d = new Date();"; } - + // Generate the date part, depending on the use or not of the javascript calendar if($addnowlink==1) // server time expressed in user time setup { diff --git a/htdocs/core/class/lessc.class.php b/htdocs/core/class/lessc.class.php index 396991b6612..2da23504440 100644 --- a/htdocs/core/class/lessc.class.php +++ b/htdocs/core/class/lessc.class.php @@ -3900,4 +3900,4 @@ class lessc_formatter_lessjs extends lessc_formatter_classic { public $breakSelectors = true; public $assignSeparator = ": "; public $selectorSeparator = ","; -} \ No newline at end of file +} diff --git a/htdocs/core/class/smtps.class.php b/htdocs/core/class/smtps.class.php index cd6f64c3242..d950f92b3c2 100644 --- a/htdocs/core/class/smtps.class.php +++ b/htdocs/core/class/smtps.class.php @@ -496,10 +496,10 @@ class SMTPs return $_retVal; } } - + // Default authentication method is LOGIN if (empty($conf->global->MAIL_SMTP_AUTH_TYPE)) $conf->global->MAIL_SMTP_AUTH_TYPE = 'LOGIN'; - + // Send Authentication to Server // Check for errors along the way switch ($conf->global->MAIL_SMTP_AUTH_TYPE) { diff --git a/htdocs/core/class/translate.class.php b/htdocs/core/class/translate.class.php index 3780ab35b06..f3bc9daf24b 100644 --- a/htdocs/core/class/translate.class.php +++ b/htdocs/core/class/translate.class.php @@ -781,7 +781,7 @@ class Translate if (preg_match('/^[a-z]+_[A-Z]+/i', $dir)) { $this->load("languages"); - + if (! empty($conf->global->MAIN_LANGUAGES_ALLOWED) && ! in_array($dir, explode(',', $conf->global->MAIN_LANGUAGES_ALLOWED)) ) continue; if ($usecode == 2) diff --git a/htdocs/core/lib/invoice.lib.php b/htdocs/core/lib/invoice.lib.php index 739e115efb1..0b06d21c95d 100644 --- a/htdocs/core/lib/invoice.lib.php +++ b/htdocs/core/lib/invoice.lib.php @@ -136,14 +136,14 @@ function invoice_admin_prepare_head() $head[$h][1] = $langs->trans("Payments"); $head[$h][2] = 'payment'; $h++; - + if($conf->global->INVOICE_USE_SITUATION){ $head[$h][0] = DOL_URL_ROOT.'/admin/facture_situation.php'; $head[$h][1] = $langs->trans("InvoiceSituation"); $head[$h][2] = 'situation'; $h++; } - + // Show more tabs from modules // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab diff --git a/htdocs/core/lib/loan.lib.php b/htdocs/core/lib/loan.lib.php index bc7b0034b35..4d47c79e6da 100644 --- a/htdocs/core/lib/loan.lib.php +++ b/htdocs/core/lib/loan.lib.php @@ -40,7 +40,7 @@ function loan_prepare_head($object) $head[$tab][1] = $langs->trans('Card'); $head[$tab][2] = 'card'; $tab++; - + $head[$tab][0] = DOL_URL_ROOT.'/loan/schedule.php?loanid='.$object->id; $head[$tab][1] = $langs->trans('FinancialCommitment'); $head[$tab][2] = 'FinancialCommitment'; diff --git a/htdocs/core/lib/member.lib.php b/htdocs/core/lib/member.lib.php index 93146738f66..6068246341e 100644 --- a/htdocs/core/lib/member.lib.php +++ b/htdocs/core/lib/member.lib.php @@ -127,7 +127,7 @@ function member_type_prepare_head(AdherentType $object) $head[$h][1] = $langs->trans("Card"); $head[$h][2] = 'card'; $h++; - + // Multilangs if (! empty($conf->global->MAIN_MULTILANGS)) { diff --git a/htdocs/core/lib/memory.lib.php b/htdocs/core/lib/memory.lib.php index d353cca0097..22e660b2e22 100644 --- a/htdocs/core/lib/memory.lib.php +++ b/htdocs/core/lib/memory.lib.php @@ -55,7 +55,7 @@ function dol_setcache($memoryid, $data) $result=$dolmemcache->addServer($tmparray[0], $tmparray[1]?$tmparray[1]:11211); if (! $result) return -1; } - + $memoryid=session_name().'_'.$memoryid; //$dolmemcache->setOption(Memcached::OPT_COMPRESSION, false); $dolmemcache->add($memoryid, $data); // This fails if key already exists @@ -79,7 +79,7 @@ function dol_setcache($memoryid, $data) $result=$dolmemcache->addServer($tmparray[0], $tmparray[1]?$tmparray[1]:11211); if (! $result) return -1; } - + $memoryid=session_name().'_'.$memoryid; //$dolmemcache->setOption(Memcached::OPT_COMPRESSION, false); $result=$dolmemcache->add($memoryid, $data); // This fails if key already exists @@ -122,7 +122,7 @@ function dol_getcache($memoryid) $result=$m->addServer($tmparray[0], $tmparray[1]?$tmparray[1]:11211); if (! $result) return -1; } - + $memoryid=session_name().'_'.$memoryid; //$m->setOption(Memcached::OPT_COMPRESSION, false); //print "Get memoryid=".$memoryid; @@ -149,7 +149,7 @@ function dol_getcache($memoryid) $result=$m->addServer($tmparray[0], $tmparray[1]?$tmparray[1]:11211); if (! $result) return -1; } - + $memoryid=session_name().'_'.$memoryid; //$m->setOption(Memcached::OPT_COMPRESSION, false); $data=$m->get($memoryid); diff --git a/htdocs/core/menus/standard/auguria_menu.php b/htdocs/core/menus/standard/auguria_menu.php index b3c5814240c..adee27687dd 100644 --- a/htdocs/core/menus/standard/auguria_menu.php +++ b/htdocs/core/menus/standard/auguria_menu.php @@ -113,7 +113,7 @@ class MenuManager $menuArbo->menuLoad($mainmenu, $leftmenu, $this->type_user, 'auguria', $tabMenu); $this->tabMenu=$tabMenu; //var_dump($tabMenu); - + //if ($forcemainmenu == 'all') { var_dump($this->tabMenu); exit; } } @@ -152,7 +152,7 @@ class MenuManager if ($mode == 'top') print_left_auguria_menu($this->db, $this->menu_array, $this->menu_array_after, $this->tabMenu, $this->menu, 0); if ($mode == 'left') print_auguria_menu($this->db, $this->atarget, $this->type_user, $this->tabMenu, $this->menu, 0, $mode); } - + if ($mode == 'topnb') { print_auguria_menu($this->db, $this->atarget, $this->type_user, $this->tabMenu, $this->menu, 1, $mode); @@ -327,7 +327,7 @@ class MenuManager } unset($this->menu); - + //print 'xx'.$mode; return 0; } diff --git a/htdocs/core/menus/standard/eldy_menu.php b/htdocs/core/menus/standard/eldy_menu.php index 8389db029be..089194aec2a 100644 --- a/htdocs/core/menus/standard/eldy_menu.php +++ b/htdocs/core/menus/standard/eldy_menu.php @@ -65,7 +65,7 @@ class MenuManager public function loadMenu($forcemainmenu = '', $forceleftmenu = '') { global $conf, $user, $langs; - + // On sauve en session le menu principal choisi if (isset($_GET["mainmenu"])) $_SESSION["mainmenu"]=$_GET["mainmenu"]; if (isset($_GET["idmenu"])) $_SESSION["idmenu"]=$_GET["idmenu"]; diff --git a/htdocs/core/modules/modProduct.class.php b/htdocs/core/modules/modProduct.class.php index 1db0db2e6f5..0729f4a71ef 100644 --- a/htdocs/core/modules/modProduct.class.php +++ b/htdocs/core/modules/modProduct.class.php @@ -85,7 +85,7 @@ class modProduct extends DolibarrModules $this->const[$r][3] = 'Module to control product codes'; $this->const[$r][4] = 0; $r++; - + $this->const[$r][0] = "PRODUCT_PRICE_UNIQ"; $this->const[$r][1] = "chaine"; $this->const[$r][2] = "1"; diff --git a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php index 0d4f86ca82a..319f563ad28 100644 --- a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php @@ -198,7 +198,7 @@ class pdf_cyan extends ModelePDFPropales if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1'; - + // Translations $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "propal")); diff --git a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php index 35aefb9f719..ca30eb5ae92 100644 --- a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php +++ b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php @@ -50,7 +50,7 @@ if (! empty($extrafieldsobjectkey)) // $extrafieldsobject is the $object->table_ $value = dol_eval($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key], 1); //var_dump($value); } - + print $extrafields->showOutputField($key, $value, '', $extrafieldsobjectkey); print ''; if (! $i) $totalarray['nbfield']++; diff --git a/htdocs/hrm/admin/admin_hrm.php b/htdocs/hrm/admin/admin_hrm.php index 243a1ce3222..343e6fa54e9 100644 --- a/htdocs/hrm/admin/admin_hrm.php +++ b/htdocs/hrm/admin/admin_hrm.php @@ -42,15 +42,15 @@ $list = array ( */ if ($action == 'update') { $error = 0; - + foreach ($list as $constname) { $constvalue = GETPOST($constname, 'alpha'); - + if (! dolibarr_set_const($db, $constname, $constvalue, 'chaine', 0, '', $conf->entity)) { $error ++; } } - + if (! $error) { setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { @@ -87,13 +87,13 @@ print "\n"; foreach ($list as $key) { $var = ! $var; - + print ''; - + // Param $label = $langs->trans($key); print ''; - + // Value print ''; print ''; diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 5492f760407..f526c5e3c52 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -940,11 +940,11 @@ class Product extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."product"; $sql.= " SET label = '" . $this->db->escape($this->label) ."'"; - + if ($updatetype && ($this->isProduct() || $this->isService())) { $sql.= ", fk_product_type = " . $this->type; } - + $sql.= ", ref = '" . $this->db->escape($this->ref) ."'"; $sql.= ", ref_ext = ".(! empty($this->ref_ext)?"'".$this->db->escape($this->ref_ext)."'":"null"); $sql.= ", default_vat_code = ".($this->default_vat_code ? "'".$this->db->escape($this->default_vat_code)."'" : "null"); diff --git a/htdocs/product/inventory/list.php b/htdocs/product/inventory/list.php index 59c81c83e29..0362a3767c3 100644 --- a/htdocs/product/inventory/list.php +++ b/htdocs/product/inventory/list.php @@ -440,12 +440,12 @@ while ($i < min($num, $limit)) $cssforfield=(empty($val['css'])?'':$val['css']); if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; elseif ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; - + if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; elseif ($key == 'ref') $cssforfield.=($cssforfield?' ':'').'nowrap'; - + if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $key != 'status') $cssforfield.=($cssforfield?' ':'').'right'; - + if (! empty($arrayfields['t.'.$key]['checked'])) { print ''; diff --git a/htdocs/product/stats/facture.php b/htdocs/product/stats/facture.php index 3ee0cb5de1a..d14eba99fae 100644 --- a/htdocs/product/stats/facture.php +++ b/htdocs/product/stats/facture.php @@ -234,7 +234,7 @@ if ($id > 0 || ! empty($ref)) while ($i < min($num, $limit)) { $objp = $db->fetch_object($result); - + if ($objp->type == Facture::TYPE_CREDIT_NOTE) $objp->qty=-($objp->qty); $total_ht+=$objp->total_ht; diff --git a/htdocs/societe/class/api_thirdparties.class.php b/htdocs/societe/class/api_thirdparties.class.php index 15670a2095d..1ed4916e3c9 100644 --- a/htdocs/societe/class/api_thirdparties.class.php +++ b/htdocs/societe/class/api_thirdparties.class.php @@ -72,10 +72,10 @@ class Thirdparties extends DolibarrApi * * @throws RestException */ - public function get($id) + public function get($id) { - return $this->_fetch($id); - } + return $this->_fetch($id); + } /** * Get properties of a thirdparty object by email. diff --git a/htdocs/takepos/admin/receipt.php b/htdocs/takepos/admin/receipt.php index 92333394edc..ffa4bd6d13b 100644 --- a/htdocs/takepos/admin/receipt.php +++ b/htdocs/takepos/admin/receipt.php @@ -41,12 +41,12 @@ $langs->loadLangs(array("admin", "cashdesk", "commercial")); if (GETPOST('action', 'alpha') == 'set') { $db->begin(); - + $res = dolibarr_set_const($db, "TAKEPOS_HEADER", GETPOST('TAKEPOS_HEADER', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_FOOTER", GETPOST('TAKEPOS_FOOTER', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_RECEIPT_NAME", GETPOST('TAKEPOS_RECEIPT_NAME', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_SHOW_CUSTOMER", GETPOST('TAKEPOS_SHOW_CUSTOMER', 'alpha'), 'chaine', 0, '', $conf->entity); - + dol_syslog("admin/cashdesk: level ".GETPOST('level', 'alpha')); if (! $res > 0) $error++; diff --git a/test/phpunit/BOMTest.php b/test/phpunit/BOMTest.php index b69e59c6283..41cbdd9f247 100644 --- a/test/phpunit/BOMTest.php +++ b/test/phpunit/BOMTest.php @@ -79,7 +79,7 @@ class BOMTest extends PHPUnit\Framework\TestCase { global $conf,$user,$langs,$db; $db->begin(); // This is to have all actions inside a transaction even if test launched without suite. - + print __METHOD__."\n"; } From d921b08e5cf5d5942ab1976c13a04c05323e3f7e Mon Sep 17 00:00:00 2001 From: Alfredo Altamirano Date: Sun, 20 Oct 2019 11:44:07 -0500 Subject: [PATCH 456/980] Translate documentation of translate class --- htdocs/core/class/translate.class.php | 30 +++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/htdocs/core/class/translate.class.php b/htdocs/core/class/translate.class.php index 3780ab35b06..e54de5a91d2 100644 --- a/htdocs/core/class/translate.class.php +++ b/htdocs/core/class/translate.class.php @@ -586,18 +586,18 @@ class Translate /** * Return text translated of text received as parameter (and encode it into HTML) - * Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif - * et si toujours pas trouve, il est retourne tel quel - * Les parametres de cette methode peuvent contenir de balises HTML. + * If there is no match for this text, we look in alternative file and if still not found, + * it is returned as it is + * The parameters of this method can contain HTML tags * * @param string $key Key to translate - * @param string $param1 chaine de param1 - * @param string $param2 chaine de param2 - * @param string $param3 chaine de param3 - * @param string $param4 chaine de param4 + * @param string $param1 param1 string + * @param string $param2 param2 string + * @param string $param3 param3 string + * @param string $param4 param4 string * @param int $maxsize Max length of text * @return string Translated string (encoded into HTML entities and UTF8) - */ + */ public function trans($key, $param1 = '', $param2 = '', $param3 = '', $param4 = '', $maxsize = 0) { global $conf; @@ -647,9 +647,9 @@ class Translate /** * Return translated value of a text string - * Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif - * et si toujours pas trouve, il est retourne tel quel. - * Parameters of this method must not contains any HTML tags. + * If there is no match for this text, we look in alternative file and if still not found + * it is returned as is. + * Parameters of this method must not contain any HTML tags. * * @param string $key Key to translate * @param string $param1 chaine de param1 @@ -667,9 +667,9 @@ class Translate /** * Return translated value of a text string - * Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif - * et si toujours pas trouve, il est retourne tel quel. - * No convert to encoding charset of lang object is done. + * If there is no match for this text, we look in alternative file and if still not found, + * it is returned as is. + * No conversion to encoding charset of lang object is done. * Parameters of this method must not contains any HTML tags. * * @param string $key Key to translate @@ -781,7 +781,7 @@ class Translate if (preg_match('/^[a-z]+_[A-Z]+/i', $dir)) { $this->load("languages"); - + if (! empty($conf->global->MAIN_LANGUAGES_ALLOWED) && ! in_array($dir, explode(',', $conf->global->MAIN_LANGUAGES_ALLOWED)) ) continue; if ($usecode == 2) From f2e5a235471c4cfe1adbb5375b34ad80ff200798 Mon Sep 17 00:00:00 2001 From: Alfredo Altamirano Date: Sun, 20 Oct 2019 13:47:39 -0500 Subject: [PATCH 457/980] Declaration of $soc should not be conditional --- htdocs/compta/facture/card.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index cabd2c75fa4..fe88c9ec717 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -2566,6 +2566,7 @@ $form = new Form($db); $formother = new FormOther($db); $formfile = new FormFile($db); $formmargin = new FormMargin($db); +$soc = new Societe($db); $paymentstatic=new Paiement($db); $bankaccountstatic = new Account($db); if (! empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } @@ -2586,7 +2587,6 @@ if ($action == 'create') print load_fiche_titre($langs->trans('NewBill'), '', 'invoicing'); - $soc = new Societe($db); if ($socid > 0) $res = $soc->fetch($socid); @@ -3465,7 +3465,6 @@ elseif ($id > 0 || ! empty($ref)) $result = $object->fetch_thirdparty(); - $soc = new Societe($db); $result=$soc->fetch($object->socid); if ($result < 0) dol_print_error($db); $selleruserevenustamp = $mysoc->useRevenueStamp(); From df181d1f3504815fc55f50c574f53f962379093a Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sun, 20 Oct 2019 22:01:54 +0200 Subject: [PATCH 458/980] Multiple payments in a TakePOS sale --- htdocs/takepos/invoice.php | 13 ++++++++----- htdocs/takepos/pay.php | 5 ++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 6a67d9d03f9..2068981c98d 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -165,8 +165,12 @@ if ($action == 'valid' && $user->rights->facture->creer) $constantforkey = 'CASHDESK_NO_DECREASE_STOCK'.$_SESSION["takeposterminal"]; if ($invoice->statut != Facture::STATUS_DRAFT) { - dol_syslog("Sale already validated"); - dol_htmloutput_errors($langs->trans("InvoiceIsAlreadyValidated", "TakePos"), null, 1); + //If invoice is validated but it is not fully paid is not error and make the payment + if ($invoice->getRemainToPay()>0) $res=1; + else{ + dol_syslog("Sale already validated"); + dol_htmloutput_errors($langs->trans("InvoiceIsAlreadyValidated", "TakePos"), null, 1); + } } elseif (count($invoice->lines)==0) { @@ -199,7 +203,7 @@ if ($action == 'valid' && $user->rights->facture->creer) $payment->amounts[$invoice->id] = $amountofpayment; // If user has not used change control, add total invoice payment - if ($amountofpayment == 0) $payment->amounts[$invoice->id] = $invoice->total_ttc; + if ($amountofpayment == 0) $payment->amounts[$invoice->id] = $invoice->getRemainToPay(); $payment->paiementid=$paiementid; $payment->num_payment=$invoice->ref; @@ -427,7 +431,6 @@ $sectionwithinvoicelink=''; if ($action=="valid" || $action=="history") { $sectionwithinvoicelink.=''."\n"; - $sectionwithinvoicelink.=''; $sectionwithinvoicelink.=''; $sectionwithinvoicelink.=$invoice->getNomUrl(1, '', 0, 0, '', 0, 0, -1, '_backoffice')." - "; $remaintopay = $invoice->getRemainToPay(); @@ -582,7 +585,7 @@ if ($conf->global->TAKEPOS_BAR_RESTAURANT) if ($mobilepage=="invoice" || $mobilepage=="") { print $langs->trans('TotalTTC'); print ' : ' . price($invoice->total_ttc, 1, '', 1, -1, -1, $conf->currency) . ''; - print '
' . $sectionwithinvoicelink; + print '
' . $sectionwithinvoicelink; print ''; } if ($_SESSION["basiclayout"]!=1) diff --git a/htdocs/takepos/pay.php b/htdocs/takepos/pay.php index 63bf151f40a..349c03540b2 100644 --- a/htdocs/takepos/pay.php +++ b/htdocs/takepos/pay.php @@ -172,9 +172,8 @@ else print "var received=0;"; } console.log("We click on the payment mode to pay amount = "+amountpayed); parent.$("#poslines").load("invoice.php?place=&action=valid&pay="+payment+"&amount="+amountpayed+"&invoiceid="+invoiceid, function() { - //parent.$("#poslines").scrollTop(parent.$("#poslines")[0].scrollHeight); - parent.$.colorbox.close(); - //parent.setFocusOnSearchField(); // This does not have effect + if (amountpayed > || amountpayed == || amountpayed==0 ) parent.$.colorbox.close(); + else location.reload(); }); } From b21bca17de85b4f74ffb1654e36ebdd739ab6d23 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 21 Oct 2019 00:55:52 +0200 Subject: [PATCH 459/980] Add button Save and stay when editing property of web site --- htdocs/admin/company.php | 4 ++-- htdocs/langs/en_US/main.lang | 1 + htdocs/website/index.php | 17 ++++++++++++----- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index 912995d7817..09a4e95c0ae 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -476,7 +476,7 @@ if (! empty($conf->barcode->enabled)) { } // Logo -print ''; +print ''; print '
'; print ''; print ''; @@ -493,7 +493,7 @@ print '
'; print ''; // Logo (squarred) -print ''; +print ''; print ''; + // Date invoice print ''; // Ref Product @@ -377,7 +378,13 @@ if ($result) { print ''; - print ''; + // Country + print ''; print ''; diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index a815e5b858b..730aecf9dc1 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -367,6 +367,7 @@ if ($result) { print $objp->invoice_label; print ''; + // Date invoice print ''; // Ref product @@ -387,7 +388,12 @@ if ($result) { print ''; - print ''; + print ''; print ''; From 6ebd9721daa2b4ac0f57006b8533fc302a85166b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 21 Oct 2019 03:50:57 +0200 Subject: [PATCH 462/980] FIX The Button "Automatic binding" did not use the account intracomm or export. --- htdocs/accountancy/customer/index.php | 84 ++++++++++++++++++++++++--- htdocs/accountancy/customer/list.php | 11 ++-- htdocs/accountancy/supplier/index.php | 83 ++++++++++++++++++++++++-- htdocs/accountancy/supplier/list.php | 10 ++-- 4 files changed, 165 insertions(+), 23 deletions(-) diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index f43ca801c25..c0e45916922 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -29,6 +29,7 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; // Load translation files required by the page @@ -65,6 +66,8 @@ $year_current = $year_start; // Validate History $action = GETPOST('action', 'aZ09'); +$chartaccountcode = dol_getIdFromCode($db, $conf->global->CHARTOFACCOUNTS, 'accounting_system', 'rowid', 'pcg_version'); + /* * Actions @@ -101,7 +104,7 @@ if ($action == 'validatehistory') { $db->begin(); // Now make the binding. Bind automatically only for product with a dedicated account that exists into chart of account, others need a manual bind - if ($db->type == 'pgsql') { + /*if ($db->type == 'pgsql') { $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facturedet"; $sql1 .= " SET fk_code_ventilation = accnt.rowid"; $sql1 .= " FROM " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accounting_account as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; @@ -114,16 +117,83 @@ if ($action == 'validatehistory') { $sql1 .= " WHERE fd.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS.' AND accnt.entity = '.$conf->entity; $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_sell=accnt.account_number"; $sql1 .= " AND fd.fk_code_ventilation = 0"; - } + }*/ + + // Customer Invoice lines (must be same request than into page list.php for manual binding) + $sql = "SELECT f.rowid as facid, f.ref as ref, f.datef, f.type as ftype,"; + $sql.= " l.rowid, l.fk_product, l.description, l.total_ht, l.fk_code_ventilation, l.product_type as type_l, l.tva_tx as tva_tx_line, l.vat_src_code,"; + $sql.= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type, p.accountancy_code_sell as code_sell, p.tva_tx as tva_tx_prod,"; + $sql.= " p.accountancy_code_sell_intra as code_sell_intra, p.accountancy_code_sell_export as code_sell_export,"; + $sql.= " aa.rowid as aarowid, aa2.rowid as aarowid_intra, aa3.rowid as aarowid_export,"; + $sql.= " co.code as country_code, co.label as country_label,"; + $sql.= " s.tva_intra"; + $sql.= " FROM " . MAIN_DB_PREFIX . "facture as f"; + $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "societe as s ON s.rowid = f.fk_soc"; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as co ON co.rowid = s.fk_pays "; + $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "facturedet as l ON f.rowid = l.fk_facture"; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_sell = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa2 ON p.accountancy_code_sell_intra = aa2.account_number AND aa2.active = 1 AND aa2.fk_pcg_version = '" . $chartaccountcode."' AND aa2.entity = " . $conf->entity; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa3 ON p.accountancy_code_sell_export = aa3.account_number AND aa3.active = 1 AND aa3.fk_pcg_version = '" . $chartaccountcode."' AND aa3.entity = " . $conf->entity; + $sql.= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0"; + $sql.= " AND l.product_type <= 2"; dol_syslog('htdocs/accountancy/customer/index.php'); - - $resql1 = $db->query($sql1); - if (! $resql1) { - $error ++; - $db->rollback(); + $result = $db->query($sql); + if (! $result) { + $error++; setEventMessages($db->lasterror(), null, 'errors'); } else { + $num_lines = $db->num_rows($result); + + $isSellerInEEC = isInEEC($mysoc); + + $i = 0; + while ($i < min($num_lines, 10000)) { // No more than 10000 at once + $objp = $db->fetch_object($result); + + // Search suggested account for product/service + $suggestedaccountingaccountfor = ''; + if (($objp->country_code == $mysoc->country_code) || empty($objp->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) + $objp->code_sell_p = $objp->code_sell; + $objp->aarowid_suggest = $objp->aarowid; + $suggestedaccountingaccountfor = ''; + } else { + if ($isSellerInEEC && $isBuyerInEEC) { // European intravat sale + $objp->code_sell_p = $objp->code_sell_intra; + $objp->aarowid_suggest = $objp->aarowid_intra; + $suggestedaccountingaccountfor = 'eec'; + } else { // Foreign sale + $objp->code_sell_p = $objp->code_sell_export; + $objp->aarowid_suggest = $objp->aarowid_export; + $suggestedaccountingaccountfor = 'export'; + } + } + + if ($objp->aarowid_suggest > 0) + { + $sqlupdate = "UPDATE " . MAIN_DB_PREFIX . "facturedet"; + $sqlupdate.= " SET fk_code_ventilation = ".$objp->aarowid_suggest; + $sqlupdate.= " WHERE fk_code_ventilation <= 0 AND product_type <= 2 AND rowid = ".$objp->rowid; + + $resqlupdate = $db->query($sqlupdate); + if (! $resqlupdate) + { + $error++; + setEventMessages($db->lasterror(), null, 'errors'); + break; + } + } + + $i++; + } + } + + if ($error) + { + $db->rollback(); + } + else { $db->commit(); setEventMessages($langs->trans('AutomaticBindingDone'), null, 'mesgs'); } diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index c15ace96ffc..d4cc5f59388 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -219,9 +219,9 @@ $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "societe as s ON s.rowid = f.fk_soc"; $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as co ON co.rowid = s.fk_pays "; $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "facturedet as l ON f.rowid = l.fk_facture"; $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; -$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_sell = aa.account_number AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; -$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa2 ON p.accountancy_code_sell_intra = aa2.account_number AND aa2.fk_pcg_version = '" . $chartaccountcode."' AND aa2.entity = " . $conf->entity; -$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa3 ON p.accountancy_code_sell_export = aa3.account_number AND aa3.fk_pcg_version = '" . $chartaccountcode."' AND aa3.entity = " . $conf->entity; +$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_sell = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; +$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa2 ON p.accountancy_code_sell_intra = aa2.account_number AND aa2.active = 1 AND aa2.fk_pcg_version = '" . $chartaccountcode."' AND aa2.entity = " . $conf->entity; +$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa3 ON p.accountancy_code_sell_export = aa3.account_number AND aa3.active = 1 AND aa3.fk_pcg_version = '" . $chartaccountcode."' AND aa3.entity = " . $conf->entity; $sql.= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0"; $sql.= " AND l.product_type <= 2"; // Add search filter like @@ -247,7 +247,7 @@ if (strlen(trim($search_account))) { $sql .= natural_search("aa.account_number", $search_account); } if (strlen(trim($search_vat))) { - $sql .= natural_search("l.tva_tx", $search_vat, 1); + $sql .= natural_search("l.tva_tx", price2num($search_vat), 1); } $sql.=dolSqlDateFilter('f.datef', $search_day, $search_month, $search_year); if (strlen(trim($search_country))) { @@ -406,7 +406,7 @@ if ($result) { $isSellerInEEC = isInEEC($mysoc); - while ( $i < min($num_lines, $limit) ) { + while ($i < min($num_lines, $limit)) { $objp = $db->fetch_object($result); $objp->code_sell_l = ''; @@ -518,6 +518,7 @@ if ($result) { print vatrate($objp->tva_tx_line.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')); print ''; + // Country print ''; - // Ref product + // Ref Product print ''; // Description - print ''; + // Date invoice print ''; // Ref Product @@ -389,7 +390,13 @@ if ($result) { print ''; - print ''; + // Country + print ''; print ''; diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index c4aa1316876..659d428b93b 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -380,6 +380,7 @@ if ($result) { print $objp->invoice_label; print ''; + // Date invoice print ''; // Ref product @@ -400,7 +401,12 @@ if ($result) { print ''; - print ''; + print ''; print ''; From febf9ccd0473d415819c5ccfd7832de1ba471672 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 21 Oct 2019 03:50:57 +0200 Subject: [PATCH 464/980] FIX The Button "Automatic binding" did not use the account intracomm or export. --- htdocs/accountancy/customer/index.php | 84 ++++++++++++++++++++++++--- htdocs/accountancy/customer/list.php | 11 ++-- htdocs/accountancy/supplier/index.php | 83 ++++++++++++++++++++++++-- htdocs/accountancy/supplier/list.php | 10 ++-- 4 files changed, 165 insertions(+), 23 deletions(-) diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index f063f832f54..aa3a8d691dd 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -29,6 +29,7 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; // Load translation files required by the page @@ -65,6 +66,8 @@ $year_current = $year_start; // Validate History $action = GETPOST('action', 'aZ09'); +$chartaccountcode = dol_getIdFromCode($db, $conf->global->CHARTOFACCOUNTS, 'accounting_system', 'rowid', 'pcg_version'); + /* * Actions @@ -102,7 +105,7 @@ if ($action == 'validatehistory') { $db->begin(); // Now make the binding. Bind automatically only for product with a dedicated account that exists into chart of account, others need a manual bind - if ($db->type == 'pgsql') { + /*if ($db->type == 'pgsql') { $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facturedet"; $sql1 .= " SET fk_code_ventilation = accnt.rowid"; $sql1 .= " FROM " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accounting_account as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; @@ -115,16 +118,83 @@ if ($action == 'validatehistory') { $sql1 .= " WHERE fd.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS.' AND accnt.entity = '.$conf->entity; $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_sell=accnt.account_number"; $sql1 .= " AND fd.fk_code_ventilation = 0"; - } + }*/ + + // Customer Invoice lines (must be same request than into page list.php for manual binding) + $sql = "SELECT f.rowid as facid, f.ref as ref, f.datef, f.type as ftype,"; + $sql.= " l.rowid, l.fk_product, l.description, l.total_ht, l.fk_code_ventilation, l.product_type as type_l, l.tva_tx as tva_tx_line, l.vat_src_code,"; + $sql.= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type, p.accountancy_code_sell as code_sell, p.tva_tx as tva_tx_prod,"; + $sql.= " p.accountancy_code_sell_intra as code_sell_intra, p.accountancy_code_sell_export as code_sell_export,"; + $sql.= " aa.rowid as aarowid, aa2.rowid as aarowid_intra, aa3.rowid as aarowid_export,"; + $sql.= " co.code as country_code, co.label as country_label,"; + $sql.= " s.tva_intra"; + $sql.= " FROM " . MAIN_DB_PREFIX . "facture as f"; + $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "societe as s ON s.rowid = f.fk_soc"; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as co ON co.rowid = s.fk_pays "; + $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "facturedet as l ON f.rowid = l.fk_facture"; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_sell = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa2 ON p.accountancy_code_sell_intra = aa2.account_number AND aa2.active = 1 AND aa2.fk_pcg_version = '" . $chartaccountcode."' AND aa2.entity = " . $conf->entity; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa3 ON p.accountancy_code_sell_export = aa3.account_number AND aa3.active = 1 AND aa3.fk_pcg_version = '" . $chartaccountcode."' AND aa3.entity = " . $conf->entity; + $sql.= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0"; + $sql.= " AND l.product_type <= 2"; dol_syslog('htdocs/accountancy/customer/index.php'); - - $resql1 = $db->query($sql1); - if (! $resql1) { - $error ++; - $db->rollback(); + $result = $db->query($sql); + if (! $result) { + $error++; setEventMessages($db->lasterror(), null, 'errors'); } else { + $num_lines = $db->num_rows($result); + + $isSellerInEEC = isInEEC($mysoc); + + $i = 0; + while ($i < min($num_lines, 10000)) { // No more than 10000 at once + $objp = $db->fetch_object($result); + + // Search suggested account for product/service + $suggestedaccountingaccountfor = ''; + if (($objp->country_code == $mysoc->country_code) || empty($objp->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) + $objp->code_sell_p = $objp->code_sell; + $objp->aarowid_suggest = $objp->aarowid; + $suggestedaccountingaccountfor = ''; + } else { + if ($isSellerInEEC && $isBuyerInEEC) { // European intravat sale + $objp->code_sell_p = $objp->code_sell_intra; + $objp->aarowid_suggest = $objp->aarowid_intra; + $suggestedaccountingaccountfor = 'eec'; + } else { // Foreign sale + $objp->code_sell_p = $objp->code_sell_export; + $objp->aarowid_suggest = $objp->aarowid_export; + $suggestedaccountingaccountfor = 'export'; + } + } + + if ($objp->aarowid_suggest > 0) + { + $sqlupdate = "UPDATE " . MAIN_DB_PREFIX . "facturedet"; + $sqlupdate.= " SET fk_code_ventilation = ".$objp->aarowid_suggest; + $sqlupdate.= " WHERE fk_code_ventilation <= 0 AND product_type <= 2 AND rowid = ".$objp->rowid; + + $resqlupdate = $db->query($sqlupdate); + if (! $resqlupdate) + { + $error++; + setEventMessages($db->lasterror(), null, 'errors'); + break; + } + } + + $i++; + } + } + + if ($error) + { + $db->rollback(); + } + else { $db->commit(); setEventMessages($langs->trans('AutomaticBindingDone'), null, 'mesgs'); } diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index 127f1795e19..7826d2b1faf 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -221,9 +221,9 @@ $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "societe as s ON s.rowid = f.fk_soc"; $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as co ON co.rowid = s.fk_pays "; $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "facturedet as l ON f.rowid = l.fk_facture"; $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; -$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_sell = aa.account_number AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; -$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa2 ON p.accountancy_code_sell_intra = aa2.account_number AND aa2.fk_pcg_version = '" . $chartaccountcode."' AND aa2.entity = " . $conf->entity; -$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa3 ON p.accountancy_code_sell_export = aa3.account_number AND aa3.fk_pcg_version = '" . $chartaccountcode."' AND aa3.entity = " . $conf->entity; +$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_sell = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; +$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa2 ON p.accountancy_code_sell_intra = aa2.account_number AND aa2.active = 1 AND aa2.fk_pcg_version = '" . $chartaccountcode."' AND aa2.entity = " . $conf->entity; +$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa3 ON p.accountancy_code_sell_export = aa3.account_number AND aa3.active = 1 AND aa3.fk_pcg_version = '" . $chartaccountcode."' AND aa3.entity = " . $conf->entity; $sql.= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0"; $sql.= " AND l.product_type <= 2"; // Add search filter like @@ -249,7 +249,7 @@ if (strlen(trim($search_account))) { $sql .= natural_search("aa.account_number", $search_account); } if (strlen(trim($search_vat))) { - $sql .= natural_search("l.tva_tx", $search_vat, 1); + $sql .= natural_search("l.tva_tx", price2num($search_vat), 1); } if ($search_month > 0) { @@ -420,7 +420,7 @@ if ($result) { $isSellerInEEC = isInEEC($mysoc); - while ( $i < min($num_lines, $limit) ) { + while ($i < min($num_lines, $limit)) { $objp = $db->fetch_object($result); $objp->code_sell_l = ''; @@ -532,6 +532,7 @@ if ($result) { print vatrate($objp->tva_tx_line.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')); print ''; + // Country print ''; - // Ref product + // Ref Product print ''; // Description - print ''; $texte.= ''; @@ -130,7 +130,7 @@ class mod_arctic extends ModeleNumRefFicheinter require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php'; - // On défini critere recherche compteur + // We define the search criteria of the counter $mask=$conf->global->FICHINTER_ARTIC_MASK; if (! $mask) From 3024919cd6dfcecadb3e27a54f65260f9c030a2d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 21 Oct 2019 10:25:23 +0200 Subject: [PATCH 470/980] fix phpcs --- htdocs/core/actions_massactions.inc.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index b14bc0f105e..7d8d621ff92 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -266,7 +266,6 @@ if (! $error && $massaction == 'confirm_presend') $objectobj->fetch_thirdparty(); $contactidtosend=array(); foreach ($listofobjectcontacts[$objectid] as $contactemailid => $contactemailemail) { - $emails_to_sends[] = $objectobj->thirdparty->contact_get_property($contactemailid, 'email'); if (!in_array($contactemailid, $contactidtosend)) { $contactidtosend[] = $contactemailid; From be3f0471fff7ec46a1933e82bba5358f9586943b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 21 Oct 2019 11:27:48 +0200 Subject: [PATCH 471/980] Fix phpcs --- htdocs/accountancy/supplier/index.php | 14 +++---- htdocs/mrp/ajax/ajax_bom.php | 53 +++++++++++++++++++++++++++ htdocs/takepos/ajax/ajax.php | 11 +++++- 3 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 htdocs/mrp/ajax/ajax_bom.php diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index ef720e99130..bfb6e7b02e4 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -140,13 +140,13 @@ if ($action == 'validatehistory') { setEventMessages($db->lasterror(), null, 'errors'); } else { $num_lines = $db->num_rows($result); - + $isSellerInEEC = isInEEC($mysoc); - + $i = 0; while ($i < min($num_lines, 10000)) { // No more than 10000 at once $objp = $db->fetch_object($result); - + // Search suggested account for product/service $suggestedaccountingaccountfor = ''; if (($objp->country_code == $mysoc->country_code) || empty($objp->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) @@ -168,13 +168,13 @@ if ($action == 'validatehistory') { $suggestedaccountingaccountfor = 'export'; } } - + if ($objp->aarowid_suggest > 0) { $sqlupdate = "UPDATE " . MAIN_DB_PREFIX . "facture_fourn_det"; $sqlupdate.= " SET fk_code_ventilation = ".$objp->aarowid_suggest; $sqlupdate.= " WHERE fk_code_ventilation <= 0 AND product_type <= 2 AND rowid = ".$objp->rowid; - + $resqlupdate = $db->query($sqlupdate); if (! $resqlupdate) { @@ -183,11 +183,11 @@ if ($action == 'validatehistory') { break; } } - + $i++; } } - + if ($error) { $db->rollback(); diff --git a/htdocs/mrp/ajax/ajax_bom.php b/htdocs/mrp/ajax/ajax_bom.php new file mode 100644 index 00000000000..7f5a2040403 --- /dev/null +++ b/htdocs/mrp/ajax/ajax_bom.php @@ -0,0 +1,53 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/mrp/ajax/ajax.php + * \brief Ajax search component for Mrp. It get BOM content. + */ + +//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Not disabled cause need to load personalized language +//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Not disabled cause need to load personalized language +if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); +//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); +if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); +if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); +if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); +if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); +if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); + +require '../../main.inc.php'; // Load $user and permissions +require_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php'; + +$idbom = GETPOST('idbom', 'alpha'); +$action = GETPOST('action', 'alpha'); + + +/* + * View + */ + +$object = new BOM($db); +$result=$object->fetch($idbom); +if ($result) +{ + echo json_encode($result); +} +else +{ + echo 'Failed to load category with id='.$idbom; +} diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 69228b5efb5..2a27094bb90 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -45,9 +45,18 @@ $term = GETPOST('term', 'alpha'); if ($action=="getProducts") { $object = new Categorie($db); $result=$object->fetch($category); - if ($result) + if ($result > 0) { $prods = $object->getObjectsInCateg("product"); + // Removed properties we don't need + if (is_array($prods) && count($prods) > 0) + { + foreach($prods as $prod) + { + unset($prod->fields); + unset($prod->db); + } + } echo json_encode($prods); } else From 38aa64836351d83f2d1087cfb561def8ab827d14 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 21 Oct 2019 11:38:35 +0200 Subject: [PATCH 472/980] Autofill the MO with data from BOM --- htdocs/mrp/ajax/ajax_bom.php | 7 +++++-- htdocs/mrp/mo_card.php | 32 ++++++++++++++++++++++++++------ htdocs/mrp/mo_document.php | 1 - htdocs/mrp/mo_list.php | 1 - htdocs/mrp/mo_note.php | 1 - 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/htdocs/mrp/ajax/ajax_bom.php b/htdocs/mrp/ajax/ajax_bom.php index 7f5a2040403..761a54876ee 100644 --- a/htdocs/mrp/ajax/ajax_bom.php +++ b/htdocs/mrp/ajax/ajax_bom.php @@ -43,9 +43,12 @@ $action = GETPOST('action', 'alpha'); $object = new BOM($db); $result=$object->fetch($idbom); -if ($result) +if ($result > 0) { - echo json_encode($result); + // We remove properties we don't need in answer + unset ($object->fields); + unset ($object->db); + echo json_encode($object); } else { diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php index f15b45b96e5..15a1aeff0a1 100644 --- a/htdocs/mrp/mo_card.php +++ b/htdocs/mrp/mo_card.php @@ -1,6 +1,5 @@ - * Copyright (C) ---Put here your own copyright and developer email--- * * 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 @@ -204,16 +203,37 @@ if ($action == 'create') dol_fiche_end(); - print ' + ?> - '; + '; print ''; diff --git a/htdocs/mrp/mo_document.php b/htdocs/mrp/mo_document.php index 09f34ae583e..351274de4b8 100644 --- a/htdocs/mrp/mo_document.php +++ b/htdocs/mrp/mo_document.php @@ -1,6 +1,5 @@ - * Copyright (C) ---Put here your own copyright and developer email--- * * 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 diff --git a/htdocs/mrp/mo_list.php b/htdocs/mrp/mo_list.php index 2f32058a41f..81cb781ccff 100644 --- a/htdocs/mrp/mo_list.php +++ b/htdocs/mrp/mo_list.php @@ -1,6 +1,5 @@ - * Copyright (C) ---Put here your own copyright and developer email--- * * 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 diff --git a/htdocs/mrp/mo_note.php b/htdocs/mrp/mo_note.php index a006f79a609..d7429a4da86 100644 --- a/htdocs/mrp/mo_note.php +++ b/htdocs/mrp/mo_note.php @@ -1,6 +1,5 @@ - * Copyright (C) ---Put here your own copyright and developer email--- * * 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 From 48f5970c7aea369119874fa8f903e354c6350f65 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 21 Oct 2019 14:43:39 +0200 Subject: [PATCH 473/980] Debug net measure --- htdocs/product/card.php | 74 ++++++++++++++++++++++++++--------------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 5ee8c502009..f8f64decbfa 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -73,6 +73,7 @@ $ref=GETPOST('ref', 'alpha'); $type=GETPOST('type', 'int'); $action=(GETPOST('action', 'alpha') ? GETPOST('action', 'alpha') : 'view'); $cancel=GETPOST('cancel', 'alpha'); +$backtopage = GETPOST('backtopage', 'alpha'); $confirm=GETPOST('confirm', 'alpha'); $socid=GETPOST('socid', 'int'); $duration_value = GETPOST('duration_value', 'int'); @@ -357,8 +358,18 @@ if (empty($reshook)) $categories = GETPOST('categories', 'array'); $object->setCategories($categories); - header("Location: ".$_SERVER['PHP_SELF']."?id=".$id); - exit; + if (! empty($backtopage)) + { + $backtopage = preg_replace('/--IDFORBACKTOPAGE--/', $object->id, $backtopage); // New method to autoselect project after a New on another form object creation + if (preg_match('/\?/', $backtopage)) $backtopage.='&socid='.$object->id; // Old method + header("Location: ".$backtopage); + exit; + } + else + { + header("Location: ".$_SERVER['PHP_SELF']."?id=".$id); + exit; + } } else { @@ -950,6 +961,7 @@ else print ''; if (! empty($modBarCodeProduct->code_auto)) print ''; + print ''; if ($type==1) $title=$langs->trans("NewService"); else $title=$langs->trans("NewProduct"); @@ -1070,12 +1082,6 @@ else print $form->selectarray('finished', $statutarray, GETPOST('finished', 'alpha'), 1); print ''; - // Net Measure - print ''; - // Brut Weight print ''; } + + if (! empty($conf->global->PRODUCT_ADD_NET_MEASURE)) + { + // Net Measure + print ''; + } } // Units @@ -1450,18 +1465,12 @@ else print $form->selectarray('finished', $statutarray, $object->finished); print ''; - // Net Measure - print ''; - // Brut Weight print ''; + if (empty($conf->global->PRODUCT_DISABLE_SIZE)) { // Brut Length @@ -1488,6 +1497,15 @@ else print $formproduct->selectMeasuringUnits("volume_units", "volume", $object->volume_units, 0, 2); print ''; } + + if (! empty($conf->global->PRODUCT_ADD_NET_MEASURE)) + { + // Net Measure + print ''; + } } // Units if($conf->global->PRODUCT_USE_UNITS) @@ -1863,17 +1881,6 @@ else print $object->getLibFinished(); print ''; - // Net Measure - print '\n"; + if (empty($conf->global->PRODUCT_DISABLE_SIZE)) { // Brut Length @@ -1930,6 +1938,20 @@ else } print "\n"; } + + if (! empty($conf->global->PRODUCT_ADD_NET_MEASURE)) + { + // Net Measure + print '"; -print_liste_field_titre( + print_liste_field_titre( $langs->trans("Product"), $_SERVER["PHP_SELF"], "ref", @@ -336,7 +336,7 @@ print_liste_field_titre( $sortfield, $sortorder ); -print_liste_field_titre( + print_liste_field_titre( $langs->trans('Quantity'), $_SERVER["PHP_SELF"], "qty", @@ -346,7 +346,7 @@ print_liste_field_titre( $sortfield, $sortorder ); -print_liste_field_titre( + print_liste_field_titre( $langs->trans("Percentage"), $_SERVER["PHP_SELF"], "qty", @@ -356,7 +356,7 @@ print_liste_field_titre( $sortfield, $sortorder ); -print_liste_field_titre( + print_liste_field_titre( $langs->trans('AmountHT'), $_SERVER["PHP_SELF"], "amount", @@ -366,7 +366,7 @@ print_liste_field_titre( $sortfield, $sortorder ); -print_liste_field_titre( + print_liste_field_titre( $langs->trans("AmountTTC"), $_SERVER["PHP_SELF"], "amount_ttc", @@ -376,7 +376,7 @@ print_liste_field_titre( $sortfield, $sortorder ); -print_liste_field_titre( + print_liste_field_titre( $langs->trans("Percentage"), $_SERVER["PHP_SELF"], "amount_ttc", diff --git a/htdocs/compta/stats/index.php b/htdocs/compta/stats/index.php index cf1f49ae1a8..cf28a4cd5d6 100644 --- a/htdocs/compta/stats/index.php +++ b/htdocs/compta/stats/index.php @@ -172,7 +172,7 @@ if ($modecompta == 'CREANCES-DETTES') if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2,5)"; else $sql.= " AND f.type IN (0,1,2,3,5)"; $sql.= " AND f.entity IN (".getEntity('invoice').")"; -if ($socid) $sql.= " AND f.fk_soc = ".$socid; + if ($socid) $sql.= " AND f.fk_soc = ".$socid; } elseif ($modecompta=="RECETTES-DEPENSES") { @@ -187,7 +187,7 @@ elseif ($modecompta=="RECETTES-DEPENSES") $sql.= " WHERE p.rowid = pf.fk_paiement"; $sql.= " AND pf.fk_facture = f.rowid"; $sql.= " AND f.entity IN (".getEntity('invoice').")"; -if ($socid) $sql.= " AND f.fk_soc = ".$socid; + if ($socid) $sql.= " AND f.fk_soc = ".$socid; } elseif ($modecompta=="BOOKKEEPING") { diff --git a/htdocs/contact/canvas/default/tpl/contactcard_edit.tpl.php b/htdocs/contact/canvas/default/tpl/contactcard_edit.tpl.php index 921535bf20f..35772ee6f34 100644 --- a/htdocs/contact/canvas/default/tpl/contactcard_edit.tpl.php +++ b/htdocs/contact/canvas/default/tpl/contactcard_edit.tpl.php @@ -135,13 +135,15 @@ echo $this->control->tpl['ajax_selectcountry']; -control->tpl['contact_element'])) { ?> -control->tpl['contact_element'] as $element) { ?> - - - - - +control->tpl['contact_element'])) { + foreach ($this->control->tpl['contact_element'] as $element) { + print ''; + print ''; + print ''; + print ''; + } +} ?> diff --git a/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php b/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php index a9ccf9bff3d..d7cfe53b0bc 100644 --- a/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php +++ b/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php @@ -24,17 +24,14 @@ if (empty($conf) || ! is_object($conf)) $contact = $GLOBALS['objcanvas']->control->object; -?> - -control->tpl['showhead']; ?> +print "\n"; +echo $this->control->tpl['showhead']; -control->tpl['error'], $this->control->tpl['errors']); -?> -control->tpl['action_create_user'])) echo $this->control->tpl['action_create_user']; ?> -control->tpl['action_delete'])) echo $this->control->tpl['action_delete']; ?> +if (! empty($this->control->tpl['action_create_user'])) echo $this->control->tpl['action_create_user']; +if (! empty($this->control->tpl['action_delete'])) echo $this->control->tpl['action_delete']; ?>
'; print ''; print ''; diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 04f45f8de4b..656f6fb7a28 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -169,6 +169,7 @@ ToValidate=To validate NotValidated=Not validated Save=Save SaveAs=Save As +SaveAndStay=Save and stay TestConnection=Test connection ToClone=Clone ConfirmClone=Choose data you want to clone: diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 1eff07edb39..52dae7ba666 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -1236,12 +1236,18 @@ if ($action == 'updatecss') setEventMessages($langs->trans("Saved"), null, 'mesgs'); } - $action='preview'; - - if ($backtopage) + if (! GETPOSTISSET('updateandstay')) // If we click on "Save And Stay", we don not make the redirect { - header("Location: ".$backtopage); - exit; + $action='preview'; + if ($backtopage) + { + header("Location: ".$backtopage); + exit; + } + } + else + { + $action = 'editcss'; } } } @@ -2105,6 +2111,7 @@ if (! GETPOST('hide_websitemenu')) if (in_array($action, array('editcss','editmenu','file_manager','replacesite','replacesiteconfirm'))) { + if ($action == 'editcss' && $action != 'file_manager' && $action != 'replacesite' && $action != 'replacesiteconfirm') print ''; if (preg_match('/^create/', $action) && $action != 'file_manager' && $action != 'replacesite' && $action != 'replacesiteconfirm') print ''; if (preg_match('/^edit/', $action) && $action != 'file_manager' && $action != 'replacesite' && $action != 'replacesiteconfirm') print ''; if ($action != 'preview') print ''; From 0c5fbdf29d8571d41fabbef9f2fa4cd73b2c2e50 Mon Sep 17 00:00:00 2001 From: Alfredo Altamirano Date: Sun, 20 Oct 2019 19:18:39 -0500 Subject: [PATCH 460/980] Translate french documentation --- htdocs/societe/class/societe.class.php | 108 ++++++++++++------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 2b4ae2bb7a0..c999c9016f4 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -821,7 +821,7 @@ class Societe extends CommonObject * Update parameters of third party * * @param int $id Id of company (deprecated, use 0 here and call update on an object loaded by a fetch) - * @param User $user Utilisateur qui demande la mise a jour + * @param User $user User who requests the update * @param int $call_trigger 0=no, 1=yes * @param int $allowmodcodeclient Inclut modif code client et code compta * @param int $allowmodcodefournisseur Inclut modif code fournisseur et code compta fournisseur @@ -1638,13 +1638,13 @@ class Societe extends CommonObject return 0; } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Definit la societe comme un client + * Defines the company as a customer * - * @param float $remise Valeur en % de la remise - * @param string $note Note/Motif de modification de la remise - * @param User $user Utilisateur qui definie la remise + * @param float $remise Value in % of the discount + * @param string $note Note/Reason for changing the discount + * @param User $user User who sets the discount * @return int <0 if KO, >0 if OK */ public function set_remise_client($remise, $note, User $user) @@ -1652,7 +1652,7 @@ class Societe extends CommonObject // phpcs:enable global $conf, $langs; - // Nettoyage parametres + // Parameter cleaning $note=trim($note); if (! $note) { @@ -1668,7 +1668,7 @@ class Societe extends CommonObject $now=dol_now(); - // Positionne remise courante + // Position current discount $sql = "UPDATE ".MAIN_DB_PREFIX."societe "; $sql.= " SET remise_client = '".$this->db->escape($remise)."'"; $sql.= " WHERE rowid = " . $this->id; @@ -1680,7 +1680,7 @@ class Societe extends CommonObject return -1; } - // Ecrit trace dans historique des remises + // Writes trace in discount history $sql = "INSERT INTO ".MAIN_DB_PREFIX."societe_remise"; $sql.= " (entity, datec, fk_soc, remise_client, note, fk_user_author)"; $sql.= " VALUES (".$conf->entity.", '".$this->db->idate($now)."', ".$this->id.", '".$this->db->escape($remise)."',"; @@ -1701,13 +1701,13 @@ class Societe extends CommonObject } } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Definit la societe comme un client + * Defines the company as a customer * - * @param float $remise Valeur en % de la remise - * @param string $note Note/Motif de modification de la remise - * @param User $user Utilisateur qui definie la remise + * @param float $remise Value in % of the discount + * @param string $note Note/Reason for changing the discount + * @param User $user User who sets the discount * @return int <0 if KO, >0 if OK */ public function set_remise_supplier($remise, $note, User $user) @@ -1715,7 +1715,7 @@ class Societe extends CommonObject // phpcs:enable global $conf, $langs; - // Nettoyage parametres + // Parameter cleaning $note=trim($note); if (! $note) { @@ -1731,7 +1731,7 @@ class Societe extends CommonObject $now=dol_now(); - // Positionne remise courante + // Position current discount $sql = "UPDATE ".MAIN_DB_PREFIX."societe "; $sql.= " SET remise_supplier = '".$this->db->escape($remise)."'"; $sql.= " WHERE rowid = " . $this->id; @@ -1743,7 +1743,7 @@ class Societe extends CommonObject return -1; } - // Ecrit trace dans historique des remises + // Writes trace in discount history $sql = "INSERT INTO ".MAIN_DB_PREFIX."societe_remise_supplier"; $sql.= " (entity, datec, fk_soc, remise_supplier, note, fk_user_author)"; $sql.= " VALUES (".$conf->entity.", '".$this->db->idate($now)."', ".$this->id.", '".$this->db->escape($remise)."',"; @@ -1827,10 +1827,10 @@ class Societe extends CommonObject } /** - * Renvoie montant TTC des reductions/avoirs en cours disponibles de la societe + * Returns amount of included taxes of the current discounts/credits available from the company * - * @param User $user Filtre sur un user auteur des remises - * @param string $filter Filtre autre + * @param User $user Filter on a user author of discounts + * @param string $filter Other filter * @param integer $maxvalue Filter on max value for discount * @param int $discount_type 0 => customer discount, 1 => supplier discount * @return int <0 if KO, Credit note amount otherwise @@ -2264,13 +2264,13 @@ class Societe extends CommonObject return $this->LibStatut($this->status, $mode); } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoi le libelle d'un statut donne + * Return the label of a given status * - * @param int $statut Id statut + * @param int $statut Status id * @param int $mode 0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto, 6=Long label + Picto - * @return string Libelle du statut + * @return string Status label */ public function LibStatut($statut, $mode = 0) { @@ -2429,11 +2429,11 @@ class Societe extends CommonObject } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie la liste des contacts de cette societe + * Returns the contact list of this company * - * @return array tableau des contacts + * @return array array of contacts */ public function contact_array() { @@ -2463,11 +2463,11 @@ class Societe extends CommonObject return $contacts; } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie la liste des contacts de cette societe + * Returns the contact list of this company * - * @return array $contacts tableau des contacts + * @return array $contacts array of contacts */ public function contact_array_objects() { @@ -2608,9 +2608,9 @@ class Societe extends CommonObject } } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Attribut un code client a partir du module de controle des codes. + * Assigns a customer code from the code control module. * Return value is stored into this->code_client * * @param Societe $objsoc Object thirdparty @@ -2640,9 +2640,9 @@ class Societe extends CommonObject } } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Attribut un code fournisseur a partir du module de controle des codes. + * Assigns a vendor code from the code control module. * Return value is stored into this->code_fournisseur * * @param Societe $objsoc Object thirdparty @@ -2671,10 +2671,10 @@ class Societe extends CommonObject } } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Verifie si un code client est modifiable en fonction des parametres - * du module de controle des codes. + * Check if a client code is editable based on the parameters of the + * code control module. * * @return int 0=No, 1=Yes */ @@ -2708,9 +2708,9 @@ class Societe extends CommonObject } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Verifie si un code fournisseur est modifiable dans configuration du module de controle des codes + * Check if a vendor code is editable in the code control module configuration * * @return int 0=No, 1=Yes */ @@ -2818,11 +2818,11 @@ class Societe extends CommonObject } } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie un code compta, suivant le module de code compta. - * Peut etre identique a celui saisit ou genere automatiquement. - * A ce jour seule la generation automatique est implementee + * Returns an accounting code, following the accounting code module. + * May be identical to the one entered or generated automatically. + * To date only the automatic generation is implemented * * @param string $type Type of thirdparty ('customer' or 'supplier') * @return string Code compta si ok, 0 si aucun, <0 si ko @@ -2847,7 +2847,7 @@ class Societe extends CommonObject $classname = $conf->global->SOCIETE_CODECOMPTA_ADDON; $mod = new $classname; - // Defini code compta dans $mod->code + // Set code count in $mod->code $result = $mod->get_code($this->db, $this, $type); if ($type == 'customer') $this->code_compta = $mod->code; @@ -2999,9 +2999,9 @@ class Societe extends CommonObject else return false; } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Verifie la validite d'un identifiant professionnel en fonction du pays de la societe (siren, siret, ...) + * Check the validity of a professional identifier according to the country of the company (siren, siret, ...) * * @param int $idprof 1,2,3,4 (Exemple: 1=siren,2=siret,3=naf,4=rcs/rm) * @param Societe $soc Objet societe @@ -3017,7 +3017,7 @@ class Societe extends CommonObject if (! empty($conf->global->MAIN_DISABLEPROFIDRULES)) return 1; - // Verifie SIREN si pays FR + // Check SIREN if country FR if ($idprof == 1 && $soc->country_code == 'FR') { $chaine=trim($this->idprof1); @@ -3207,11 +3207,11 @@ class Societe extends CommonObject return ''; } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Indique si la societe a des projets + * Indicates if the company has projects * - * @return bool true si la societe a des projets, false sinon + * @return bool true if the company has projects, false otherwise */ public function has_projects() { @@ -3313,9 +3313,9 @@ class Societe extends CommonObject return isInEEC($this); } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Charge la liste des categories fournisseurs + * Load the list of provider categories * * @return int 0 if success, <> 0 if error */ @@ -3704,11 +3704,11 @@ class Societe extends CommonObject } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Set prospect level * - * @param User $user Utilisateur qui definie la remise + * @param User $user User who sets the discount * @return int <0 if KO, >0 if OK * @deprecated Use update function instead */ From 9b1385ee8687163218f78cfb40921be2f575693a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 21 Oct 2019 03:37:44 +0200 Subject: [PATCH 461/980] FIX If country not defined keep value empty --- htdocs/accountancy/customer/lines.php | 9 ++++++++- htdocs/accountancy/supplier/lines.php | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index 3385eb99b0e..6a5196288e2 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -358,6 +358,7 @@ if ($result) { // Ref Invoice print '' . $facture_static->getNomUrl(1) . '' . dol_print_date($db->jdate($objp->datef), 'day') . '' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . '' . $langs->trans("Country".$objp->country_code) .' ('.$objp->country_code.')'; + if ($objp->country_code) + { + print $langs->trans("Country".$objp->country_code) .' ('.$objp->country_code.')'; + } + print '' . $objp->tva_intra . '' . dol_print_date($db->jdate($objp->datef), 'day') . '' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . '' . $langs->trans("Country".$objp->country_code) .' ('.$objp->country_code.')'; + if ($objp->country_code) + { + print $langs->trans("Country".$objp->country_code) .' ('.$objp->country_code.')'; + } + print '' . $objp->tva_intra . ''; $labelcountry=($objp->country_code && ($langs->trans("Country".$objp->country_code)!="Country".$objp->country_code))?$langs->trans("Country".$objp->country_code):$objp->country_label; print $labelcountry; diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index faa48ac9176..ef720e99130 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -27,6 +27,7 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.facture.class.php'; // Load translation files required by the page @@ -63,6 +64,7 @@ $year_current = $year_start; // Validate History $action = GETPOST('action', 'aZ09'); +$chartaccountcode = dol_getIdFromCode($db, $conf->global->CHARTOFACCOUNTS, 'accounting_system', 'rowid', 'pcg_version'); /* @@ -99,7 +101,7 @@ if ($action == 'validatehistory') { $db->begin(); // Now make the binding. Bind automatically only for product with a dedicated account that exists into chart of account, others need a manual bind - if ($db->type == 'pgsql') { + /*if ($db->type == 'pgsql') { $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facture_fourn_det"; $sql1 .= " SET fk_code_ventilation = accnt.rowid"; $sql1 .= " FROM " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accounting_account as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; @@ -112,16 +114,85 @@ if ($action == 'validatehistory') { $sql1 .= " WHERE fd.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS.' AND accnt.entity = '.$conf->entity; $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_buy=accnt.account_number"; $sql1 .= " AND fd.fk_code_ventilation = 0"; - } + }*/ + + // Supplier Invoice Lines (must be same request than into page list.php for manual binding) + $sql = "SELECT f.rowid as facid, f.ref, f.ref_supplier, f.libelle as invoice_label, f.datef, f.type as ftype,"; + $sql.= " l.rowid, l.fk_product, l.description, l.total_ht, l.fk_code_ventilation, l.product_type as type_l, l.tva_tx as tva_tx_line, l.vat_src_code,"; + $sql.= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type, p.accountancy_code_buy as code_buy, p.tva_tx as tva_tx_prod,"; + $sql.= " aa.rowid as aarowid,"; + $sql.= " co.code as country_code, co.label as country_label,"; + $sql.= " s.tva_intra"; + $sql.= " FROM " . MAIN_DB_PREFIX . "facture_fourn as f"; + $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "societe as s ON s.rowid = f.fk_soc"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as co ON co.rowid = s.fk_pays "; + $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "facture_fourn_det as l ON f.rowid = l.fk_facture_fourn"; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_buy = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; + $sql.= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0"; + $sql.= " AND l.product_type <= 2"; dol_syslog('htdocs/accountancy/supplier/index.php'); - $resql1 = $db->query($sql1); - if (! $resql1) { - $error ++; - $db->rollback(); + $result = $db->query($sql); + if (! $result) { + $error++; setEventMessages($db->lasterror(), null, 'errors'); } else { + $num_lines = $db->num_rows($result); + + $isSellerInEEC = isInEEC($mysoc); + + $i = 0; + while ($i < min($num_lines, 10000)) { // No more than 10000 at once + $objp = $db->fetch_object($result); + + // Search suggested account for product/service + $suggestedaccountingaccountfor = ''; + if (($objp->country_code == $mysoc->country_code) || empty($objp->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) + $objp->code_buy_p = $objp->code_buy; + $objp->aarowid_suggest = $objp->aarowid; + $suggestedaccountingaccountfor = ''; + } else { + if ($isSellerInEEC && $isBuyerInEEC) { // European intravat sale + //$objp->code_buy_p = $objp->code_buy_intra; + $objp->code_buy_p = $objp->code_buy; + //$objp->aarowid_suggest = $objp->aarowid_intra; + $objp->aarowid_suggest = $objp->aarowid; + $suggestedaccountingaccountfor = 'eec'; + } else { // Foreign sale + //$objp->code_buy_p = $objp->code_buy_export; + $objp->code_buy_p = $objp->code_buy; + //$objp->aarowid_suggest = $objp->aarowid_export; + $objp->aarowid_suggest = $objp->aarowid; + $suggestedaccountingaccountfor = 'export'; + } + } + + if ($objp->aarowid_suggest > 0) + { + $sqlupdate = "UPDATE " . MAIN_DB_PREFIX . "facture_fourn_det"; + $sqlupdate.= " SET fk_code_ventilation = ".$objp->aarowid_suggest; + $sqlupdate.= " WHERE fk_code_ventilation <= 0 AND product_type <= 2 AND rowid = ".$objp->rowid; + + $resqlupdate = $db->query($sqlupdate); + if (! $resqlupdate) + { + $error++; + setEventMessages($db->lasterror(), null, 'errors'); + break; + } + } + + $i++; + } + } + + if ($error) + { + $db->rollback(); + } + else { $db->commit(); setEventMessages($langs->trans('AutomaticBindingDone'), null, 'mesgs'); } diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index f43749f6958..3c61b7a0608 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -222,7 +222,7 @@ $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "societe as s ON s.rowid = f.fk_soc"; $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as co ON co.rowid = s.fk_pays "; $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "facture_fourn_det as l ON f.rowid = l.fk_facture_fourn"; $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; -$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_buy = aa.account_number AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; +$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_buy = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; $sql.= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0"; $sql.= " AND l.product_type <= 2"; // Add search filter like @@ -307,8 +307,8 @@ if ($result) { $arrayofselected=is_array($toselect)?$toselect:array(); $param=''; - if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; - if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); if ($search_lineid) $param.='&search_lineid='.urlencode($search_lineid); if ($search_day) $param.='&search_day='.urlencode($search_day); if ($search_month) $param.='&search_month='.urlencode($search_month); @@ -463,7 +463,7 @@ if ($result) { print '' . dol_print_date($db->jdate($objp->datef), 'day') . ''; if ($product_static->id > 0) print $product_static->getNomUrl(1); @@ -471,7 +471,7 @@ if ($result) { print ''; + print ''; $text = dolGetFirstLineOfText(dol_string_nohtmltag($objp->description)); $trunclength = empty($conf->global->ACCOUNTING_LENGTH_DESCRIPTION) ? 32 : $conf->global->ACCOUNTING_LENGTH_DESCRIPTION; print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description); From 776bfabfc4a15a8faa78093104bfe7a80dfa3a9b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 21 Oct 2019 03:37:44 +0200 Subject: [PATCH 463/980] FIX If country not defined keep value empty --- htdocs/accountancy/customer/lines.php | 9 ++++++++- htdocs/accountancy/supplier/lines.php | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index 0e7047b84de..3da2c129e30 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -370,6 +370,7 @@ if ($result) { // Ref Invoice print '' . $facture_static->getNomUrl(1) . '' . dol_print_date($db->jdate($objp->datef), 'day') . '' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . '' . $langs->trans("Country".$objp->country_code) .' ('.$objp->country_code.')'; + if ($objp->country_code) + { + print $langs->trans("Country".$objp->country_code) .' ('.$objp->country_code.')'; + } + print '' . $objp->tva_intra . '' . dol_print_date($db->jdate($objp->datef), 'day') . '' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . '' . $langs->trans("Country".$objp->country_code) .' ('.$objp->country_code.')'; + if ($objp->country_code) + { + print $langs->trans("Country".$objp->country_code) .' ('.$objp->country_code.')'; + } + print '' . $objp->tva_intra . ''; $labelcountry=($objp->country_code && ($langs->trans("Country".$objp->country_code)!="Country".$objp->country_code))?$langs->trans("Country".$objp->country_code):$objp->country_label; print $labelcountry; diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index bc632118da7..f1bf4377f42 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -27,6 +27,7 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.facture.class.php'; // Load translation files required by the page @@ -63,6 +64,7 @@ $year_current = $year_start; // Validate History $action = GETPOST('action', 'aZ09'); +$chartaccountcode = dol_getIdFromCode($db, $conf->global->CHARTOFACCOUNTS, 'accounting_system', 'rowid', 'pcg_version'); /* @@ -100,7 +102,7 @@ if ($action == 'validatehistory') { $db->begin(); // Now make the binding. Bind automatically only for product with a dedicated account that exists into chart of account, others need a manual bind - if ($db->type == 'pgsql') { + /*if ($db->type == 'pgsql') { $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facture_fourn_det"; $sql1 .= " SET fk_code_ventilation = accnt.rowid"; $sql1 .= " FROM " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accounting_account as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; @@ -113,16 +115,85 @@ if ($action == 'validatehistory') { $sql1 .= " WHERE fd.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS.' AND accnt.entity = '.$conf->entity; $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_buy=accnt.account_number"; $sql1 .= " AND fd.fk_code_ventilation = 0"; - } + }*/ + + // Supplier Invoice Lines (must be same request than into page list.php for manual binding) + $sql = "SELECT f.rowid as facid, f.ref, f.ref_supplier, f.libelle as invoice_label, f.datef, f.type as ftype,"; + $sql.= " l.rowid, l.fk_product, l.description, l.total_ht, l.fk_code_ventilation, l.product_type as type_l, l.tva_tx as tva_tx_line, l.vat_src_code,"; + $sql.= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type, p.accountancy_code_buy as code_buy, p.tva_tx as tva_tx_prod,"; + $sql.= " aa.rowid as aarowid,"; + $sql.= " co.code as country_code, co.label as country_label,"; + $sql.= " s.tva_intra"; + $sql.= " FROM " . MAIN_DB_PREFIX . "facture_fourn as f"; + $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "societe as s ON s.rowid = f.fk_soc"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as co ON co.rowid = s.fk_pays "; + $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "facture_fourn_det as l ON f.rowid = l.fk_facture_fourn"; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; + $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_buy = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; + $sql.= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0"; + $sql.= " AND l.product_type <= 2"; dol_syslog('htdocs/accountancy/supplier/index.php'); - $resql1 = $db->query($sql1); - if (! $resql1) { - $error ++; - $db->rollback(); + $result = $db->query($sql); + if (! $result) { + $error++; setEventMessages($db->lasterror(), null, 'errors'); } else { + $num_lines = $db->num_rows($result); + + $isSellerInEEC = isInEEC($mysoc); + + $i = 0; + while ($i < min($num_lines, 10000)) { // No more than 10000 at once + $objp = $db->fetch_object($result); + + // Search suggested account for product/service + $suggestedaccountingaccountfor = ''; + if (($objp->country_code == $mysoc->country_code) || empty($objp->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) + $objp->code_buy_p = $objp->code_buy; + $objp->aarowid_suggest = $objp->aarowid; + $suggestedaccountingaccountfor = ''; + } else { + if ($isSellerInEEC && $isBuyerInEEC) { // European intravat sale + //$objp->code_buy_p = $objp->code_buy_intra; + $objp->code_buy_p = $objp->code_buy; + //$objp->aarowid_suggest = $objp->aarowid_intra; + $objp->aarowid_suggest = $objp->aarowid; + $suggestedaccountingaccountfor = 'eec'; + } else { // Foreign sale + //$objp->code_buy_p = $objp->code_buy_export; + $objp->code_buy_p = $objp->code_buy; + //$objp->aarowid_suggest = $objp->aarowid_export; + $objp->aarowid_suggest = $objp->aarowid; + $suggestedaccountingaccountfor = 'export'; + } + } + + if ($objp->aarowid_suggest > 0) + { + $sqlupdate = "UPDATE " . MAIN_DB_PREFIX . "facture_fourn_det"; + $sqlupdate.= " SET fk_code_ventilation = ".$objp->aarowid_suggest; + $sqlupdate.= " WHERE fk_code_ventilation <= 0 AND product_type <= 2 AND rowid = ".$objp->rowid; + + $resqlupdate = $db->query($sqlupdate); + if (! $resqlupdate) + { + $error++; + setEventMessages($db->lasterror(), null, 'errors'); + break; + } + } + + $i++; + } + } + + if ($error) + { + $db->rollback(); + } + else { $db->commit(); setEventMessages($langs->trans('AutomaticBindingDone'), null, 'mesgs'); } diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index d7bfdcc5db3..879b708d32e 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -224,7 +224,7 @@ $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "societe as s ON s.rowid = f.fk_soc"; $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as co ON co.rowid = s.fk_pays "; $sql.= " INNER JOIN " . MAIN_DB_PREFIX . "facture_fourn_det as l ON f.rowid = l.fk_facture_fourn"; $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; -$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_buy = aa.account_number AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; +$sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON p.accountancy_code_buy = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '" . $chartaccountcode."' AND aa.entity = " . $conf->entity; $sql.= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0"; $sql.= " AND l.product_type <= 2"; // Add search filter like @@ -321,8 +321,8 @@ if ($result) { $arrayofselected=is_array($toselect)?$toselect:array(); $param=''; - if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; - if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); if ($search_lineid) $param.='&search_lineid='.urlencode($search_lineid); if ($search_day) $param.='&search_day='.urlencode($search_day); if ($search_month) $param.='&search_month='.urlencode($search_month); @@ -477,7 +477,7 @@ if ($result) { print '' . dol_print_date($db->jdate($objp->datef), 'day') . ''; if ($product_static->id > 0) print $product_static->getNomUrl(1); @@ -485,7 +485,7 @@ if ($result) { print ''; + print ''; $text = dolGetFirstLineOfText(dol_string_nohtmltag($objp->description)); $trunclength = empty($conf->global->ACCOUNTING_LENGTH_DESCRIPTION) ? 32 : $conf->global->ACCOUNTING_LENGTH_DESCRIPTION; print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description); From 6a55aedf594f8bd0a7e33a783805b07dd3c13937 Mon Sep 17 00:00:00 2001 From: dolibarr95 <24292300+dolibarr95@users.noreply.github.com> Date: Mon, 21 Oct 2019 08:46:07 +0200 Subject: [PATCH 465/980] Create file. List of parcels details related to an expedition. --- .../mysql/tables/llx_expedition_package.sql | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 htdocs/install/mysql/tables/llx_expedition_package.sql diff --git a/htdocs/install/mysql/tables/llx_expedition_package.sql b/htdocs/install/mysql/tables/llx_expedition_package.sql new file mode 100644 index 00000000000..b897e2ab312 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_expedition_package.sql @@ -0,0 +1,18 @@ +--List of parcels details related to an expedition +create table llx_expedition_package +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + fk_expedition integer NOT NULL, + description varchar(255), --Description of goods in the package (required by the custom) + value double(24,8) DEFAULT 0,--Value (Price of the content, for insurance & custom) + fk_parcel_type integer, -- Type or package, linked to llx_c_shipment_parcel_type (eg: 1=enveloppe, 2=package, 3=palette, 4=other) + height float, -- height + width float, -- width + size float, -- depth + size_units integer, -- unit of all sizes (height, width, depth) + weight float, -- weight + weight_units integer, -- unit of weight + dangerous_goods smallint DEFAULT 0, -- 0 = no dangerous goods or 1 = Explosives, 2 = Flammable Gases, 3 = Flammable Liquids, 4 = Flammable solids, 5 = Oxidizing, 6 = Toxic & Infectious, 7 = Radioactive, 8 = Corrosives, 9 = Miscellaneous (see https://en.wikipedia.org/wiki/Dangerous_goods). I'm not sure if just register 0 (no) or 1 (yes) is enough. + tail_lift smallint DEFAULT 0, -- 0 = no tail lift required to load/unload package(s), 1 = a tail lift is required to load/unload package(s). Sometime tail lift load can be different than tail lift delivery so maybe adding a new table line. + rang integer DEFAULT 0 +)ENGINE=innodb; From 16bd837dc7403c403cfcea671487a8165d6a70ae Mon Sep 17 00:00:00 2001 From: dolibarr95 <24292300+dolibarr95@users.noreply.github.com> Date: Mon, 21 Oct 2019 08:54:59 +0200 Subject: [PATCH 466/980] create file Dictionary of package type --- htdocs/install/mysql/tables/llx_c_shipment_package_type | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 htdocs/install/mysql/tables/llx_c_shipment_package_type diff --git a/htdocs/install/mysql/tables/llx_c_shipment_package_type b/htdocs/install/mysql/tables/llx_c_shipment_package_type new file mode 100644 index 00000000000..e510352eba2 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_c_shipment_package_type @@ -0,0 +1,9 @@ +--Dictionary of package type +create table llx_c_shipment_package_type +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + label varchar(50) NOT NULL, -- Short name + description varchar(255), -- Description + active integer DEFAULT 1 NOT NULL, -- Active or not + entity integer DEFAULT 1 NOT NULL -- Multi company id +)ENGINE=innodb; From c2357405445977d00db6039fd080decf158ec797 Mon Sep 17 00:00:00 2001 From: dolibarr95 <24292300+dolibarr95@users.noreply.github.com> Date: Mon, 21 Oct 2019 08:58:13 +0200 Subject: [PATCH 467/980] parcel to package --- htdocs/install/mysql/tables/llx_expedition_package.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/tables/llx_expedition_package.sql b/htdocs/install/mysql/tables/llx_expedition_package.sql index b897e2ab312..2f8d97a26a9 100644 --- a/htdocs/install/mysql/tables/llx_expedition_package.sql +++ b/htdocs/install/mysql/tables/llx_expedition_package.sql @@ -5,7 +5,7 @@ create table llx_expedition_package fk_expedition integer NOT NULL, description varchar(255), --Description of goods in the package (required by the custom) value double(24,8) DEFAULT 0,--Value (Price of the content, for insurance & custom) - fk_parcel_type integer, -- Type or package, linked to llx_c_shipment_parcel_type (eg: 1=enveloppe, 2=package, 3=palette, 4=other) + fk_package_type integer, -- Type or package, linked to llx_c_shipment_parcel_type (eg: 1=enveloppe, 2=package, 3=palette, 4=other) height float, -- height width float, -- width size float, -- depth From db22cdb8ea86bd6312ddbd7dfa042ee2704bd37b Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Mon, 21 Oct 2019 09:43:34 +0200 Subject: [PATCH 468/980] internationalization --- .../core/modules/fichinter/doc/pdf_soleil.modules.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php index 623f67ddd72..ac59960cf59 100644 --- a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php +++ b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php @@ -25,7 +25,7 @@ /** * \file htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php * \ingroup ficheinter - * \brief Fichier de la classe permettant de generer les fiches d'intervention au modele Soleil + * \brief File of Class to build interventions documents with model Soleil */ require_once DOL_DOCUMENT_ROOT.'/core/modules/fichinter/modules_fichinter.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; @@ -142,7 +142,7 @@ class pdf_soleil extends ModelePDFFicheinter $this->option_condreg = 0; // Display payment terms $this->option_codeproduitservice = 0; // Display product-service code $this->option_multilang = 1; // Available in several languages - $this->option_draft_watermark = 1; //Support add of a watermark on drafts + $this->option_draft_watermark = 1; // Support add of a watermark on drafts // Get source company $this->emetteur=$mysoc; @@ -266,7 +266,7 @@ class pdf_soleil extends ModelePDFFicheinter $tab_height = 130; $tab_height_newpage = 150; - // Affiche notes + // Display notes $notetoshow=empty($object->note_public)?'':$object->note_public; if ($notetoshow) { @@ -394,7 +394,7 @@ class pdf_soleil extends ModelePDFFicheinter $pdf->setPage($pageposafter); $curY = $tab_top_newpage; } - $pdf->SetFont('', '', $default_font_size - 1); // On repositionne la police par defaut + $pdf->SetFont('', '', $default_font_size - 1); // We reposition the default font // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) @@ -573,7 +573,7 @@ class pdf_soleil extends ModelePDFFicheinter pdf_watermark($pdf, $outputlangs, $this->page_hauteur, $this->page_largeur, 'mm', $conf->global->FICHINTER_DRAFT_WATERMARK); } - //Prepare la suite + //Prepare next $pdf->SetTextColor(0, 0, 60); $pdf->SetFont('', 'B', $default_font_size + 3); From a0303e903a96799858858778b12fd0e859619a0c Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Mon, 21 Oct 2019 09:53:42 +0200 Subject: [PATCH 469/980] internationalization --- htdocs/core/modules/fichinter/mod_arctic.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/fichinter/mod_arctic.php b/htdocs/core/modules/fichinter/mod_arctic.php index 6ec78b1ac1a..4d8ea35e4d9 100644 --- a/htdocs/core/modules/fichinter/mod_arctic.php +++ b/htdocs/core/modules/fichinter/mod_arctic.php @@ -82,7 +82,7 @@ class mod_arctic extends ModeleNumRefFicheinter $tooltip.=$langs->trans("GenericMaskCodes4a", $langs->transnoentities("InterventionCard"), $langs->transnoentities("InterventionCard")); $tooltip.=$langs->trans("GenericMaskCodes5"); - // Parametrage du prefix + // Setting the prefix $texte.= '
'.$langs->trans("Mask").':'.$form->textwithpicto('', $tooltip, 1, 1).'
'.$langs->trans("NetMeasure").''; - print ''; - print $formproduct->selectMeasuringUnits("net_measure_units", "net_measure", GETPOSTISSET('net_measure_units')?GETPOST('net_measure_units', 'alpha'):(empty($conf->global->MAIN_WEIGHT_DEFAULT_UNIT)?0:$conf->global->MAIN_WEIGHT_DEFAULT_UNIT), 0, 2); - print '
'.$langs->trans("Weight").''; print ''; @@ -1108,6 +1114,15 @@ else print $formproduct->selectMeasuringUnits("volume_units", "volume", GETPOSTISSET('volume_units')?GETPOST('volume_units', 'alpha'):'0', 0, 2); print '
'.$langs->trans("NetMeasure").''; + print ''; + print $formproduct->selectMeasuringUnits("net_measure_units", '', GETPOSTISSET('net_measure_units')?GETPOST('net_measure_units', 'alpha'):(empty($conf->global->MAIN_WEIGHT_DEFAULT_UNIT)?0:$conf->global->MAIN_WEIGHT_DEFAULT_UNIT), ''); + print '
'.$langs->trans("NetMeasure").''; - print ' '; - print $form->selectUnits($object->net_measure_units, 'units'); - //print $formproduct->selectMeasuringUnits("net_measure_units", "weight", $object->net_measure_units, 0, 2); - print '
'.$langs->trans("Weight").''; print ' '; print $formproduct->selectMeasuringUnits("weight_units", "weight", $object->weight_units, 0, 2); print '
'.$langs->trans("NetMeasure").''; + print ' '; + print $formproduct->selectMeasuringUnits($object->net_measure_units, ''); + print '
'.$langs->trans("NetMeasure").''; - if ($object->net_measure != '') - { - print $object->net_measure." ".measuring_units_string(0, "weight", $object->net_measure_units); - } - else - { - print ' '; - } - // Brut Weight print '
'.$langs->trans("Weight").''; if ($object->weight != '') @@ -1885,6 +1892,7 @@ else print ' '; } print "
'.$langs->trans("NetMeasure").''; + if ($object->net_measure != '') + { + print $object->net_measure." ".measuring_units_string(0, "weight", $object->net_measure_units); + } + else + { + print ' '; + } + } } // Unit From e261d6329576421f1dde3b45e3b16863b05d0516 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 21 Oct 2019 14:44:39 +0200 Subject: [PATCH 474/980] NEW Can add a button "Create" after combo of object with modulebuilder. --- htdocs/bom/bom_card.php | 15 +++--- htdocs/bom/class/bom.class.php | 2 +- htdocs/core/actions_addupdatedelete.inc.php | 5 +- htdocs/core/class/commonobject.class.php | 49 +++++++++++++------ htdocs/core/class/cunits.class.php | 3 +- htdocs/core/class/html.form.class.php | 12 +++-- .../template/class/myobject.class.php | 5 +- .../modulebuilder/template/myobject_card.php | 19 +++---- htdocs/mrp/class/mo.class.php | 8 +-- htdocs/mrp/mo_card.php | 15 +++--- .../product/class/html.formproduct.class.php | 16 +++--- htdocs/product/inventory/inventory.php | 7 +++ htdocs/projet/card.php | 8 +-- htdocs/societe/card.php | 7 +-- htdocs/theme/eldy/btn.inc.php | 1 + htdocs/theme/eldy/global.inc.php | 3 +- htdocs/theme/md/btn.inc.php | 1 + htdocs/theme/md/style.css.php | 3 +- 18 files changed, 110 insertions(+), 69 deletions(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 0949fa1a334..17fae31ef7d 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -79,6 +79,7 @@ $permissionnote=$user->rights->bom->write; // Used by the include of actions_set $permissiondellink=$user->rights->bom->write; // Used by the include of actions_dellink.inc.php $permissionedit=$user->rights->bom->write; // Used by the include of actions_lineupdown.inc.php $permissiontoadd=$user->rights->bom->write; // Used by the include of actions_addupdatedelete.inc.php +$permissiontodelete = $user->rights->bom->delete || ($permissiontoadd && $object->status == 0); /* @@ -93,11 +94,11 @@ if (empty($reshook)) { $error=0; - $permissiontoadd = $user->rights->bom->write; - $permissiontodelete = $user->rights->bom->delete || ($permissiontoadd && $object->status == 0); $backurlforlist = DOL_URL_ROOT.'/bom/bom_list.php'; - if (empty($backtopage)) { - if (empty($id) && $action != 'add' && $action != 'create') $backtopage = $backurlforlist; + + if (empty($backtopage) || ($cancel && empty($id))) { + //var_dump($backurlforlist);exit; + if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) $backtopage = $backurlforlist; else $backtopage = DOL_URL_ROOT.'/bom/bom_card.php?id='.($id > 0 ? $id : '__ID__'); } $triggermodname = 'BOM_MODIFY'; // Name of trigger action code to execute when we modify record @@ -218,7 +219,7 @@ if ($action == 'create') dol_fiche_head(array(), ''); - print ''."\n"; + print '
'."\n"; // Common attributes include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_add.tpl.php'; @@ -252,7 +253,9 @@ if (($id || $ref) && $action == 'edit') dol_fiche_head(); - print '
'."\n"; + //$object->fields['keyfield']['disabled'] = 1; + + print '
'."\n"; // Common attributes include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_edit.tpl.php'; diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 07ae81e2994..02e39149364 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -91,7 +91,7 @@ class BOM extends CommonObject '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',), 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp'), + 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:1', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp'), 'qty' => array('type'=>'real', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'default'=>1, 'position'=>55, 'notnull'=>1, 'isameasure'=>'1', 'css'=>'maxwidth75imp'), 'efficiency' => array('type'=>'real', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>-1, 'default'=>1, 'position'=>100, 'notnull'=>0, 'css'=>'maxwidth50imp', 'help'=>'ValueOfMeansLoss'), 'duration' => array('type'=>'real', 'label'=>'EstimatedDuration', 'enabled'=>1, 'visible'=>-1, 'position'=>101, 'notnull'=>-1, 'css'=>'maxwidth50imp', 'help'=>'EstimatedDurationDesc'), diff --git a/htdocs/core/actions_addupdatedelete.inc.php b/htdocs/core/actions_addupdatedelete.inc.php index e87333e4c01..d618a0702c8 100644 --- a/htdocs/core/actions_addupdatedelete.inc.php +++ b/htdocs/core/actions_addupdatedelete.inc.php @@ -32,6 +32,8 @@ if ($cancel) { + /*var_dump($cancel); + var_dump($backtopage);exit;*/ if (! empty($backtopage)) { header("Location: ".$backtopage); @@ -80,7 +82,8 @@ if ($action == 'add' && ! empty($permissiontoadd)) if ($result > 0) { // Creation OK - $urltogo=$backtopage?str_replace('__ID__', $result, $backtopage):$backurlforlist; + $urltogo = $backtopage ? str_replace('__ID__', $result, $backtopage) : $backurlforlist; + $urltogo = preg_replace('/--IDFORBACKTOPAGE--/', $object->id, $urltogo); // New method to autoselect project after a New on another form object creation header("Location: ".$urltogo); exit; } diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index cc8ae3238c0..95fa2c2fc59 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5556,16 +5556,20 @@ abstract class CommonObject $type=''; $param = array(); $param['options']=array(); - $size =$this->fields[$key]['size']; + $reg=array(); + $size = $this->fields[$key]['size']; // Because we work on extrafields - if(preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)){ - $param['options']=array($reg[1].':'.$reg[2]=>'N'); - $type ='link'; - } elseif(preg_match('/^link:(.*):(.*)/i', $val['type'], $reg)) { - $param['options']=array($reg[1].':'.$reg[2]=>'N'); + if (preg_match('/^(integer|link):(.*):(.*):(.*):(.*)/i', $val['type'], $reg)){ + $param['options']=array($reg[2].':'.$reg[3].':'.$reg[4].':'.$reg[5] => 'N'); + $type ='link'; + } elseif (preg_match('/^(integer|link):(.*):(.*):(.*)/i', $val['type'], $reg)){ + $param['options']=array($reg[2].':'.$reg[3].':'.$reg[4] => 'N'); + $type ='link'; + } elseif (preg_match('/^(integer|link):(.*):(.*)/i', $val['type'], $reg)){ + $param['options']=array($reg[2].':'.$reg[3] => 'N'); $type ='link'; } elseif(preg_match('/^sellist:(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) { - $param['options']=array($reg[1].':'.$reg[2].':'.$reg[3].':'.$reg[4]=>'N'); + $param['options']=array($reg[1].':'.$reg[2].':'.$reg[3].':'.$reg[4] => 'N'); $type ='sellist'; } elseif(preg_match('/varchar\((\d+)\)/', $val['type'], $reg)) { $param['options']=array(); @@ -6078,16 +6082,26 @@ abstract class CommonObject } elseif ($type == 'link') { - $param_list=array_keys($param['options']); // $param_list='ObjectName:classPath' + $param_list=array_keys($param['options']); // $param_list='ObjectName:classPath[:AddCreateButtonOrNot[:Filter]]' + $param_list_array = explode(':', $param_list[0]); $showempty=(($required && $default != '')?0:1); - $out=$form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty); - if ($conf->global->MAIN_FEATURES_LEVEL >= 2) + + $out=$form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty, '', '', '', '', 0, empty($val['disabled'])?0:1); + + if (! empty($param_list_array[2])) // If we set to add a create button { - list($class,$classfile)=explode(':', $param_list[0]); - if (file_exists(dol_buildpath(dirname(dirname($classfile)).'/card.php'))) $url_path=dol_buildpath(dirname(dirname($classfile)).'/card.php', 1); - else $url_path=dol_buildpath(dirname(dirname($classfile)).'/'.$class.'_card.php', 1); - $out.=''; - // TODO Add Javascript code to add input fields contents to new elements urls + if (! GETPOSTISSET('backtopage') && empty($val['disabled'])) // To avoid to open several infinitely the 'Create Object' button and to avoid to have button if field is protected by a "disabled". + { + list($class,$classfile)=explode(':', $param_list[0]); + if (file_exists(dol_buildpath(dirname(dirname($classfile)).'/card.php'))) $url_path=dol_buildpath(dirname(dirname($classfile)).'/card.php', 1); + else $url_path=dol_buildpath(dirname(dirname($classfile)).'/'.strtolower($class).'_card.php', 1); + $paramforthenewlink = ''; + $paramforthenewlink .= (GETPOSTISSET('action')?'&action='.GETPOST('action','aZ09'):''); + $paramforthenewlink .= (GETPOSTISSET('id')?'&id='.GETPOST('id','int'):''); + $paramforthenewlink .= '&fk_'.strtolower($class).'=--IDFORBACKTOPAGE--'; + // TODO Add Javascript code to add input fields already filled into $paramforthenewlink so we won't loose them when going back to main page + $out.=''; + } } } elseif ($type == 'password') @@ -6167,6 +6181,7 @@ abstract class CommonObject $label = $val['label']; $type = $val['type']; $size = $val['css']; + $reg = array(); // Convert var to be able to share same code than showOutputField of extrafields if (preg_match('/varchar\((\d+)\)/', $type, $reg)) @@ -6182,7 +6197,9 @@ abstract class CommonObject $computed=$val['computed']; $unique=$val['unique']; $required=$val['required']; - $param=$val['param']; + $param=array(); + $param['options']=array(); + if (is_array($val['arrayofkeyval'])) $param['options'] = $val['arrayofkeyval']; if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) { diff --git a/htdocs/core/class/cunits.class.php b/htdocs/core/class/cunits.class.php index 1837f82a2a4..07cd778d3a0 100644 --- a/htdocs/core/class/cunits.class.php +++ b/htdocs/core/class/cunits.class.php @@ -234,8 +234,6 @@ class CUnits // extends CommonObject dol_syslog(__METHOD__, LOG_DEBUG); - $records=array(); - $sql = 'SELECT'; $sql.= " t.rowid,"; $sql.= " t.code,"; @@ -273,6 +271,7 @@ class CUnits // extends CommonObject if (!empty($limit)) { $sql .= ' ' . $this->db->plimit($limit, $offset); } + $resql = $this->db->query($sql); if ($resql) { $this->records=array(); diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 6d26e585435..66646ee4c4f 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5824,10 +5824,11 @@ class Form * @param string $morecss More CSS * @param string $moreparams More params provided to ajax call * @param int $forcecombo Force to load all values and output a standard combobox (with no beautification) + * @param int $disabled 1=Html component is disabled * @return string Return HTML string * @see selectForFormsList() select_thirdparty */ - public function selectForForms($objectdesc, $htmlname, $preselectedvalue, $showempty = '', $searchkey = '', $placeholder = '', $morecss = '', $moreparams = '', $forcecombo = 0) + public function selectForForms($objectdesc, $htmlname, $preselectedvalue, $showempty = '', $searchkey = '', $placeholder = '', $morecss = '', $moreparams = '', $forcecombo = 0, $disabled = 0) { global $conf, $user; @@ -5868,12 +5869,12 @@ class Form $out.= ajax_autocompleter($preselectedvalue, $htmlname, $urlforajaxcall, $urloption, $conf->global->$confkeyforautocompletemode, 0, array()); $out.= ''; if ($placeholder) $placeholder=' placeholder="'.$placeholder.'"'; - $out.= ''; + $out.= ''; } else { // Immediate load of all database - $out.=$this->selectForFormsList($objecttmp, $htmlname, $preselectedvalue, $showempty, $searchkey, $placeholder, $morecss, $moreparams, $forcecombo); + $out.=$this->selectForFormsList($objecttmp, $htmlname, $preselectedvalue, $showempty, $searchkey, $placeholder, $morecss, $moreparams, $forcecombo, 0, $disabled); } return $out; @@ -5893,10 +5894,11 @@ class Form * @param string $moreparams More params provided to ajax call * @param int $forcecombo Force to load all values and output a standard combobox (with no beautification) * @param int $outputmode 0=HTML select string, 1=Array + * @param int $disabled 1=Html component is disabled * @return string Return HTML string * @see selectForForms() */ - public function selectForFormsList($objecttmp, $htmlname, $preselectedvalue, $showempty = '', $searchkey = '', $placeholder = '', $morecss = '', $moreparams = '', $forcecombo = 0, $outputmode = 0) + public function selectForFormsList($objecttmp, $htmlname, $preselectedvalue, $showempty = '', $searchkey = '', $placeholder = '', $morecss = '', $moreparams = '', $forcecombo = 0, $outputmode = 0, $disabled = 0) { global $conf, $langs, $user; @@ -5948,7 +5950,7 @@ class Form } // Construct $out and $outarray - $out.= ''."\n"; // Warning: Do not use textifempty = ' ' or ' ' here, or search on key will search on ' key'. Seems it is no more true with selec2 v4 $textifempty=' '; diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 1f83308f1d7..d5c7c9d2e4e 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -64,7 +64,7 @@ class MyObject extends CommonObject /** - * 'type' if the field format ('integer', 'integer:Class:pathtoclass', 'varchar(x)', 'double(24,8)', 'text', 'html', 'datetime', 'timestamp', 'float') + * 'type' if the field format ('integer', 'integer:Class:pathtoclass[:AddCreateButtonOrNot[:Filter]]', 'varchar(x)', 'double(24,8)', 'text', 'html', 'datetime', 'timestamp', 'float') * '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) @@ -81,6 +81,7 @@ class MyObject extends CommonObject * 'comment' is not used. You can store here any text of your choice. It is not used by application. * 'showoncombobox' if value of the field must be visible into the label of the combobox that list record * 'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel") + * '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. */ // BEGIN MODULEBUILDER PROPERTIES @@ -94,7 +95,7 @@ class MyObject extends CommonObject 'label' =>array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'searchall'=>1, 'css'=>'minwidth200', 'help'=>'Help text', 'showoncombobox'=>1), 'amount' =>array('type'=>'double(24,8)', 'label'=>'Amount', 'enabled'=>1, 'visible'=>1, 'default'=>'null', 'position'=>40, 'searchall'=>0, 'isameasure'=>1, 'help'=>'Help text for amount'), 'qty' =>array('type'=>'real', 'label'=>'Qty', 'enabled'=>1, 'visible'=>1, 'default'=>'0', 'position'=>45, 'searchall'=>0, 'isameasure'=>1, 'help'=>'Help text for quantity', 'css'=>'maxwidth75imp'), - 'fk_soc' =>array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'visible'=> 1, 'enabled'=>1, 'position'=>50, 'notnull'=>-1, 'index'=>1, 'help'=>'LinkToThirparty'), + 'fk_soc' =>array('type'=>'integer:Societe:societe/class/societe.class.php:1', 'label'=>'ThirdParty', 'visible'=> 1, 'enabled'=>1, 'position'=>50, 'notnull'=>-1, 'index'=>1, 'help'=>'LinkToThirparty'), 'description' =>array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>0, 'position'=>60), 'note_public' =>array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>61), 'note_private' =>array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>62), diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 5727d596a6d..e39022814e7 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -105,10 +105,11 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be inclu //$isdraft = (($object->statut == MyObject::STATUS_DRAFT) ? 1 : 0); //$result = restrictedArea($user, 'mymodule', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); -$permissionnote=$user->rights->mymodule->write; // Used by the include of actions_setnotes.inc.php -$permissiondellink=$user->rights->mymodule->write; // Used by the include of actions_dellink.inc.php -$permissionedit=$user->rights->mymodule->write; // Used by the include of actions_lineupdown.inc.php -$permissiontoadd=$user->rights->mymodule->write; // Used by the include of actions_addupdatedelete.inc.php +$permissionnote = $user->rights->mymodule->write; // Used by the include of actions_setnotes.inc.php +$permissiondellink = $user->rights->mymodule->write; // Used by the include of actions_dellink.inc.php +$permissionedit = $user->rights->mymodule->write; // Used by the include of actions_lineupdown.inc.php +$permissiontoadd = $user->rights->mymodule->write; // Used by the include of actions_addupdatedelete.inc.php +$permissiontodelete = $user->rights->mymodule->delete || ($permissiontoadd && $object->status == 0); @@ -124,11 +125,11 @@ if (empty($reshook)) { $error=0; - $permissiontodelete = $user->rights->mymodule->delete || ($permissiontoadd && $object->status == 0); $backurlforlist = dol_buildpath('/mymodule/myobject_list.php', 1); - if (empty($backtopage)) { - if (empty($id) && $action != 'add' && $action != 'create') $backtopage = $backurlforlist; - else $backtopage = dol_buildpath('/mymodule/myobject_card.php', 1).'?id='.($id > 0 ? $id : '__ID__'); + + if (empty($backtopage) || ($cancel && empty($id))) { + if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) $backtopage = $backurlforlist; + else $backtopage = dol_buildpath('/mymodule/myobject_card.php', 1).'?id='.($id > 0 ? $id : '__ID__'); } $triggermodname = 'MYMODULE_MYOBJECT_MODIFY'; // Name of trigger action code to execute when we modify record @@ -226,7 +227,7 @@ if (($id || $ref) && $action == 'edit') dol_fiche_head(); - print '
'."\n"; + print '
'."\n"; // Common attributes include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_edit.tpl.php'; diff --git a/htdocs/mrp/class/mo.class.php b/htdocs/mrp/class/mo.class.php index 5bac2320b24..8d356775a78 100644 --- a/htdocs/mrp/class/mo.class.php +++ b/htdocs/mrp/class/mo.class.php @@ -96,7 +96,7 @@ class Mo extends CommonObject 'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>-1, 'position'=>20, 'notnull'=>1, 'default'=>'1', 'index'=>1,), 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'notnull'=>-1, 'searchall'=>1, 'showoncombobox'=>'1',), 'qty' => array('type'=>'real', 'label'=>'QtyToProduce', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'notnull'=>1, 'index'=>1, 'comment'=>"Qty to produce",), - 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'enabled'=>1, 'visible'=>-1, 'position'=>50, 'notnull'=>-1, 'index'=>1), + 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php:1', 'label'=>'ThirdParty', 'enabled'=>1, 'visible'=>-1, 'position'=>50, 'notnull'=>-1, 'index'=>1), 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>-1, 'position'=>61, 'notnull'=>-1,), 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>-1, 'position'=>62, 'notnull'=>-1,), 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>500, 'notnull'=>1,), @@ -104,11 +104,11 @@ class Mo extends CommonObject 'fk_user_creat' => array('type'=>'integer', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'position'=>510, 'notnull'=>1, 'foreignkey'=>'user.rowid',), 'fk_user_modif' => array('type'=>'integer', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'position'=>511, 'notnull'=>-1,), 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'comment'=>"Product to produce",), + 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:1', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'comment'=>"Product to produce",), 'date_start_planned' => array('type'=>'datetime', 'label'=>'DateStartPlannedMo', 'enabled'=>1, 'visible'=>1, 'position'=>55, 'notnull'=>-1, 'index'=>1, 'help'=>'KeepEmptyForAsap'), 'date_end_planned' => array('type'=>'datetime', 'label'=>'DateEndPlannedMo', 'enabled'=>1, 'visible'=>1, 'position'=>56, 'notnull'=>-1, 'index'=>1,), - 'fk_bom' => array('type'=>'integer:Bom:bom/class/bom.class.php', 'label'=>'BOM', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>-1, 'index'=>1, 'comment'=>"Original BOM",), - 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php', 'label'=>'Project', 'enabled'=>1, 'visible'=>-1, 'position'=>52, 'notnull'=>-1, 'index'=>1,), + 'fk_bom' => array('type'=>'integer:Bom:bom/class/bom.class.php:0', 'filter'=>'active=1', 'label'=>'BOM', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>-1, 'index'=>1, 'comment'=>"Original BOM",), + 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'enabled'=>1, 'visible'=>-1, 'position'=>52, 'notnull'=>-1, 'index'=>1,), 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>4, 'position'=>1000, 'default'=>0, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Brouillon', '1'=>'Validated', '2'=>'InProgress', '3'=>'Done', '-1'=>'Canceled')), ); public $rowid; diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php index 15a1aeff0a1..03e32174207 100644 --- a/htdocs/mrp/mo_card.php +++ b/htdocs/mrp/mo_card.php @@ -108,7 +108,7 @@ $permissionnote=$user->rights->mrp->write; // Used by the include of actions_set $permissiondellink=$user->rights->mrp->write; // Used by the include of actions_dellink.inc.php $permissionedit=$user->rights->mrp->write; // Used by the include of actions_lineupdown.inc.php $permissiontoadd=$user->rights->mrp->write; // Used by the include of actions_addupdatedelete.inc.php - +$permissiontodelete = $user->rights->mrp->delete || ($permissiontoadd && $object->status == 0); /* @@ -125,11 +125,12 @@ if (empty($reshook)) { $error=0; - $permissiontodelete = $user->rights->mrp->delete || ($permissiontoadd && $object->status == 0); $backurlforlist = dol_buildpath('/mrp/mo_list.php', 1); - if (empty($backtopage)) { - if (empty($id)) $backtopage = $backurlforlist; - else $backtopage = dol_buildpath('/mrp/mo_card.php', 1).'?id='.($id > 0 ? $id : '__ID__'); + + if (empty($backtopage) || ($cancel && empty($id))) { + //var_dump($backurlforlist);exit; + if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) $backtopage = $backurlforlist; + else $backtopage = DOL_URL_ROOT.'/mrp/mo_card.php?id='.($id > 0 ? $id : '__ID__'); } $triggermodname = 'MRP_MO_MODIFY'; // Name of trigger action code to execute when we modify record @@ -257,7 +258,9 @@ if (($id || $ref) && $action == 'edit') dol_fiche_head(); - print '
'."\n"; + $object->fields['fk_bom']['disabled'] = 1; + + print '
'."\n"; // Common attributes include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_edit.tpl.php'; diff --git a/htdocs/product/class/html.formproduct.class.php b/htdocs/product/class/html.formproduct.class.php index 33bf1240c92..8684c23511e 100644 --- a/htdocs/product/class/html.formproduct.class.php +++ b/htdocs/product/class/html.formproduct.class.php @@ -332,7 +332,7 @@ class FormProduct * @param string $name Name of HTML field * @param string $measuring_style Unit to show: weight, size, surface, volume, time * @param string $default Preselected value - * @param int $adddefault Add empty unit called "Default" + * @param int|string $adddefault 1=Add empty unit called "Default", ''=Add empty value * @param int $mode 1=Use short label as value, 0=Use rowid, 2=Use scale (power) * @return string */ @@ -346,24 +346,26 @@ class FormProduct // TODO Use a cache require_once DOL_DOCUMENT_ROOT . '/core/class/cunits.class.php'; $measuringUnits = new CUnits($db); + + $filter = array(); + $filter['t.active'] = 1; + if ($measuring_style) $filter['t.unit_type'] = $measuring_style; + $result = $measuringUnits->fetchAll( '', '', 0, 0, - array( - 't.unit_type' => $measuring_style, - 't.active' => 1, - ) + $filter ); if ($result < 0) { dol_print_error($db); return -1; } else { $return .= '
'; - $coldisplay++; +if ($this->status == 0 && ($object_rights->write) && $action != 'selectlines' ) { + print ''; + $coldisplay++; if (($line->info_bits & 2) == 2 || ! empty($disableedit)) { } else { print 'id.'#line_'.$line->id.'">'.img_edit().''; From 8e474701c1312501e8949fc3f45b7f2ac629d661 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 21 Oct 2019 15:49:08 +0200 Subject: [PATCH 476/980] Fix missing token --- htdocs/core/class/html.formfile.class.php | 13 +++++++++---- htdocs/langs/en_US/mrp.lang | 1 + .../modulebuilder/template/class/myobject.class.php | 2 +- htdocs/mrp/class/mo.class.php | 4 ++-- htdocs/mrp/mo_agenda.php | 2 +- htdocs/mrp/mo_card.php | 2 +- htdocs/mrp/mo_document.php | 2 +- htdocs/mrp/mo_note.php | 2 +- 8 files changed, 17 insertions(+), 11 deletions(-) diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 8a0341135c7..82bfe17bf69 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -231,10 +231,10 @@ class FormFile if (empty($usewithoutform)) { - $out .= ''; - print $companystatic->getNomUrl(1, 'customer'); + print $getNomUrl[$obj->socid]; // If module invoices enabled and user with invoice creation permissions if (! empty($conf->facture->enabled) && ! empty($conf->global->ORDER_BILLING_ALL_CUSTOMER)) @@ -982,8 +988,8 @@ if ($resql) { if (($obj->fk_statut > 0 && $obj->fk_statut < 3) || ($obj->fk_statut == 3 && $obj->billed == 0)) { - print ' '; - print img_picto($langs->trans("CreateInvoiceForThisCustomer").' : '.$companystatic->name, 'object_bill', 'hideonsmartphone').''; + print ' '; + print img_picto($langs->trans("CreateInvoiceForThisCustomer").' : '.$companystatic[$obj->socid]->name, 'object_bill', 'hideonsmartphone').''; } } } From 44ced0cbeb95f2a934c85569906931e261ec5bee Mon Sep 17 00:00:00 2001 From: gauthier Date: Tue, 22 Oct 2019 16:11:59 +0200 Subject: [PATCH 499/980] FIX : if we search something with global search, and after with form fields, we want to stay on Products AND Services list --- htdocs/product/list.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 43188c5fe7c..6e870c05740 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -450,6 +450,7 @@ if ($resql) if($type == Product::TYPE_SERVICE) $rightskey='service'; if($user->rights->{$rightskey}->creer) { + $oldtype=$type; if ($type === "") { $newcardbutton.= dolGetButtonTitle($langs->trans('NewProduct'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/product/card.php?action=create&type=0'); $type = Product::TYPE_SERVICE; @@ -457,6 +458,7 @@ if ($resql) $label='NewProduct'; if($type == Product::TYPE_SERVICE) $label='NewService'; $newcardbutton.= dolGetButtonTitle($langs->trans($label), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/product/card.php?action=create&type='.$type); + $type=$oldtype; } print '
'; From 4dd5c00ec0c0a732f881990fd5a8be8ee539f995 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Tue, 22 Oct 2019 16:25:10 +0200 Subject: [PATCH 500/980] Internationalization --- htdocs/don/class/don.class.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/htdocs/don/class/don.class.php b/htdocs/don/class/don.class.php index 70fabfcdc29..9707229393e 100644 --- a/htdocs/don/class/don.class.php +++ b/htdocs/don/class/don.class.php @@ -6,7 +6,7 @@ * Copyright (C) 2015-2017 Alexandre Spangaro * Copyright (C) 2016 Juanjo Menent * Copyright (C) 2019 Thibault FOUCART - * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019 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 @@ -61,8 +61,16 @@ class Don extends CommonObject * @var string String with name of icon for object don. Must be the part after the 'object_' into object_myobject.png */ public $picto = 'generic'; - + + /** + * @var string Date of the donation + */ public $date; + + /** + * amount of donation + * @var double + */ public $amount; /** @@ -133,7 +141,7 @@ class Don extends CommonObject /** - * Retourne le libelle du statut d'un don (brouillon, validee, abandonnee, payee) + * Returns the donation status label (draft, valid, abandoned, paid) * * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long * @return string Libelle @@ -145,7 +153,7 @@ class Don extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoi le libelle d'un statut donne + * Return the label of a given status * * @param int $statut Id statut * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto From c17604437999e8a72bf63e560adc98b3555d29b1 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 22 Oct 2019 14:26:26 +0000 Subject: [PATCH 501/980] Fixing style errors. --- htdocs/don/class/don.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/don/class/don.class.php b/htdocs/don/class/don.class.php index 9707229393e..fc95009846b 100644 --- a/htdocs/don/class/don.class.php +++ b/htdocs/don/class/don.class.php @@ -61,12 +61,12 @@ class Don extends CommonObject * @var string String with name of icon for object don. Must be the part after the 'object_' into object_myobject.png */ public $picto = 'generic'; - + /** * @var string Date of the donation */ public $date; - + /** * amount of donation * @var double From e807cb6b036c6931bbfe7ad1375e5587e039d340 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 22 Oct 2019 15:00:58 +0000 Subject: [PATCH 502/980] Fixing style errors. --- htdocs/commande/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 470509aa50a..7f98733ba94 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -770,7 +770,7 @@ if ($resql) $generic_commande = new Commande($db); $generic_product = new Product($db); - + $companystatic = array(); $getNomUrl = array(); @@ -785,7 +785,7 @@ if ($resql) $text_info=''; $text_warning=''; $nbprod=0; - + if (!isset($companystatic[$obj->socid])) { $companystatic[$obj->socid] = new Societe($db); $companystatic[$obj->socid]->id = $obj->socid; From b88968520b09397eba46b3339ee733dbeaeab370 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 22 Oct 2019 17:08:37 +0200 Subject: [PATCH 503/980] Move code of extrafields to the new architecture --- htdocs/asset/type.php | 2 +- htdocs/comm/action/list.php | 13 ++-- htdocs/compta/bank/bankentries_list.php | 13 ++-- htdocs/compta/bank/list.php | 13 ++-- htdocs/contact/list.php | 15 ++-- .../core/class/commondocgenerator.class.php | 34 ++++----- htdocs/fichinter/list.php | 13 ++-- htdocs/fourn/facture/list.php | 4 +- htdocs/product/stock/productlot_list.php | 9 ++- htdocs/projet/ganttview.php | 2 + htdocs/projet/list.php | 11 +-- htdocs/projet/tasks.php | 37 +++++----- htdocs/projet/tasks/time.php | 21 +++--- htdocs/reception/card.php | 10 ++- htdocs/reception/list.php | 72 +++++-------------- htdocs/resource/list.php | 20 +++--- htdocs/societe/list.php | 15 ++-- htdocs/user/list.php | 13 ++-- 18 files changed, 153 insertions(+), 164 deletions(-) diff --git a/htdocs/asset/type.php b/htdocs/asset/type.php index 459bd2d8edc..916939b378e 100644 --- a/htdocs/asset/type.php +++ b/htdocs/asset/type.php @@ -615,7 +615,7 @@ if ($rowid > 0) if (empty($reshook)) { print '

'; - foreach($extrafields->attribute_label as $key=>$label) + foreach($extrafields->attributes[$object->element]['label'] as $key=>$label) { if (isset($_POST["options_" . $key])) { if (is_array($_POST["options_" . $key])) { diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index a7fe41a478c..194c9a2ae33 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -138,13 +138,16 @@ $arrayfields=array( 'a.tms'=>array('label'=>'DateModification', 'checked'=>0) ); // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>$extrafields->attribute_list[$key], 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>$extrafields->attribute_perms[$key]); - } + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } } +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); /* diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 61278b9b9f5..71eb5faa6c9 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -157,13 +157,16 @@ $arrayfields=array( 'b.conciliated'=>array('label'=>$langs->trans("Conciliated"), 'enabled'=> $object->rappro, 'checked'=>($action == 'reconcile'?1:0), 'position'=>1020), ); // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } } +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php index 6a143d4a8d1..1b06a0e222b 100644 --- a/htdocs/compta/bank/list.php +++ b/htdocs/compta/bank/list.php @@ -98,13 +98,16 @@ $arrayfields=array( 'balance'=>array('label'=>$langs->trans("Balance"), 'checked'=>1, 'position'=>1010), ); // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } } +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); /* diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 9f3dc206447..c571b4938a0 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -181,15 +181,18 @@ $arrayfields=array( 'p.import_key'=>array('label'=>"ImportId", 'checked'=>0, 'position'=>1100), ); // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } } +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); + -$object=new Contact($db); if (($id > 0 || ! empty($ref)) && $action != 'add') { $result=$object->fetch($id, $ref); diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index ee5b97c502a..0a31bb79408 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -224,15 +224,15 @@ abstract class CommonDocGenerator $extrafields->fetch_name_optionals_label($object->table_element, true); $object->fetch_optionals(); - foreach($extrafields->attribute_label as $key=>$label) + foreach($extrafields->attributes[$object->table_element]['label'] as $key=>$label) { - if($extrafields->attribute_type[$key] == 'price') + if($extrafields->attributes[$object->table_element]['type'][$key] == 'price') { $object->array_options['options_'.$key] = price($object->array_options['options_'.$key], 0, $outputlangs, 0, 0, -1, $conf->currency); } - elseif($extrafields->attribute_type[$key] == 'select' || $extrafields->attribute_type[$key] == 'checkbox') + elseif($extrafields->attributes[$object->table_element]['type'][$key] == 'select' || $extrafields->attributes[$object->table_element]['type'][$key] == 'checkbox') { - $object->array_options['options_'.$key] = $extrafields->attribute_param[$key]['options'][$object->array_options['options_'.$key]]; + $object->array_options['options_'.$key] = $extrafields->attributes[$object->table_element]['param'][$key]['options'][$object->array_options['options_'.$key]]; } $array_thirdparty = array_merge($array_thirdparty, array ('company_options_'.$key => $object->array_options ['options_' . $key])); } @@ -298,15 +298,15 @@ abstract class CommonDocGenerator $extrafields->fetch_name_optionals_label($object->table_element, true); $object->fetch_optionals(); - foreach($extrafields->attribute_label as $key => $label) + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $label) { - if ($extrafields->attribute_type[$key] == 'price') + if ($extrafields->attributes[$object->table_element]['type'][$key] == 'price') { $object->array_options['options_' . $key] = price($object->array_options ['options_' . $key], 0, $outputlangs, 0, 0, - 1, $conf->currency); } - elseif($extrafields->attribute_type[$key] == 'select' || $extrafields->attribute_type[$key] == 'checkbox') + elseif($extrafields->attributes[$object->table_element]['type'][$key] == 'select' || $extrafields->attributes[$object->table_element]['type'][$key] == 'checkbox') { - $object->array_options['options_' . $key] = $extrafields->attribute_param[$key]['options'][$object->array_options['options_' . $key]]; + $object->array_options['options_' . $key] = $extrafields->attributes[$object->table_element]['param'][$key]['options'][$object->array_options['options_' . $key]]; } $array_contact = array_merge($array_contact, array($array_key.'_options_' . $key => $object->array_options['options_'. $key])); } @@ -765,30 +765,30 @@ abstract class CommonDocGenerator { // phpcs:enable global $conf; - foreach($extrafields->attribute_label as $key=>$label) + foreach($extrafields->attributes[$object->table_element]['label'] as $key=>$label) { - if($extrafields->attribute_type[$key] == 'price') + if($extrafields->attributes[$object->table_element]['type'][$key] == 'price') { $object->array_options['options_'.$key] = price2num($object->array_options['options_'.$key]); $object->array_options['options_'.$key.'_currency'] = price($object->array_options['options_'.$key], 0, $outputlangs, 0, 0, -1, $conf->currency); //Add value to store price with currency $array_to_fill=array_merge($array_to_fill, array($array_key.'_options_'.$key.'_currency' => $object->array_options['options_'.$key.'_currency'])); } - elseif($extrafields->attribute_type[$key] == 'select') + elseif($extrafields->attributes[$object->table_element]['type'][$key] == 'select') { - $object->array_options['options_'.$key] = $extrafields->attribute_param[$key]['options'][$object->array_options['options_'.$key]]; + $object->array_options['options_'.$key] = $extrafields->attributes[$object->table_element]['param'][$key]['options'][$object->array_options['options_'.$key]]; } - elseif($extrafields->attribute_type[$key] == 'checkbox') { + elseif($extrafields->attributes[$object->table_element]['type'][$key] == 'checkbox') { $valArray=explode(',', $object->array_options['options_'.$key]); $output=array(); - foreach($extrafields->attribute_param[$key]['options'] as $keyopt=>$valopt) { + foreach($extrafields->attributes[$object->table_element]['param'][$key]['options'] as $keyopt=>$valopt) { if (in_array($keyopt, $valArray)) { $output[]=$valopt; } } $object->array_options['options_'.$key] = implode(', ', $output); } - elseif($extrafields->attribute_type[$key] == 'date') + elseif($extrafields->attributes[$object->table_element]['type'][$key] == 'date') { if (strlen($object->array_options['options_'.$key])>0) { @@ -806,7 +806,7 @@ abstract class CommonDocGenerator $array_to_fill=array_merge($array_to_fill, array($array_key.'_options_'.$key.'_locale' => $object->array_options['options_'.$key.'_locale'])); $array_to_fill=array_merge($array_to_fill, array($array_key.'_options_'.$key.'_rfc' => $object->array_options['options_'.$key.'_rfc'])); } - elseif($extrafields->attribute_type[$key] == 'datetime') + elseif($extrafields->attributes[$object->table_element]['label'][$key] == 'datetime') { $datetime = $object->array_options['options_'.$key]; $object->array_options['options_'.$key] = ($datetime!="0000-00-00 00:00:00"?dol_print_date($object->array_options['options_'.$key], 'dayhour'):''); // using company output language @@ -815,7 +815,7 @@ abstract class CommonDocGenerator $array_to_fill=array_merge($array_to_fill, array($array_key.'_options_'.$key.'_locale' => $object->array_options['options_'.$key.'_locale'])); $array_to_fill=array_merge($array_to_fill, array($array_key.'_options_'.$key.'_rfc' => $object->array_options['options_'.$key.'_rfc'])); } - elseif($extrafields->attribute_type[$key] == 'link') + elseif($extrafields->attributes[$object->table_element]['type'][$key] == 'link') { $id = $object->array_options['options_'.$key]; if ($id != "") diff --git a/htdocs/fichinter/list.php b/htdocs/fichinter/list.php index 7df7eac69b0..d45dadf2589 100644 --- a/htdocs/fichinter/list.php +++ b/htdocs/fichinter/list.php @@ -116,13 +116,16 @@ $arrayfields=array( 'fd.duree'=>array('label'=>'DurationOfLine', 'checked'=>1, 'enabled'=>empty($conf->global->FICHINTER_DISABLE_DETAILS)?1:0), ); // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } } +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); /* diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index 367f360da37..c08178bc932 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -376,9 +376,9 @@ if (! $search_all) $sql.= ' country.code,'; $sql.= " p.rowid, p.ref, p.title"; - foreach ($extrafields->attribute_label as $key => $val) //prevent error with sql_mode=only_full_group_by + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) //prevent error with sql_mode=only_full_group_by { - $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key : ''); + $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ",ef.".$key : ''); } } else diff --git a/htdocs/product/stock/productlot_list.php b/htdocs/product/stock/productlot_list.php index 9596c87c9d3..fbbec95f2df 100644 --- a/htdocs/product/stock/productlot_list.php +++ b/htdocs/product/stock/productlot_list.php @@ -105,13 +105,16 @@ $arrayfields=array( //'t.statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), ); // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); } } +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); // Load object if id or ref is provided as parameter if (($id > 0 || ! empty($ref)) && $action != 'add') diff --git a/htdocs/projet/ganttview.php b/htdocs/projet/ganttview.php index 8b718f1d898..57be29b1bb2 100644 --- a/htdocs/projet/ganttview.php +++ b/htdocs/projet/ganttview.php @@ -377,6 +377,8 @@ if (count($tasksarray)>0) //var_dump($dateformatinput); //var_dump($dateformatinput2); + print '
'; + print '
'; print '
'."\n"; diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index 8524e940f36..2c311de7792 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -76,7 +76,6 @@ $search_categ=GETPOST("search_categ", 'alpha'); $search_ref=GETPOST("search_ref", 'alpha'); $search_label=GETPOST("search_label", 'alpha'); $search_societe=GETPOST("search_societe", 'alpha'); -$search_year=GETPOST("search_year", 'int'); $search_status=GETPOST("search_status", 'int'); $search_opp_status=GETPOST("search_opp_status", 'alpha'); $search_opp_percent=GETPOST("search_opp_percent", 'alpha'); @@ -141,13 +140,16 @@ $arrayfields=array( 'p.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), ); // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); } } +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); @@ -175,7 +177,6 @@ if (empty($reshook)) $search_ref=""; $search_label=""; $search_societe=""; - $search_year=""; $search_status=-1; $search_opp_status=-1; $search_opp_amount=''; diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index 2abfea6e64e..2395f5f0bd1 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -66,8 +66,7 @@ $search_progressdeclare=GETPOST('search_progressdeclare'); $object = new Project($db); $taskstatic = new Task($db); -$extrafields_project = new ExtraFields($db); -$extrafields_task = new ExtraFields($db); +$extrafields = new ExtraFields($db); include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once if(! empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($object, 'fetchComments') && empty($object->comments)) $object->fetchComments(); @@ -75,9 +74,9 @@ if(! empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($ob if ($id > 0 || ! empty($ref)) { // fetch optionals attributes and labels - $extrafields_project->fetch_name_optionals_label($object->table_element); + $extrafields->fetch_name_optionals_label($object->table_element); } -$extrafields_task->fetch_name_optionals_label($taskstatic->table_element); +$extrafields->fetch_name_optionals_label($taskstatic->table_element); // Security check $socid=0; @@ -115,14 +114,17 @@ $arrayfields=array( 't.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), //'t.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), ); -// Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +// Extra fields project +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } } +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); /* @@ -260,8 +262,7 @@ if ($action == 'createtask' && $user->rights->projet->creer) $task->progress = $progress; // Fill array 'array_options' with data from add form - $extrafields->fetch_name_optionals_label($task->table_element); - $ret = $extrafields_task->setOptionalsFromPost(null, $task); + $ret = $extrafields->setOptionalsFromPost(null, $task); $taskid = $task->create($user); @@ -604,9 +605,9 @@ if ($action == 'create' && $user->rights->projet->creer && (empty($object->third $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $taskstatic, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; - if (empty($reshook) && ! empty($extrafields_task->attribute_label)) + if (empty($reshook) && ! empty($extrafields[$taskstatic->table_element]['label'])) { - print $taskstatic->showOptionals($extrafields_task, 'edit'); // Do not use $object here that is object of project + print $taskstatic->showOptionals($extrafields, 'edit'); // Do not use $object here that is object of project but use $taskstatic } print '
'; @@ -635,13 +636,15 @@ elseif ($id > 0 || ! empty($ref)) $arrayfields['t.task_date_start']=array('label'=>$langs->trans("DateStart"), 'checked'=>1); $arrayfields['t.task_date_end']=array('label'=>$langs->trans("DateEnd"), 'checked'=>1); // Extra fields - if (is_array($extrafields_task->attribute_label) && count($extrafields_task->attribute_label)) + if (is_array($extrafields->attributes[$taskstatic->table_element]['label']) && count($extrafields->attributes[$taskstatic->table_element]['label']) > 0) { - foreach($extrafields_task->attribute_label as $key => $val) + foreach($extrafields->attributes[$taskstatic->table_element]['label'] as $key => $val) { - if (! empty($extrafields_task->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields_task->attribute_label[$key], 'checked'=>(($extrafields_task->attribute_list[$key]<0)?0:1), 'position'=>$extrafields_task->attribute_pos[$key], 'enabled'=>(abs($extrafields_task->attribute_list[$key])!=3 && $extrafields_task->attribute_perms[$key])); + if (! empty($extrafields->attributes[$taskstatic->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$taskstatic->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$taskstatic->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$taskstatic->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$taskstatic->table_element]['list'][$key])!=3 && $extrafields->attributes[$taskstatic->table_element]['perms'][$key])); } } + $arrayfields = dol_sort_array($arrayfields, 'position'); print '
'; diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 2eb6697be82..3dc54cc2223 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -88,11 +88,9 @@ $hookmanager->initHooks(array('projecttasktime','globalcard')); $object = new Task($db); $projectstatic = new Project($db); -$extrafields_project = new ExtraFields($db); -$extrafields_task = new ExtraFields($db); - -$extrafields_project->fetch_name_optionals_label($projectstatic->table_element); -$extrafields_task->fetch_name_optionals_label($object->table_element); +$extrafields = new ExtraFields($db); +$extrafields->fetch_name_optionals_label($projectstatic->table_element); +$extrafields->fetch_name_optionals_label($object->table_element); /* @@ -761,7 +759,6 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) // Initialize technical object to manage hooks. Note that conf->hooks_modules contains array $hookmanager->initHooks(array('tasktimelist')); - $extrafields = new ExtraFields($db); // Definition of fields for list $arrayfields=array(); @@ -777,13 +774,15 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) $arrayfields['value'] =array('label'=>$langs->trans("Value"), 'checked'=>1, 'enabled'=>(empty($conf->salaries->enabled)?0:1)); $arrayfields['valuebilled'] =array('label'=>$langs->trans("Billed"), 'checked'=>1, 'enabled'=>(((! empty($conf->global->PROJECT_HIDE_TASKS) || empty($conf->global->PROJECT_BILL_TIME_SPENT))?0:1) && $projectstatic->usage_bill_time)); // Extra fields - if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } } + $arrayfields = dol_sort_array($arrayfields, 'position'); $param=''; if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index 2c34cd55ee8..0a7ec02afd8 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -102,7 +102,6 @@ $extrafields = new ExtraFields($db); $extrafields->fetch_name_optionals_label($object->table_element); $extrafields->fetch_name_optionals_label($object->table_element_line); - // Load object. Make an object->fetch include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once @@ -869,17 +868,16 @@ if ($action == 'create') $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $recept, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; - if (empty($reshook) && ! empty($extrafields->attribute_label)) { + // Here $object can be of an object Order + $extrafields->fetch_name_optionals_label($object->table_element); + if (empty($reshook) && ! empty($extrafields->attributes[$object->table_element]['label'])) { // copy from order - $orderExtrafields = new Extrafields($db); - $orderExtrafieldLabels = $orderExtrafields->fetch_name_optionals_label($object->table_element); - if ($object->fetch_optionals($object->id, $orderExtrafieldLabels) > 0) { + if ($object->fetch_optionals() > 0) { $recept->array_options = array_merge($recept->array_options, $object->array_options); } print $object->showOptionals($extrafields, 'edit'); } - // Incoterms if (!empty($conf->incoterm->enabled)) { diff --git a/htdocs/reception/list.php b/htdocs/reception/list.php index f90f1f73df1..f5f605532b8 100644 --- a/htdocs/reception/list.php +++ b/htdocs/reception/list.php @@ -34,10 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; -$langs->load("receptions"); -$langs->load("deliveries"); -$langs->load('companies'); -$langs->load('bills'); +$langs->loadLangs(array("sendings", "receptions", "deliveries", 'companies', 'bills')); $socid=GETPOST('socid', 'int'); $massaction=GETPOST('massaction', 'alpha'); @@ -79,12 +76,14 @@ $contextpage='receptionlist'; $viewstatut=GETPOST('viewstatut'); +$object = new Reception($db); + // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('receptionlist')); $extrafields = new ExtraFields($db); // fetch optionals attributes and labels -$extrafields->fetch_name_optionals_label('reception'); +$extrafields->fetch_name_optionals_label($object->table_element); $search_array_options=$extrafields->getOptionalsFromPost(null, '', 'search_'); // List of fields to search into when doing a "search in all" @@ -111,15 +110,17 @@ $arrayfields=array( 'e.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), 'e.billed'=>array('label'=>$langs->trans("Billed"), 'checked'=>1, 'position'=>1000, 'enabled'=>(!empty($conf->global->WORKFLOW_BILL_ON_RECEPTION))) ); - // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) - { - $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>$extrafields->attribute_list[$key], 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>$extrafields->attribute_perms[$key]); - } + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } } +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); /* @@ -145,7 +146,6 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_town=''; $search_zip=""; $search_state=""; - $search_type=''; $search_country=''; $search_type_thirdparty=''; $search_billed=''; @@ -628,8 +628,9 @@ if ($resql) print '
'; print ''."\n"; - // Fields title search - print ''; + // Fields title search + // -------------------------------------------------------------------- + print ''; // Ref if (! empty($arrayfields['e.ref']['checked'])) { @@ -694,28 +695,8 @@ if ($resql) print ''; } // Extra fields - if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) - { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($arrayfields["ef.".$key]['checked'])) - { - $align=$extrafields->getAlignFlag($key); - $typeofextrafield=$extrafields->attribute_type[$key]; - print ''; - } - } - } + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; + // Fields from hook $parameters=array('arrayfields'=>$arrayfields); $reshook=$hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook @@ -902,23 +883,8 @@ if ($resql) } // Extra fields - if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) - { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($arrayfields["ef.".$key]['checked'])) - { - print ''; - if (! $i) $totalarray['nbfield']++; - } - } - } + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; + // Fields from hook $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/resource/list.php b/htdocs/resource/list.php index ee1ec735086..0f003f05eb6 100644 --- a/htdocs/resource/list.php +++ b/htdocs/resource/list.php @@ -113,19 +113,17 @@ $arrayfields = array( ), ); // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) { - foreach ($extrafields->attribute_label as $key => $val) { - $typeofextrafield=$extrafields->attribute_type[$key]; - if ($typeofextrafield!='separate') { - $arrayfields["ef." . $key] = array( - 'label' => $extrafields->attribute_label[$key], - 'checked' => $extrafields->attribute_list[$key], - 'position' => $extrafields->attribute_pos[$key], - 'enabled' => $extrafields->attribute_perms[$key] - ); - } +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) +{ + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); } } +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); + include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index 7420c417aae..fe363496213 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -210,15 +210,16 @@ $arrayfields=array( 's.import_key'=>array('label'=>"ImportId", 'checked'=>0, 'position'=>1100), ); // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } } - -$object = new Societe($db); +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); /* diff --git a/htdocs/user/list.php b/htdocs/user/list.php index 5520465a75d..95b9529017c 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -108,13 +108,16 @@ $arrayfields=array( 'u.statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), ); // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } } +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); // Init search fields $sall=trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml')); From 9b2905fb434595339d71d2ea1c40269fe1fab258 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Tue, 22 Oct 2019 17:10:52 +0200 Subject: [PATCH 504/980] Typo and comment --- htdocs/don/class/donstats.class.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/htdocs/don/class/donstats.class.php b/htdocs/don/class/donstats.class.php index dc12f5a1d68..039a85e6c26 100644 --- a/htdocs/don/class/donstats.class.php +++ b/htdocs/don/class/donstats.class.php @@ -19,7 +19,7 @@ */ /** - * \file htdocs/don/class/dontats.class.php + * \file htdocs/don/class/donstats.class.php * \ingroup donations * \brief File of class to manage donations statistics */ @@ -39,11 +39,22 @@ class DonationStats extends Stats */ public $table_element; - public $socid; + public $socid; public $userid; - + + /** + * @var string FROM + */ public $from; + + /** + * @var string field + */ public $field; + + /** + * @var string WHERE + */ public $where; From 5ab6228adbf75168a506ecbc1812cb96c879f568 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 22 Oct 2019 15:12:42 +0000 Subject: [PATCH 505/980] Fixing style errors. --- htdocs/don/class/donstats.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/don/class/donstats.class.php b/htdocs/don/class/donstats.class.php index 039a85e6c26..607d6555337 100644 --- a/htdocs/don/class/donstats.class.php +++ b/htdocs/don/class/donstats.class.php @@ -41,17 +41,17 @@ class DonationStats extends Stats public $socid; public $userid; - + /** - * @var string FROM + * @var string FROM */ public $from; - + /** * @var string field */ public $field; - + /** * @var string WHERE */ From e7e9898e0db31bf27dddde6d4ff071c7c0d4340c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 22 Oct 2019 18:36:36 +0200 Subject: [PATCH 506/980] FIX Better compatible fix for the trouble of weight / size units --- .../core/class/commondocgenerator.class.php | 18 ++++++++-------- htdocs/core/class/commonobject.class.php | 21 ++++++++++--------- htdocs/core/class/cunits.class.php | 4 ++-- htdocs/core/class/html.form.class.php | 4 ++-- htdocs/core/lib/functions.lib.php | 2 +- htdocs/core/lib/product.lib.php | 18 +++++++++++++++- .../expedition/doc/pdf_espadon.modules.php | 4 ++-- .../expedition/doc/pdf_rouget.modules.php | 4 ++-- .../reception/doc/pdf_squille.modules.php | 4 ++-- htdocs/expedition/card.php | 21 +++++++------------ .../product/actions_card_product.class.php | 8 +++---- htdocs/product/card.php | 10 ++++----- .../product/class/html.formproduct.class.php | 2 +- htdocs/product/class/product.class.php | 12 +++++------ htdocs/reception/card.php | 18 +++++++--------- htdocs/variants/combinations.php | 4 ++-- htdocs/variants/generator.php | 2 +- 17 files changed, 82 insertions(+), 74 deletions(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index 0a31bb79408..20889e1a742 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -643,11 +643,11 @@ abstract class CommonDocGenerator $array_key.'_tracking_number'=>$object->tracking_number, $array_key.'_tracking_url'=>$object->tracking_url, $array_key.'_shipping_method'=>$object->listmeths[0]['libelle'], - $array_key.'_weight'=>$object->trueWeight.' '.measuring_units_string($object->weight_units, 'weight'), - $array_key.'_width'=>$object->trueWidth.' '.measuring_units_string($object->width_units, 'size'), - $array_key.'_height'=>$object->trueHeight.' '.measuring_units_string($object->height_units, 'size'), - $array_key.'_depth'=>$object->trueDepth.' '.measuring_units_string($object->depth_units, 'size'), - $array_key.'_size'=>$calculatedVolume.' '.measuring_units_string(0, 'volume'), + $array_key.'_weight'=>$object->trueWeight.' '.measuringUnitString(0, 'weight', $object->weight_units), + $array_key.'_width'=>$object->trueWidth.' '.measuringUnitString(0, 'size', $object->width_units), + $array_key.'_height'=>$object->trueHeight.' '.measuringUnitString(0, 'size', $object->height_units), + $array_key.'_depth'=>$object->trueDepth.' '.measuringUnitString(0, 'size', $object->depth_units), + $array_key.'_size'=>$calculatedVolume.' '.measuringUnitString(0, 'volume'), ); // Add vat by rates @@ -701,10 +701,10 @@ abstract class CommonDocGenerator 'line_price_ht'=>price($line->total_ht), 'line_price_ttc'=>price($line->total_ttc), 'line_price_vat'=>price($line->total_tva), - 'line_weight'=>empty($line->weight) ? '' : $line->weight*$line->qty_shipped.' '.measuring_units_string($line->weight_units, 'weight'), - 'line_length'=>empty($line->length) ? '' : $line->length*$line->qty_shipped.' '.measuring_units_string($line->length_units, 'size'), - 'line_surface'=>empty($line->surface) ? '' : $line->surface*$line->qty_shipped.' '.measuring_units_string($line->surface_units, 'surface'), - 'line_volume'=>empty($line->volume) ? '' : $line->volume*$line->qty_shipped.' '.measuring_units_string($line->volume_units, 'volume'), + 'line_weight'=>empty($line->weight) ? '' : $line->weight*$line->qty_shipped.' '.measuringUnitString(0, 'weight', $line->weight_units), + 'line_length'=>empty($line->length) ? '' : $line->length*$line->qty_shipped.' '.measuringUnitString(0, 'size', $line->length_units), + 'line_surface'=>empty($line->surface) ? '' : $line->surface*$line->qty_shipped.' '.measuringUnitString(0, 'surface', $line->surface_units), + 'line_volume'=>empty($line->volume) ? '' : $line->volume*$line->qty_shipped.' '.measuringUnitString(0, 'volume', $line->volume_units), ); // Retrieve extrafields diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 838670b58c0..b331c479670 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -3823,17 +3823,18 @@ abstract class CommonObject $totalWeight += $weight * $qty * $trueWeightUnit; } else { - if ($weight_units == 99) { - // conversion 1 Pound = 0.45359237 KG - $trueWeightUnit = 0.45359237; - $totalWeight += $weight * $qty * $trueWeightUnit; - } elseif ($weight_units == 98) { - // conversion 1 Ounce = 0.0283495 KG - $trueWeightUnit = 0.0283495; - $totalWeight += $weight * $qty * $trueWeightUnit; - } - else + if ($weight_units == 99) { + // conversion 1 Pound = 0.45359237 KG + $trueWeightUnit = 0.45359237; + $totalWeight += $weight * $qty * $trueWeightUnit; + } elseif ($weight_units == 98) { + // conversion 1 Ounce = 0.0283495 KG + $trueWeightUnit = 0.0283495; + $totalWeight += $weight * $qty * $trueWeightUnit; + } + else { $totalWeight += $weight * $qty; // This may be wrong if we mix different units + } } if ($volume_units < 50) // >50 means a standard unit (power of 10 of official unit), > 50 means an exotic unit (like inch) { diff --git a/htdocs/core/class/cunits.class.php b/htdocs/core/class/cunits.class.php index 07cd778d3a0..e37849ff99a 100644 --- a/htdocs/core/class/cunits.class.php +++ b/htdocs/core/class/cunits.class.php @@ -247,8 +247,8 @@ class CUnits // extends CommonObject $sqlwhere = array(); if (count($filter) > 0) { foreach ($filter as $key => $value) { - if ($key=='t.rowid' || $key=='t.active') { - $sqlwhere[] = $key . '='. $value; + if ($key=='t.rowid' || $key=='t.active' || $key=='t.scale') { + $sqlwhere[] = $key . '='. (int) $value; } elseif (strpos($key, 'date') !== false) { $sqlwhere[] = $key.' = \''.$this->db->idate($value).'\''; diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index b4c52117ea9..cc6cdb78790 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -2425,7 +2425,7 @@ class Form $outvalUnits .= ' - ' . $unitToShow; } if ((!empty($objp->length) || !empty($objp->width) || !empty($objp->height)) && $objp->length_units!==null) { - $unitToShow = $objp->length . ' x ' . $objp->width . ' x ' . $objp->height . ' ' . measuring_units_string($objp->length_units, 'size'); + $unitToShow = $objp->length . ' x ' . $objp->width . ' x ' . $objp->height . ' ' . measuringUnitString(0, 'size', $objp->length_units); $outvalUnits .= ' - ' . $unitToShow; } if (!empty($objp->surface) && $objp->surface_units!==null) { @@ -2802,7 +2802,7 @@ class Form $outvalUnits .= ' - ' . $unitToShow; } if ((!empty($objp->length) || !empty($objp->width) || !empty($objp->height)) && $objp->length_units!==null) { - $unitToShow = $objp->length . ' x ' . $objp->width . ' x ' . $objp->height . ' ' . measuring_units_string($objp->length_units, 'size'); + $unitToShow = $objp->length . ' x ' . $objp->width . ' x ' . $objp->height . ' ' . measuringUnitString(0, 'size', $objp->length_units); $outvalUnits .= ' - ' . $unitToShow; } if (!empty($objp->surface) && $objp->surface_units!==null) { diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 88c20a2aaa8..09b184ad349 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -4624,7 +4624,7 @@ function showDimensionInBestUnit($dimension, $unit, $type, $outputlangs, $round $unit = $forceunitoutput; }*/ - $ret=price($dimension, 0, $outputlangs, 0, 0, $round).' '.measuring_units_string(0, $type, $unit); + $ret=price($dimension, 0, $outputlangs, 0, 0, $round).' '.measuringUnitString(0, $type, $unit); return $ret; } diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index 170421cecfd..2a2ee90493b 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -479,6 +479,22 @@ function show_stats_for_company($product, $socid) return $nblines++; } +/** + * Return translation label of a unit key. + * Function kept for backward compatibility. + * + * @param string $scale Scale of unit: '0', '-3', '6', ... + * @param string $measuring_style Style of unit: weight, volume,... + * @param int $unit ID of unit (rowid in llx_c_units table) + * @param int $use_short_label 1=Use short label ('g' instead of 'gram'). Short labels are not translated. + * @return string Unit string + * @see formproduct->selectMeasuringUnits + */ +function measuring_units_string($scale = '', $measuring_style = '', $unit = 0, $use_short_label = 0) +{ + return measuringUnitString($unit, $measuring_style, $scale, $use_short_label); +} + /** * Return translation label of a unit key * @@ -489,7 +505,7 @@ function show_stats_for_company($product, $socid) * @return string Unit string * @see formproduct->selectMeasuringUnits */ -function measuring_units_string($unit, $measuring_style = '', $scale = '', $use_short_label = 0) +function measuringUnitString($unit, $measuring_style = '', $scale = '', $use_short_label = 0) { global $langs, $db; require_once DOL_DOCUMENT_ROOT.'/core/class/cunits.class.php'; diff --git a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php index 21658ed32d0..9235cddc90f 100644 --- a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php @@ -509,12 +509,12 @@ class pdf_espadon extends ModelePdfExpedition $weighttxt=''; if ($object->lines[$i]->fk_product_type == 0 && $object->lines[$i]->weight) { - $weighttxt=round($object->lines[$i]->weight * $object->lines[$i]->qty_shipped, 5).' '.measuring_units_string($object->lines[$i]->weight_units, "weight"); + $weighttxt=round($object->lines[$i]->weight * $object->lines[$i]->qty_shipped, 5).' '.measuringUnitString(0, "weight", $object->lines[$i]->weight_units); } $voltxt=''; if ($object->lines[$i]->fk_product_type == 0 && $object->lines[$i]->volume) { - $voltxt=round($object->lines[$i]->volume * $object->lines[$i]->qty_shipped, 5).' '.measuring_units_string($object->lines[$i]->volume_units?$object->lines[$i]->volume_units:0, "volume"); + $voltxt=round($object->lines[$i]->volume * $object->lines[$i]->qty_shipped, 5).' '.measuringUnitString(0, "volume", $object->lines[$i]->volume_units?$object->lines[$i]->volume_units:0); } diff --git a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php index b180994b7e5..7757e3c9b56 100644 --- a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php @@ -525,12 +525,12 @@ class pdf_rouget extends ModelePdfExpedition $weighttxt=''; if ($object->lines[$i]->fk_product_type == 0 && $object->lines[$i]->weight) { - $weighttxt=round($object->lines[$i]->weight * $object->lines[$i]->qty_shipped, 5).' '.measuring_units_string($object->lines[$i]->weight_units, "weight"); + $weighttxt=round($object->lines[$i]->weight * $object->lines[$i]->qty_shipped, 5).' '.measuringUnitString(0, "weight", $object->lines[$i]->weight_units); } $voltxt=''; if ($object->lines[$i]->fk_product_type == 0 && $object->lines[$i]->volume) { - $voltxt=round($object->lines[$i]->volume * $object->lines[$i]->qty_shipped, 5).' '.measuring_units_string($object->lines[$i]->volume_units?$object->lines[$i]->volume_units:0, "volume"); + $voltxt=round($object->lines[$i]->volume * $object->lines[$i]->qty_shipped, 5).' '.measuringUnitString(0, "volume", $object->lines[$i]->volume_units?$object->lines[$i]->volume_units:0); } if (empty($conf->global->SHIPPING_PDF_HIDE_WEIGHT_AND_VOLUME)) diff --git a/htdocs/core/modules/reception/doc/pdf_squille.modules.php b/htdocs/core/modules/reception/doc/pdf_squille.modules.php index 3a8b1a78a3e..a84b86e908b 100644 --- a/htdocs/core/modules/reception/doc/pdf_squille.modules.php +++ b/htdocs/core/modules/reception/doc/pdf_squille.modules.php @@ -450,12 +450,12 @@ class pdf_squille extends ModelePdfReception $weighttxt=''; if ($object->lines[$i]->fk_product_type == 0 && $object->lines[$i]->product->weight) { - $weighttxt=round($object->lines[$i]->product->weight * $object->lines[$i]->qty, 5).' '.measuring_units_string($object->lines[$i]->product->weight_units, "weight"); + $weighttxt=round($object->lines[$i]->product->weight * $object->lines[$i]->qty, 5).' '.measuringUnitString(0, "weight", $object->lines[$i]->product->weight_units); } $voltxt=''; if ($object->lines[$i]->fk_product_type == 0 && $object->lines[$i]->product->volume) { - $voltxt=round($object->lines[$i]->product->volume * $object->lines[$i]->qty, 5).' '.measuring_units_string($object->lines[$i]->product->volume_units?$object->lines[$i]->product->volume_units:0, "volume"); + $voltxt=round($object->lines[$i]->product->volume * $object->lines[$i]->qty, 5).' '.measuringUnitString(0, "volume", $object->lines[$i]->product->volume_units?$object->lines[$i]->product->volume_units:0); } $pdf->writeHTMLCell($this->posxqtyordered - $this->posxweightvol + 2, 3, $this->posxweightvol - 1, $curY, $weighttxt.(($weighttxt && $voltxt)?'
':'').$voltxt, 0, 0, false, true, 'C'); diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index d1dbb129a19..5ca83e9ebae 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -1707,7 +1707,6 @@ elseif ($id || $ref) // Print form confirm print $formconfirm; - // Calculate totalWeight and totalVolume for all products // by adding weight and volume of each product line. $tmparray=$object->getTotalWeightVolume(); @@ -1850,16 +1849,14 @@ elseif ($id || $ref) else { print $object->trueWeight; - print ($object->trueWeight && $object->weight_units!='')?' '.measuring_units_string(0, "weight", $object->weight_units):''; + print ($object->trueWeight && $object->weight_units!='')?' '.measuringUnitString(0, "weight", $object->weight_units):''; } // Calculated if ($totalWeight > 0) { if (!empty($object->trueWeight)) print ' ('.$langs->trans("SumOfProductWeights").': '; - //print $totalWeight.' '.measuring_units_string(0, "weight"); print showDimensionInBestUnit($totalWeight, 0, "weight", $langs, isset($conf->global->MAIN_WEIGHT_DEFAULT_ROUND)?$conf->global->MAIN_WEIGHT_DEFAULT_ROUND:-1, isset($conf->global->MAIN_WEIGHT_DEFAULT_UNIT)?$conf->global->MAIN_WEIGHT_DEFAULT_UNIT:'no'); - //if (empty($object->trueWeight)) print ' ('.$langs->trans("Calculated").')'; if (!empty($object->trueWeight)) print ')'; } print '
'; @@ -1867,7 +1864,7 @@ elseif ($id || $ref) // Width print ''; // Height @@ -1887,7 +1884,7 @@ elseif ($id || $ref) else { print $object->trueHeight; - print ($object->trueHeight && $object->height_units!='')?' '.measuring_units_string(0, "size", $object->height_units):''; + print ($object->trueHeight && $object->height_units!='')?' '.measuringUnitString(0, "size", $object->height_units):''; } print ''; @@ -1895,7 +1892,7 @@ elseif ($id || $ref) // Depth print ''; // Volume @@ -1915,15 +1912,13 @@ elseif ($id || $ref) { if ($volumeUnit < 50) { - //print $calculatedVolume.' '.measuring_units_string($volumeUnit, "volume"); print showDimensionInBestUnit($calculatedVolume, $volumeUnit, "volume", $langs, isset($conf->global->MAIN_VOLUME_DEFAULT_ROUND)?$conf->global->MAIN_VOLUME_DEFAULT_ROUND:-1, isset($conf->global->MAIN_VOLUME_DEFAULT_UNIT)?$conf->global->MAIN_VOLUME_DEFAULT_UNIT:'no'); } - else print $calculatedVolume.' '.measuring_units_string($volumeUnit, "volume"); + else print $calculatedVolume.' '.measuringUnitString(0, "volume", $volumeUnit); } if ($totalVolume > 0) { if ($calculatedVolume) print ' ('.$langs->trans("SumOfProductVolumes").': '; - //print $totalVolume.' '.measuring_units_string(0, "volume"); print showDimensionInBestUnit($totalVolume, 0, "volume", $langs, isset($conf->global->MAIN_VOLUME_DEFAULT_ROUND)?$conf->global->MAIN_VOLUME_DEFAULT_ROUND:-1, isset($conf->global->MAIN_VOLUME_DEFAULT_UNIT)?$conf->global->MAIN_VOLUME_DEFAULT_UNIT:'no'); //if (empty($calculatedVolume)) print ' ('.$langs->trans("Calculated").')'; if ($calculatedVolume) print ')'; @@ -2409,18 +2404,18 @@ elseif ($id || $ref) // Weight print ''; // Volume print ''; // Size - //print ''; + //print ''; if ($action == 'editline' && $lines[$i]->id == $line_id) { diff --git a/htdocs/product/canvas/product/actions_card_product.class.php b/htdocs/product/canvas/product/actions_card_product.class.php index a5365545f62..5ac2464995a 100644 --- a/htdocs/product/canvas/product/actions_card_product.class.php +++ b/htdocs/product/canvas/product/actions_card_product.class.php @@ -211,25 +211,25 @@ class ActionsCardProduct // Weight if ($this->object->weight != '') { - $this->tpl['weight'] = $this->object->weight." ".measuring_units_string($this->object->weight_units, "weight"); + $this->tpl['weight'] = $this->object->weight." ".measuringUnitString(0, "weight", $this->object->weight_units); } // Length if ($this->object->length != '') { - $this->tpl['length'] = $this->object->length." ".measuring_units_string($this->object->length_units, "size"); + $this->tpl['length'] = $this->object->length." ".measuringUnitString(0, "size", $this->object->length_units); } // Surface if ($this->object->surface != '') { - $this->tpl['surface'] = $this->object->surface." ".measuring_units_string($this->object->surface_units, "surface"); + $this->tpl['surface'] = $this->object->surface." ".measuringUnitString(0, "surface", $this->object->surface_units); } // Volume if ($this->object->volume != '') { - $this->tpl['volume'] = $this->object->volume." ".measuring_units_string($this->object->volume_units, "volume"); + $this->tpl['volume'] = $this->object->volume." ".measuringUnitString(0, "volume", $this->object->volume_units); } $this->tpl['fiche_end']=dol_get_fiche_end(); diff --git a/htdocs/product/card.php b/htdocs/product/card.php index f8f64decbfa..abee5f8a678 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -1885,7 +1885,7 @@ else print ''; @@ -1469,7 +1467,7 @@ elseif ($id || $ref) // Width print ''; // Height @@ -1489,7 +1487,7 @@ elseif ($id || $ref) else { print $object->trueHeight; - print ($object->trueHeight && $object->height_units!='')?' '.measuring_units_string($object->height_units, "size"):''; + print ($object->trueHeight && $object->height_units!='')?' '.measuringUnitString(0, "size", $object->height_units):''; } print ''; @@ -1497,7 +1495,7 @@ elseif ($id || $ref) // Depth print ''; // Volume @@ -1517,15 +1515,13 @@ elseif ($id || $ref) { if ($volumeUnit < 50) { - //print $calculatedVolume.' '.measuring_units_string($volumeUnit,"volume"); print showDimensionInBestUnit($calculatedVolume, $volumeUnit, "volume", $langs, isset($conf->global->MAIN_VOLUME_DEFAULT_ROUND)?$conf->global->MAIN_VOLUME_DEFAULT_ROUND:-1, isset($conf->global->MAIN_VOLUME_DEFAULT_UNIT)?$conf->global->MAIN_VOLUME_DEFAULT_UNIT:'no'); } - else print $calculatedVolume.' '.measuring_units_string($volumeUnit, "volume"); + else print $calculatedVolume.' '.measuringUnitString(0, "volume", $volumeUnit); } if ($totalVolume > 0) { if ($calculatedVolume) print ' ('.$langs->trans("SumOfProductVolumes").': '; - //print $totalVolume.' '.measuring_units_string(0,"volume"); print showDimensionInBestUnit($totalVolume, 0, "volume", $langs, isset($conf->global->MAIN_VOLUME_DEFAULT_ROUND)?$conf->global->MAIN_VOLUME_DEFAULT_ROUND:-1, isset($conf->global->MAIN_VOLUME_DEFAULT_UNIT)?$conf->global->MAIN_VOLUME_DEFAULT_UNIT:'no'); //if (empty($calculatedVolume)) print ' ('.$langs->trans("Calculated").')'; if ($calculatedVolume) print ')'; @@ -1957,13 +1953,13 @@ elseif ($id || $ref) // Weight print ''; // Volume print ''; diff --git a/htdocs/variants/combinations.php b/htdocs/variants/combinations.php index 080242d3137..e5f1d17b8aa 100644 --- a/htdocs/variants/combinations.php +++ b/htdocs/variants/combinations.php @@ -350,7 +350,7 @@ if (! empty($id) || ! empty($ref)) print ' - isProduct()) print ''; ?> + isProduct()) print ''; ?> "; @@ -3803,19 +3805,20 @@ elseif ($id > 0 || ! empty($ref)) $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($usercancreate) { - if ($action != 'classify') + if ($action != 'classify') { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/compta/facture/class/api_invoices.class.php b/htdocs/compta/facture/class/api_invoices.class.php index 654af5aeaac..25d92fad92a 100644 --- a/htdocs/compta/facture/class/api_invoices.class.php +++ b/htdocs/compta/facture/class/api_invoices.class.php @@ -415,7 +415,7 @@ class Invoices extends DolibarrApi return $this->_cleanObjectDatas($this->invoice); } - /** + /** * Delete a contact type of given invoice * * @param int $id Id of invoice to update @@ -529,10 +529,9 @@ class Invoices extends DolibarrApi // update bank account if (!empty($this->invoice->fk_account)) { - if($this->invoice->setBankAccount($this->invoice->fk_account) == 0) - { - throw new RestException(400, $this->invoice->error); - } + if ($this->invoice->setBankAccount($this->invoice->fk_account) == 0) { + throw new RestException(400, $this->invoice->error); + } } if($this->invoice->update(DolibarrApiAccess::$user)) @@ -909,18 +908,18 @@ class Invoices extends DolibarrApi $result = $this->invoice->fetch($id); - if( ! $result ) { + if (! $result) { throw new RestException(404, 'Invoice not found'); } - if( ! DolibarrApi::_checkAccessToResource('facture', $this->invoice->id)) { + if (! DolibarrApi::_checkAccessToResource('facture', $this->invoice->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } return $this->_cleanObjectDatas($this->invoice); } - /** + /** * Create a discount (credit available) for a credit note or a deposit. * * @param int $id Invoice ID diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 0cb6921a6f3..8859578e94b 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -862,10 +862,10 @@ class Facture extends CommonInvoice if (! $error && ! $notrigger) { - // Call trigger - $result=$this->call_trigger('BILL_CREATE', $user); - if ($result < 0) $error++; - // End call triggers + // Call trigger + $result=$this->call_trigger('BILL_CREATE', $user); + if ($result < 0) $error++; + // End call triggers } if (! $error) @@ -1605,9 +1605,9 @@ class Facture extends CommonInvoice // multilangs if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($objp->fk_product) && ! empty($loadalsotranslation)) { - $line = new Product($this->db); - $line->fetch($objp->fk_product); - $line->getMultiLangs(); + $line = new Product($this->db); + $line->fetch($objp->fk_product); + $line->getMultiLangs(); } $this->lines[$i] = $line; @@ -2545,7 +2545,7 @@ class Facture extends CommonInvoice if (empty($final)) $this->situation_final = 0; else $this->situation_final = 1; - $this->setFinal($user); + $this->setFinal($user); } } } @@ -2587,10 +2587,12 @@ class Facture extends CommonInvoice $next_invoice->brouillon = 1; foreach ($next_invoice->lines as $line) { - $result = $next_invoice->updateline($line->id, $line->desc, $line->subprice, $line->qty, $line->remise_percent, - $line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, - $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent, - $line->fk_unit); + $result = $next_invoice->updateline( + $line->id, $line->desc, $line->subprice, $line->qty, $line->remise_percent, + $line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, + $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent, + $line->fk_unit + ); if ($result < 0) { diff --git a/htdocs/compta/facture/contact.php b/htdocs/compta/facture/contact.php index 5fb26a21cd6..62960b71346 100644 --- a/htdocs/compta/facture/contact.php +++ b/htdocs/compta/facture/contact.php @@ -163,20 +163,21 @@ if ($id > 0 || ! empty($ref)) $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->facture->creer) { - if ($action != 'classify') + if ($action != 'classify') { //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + $morehtmlref.=' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index fb56ccb916f..79780402108 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -1242,19 +1242,20 @@ else $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->facture->creer) { - if ($action != 'classify') + if ($action != 'classify') { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php index e13dc30204f..f714d51cf6e 100644 --- a/htdocs/compta/facture/invoicetemplate_list.php +++ b/htdocs/compta/facture/invoicetemplate_list.php @@ -223,8 +223,9 @@ $sql.= " f.nb_gen_done, f.nb_gen_max, f.date_last_gen, f.date_when, f.suspended, $sql.= " f.datec, f.tms,"; $sql.= " f.fk_cond_reglement, f.fk_mode_reglement"; // Add fields from extrafields -if (! empty($extrafields->attributes[$object->table_element]['label'])) +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook @@ -513,68 +514,68 @@ if ($resql) if (! empty($arrayfields['f.titre']['checked'])) { - print '\n"; - if (! $i) $totalarray['nbfield']++; + print '\n"; + if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['s.nom']['checked'])) { - print ''; - if (! $i) $totalarray['nbfield']++; + print ''; + if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['f.total']['checked'])) { - print ''."\n"; - if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total'; - $totalarray['val']['f.total'] += $objp->total; + print ''."\n"; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total'; + $totalarray['val']['f.total'] += $objp->total; } if (! empty($arrayfields['f.tva']['checked'])) { - print ''."\n"; - if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.tva'; - $totalarray['val']['f.tva'] += $objp->total_vat; + print ''."\n"; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.tva'; + $totalarray['val']['f.tva'] += $objp->total_vat; } if (! empty($arrayfields['f.total_ttc']['checked'])) { - print ''."\n"; - if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_ttc'; - $totalarray['val']['f.total_ttc'] += $objp->total_ttc; + print ''."\n"; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_ttc'; + $totalarray['val']['f.total_ttc'] += $objp->total_ttc; } // Payment term if (! empty($arrayfields['f.fk_cond_reglement']['checked'])) { - print ''."\n"; - if (! $i) $totalarray['nbfield']++; + print ''."\n"; + if (! $i) $totalarray['nbfield']++; } // Payment mode if (! empty($arrayfields['f.fk_mode_reglement']['checked'])) { - print ''."\n"; - if (! $i) $totalarray['nbfield']++; + print ''."\n"; + if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['recurring']['checked'])) { - print ''; - if (! $i) $totalarray['nbfield']++; + print ''; + if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['f.frequency']['checked'])) { - print ''; - if (! $i) $totalarray['nbfield']++; + print ''; + if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['f.unit_frequency']['checked'])) { - print ''; - if (! $i) $totalarray['nbfield']++; + print ''; + if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['f.nb_gen_done']['checked'])) { @@ -586,10 +587,10 @@ if ($resql) // Date last generation if (! empty($arrayfields['f.date_last_gen']['checked'])) { - print ''; - if (! $i) $totalarray['nbfield']++; + print ''; + if (! $i) $totalarray['nbfield']++; } // Date next generation if (! empty($arrayfields['f.date_when']['checked'])) @@ -611,17 +612,17 @@ if ($resql) } if (! empty($arrayfields['f.datec']['checked'])) { - print ''; - if (! $i) $totalarray['nbfield']++; + print ''; + if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['f.tms']['checked'])) { - print ''; - if (! $i) $totalarray['nbfield']++; + print ''; + if (! $i) $totalarray['nbfield']++; } $obj = $objp; @@ -632,12 +633,11 @@ if ($resql) $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Status - if (! empty($arrayfields['status']['checked'])) - { - print ''; - if (! $i) $totalarray['nbfield']++; + if (! empty($arrayfields['status']['checked'])) { + print ''; + if (! $i) $totalarray['nbfield']++; } // Action column print ''; $i=0; while ($i < $totalarray['nbfield']) { - $i++; - if ($i == 1) - { + $i++; + if ($i == 1) + { if ($num < $limit && empty($offset)) print ''; else print ''; - } - elseif ($totalarray['totalhtfield'] == $i) print ''; - elseif ($totalarray['totalvatfield'] == $i) print ''; - elseif ($totalarray['totallocaltax1field'] == $i) print ''; - elseif ($totalarray['totallocaltax2field'] == $i) print ''; - elseif ($totalarray['totalttcfield'] == $i) print ''; - elseif ($totalarray['totalamfield'] == $i) print ''; - elseif ($totalarray['totalrtpfield'] == $i) print ''; - else print ''; + } + elseif ($totalarray['totalhtfield'] == $i) print ''; + elseif ($totalarray['totalvatfield'] == $i) print ''; + elseif ($totalarray['totallocaltax1field'] == $i) print ''; + elseif ($totalarray['totallocaltax2field'] == $i) print ''; + elseif ($totalarray['totalttcfield'] == $i) print ''; + elseif ($totalarray['totalamfield'] == $i) print ''; + elseif ($totalarray['totalrtpfield'] == $i) print ''; + else print ''; } print ''; } diff --git a/htdocs/compta/facture/prelevement.php b/htdocs/compta/facture/prelevement.php index 45bbfc3eef3..cf59af89cf6 100644 --- a/htdocs/compta/facture/prelevement.php +++ b/htdocs/compta/facture/prelevement.php @@ -189,20 +189,21 @@ if ($object->id > 0) $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->facture->creer) { - if ($action != 'classify') + if ($action != 'classify') { //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + $morehtmlref.=' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/compta/facture/stats/index.php b/htdocs/compta/facture/stats/index.php index d475c5c3e5f..dadbb27b30d 100644 --- a/htdocs/compta/facture/stats/index.php +++ b/htdocs/compta/facture/stats/index.php @@ -233,48 +233,45 @@ foreach ($tmp_companies as $value) { print '
'; -//if (empty($socid)) -//{ - // Show filter box - print '
'; - print ''; - print '
 '; - if (in_array($typeofextrafield, array('varchar', 'int', 'double', 'select'))) - { - $crit=$val; - $tmpkey=preg_replace('/search_options_/', '', $key); - $searchclass=''; - if (in_array($typeofextrafield, array('varchar', 'select'))) $searchclass='searchstring'; - if (in_array($typeofextrafield, array('int', 'double'))) $searchclass='searchnum'; - print ''; - } - print ''; - $tmpkey='options_'.$key; - print $extrafields->showOutputField($key, $obj->$tmpkey, '', 1); - print '
'.$form->editfieldkey("Width", 'trueWidth', $object->trueWidth, $object, $user->rights->expedition->creer).''; print $form->editfieldval("Width", 'trueWidth', $object->trueWidth, $object, $user->rights->expedition->creer); - print ($object->trueWidth && $object->width_units!='')?' '.measuring_units_string(0, "size", $object->width_units):''; + print ($object->trueWidth && $object->width_units!='')?' '.measuringUnitString(0, "size", $object->width_units):''; print '
'.$form->editfieldkey("Depth", 'trueDepth', $object->trueDepth, $object, $user->rights->expedition->creer).''; print $form->editfieldval("Depth", 'trueDepth', $object->trueDepth, $object, $user->rights->expedition->creer); - print ($object->trueDepth && $object->depth_units!='')?' '.measuring_units_string(0, "size", $object->depth_units):''; + print ($object->trueDepth && $object->depth_units!='')?' '.measuringUnitString(0, "size", $object->depth_units):''; print '
'; - if ($lines[$i]->fk_product_type == Product::TYPE_PRODUCT) print $lines[$i]->weight*$lines[$i]->qty_shipped.' '.measuring_units_string(0, "weight", $lines[$i]->weight_units); + if ($lines[$i]->fk_product_type == Product::TYPE_PRODUCT) print $lines[$i]->weight*$lines[$i]->qty_shipped.' '.measuringUnitString(0, "weight", $lines[$i]->weight_units); else print ' '; print ''; - if ($lines[$i]->fk_product_type == Product::TYPE_PRODUCT) print $lines[$i]->volume*$lines[$i]->qty_shipped.' '.measuring_units_string(0, "volume", $lines[$i]->volume_units); + if ($lines[$i]->fk_product_type == Product::TYPE_PRODUCT) print $lines[$i]->volume*$lines[$i]->qty_shipped.' '.measuringUnitString(0, "volume", $lines[$i]->volume_units); else print ' '; print ''.$lines[$i]->volume*$lines[$i]->qty_shipped.' '.measuring_units_string($lines[$i]->volume_units, "volume").''.$lines[$i]->volume*$lines[$i]->qty_shipped.' '.measuringUnitString(0, "volume", $lines[$i]->volume_units).'
'.$langs->trans("Weight").''; if ($object->weight != '') { - print $object->weight." ".measuring_units_string(0, "weight", $object->weight_units); + print $object->weight." ".measuringUnitString(0, "weight", $object->weight_units); } else { @@ -1902,7 +1902,7 @@ else print $object->length; if ($object->width) print " x ".$object->width; if ($object->height) print " x ".$object->height; - print ' '.measuring_units_string(0, "size", $object->length_units); + print ' '.measuringUnitString(0, "size", $object->length_units); } else { @@ -1916,7 +1916,7 @@ else print '
'.$langs->trans("Surface").''; if ($object->surface != '') { - print $object->surface." ".measuring_units_string(0, "surface", $object->surface_units); + print $object->surface." ".measuringUnitString(0, "surface", $object->surface_units); } else { @@ -1930,7 +1930,7 @@ else print '
'.$langs->trans("Volume").''; if ($object->volume != '') { - print $object->volume." ".measuring_units_string(0, "volume", $object->volume_units); + print $object->volume." ".measuringUnitString(0, "volume", $object->volume_units); } else { @@ -1945,7 +1945,7 @@ else print '
'.$langs->trans("NetMeasure").''; if ($object->net_measure != '') { - print $object->net_measure." ".measuring_units_string(0, "weight", $object->net_measure_units); + print $object->net_measure." ".measuringUnitString(0, "weight", $object->net_measure_units); } else { diff --git a/htdocs/product/class/html.formproduct.class.php b/htdocs/product/class/html.formproduct.class.php index 8684c23511e..7b63fbd3c8c 100644 --- a/htdocs/product/class/html.formproduct.class.php +++ b/htdocs/product/class/html.formproduct.class.php @@ -327,7 +327,7 @@ class FormProduct /** * Return a combo box with list of units - * For the moment, units labels are defined in measuring_units_string + * Units labels are defined in llx_c_units * * @param string $name Name of HTML field * @param string $measuring_style Unit to show: weight, size, surface, volume, time diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index f526c5e3c52..8545036b0b9 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -4197,22 +4197,22 @@ class Product extends CommonObject if ($this->type == Product::TYPE_PRODUCT) { if ($this->weight) { - $label.="
".$langs->trans("Weight").': '.$this->weight.' '.measuring_units_string($this->weight_units, "weight"); + $label.="
".$langs->trans("Weight").': '.$this->weight.' '.measuringUnitString(0, "weight", $this->weight_units); } if ($this->length) { - $label.="
".$langs->trans("Length").': '.$this->length.' '.measuring_units_string($this->length_units, 'size'); + $label.="
".$langs->trans("Length").': '.$this->length.' '.measuringUnitString(0, 'size', $this->length_units); } if ($this->width) { - $label.="
".$langs->trans("Width").': '.$this->width.' '.measuring_units_string($this->width_units, 'size'); + $label.="
".$langs->trans("Width").': '.$this->width.' '.measuringUnitString(0, 'size', $this->width_units); } if ($this->height) { - $label.="
".$langs->trans("Height").': '.$this->height.' '.measuring_units_string($this->height_units, 'size'); + $label.="
".$langs->trans("Height").': '.$this->height.' '.measuringUnitString(0, 'size', $this->height_units); } if ($this->surface) { - $label.="
".$langs->trans("Surface").': '.$this->surface.' '.measuring_units_string($this->surface_units, 'surface'); + $label.="
".$langs->trans("Surface").': '.$this->surface.' '.measuringUnitString(0, 'surface', $this->surface_units); } if ($this->volume) { - $label.="
".$langs->trans("Volume").': '.$this->volume.' '.measuring_units_string($this->volume_units, 'volume'); + $label.="
".$langs->trans("Volume").': '.$this->volume.' '.measuringUnitString(0, 'volume', $this->volume_units); } } diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index 0a7ec02afd8..9d2ae9b8c17 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -1452,16 +1452,14 @@ elseif ($id || $ref) else { print $object->trueWeight; - print ($object->trueWeight && $object->weight_units!='')?' '.measuring_units_string($object->weight_units, "weight"):''; + print ($object->trueWeight && $object->weight_units!='')?' '.measuringUnitString(0, "weight", $object->weight_units):''; } // Calculated if ($totalWeight > 0) { if (!empty($object->trueWeight)) print ' ('.$langs->trans("SumOfProductWeights").': '; - //print $totalWeight.' '.measuring_units_string(0,"weight"); print showDimensionInBestUnit($totalWeight, 0, "weight", $langs, isset($conf->global->MAIN_WEIGHT_DEFAULT_ROUND)?$conf->global->MAIN_WEIGHT_DEFAULT_ROUND:-1, isset($conf->global->MAIN_WEIGHT_DEFAULT_UNIT)?$conf->global->MAIN_WEIGHT_DEFAULT_UNIT:'no'); - //if (empty($object->trueWeight)) print ' ('.$langs->trans("Calculated").')'; if (!empty($object->trueWeight)) print ')'; } print '
'.$form->editfieldkey("Width", 'trueWidth', $object->trueWidth, $object, $user->rights->reception->creer).''; print $form->editfieldval("Width", 'trueWidth', $object->trueWidth, $object, $user->rights->reception->creer); - print ($object->trueWidth && $object->width_units!='')?' '.measuring_units_string($object->width_units, "size"):''; + print ($object->trueWidth && $object->width_units!='')?' '.measuringUnitString(0, "size", $object->width_units):''; print '
'.$form->editfieldkey("Depth", 'trueDepth', $object->trueDepth, $object, $user->rights->reception->creer).''; print $form->editfieldval("Depth", 'trueDepth', $object->trueDepth, $object, $user->rights->reception->creer); - print ($object->trueDepth && $object->depth_units!='')?' '.measuring_units_string($object->depth_units, "size"):''; + print ($object->trueDepth && $object->depth_units!='')?' '.measuringUnitString(0, "size", $object->depth_units):''; print '
'; - if ($lines[$i]->fk_product_type == Product::TYPE_PRODUCT) print $lines[$i]->product->weight*$lines[$i]->qty.' '.measuring_units_string($lines[$i]->product->weight_units, "weight"); + if ($lines[$i]->fk_product_type == Product::TYPE_PRODUCT) print $lines[$i]->product->weight*$lines[$i]->qty.' '.measuringUnitString(0, "weight", $lines[$i]->product->weight_units); else print ' '; print ''; - if ($lines[$i]->fk_product_type == Product::TYPE_PRODUCT) print $lines[$i]->product->volume*$lines[$i]->qty.' '.measuring_units_string($lines[$i]->product->volume_units, "volume"); + if ($lines[$i]->fk_product_type == Product::TYPE_PRODUCT) print $lines[$i]->product->volume*$lines[$i]->qty.' '.measuringUnitString(0, "volume", $lines[$i]->product->volume_units); else print ' '; print '
'.$langs->trans("Weight").''; if ($object->weight != '') { - print $object->weight." ".measuring_units_string($object->weight_units, "weight"); + print $object->weight." ".measuringUnitString(0, "weight", $object->weight_units); } else { @@ -776,7 +776,7 @@ if (! empty($id) || ! empty($ref)) } ?> variation_price >= 0 ? '+' : '').price($currcomb->variation_price).($currcomb->variation_price_percentage ? ' %' : '') ?>'.($currcomb->variation_weight >= 0 ? '+' : '').price($currcomb->variation_weight).' '.measuring_units_string($prodstatic->weight_units, 'weight').''.($currcomb->variation_weight >= 0 ? '+' : '').price($currcomb->variation_weight).' '.measuringUnitString(0, 'weight', $prodstatic->weight_units).'getLibStatut(2, 0) ?> getLibStatut(2, 1) ?> diff --git a/htdocs/variants/generator.php b/htdocs/variants/generator.php index 57b9963d9b4..6012ddd511c 100644 --- a/htdocs/variants/generator.php +++ b/htdocs/variants/generator.php @@ -179,7 +179,7 @@ if (! empty($id) || ! empty($ref)) { '."\n"; - } + print ' '."\n"; + } print load_fiche_titre($langs->trans("DoPayment")); print "
\n"; From c44425d0a0c998ac8ce531f142fea1c2111fe958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 26 Oct 2019 14:51:57 +0200 Subject: [PATCH 604/980] start clean indent in compta directory --- htdocs/comm/contact.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/contact.php b/htdocs/comm/contact.php index 38e4e9b0a0d..10314b597e7 100644 --- a/htdocs/comm/contact.php +++ b/htdocs/comm/contact.php @@ -109,7 +109,8 @@ if (! empty($search_company)) if (! empty($contactname)) // acces a partir du module de recherche { $sql.= " AND (p.name LIKE '%".$db->escape($contactname)."%' OR lower(p.firstname) LIKE '%".$db->escape($contactname)."%') "; - $sortf$sortorder = "ASC"; + $sortfield = "p.name"; + $sortorder = "ASC"; } $sql.= $db->order($sortfield, $sortorder); From bb89a16c1aebba0b43a7985a6e2c578d872aa70d Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 26 Oct 2019 14:59:43 +0200 Subject: [PATCH 605/980] Update societe.class.php --- htdocs/societe/class/societe.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 8e96ff86d1e..07fab602502 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1865,7 +1865,7 @@ class Societe extends CommonObject $reparray=array(); - $sql = "SELECT DISTINCT u.rowid, u.login, u.lastname, u.firstname, u.office_phone, u.email, u.statut, u.entity, u.photo"; + $sql = "SELECT DISTINCT u.rowid, u.login, u.lastname, u.firstname, u.office_phone, u.job, u.email, u.statut, u.entity, u.photo"; $sql.= " FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc, ".MAIN_DB_PREFIX."user as u"; if (! empty($conf->multicompany->enabled) && ! empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE)) { @@ -1895,6 +1895,7 @@ class Societe extends CommonObject $reparray[$i]['firstname']=$obj->firstname; $reparray[$i]['email']=$obj->email; $reparray[$i]['phone']=$obj->office_phone; + $reparray[$i]['job']=$obj->job; $reparray[$i]['statut']=$obj->statut; $reparray[$i]['entity']=$obj->entity; $reparray[$i]['login']=$obj->login; From b96cbec2b5ed0c157a7edd489aab387fbfb5e06c Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 26 Oct 2019 15:00:42 +0200 Subject: [PATCH 606/980] Update linesalesrepresentative.tpl.php --- htdocs/societe/tpl/linesalesrepresentative.tpl.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/societe/tpl/linesalesrepresentative.tpl.php b/htdocs/societe/tpl/linesalesrepresentative.tpl.php index 393159ec2d6..9a17ac1e202 100644 --- a/htdocs/societe/tpl/linesalesrepresentative.tpl.php +++ b/htdocs/societe/tpl/linesalesrepresentative.tpl.php @@ -43,6 +43,7 @@ if ($nbofsalesrepresentative > 0) $userstatic->photo=$val['photo']; $userstatic->email=$val['email']; $userstatic->phone=$val['phone']; + $userstatic->job=$val['job']; $userstatic->entity=$val['entity']; print $userstatic->getNomUrl(-1); print ' '; From 6f52ae80fe9d3a8929ac3a096b1e38f10c293886 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 26 Oct 2019 15:01:40 +0200 Subject: [PATCH 607/980] Update user.class.php --- htdocs/user/class/user.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 549309dddfb..db919c9bf0a 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -2320,8 +2320,8 @@ class User extends CommonObject $label.= '
'; $label.= '' . $langs->trans("User") . '
'; $label.= '' . $langs->trans('Name') . ': ' . $this->getFullName($langs, ''); - if (! empty($this->login)) - $label.= '
' . $langs->trans('Login') . ': ' . $this->login; + if (! empty($this->login)) $label.= '
' . $langs->trans('Login') . ': ' . $this->login; + if (! empty($this->job)) $label.= '
' . $langs->trans("Job").': '.$this->job; $label.= '
' . $langs->trans("Email").': '.$this->email; if (! empty($this->phone)) $label.= '
' . $langs->trans("Phone").': '.$this->phone; if (! empty($this->admin)) From a1f0245c79f28faf004ee54e65b5e6615c1ea04a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 26 Oct 2019 18:13:20 +0200 Subject: [PATCH 608/980] clean indent in compta, contact directory --- dev/setup/codesniffer/ruleset.xml | 4 +- htdocs/compta/bank/class/account.class.php | 12 +- htdocs/compta/facture/card.php | 61 ++-- .../facture/class/api_invoices.class.php | 15 +- htdocs/compta/facture/class/facture.class.php | 26 +- htdocs/compta/facture/contact.php | 27 +- htdocs/compta/facture/fiche-rec.php | 25 +- .../compta/facture/invoicetemplate_list.php | 104 +++---- htdocs/compta/facture/list.php | 42 +-- htdocs/compta/facture/prelevement.php | 27 +- htdocs/compta/facture/stats/index.php | 81 +++--- .../facture/tpl/linkedobjectblock.tpl.php | 121 ++++---- .../tpl/linkedobjectblockForRec.tpl.php | 23 +- htdocs/compta/prelevement/card.php | 2 +- .../class/bonprelevement.class.php | 12 +- htdocs/compta/prelevement/fiche-rejet.php | 2 +- htdocs/compta/resultat/index.php | 10 +- htdocs/compta/sociales/card.php | 25 +- htdocs/compta/stats/byratecountry.php | 268 +++++++++--------- htdocs/compta/stats/cabyprodserv.php | 14 +- htdocs/compta/stats/index.php | 4 +- .../default/tpl/contactcard_edit.tpl.php | 16 +- .../default/tpl/contactcard_view.tpl.php | 43 ++- htdocs/contact/card.php | 2 +- htdocs/contact/consumption.php | 4 +- htdocs/contact/document.php | 4 +- htdocs/contact/list.php | 12 +- 27 files changed, 489 insertions(+), 497 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 8c01eea6d99..015733ed95f 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -186,7 +186,7 @@ - + diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index cfecc31427b..53fa268b750 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -1360,10 +1360,10 @@ class Account extends CommonObject $linkstart = 'global->BANK_SHOW_ORDER_OPTION) + preg_replace('/ ?[^Bank]AccountNumber ?/', 'BankAccountNumber', + $conf->global->BANK_SHOW_ORDER_OPTION) ); } } diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index fe88c9ec717..08fbb019fd2 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -14,7 +14,7 @@ * Copyright (C) 2013 Cédric Salvador * Copyright (C) 2014-2019 Ferran Marcet * Copyright (C) 2015-2016 Marcos García - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2019 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 @@ -809,14 +809,16 @@ if (empty($reshook)) // Total credit note and deposit $total_creditnote_and_deposit = 0; - $sql = "SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,"; - $sql .= " re.description, re.fk_facture_source"; - $sql .= " FROM " . MAIN_DB_PREFIX . "societe_remise_except as re"; - $sql .= " WHERE fk_facture = " . $object->id; - $resql = $db->query($sql); - if (!empty($resql)) { - while ($obj = $db->fetch_object($resql)) $total_creditnote_and_deposit += $obj->amount_ttc; - } else dol_print_error($db); + $sql = "SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,"; + $sql .= " re.description, re.fk_facture_source"; + $sql .= " FROM " . MAIN_DB_PREFIX . "societe_remise_except as re"; + $sql .= " WHERE fk_facture = " . $object->id; + $resql = $db->query($sql); + if (!empty($resql)) { + while ($obj = $db->fetch_object($resql)) { + $total_creditnote_and_deposit += $obj->amount_ttc; + } + } else dol_print_error($db); $discount->amount_ht = $discount->amount_ttc = $total_paiements + $total_creditnote_and_deposit - $object->total_ttc; $discount->amount_tva = 0; @@ -1516,7 +1518,7 @@ if (empty($reshook)) $localtax1_tx = get_localtax($tva_tx, 1, $object->thirdparty); $localtax2_tx = get_localtax($tva_tx, 2, $object->thirdparty); - $result = $object->addline( + $result = $object->addline( $desc, $lines[$i]->subprice, $lines[$i]->qty, $tva_tx, $localtax1_tx, $localtax2_tx, $lines[$i]->fk_product, $lines[$i]->remise_percent, $date_start, $date_end, 0, $lines[$i]->info_bits, $lines[$i]->fk_remise_except, 'HT', 0, $product_type, $lines[$i]->rang, $lines[$i]->special_code, $object->origin, $lines[$i]->rowid, @@ -2726,7 +2728,7 @@ if ($action == 'create') $text.=' '.$langs->trans("ToCreateARecurringInvoiceGene", $langs->transnoentitiesnoconv("MenuFinancial"), $langs->transnoentitiesnoconv("BillsCustomers"), $langs->transnoentitiesnoconv("ListOfTemplates")); if (empty($conf->global->INVOICE_DISABLE_AUTOMATIC_RECURRING_INVOICE)) { - $text.=' '.$langs->trans("ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv('Module2300Name')); + $text.=' '.$langs->trans("ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv('Module2300Name')); } print info_admin($text, 0, 0, 0).'
'; } @@ -3274,12 +3276,12 @@ if ($action == 'create') print '
'; include_once DOL_DOCUMENT_ROOT . '/core/modules/facture/modules_facture.php'; $liste = ModelePDFFactures::liste_modeles($db); - if(!empty($conf->global->INVOICE_USE_DEFAULT_DOCUMENT)){ // Hidden conf - $paramkey='FACTURE_ADDON_PDF_'.$object->type; - $curent = !empty($conf->global->$paramkey)?$conf->global->$paramkey:$conf->global->FACTURE_ADDON_PDF; - } - else{ - $curent = $conf->global->FACTURE_ADDON_PDF; + if(!empty($conf->global->INVOICE_USE_DEFAULT_DOCUMENT)){ + // Hidden conf + $paramkey='FACTURE_ADDON_PDF_'.$object->type; + $curent = !empty($conf->global->$paramkey)?$conf->global->$paramkey:$conf->global->FACTURE_ADDON_PDF; + } else { + $curent = $conf->global->FACTURE_ADDON_PDF; } print $form->selectarray('model', $liste, $curent); print "
'; - print $invoicerectmp->getNomUrl(1); - print ""; - print "'; + print $invoicerectmp->getNomUrl(1); + print ""; + print "'.$companystatic->getNomUrl(1, 'customer').''.$companystatic->getNomUrl(1, 'customer').''.price($objp->total).''.price($objp->total).''.price($objp->total_vat).''.price($objp->total_vat).''.price($objp->total_ttc).''.price($objp->total_ttc).''; - print $form->form_conditions_reglement('', $objp->fk_cond_reglement, 'none'); - print ''; + print $form->form_conditions_reglement('', $objp->fk_cond_reglement, 'none'); + print ''; - print $form->form_modes_reglement('', $objp->fk_mode_reglement, 'none'); - print ''; + print $form->form_modes_reglement('', $objp->fk_mode_reglement, 'none'); + print ''.yn($objp->frequency?1:0).''.yn($objp->frequency?1:0).''.($objp->frequency > 0 ? $objp->frequency : '').''.($objp->frequency > 0 ? $objp->frequency : '').''.($objp->frequency > 0 ? $objp->unit_frequency : '').''.($objp->frequency > 0 ? $objp->unit_frequency : '').''; - print ($objp->frequency > 0 ? dol_print_date($db->jdate($objp->date_last_gen), 'day') : ''.$langs->trans('NA').''); - print ''; + print ($objp->frequency > 0 ? dol_print_date($db->jdate($objp->date_last_gen), 'day') : ''.$langs->trans('NA').''); + print ''; - print dol_print_date($db->jdate($objp->datec), 'dayhour'); - print ''; + print dol_print_date($db->jdate($objp->datec), 'dayhour'); + print ''; - print dol_print_date($db->jdate($objp->tms), 'dayhour'); - print ''; + print dol_print_date($db->jdate($objp->tms), 'dayhour'); + print ''; - print $invoicerectmp->getLibStatut(3, 0); - print ''; + print $invoicerectmp->getLibStatut(3, 0); + print ''; diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 4642c0b7da1..5f1ce9e44c3 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -400,8 +400,9 @@ $sql.= " p.rowid as project_id, p.ref as project_ref, p.title as project_label"; if (! $sall) $sql.= ', SUM(pf.amount) as dynamount_payed'; if ($search_categ_cus) $sql .= ", cc.fk_categorie, cc.fk_soc"; // Add fields from extrafields -if (! empty($extrafields->attributes[$object->table_element]['label'])) +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 : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook @@ -1346,32 +1347,31 @@ if ($resql) // Show total line if (isset($totalarray['totalhtfield']) - || isset($totalarray['totalvatfield']) - || isset($totalarray['totallocaltax1field']) - || isset($totalarray['totallocaltax2field']) - || isset($totalarray['totalttcfield']) - || isset($totalarray['totalamfield']) - || isset($totalarray['totalrtpfield']) - ) - { + || isset($totalarray['totalvatfield']) + || isset($totalarray['totallocaltax1field']) + || isset($totalarray['totallocaltax2field']) + || isset($totalarray['totalttcfield']) + || isset($totalarray['totalamfield']) + || isset($totalarray['totalrtpfield']) + ) { print '
'.$langs->trans("Total").''.$langs->trans("Totalforthispage").''.price($totalarray['totalht']).''.price($totalarray['totalvat']).''.price($totalarray['totallocaltax1']).''.price($totalarray['totallocaltax2']).''.price($totalarray['totalttc']).''.price($totalarray['totalam']).''.price($totalarray['totalrtp']).''.price($totalarray['totalht']).''.price($totalarray['totalvat']).''.price($totalarray['totallocaltax1']).''.price($totalarray['totallocaltax2']).''.price($totalarray['totalttc']).''.price($totalarray['totalam']).''.price($totalarray['totalrtp']).'
'; - print ''; - // Company - print ''; - // User - print ''; - // Status - print ''; - // Year - print ''; - print ''; - print '
'.$langs->trans("Filter").'
'.$langs->trans("ThirdParty").''; - if ($mode == 'customer') $filter='s.client in (1,2,3)'; - if ($mode == 'supplier') $filter='s.fournisseur = 1'; - print $form->selectarray('socid', $companies, $socid, 1, 0, 0, 'style="width: 95%"', 0, 0, 0, '', '', 1); - print '
'.$langs->trans("CreatedBy").''; - print $form->select_dolusers($userid, 'userid', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300'); - print '
'.$langs->trans("Status").''; - if ($mode == 'customer') - { - $liststatus=array('0'=>$langs->trans("BillStatusDraft"), '1'=>$langs->trans("BillStatusNotPaid"), '2'=>$langs->trans("BillStatusPaid"), '3'=>$langs->trans("BillStatusCanceled")); - print $form->selectarray('object_status', $liststatus, $object_status, 1); - } - if ($mode == 'supplier') - { - $liststatus=array('0'=>$langs->trans("BillStatusDraft"),'1'=>$langs->trans("BillStatusNotPaid"), '2'=>$langs->trans("BillStatusPaid")); - print $form->selectarray('object_status', $liststatus, $object_status, 1); - } - print '
'.$langs->trans("Year").''; - if (! in_array($year, $arrayyears)) $arrayyears[$year]=$year; - if (! in_array($nowyear, $arrayyears)) $arrayyears[$nowyear]=$nowyear; - arsort($arrayyears); - print $form->selectarray('year', $arrayyears, $year, 0); - print '
'; - print ''; - print '

'; -//} +// Show filter box +print '
'; +print ''; +print ''; +print ''; +// Company +print ''; +// User +print ''; +// Status +print ''; +// Year +print ''; +print ''; +print '
'.$langs->trans("Filter").'
'.$langs->trans("ThirdParty").''; +if ($mode == 'customer') $filter='s.client in (1,2,3)'; +if ($mode == 'supplier') $filter='s.fournisseur = 1'; +print $form->selectarray('socid', $companies, $socid, 1, 0, 0, 'style="width: 95%"', 0, 0, 0, '', '', 1); +print '
'.$langs->trans("CreatedBy").''; +print $form->select_dolusers($userid, 'userid', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300'); +print '
'.$langs->trans("Status").''; +if ($mode == 'customer') +{ + $liststatus=array('0'=>$langs->trans("BillStatusDraft"), '1'=>$langs->trans("BillStatusNotPaid"), '2'=>$langs->trans("BillStatusPaid"), '3'=>$langs->trans("BillStatusCanceled")); + print $form->selectarray('object_status', $liststatus, $object_status, 1); +} +if ($mode == 'supplier') +{ + $liststatus=array('0'=>$langs->trans("BillStatusDraft"),'1'=>$langs->trans("BillStatusNotPaid"), '2'=>$langs->trans("BillStatusPaid")); + print $form->selectarray('object_status', $liststatus, $object_status, 1); +} +print '
'.$langs->trans("Year").''; +if (! in_array($year, $arrayyears)) $arrayyears[$year]=$year; +if (! in_array($nowyear, $arrayyears)) $arrayyears[$nowyear]=$nowyear; +arsort($arrayyears); +print $form->selectarray('year', $arrayyears, $year, 0); +print '
'; +print '
'; +print '

'; print '
'; print ''; diff --git a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php index b48c0478609..d2cad75ca77 100644 --- a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php +++ b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php @@ -24,11 +24,7 @@ if (empty($conf) || ! is_object($conf)) exit; } -?> - - - -\n"; global $user; global $noMoreLinkedObjectBlockAfter; @@ -40,73 +36,70 @@ $langs->load("bills"); $linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); -$total=0; $ilink=0; +$total=0; +$ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { $ilink++; $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; -?> - - - - - - - - - -element.'" data-id="'.$objectlink->id.'" >'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; } if (count($linkedObjectBlock) > 1) { - ?> - - - - - - - - - - '; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; } -?> - +print "\n"; diff --git a/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php b/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php index f6f854d9635..cb16ce407f8 100644 --- a/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php +++ b/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php @@ -24,11 +24,9 @@ if (empty($conf) || ! is_object($conf)) exit; } -?> - +print "\n"; -load("bills"); -$total=0; $ilink=0; +$total=0; +$ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { $ilink++; $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; -?> + ?> + if ($user->rights->facture->lire) { + $total = $total + $objectlink->total_ht; + echo price($objectlink->total_ht); + } + ?> - 1) { @@ -75,6 +75,5 @@ if (count($linkedObjectBlock) > 1) - +print "\n"; diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index ea5a4e8d07c..1282226623c 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -271,7 +271,7 @@ if ($id > 0 || $ref) print ''; -/* print '';*/ diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 5f2d73af0aa..4016ebdc813 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1686,7 +1686,7 @@ class BonPrelevement extends CommonObject $XML_DEBITOR =''; $XML_DEBITOR .=' '.$CrLf; $XML_DEBITOR .=' '.$CrLf; - // $XML_DEBITOR .=' '.('AS-'.dol_trunc($row_ref,20).'-'.$Rowing).''.$CrLf; // ISO20022 states that EndToEndId has a MaxLength of 35 characters + // $XML_DEBITOR .=' '.('AS-'.dol_trunc($row_ref,20).'-'.$Rowing).''.$CrLf; // ISO20022 states that EndToEndId has a MaxLength of 35 characters $XML_DEBITOR .=' '.(($conf->global->PRELEVEMENT_END_TO_END != "" ) ? $conf->global->PRELEVEMENT_END_TO_END : ('AS-'.dol_trunc($row_ref, 20)).'-'.$Rowing).''.$CrLf; // ISO20022 states that EndToEndId has a MaxLength of 35 characters $XML_DEBITOR .=' '.$CrLf; $XML_DEBITOR .=' '.round($row_somme, 2).''.$CrLf; @@ -1718,8 +1718,8 @@ class BonPrelevement extends CommonObject $XML_DEBITOR .=' '.$CrLf; $XML_DEBITOR .=' '.$CrLf; $XML_DEBITOR .=' '.$CrLf; - // $XML_DEBITOR .=' '.($row_ref.'/'.$Rowing.'/'.$Rum).''.$CrLf; - // $XML_DEBITOR .=' '.dol_trunc($row_ref, 135).''.$CrLf; // 140 max + // $XML_DEBITOR .=' '.($row_ref.'/'.$Rowing.'/'.$Rum).''.$CrLf; + // $XML_DEBITOR .=' '.dol_trunc($row_ref, 135).''.$CrLf; // 140 max $XML_DEBITOR .=' '.(($conf->global->PRELEVEMENT_USTRD != "" ) ? $conf->global->PRELEVEMENT_USTRD : dol_trunc($row_ref, 135) ).''.$CrLf; // 140 max $XML_DEBITOR .=' '.$CrLf; $XML_DEBITOR .=' '.$CrLf; @@ -1887,15 +1887,15 @@ class BonPrelevement extends CommonObject $XML_SEPA_INFO .= ' '.$this->emetteur_bic.''.$CrLf; $XML_SEPA_INFO .= ' '.$CrLf; $XML_SEPA_INFO .= ' '.$CrLf; -/* $XML_SEPA_INFO .= ' '.$CrLf; + /* $XML_SEPA_INFO .= ' '.$CrLf; $XML_SEPA_INFO .= ' '.$this->raison_sociale.''.$CrLf; $XML_SEPA_INFO .= ' '.$CrLf; $XML_SEPA_INFO .= ' '.$country[1].''.$CrLf; $XML_SEPA_INFO .= ' '.$conf->global->MAIN_INFO_SOCIETE_ADDRESS.''.$CrLf; $XML_SEPA_INFO .= ' '.$conf->global->MAIN_INFO_SOCIETE_ZIP.' '.$conf->global->MAIN_INFO_SOCIETE_TOWN.''.$CrLf; $XML_SEPA_INFO .= ' '.$CrLf; - $XML_SEPA_INFO .= ' '.$CrLf; -*/ $XML_SEPA_INFO .= ' SLEV'.$CrLf; + $XML_SEPA_INFO .= ' '.$CrLf;*/ + $XML_SEPA_INFO .= ' SLEV'.$CrLf; $XML_SEPA_INFO .= ' '.$CrLf; $XML_SEPA_INFO .= ' '.$CrLf; $XML_SEPA_INFO .= ' '.$CrLf; diff --git a/htdocs/compta/prelevement/fiche-rejet.php b/htdocs/compta/prelevement/fiche-rejet.php index 24aa2f9bcb9..3dbfec69461 100644 --- a/htdocs/compta/prelevement/fiche-rejet.php +++ b/htdocs/compta/prelevement/fiche-rejet.php @@ -223,7 +223,7 @@ if ($resql) } else { - print ''; + print ''; } if ($num > 0) diff --git a/htdocs/compta/resultat/index.php b/htdocs/compta/resultat/index.php index 5efa036055f..0503f31d6fb 100644 --- a/htdocs/compta/resultat/index.php +++ b/htdocs/compta/resultat/index.php @@ -749,17 +749,17 @@ if (! empty($conf->don->enabled) && ($modecompta == 'CREANCES-DETTES' || $modeco $sql.= " AND fk_statut in (1,2)"; if (! empty($date_start) && ! empty($date_end)) $sql.= " AND p.datedon >= '".$db->idate($date_start)."' AND p.datedon <= '".$db->idate($date_end)."'"; - } - elseif ($modecompta == 'RECETTES-DEPENSES') { + } elseif ($modecompta == 'RECETTES-DEPENSES') { $sql = "SELECT p.societe as nom, p.firstname, p.lastname, date_format(pe.datep,'%Y-%m') as dm, sum(p.amount) as amount"; $sql.= " FROM ".MAIN_DB_PREFIX."don as p"; $sql.= " INNER JOIN ".MAIN_DB_PREFIX."payment_donation as pe ON pe.fk_donation = p.rowid"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as c ON pe.fk_typepayment = c.id"; $sql.= " WHERE p.entity IN (".getEntity('donation').")"; $sql.= " AND fk_statut >= 2"; - if (! empty($date_start) && ! empty($date_end)) - $sql.= " AND pe.datep >= '".$db->idate($date_start)."' AND pe.datep <= '".$db->idate($date_end)."'"; - } + if (! empty($date_start) && ! empty($date_end)) { + $sql.= " AND pe.datep >= '".$db->idate($date_start)."' AND pe.datep <= '".$db->idate($date_end)."'"; + } + } $sql.= " GROUP BY p.societe, p.firstname, p.lastname, dm"; diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index cc6280070a0..7399a7098c6 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -454,19 +454,20 @@ if ($id > 0) $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->tax->charges->creer) { - if ($action != 'classify') + if ($action != 'classify') { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects(0, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects(0, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/compta/stats/byratecountry.php b/htdocs/compta/stats/byratecountry.php index 0cd02bc04bd..590269b332c 100644 --- a/htdocs/compta/stats/byratecountry.php +++ b/htdocs/compta/stats/byratecountry.php @@ -241,165 +241,163 @@ if (! empty($conf->accounting->enabled) && $modecompta != 'BOOKKEEPING') } -if ($modecompta == 'CREANCES-DETTES') -{ -print '
type) { - case Facture::TYPE_REPLACEMENT: - echo $langs->trans("InvoiceReplacement"); - break; - case Facture::TYPE_CREDIT_NOTE: - echo $langs->trans("InvoiceAvoir"); - break; - case Facture::TYPE_DEPOSIT: - echo $langs->trans("InvoiceDeposit"); - break; - case Facture::TYPE_PROFORMA: - echo $langs->trans("InvoiceProForma"); - break; - case Facture::TYPE_SITUATION: - echo $langs->trans("InvoiceSituation"); - break; - default: - echo $langs->trans("CustomerInvoice"); - break; - } - ?>getNomUrl(1); ?>ref_client; ?>date, 'day'); ?>rights->facture->lire) { - $sign = 1; - if ($object->type == Facture::TYPE_CREDIT_NOTE) $sign = -1; - if ($objectlink->statut != 3) // If not abandonned - { - $total = $total + $sign * $objectlink->total_ht; - echo price($objectlink->total_ht); - } - else - { - echo ''.price($objectlink->total_ht).''; - } - } ?>getLibStatut(3); ?>">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?>
'; + switch ($objectlink->type) { + case Facture::TYPE_REPLACEMENT: + echo $langs->trans("InvoiceReplacement"); + break; + case Facture::TYPE_CREDIT_NOTE: + echo $langs->trans("InvoiceAvoir"); + break; + case Facture::TYPE_DEPOSIT: + echo $langs->trans("InvoiceDeposit"); + break; + case Facture::TYPE_PROFORMA: + echo $langs->trans("InvoiceProForma"); + break; + case Facture::TYPE_SITUATION: + echo $langs->trans("InvoiceSituation"); + break; + default: + echo $langs->trans("CustomerInvoice"); + break; + } + print ''.$objectlink->getNomUrl(1).''.$objectlink->ref_client.''.dol_print_date($objectlink->date, 'day').''; + if ($user->rights->facture->lire) { + $sign = 1; + if ($object->type == Facture::TYPE_CREDIT_NOTE) $sign = -1; + if ($objectlink->statut != 3) { + // If not abandonned + $total = $total + $sign * $objectlink->total_ht; + echo price($objectlink->total_ht); + } + else + { + echo ''.price($objectlink->total_ht).''; + } + } + print ''.$objectlink->getLibStatut(3).''.img_picto($langs->transnoentitiesnoconv("RemoveLink"), 'unlink').'
trans("Total"); ?>
'.$langs->trans("Total").''.price($total).'
trans("RepeatableInvoice"); ?> getNomUrl(1); ?> date_when, 'day'); ?> rights->facture->lire) { - $total = $total + $objectlink->total_ht; - echo price($objectlink->total_ht); - } ?> getLibStatut(3); ?> ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?>
'.$langs->trans("TransMetod").''; print $form->selectarray("methode", $object->methodes_trans); print '
'.$langs->trans("File").''; + /*print '
'.$langs->trans("File").''; print ''; print '
'; print '
'.$langs->trans("None").'
'.$langs->trans("None").'
'; -print ''; -print ''; -print ''; -$i=0; -while($i < 12) -{ - $j = $i + (empty($conf->global->SOCIETE_FISCAL_MONTH_START)?1:$conf->global->SOCIETE_FISCAL_MONTH_START); - if ($j > 12) $j -= 12; - print ''; - $i++; -} -print ''; +if ($modecompta == 'CREANCES-DETTES') { + print '
' . $langs->trans("TurnoverbyVatrate") . '' . $langs->trans("ProductOrService") . '' . $langs->trans("Country") . '' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . $langs->trans("TotalHT") . '
'; + print ''; + print ''; + print ''; + $i=0; + while($i < 12) { + $j = $i + (empty($conf->global->SOCIETE_FISCAL_MONTH_START)?1:$conf->global->SOCIETE_FISCAL_MONTH_START); + if ($j > 12) $j -= 12; + print ''; + $i++; + } + print ''; -$sql = "SELECT fd.tva_tx AS vatrate,"; -$sql .= " fd.product_type AS product_type,"; -$sql .= " cc.label AS country,"; -for ($i = 1; $i <= 12; $i ++) { - $sql .= " SUM(" . $db->ifsql('MONTH(f.datef)=' . $i, 'fd.total_ht', '0') . ") AS month" . str_pad($i, 2, '0', STR_PAD_LEFT) . ","; -} -$sql .= " SUM(fd.total_ht) as total"; -$sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; -$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; -$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "societe as soc ON soc.rowid = f.fk_soc"; -$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as cc ON cc.rowid = soc.fk_pays"; -$sql .= " WHERE f.datef >= '" . $db->idate($date_start) . "'"; -$sql .= " AND f.datef <= '" . $db->idate($date_end) . "'"; -$sql.= " AND f.fk_statut in (1,2)"; -if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql.= " AND f.type IN (0,1,2,5)"; -} else { - $sql.= " AND f.type IN (0,1,2,3,5)"; -} -$sql .= " AND f.entity IN (" . getEntity('invoice', 0) . ")"; -$sql .= " GROUP BY fd.tva_tx,fd.product_type, cc.label "; + $sql = "SELECT fd.tva_tx AS vatrate,"; + $sql .= " fd.product_type AS product_type,"; + $sql .= " cc.label AS country,"; + for ($i = 1; $i <= 12; $i ++) { + $sql .= " SUM(" . $db->ifsql('MONTH(f.datef)=' . $i, 'fd.total_ht', '0') . ") AS month" . str_pad($i, 2, '0', STR_PAD_LEFT) . ","; + } + $sql .= " SUM(fd.total_ht) as total"; + $sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; + $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; + $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "societe as soc ON soc.rowid = f.fk_soc"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as cc ON cc.rowid = soc.fk_pays"; + $sql .= " WHERE f.datef >= '" . $db->idate($date_start) . "'"; + $sql .= " AND f.datef <= '" . $db->idate($date_end) . "'"; + $sql.= " AND f.fk_statut in (1,2)"; + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql.= " AND f.type IN (0,1,2,5)"; + } else { + $sql.= " AND f.type IN (0,1,2,3,5)"; + } + $sql .= " AND f.entity IN (" . getEntity('invoice', 0) . ")"; + $sql .= " GROUP BY fd.tva_tx,fd.product_type, cc.label "; -dol_syslog("htdocs/compta/tva/index.php sql=" . $sql, LOG_DEBUG); -$resql = $db->query($sql); -if ($resql) { - $num = $db->num_rows($resql); - $totalpermonth = array(); - while ( $obj = $db->fetch_object($resql)) { - print ''; - if ($obj->product_type == 0) { - print ''; - } else { - print ''; + dol_syslog("htdocs/compta/tva/index.php sql=" . $sql, LOG_DEBUG); + $resql = $db->query($sql); + if ($resql) { + $num = $db->num_rows($resql); + $totalpermonth = array(); + while ( $obj = $db->fetch_object($resql)) { + print ''; + if ($obj->product_type == 0) { + print ''; + } else { + print ''; + } + print ''; + for($i = 0; $i < 12; $i++) { + $j = $i + (empty($conf->global->SOCIETE_FISCAL_MONTH_START)?1:$conf->global->SOCIETE_FISCAL_MONTH_START); + if ($j > 12) $j -= 12; + $monthj = 'month'.str_pad($j, 2, '0', STR_PAD_LEFT); + print ''; + $totalpermonth[$j]=(empty($totalpermonth[$j])?0:$totalpermonth[$j])+$obj->$monthj; + } + print ''; + $totalpermonth['total']=(empty($totalpermonth['total'])?0:$totalpermonth['total'])+$obj->total; + print ''; } - print ''; + $db->free($resql); + + // Total + print ''; + print ''; + print ''; for($i = 0; $i < 12; $i++) { $j = $i + (empty($conf->global->SOCIETE_FISCAL_MONTH_START)?1:$conf->global->SOCIETE_FISCAL_MONTH_START); if ($j > 12) $j -= 12; $monthj = 'month'.str_pad($j, 2, '0', STR_PAD_LEFT); - print ''; - $totalpermonth[$j]=(empty($totalpermonth[$j])?0:$totalpermonth[$j])+$obj->$monthj; + print ''; } - print ''; - $totalpermonth['total']=(empty($totalpermonth['total'])?0:$totalpermonth['total'])+$obj->total; + print ''; print ''; + } else { + print $db->lasterror(); // Show last sql error } - $db->free($resql); - // Total - print ''; - print ''; - print ''; - for($i = 0; $i < 12; $i++) { + + print ''; + print ''; + print ''; + $i=0; + while($i < 12) + { $j = $i + (empty($conf->global->SOCIETE_FISCAL_MONTH_START)?1:$conf->global->SOCIETE_FISCAL_MONTH_START); if ($j > 12) $j -= 12; - $monthj = 'month'.str_pad($j, 2, '0', STR_PAD_LEFT); - print ''; + print ''; + $i++; } - print ''; - print ''; -} else { - print $db->lasterror(); // Show last sql error -} + print ''; + $sql2 = "SELECT ffd.tva_tx AS vatrate,"; + $sql2 .= " ffd.product_type AS product_type,"; + $sql2 .= " cc.label AS country,"; + for($i = 1; $i <= 12; $i ++) { + $sql2 .= " SUM(" . $db->ifsql('MONTH(ff.datef)=' . $i, 'ffd.total_ht', '0') . ") AS month" . str_pad($i, 2, '0', STR_PAD_LEFT) . ","; + } + $sql2 .= " SUM(ffd.total_ht) as total"; + $sql2 .= " FROM " . MAIN_DB_PREFIX . "facture_fourn_det as ffd"; + $sql2 .= " INNER JOIN " . MAIN_DB_PREFIX . "facture_fourn as ff ON ff.rowid = ffd.fk_facture_fourn"; + $sql2 .= " INNER JOIN " . MAIN_DB_PREFIX . "societe as soc ON soc.rowid = ff.fk_soc"; + $sql2 .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as cc ON cc.rowid = soc.fk_pays"; + $sql2 .= " WHERE ff.datef >= '" . $db->idate($date_start) . "'"; + $sql2 .= " AND ff.datef <= '" . $db->idate($date_end) . "'"; + $sql.= " AND ff.fk_statut in (1,2)"; + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { + $sql.= " AND ff.type IN (0,1,2,5)"; + } else { + $sql.= " AND ff.type IN (0,1,2,3,5)"; + } + $sql2 .= " AND ff.entity IN (" . getEntity("facture_fourn", 0) . ")"; + $sql2 .= " GROUP BY ffd.tva_tx, ffd.product_type, cc.label"; -print ''; -print ''; -print ''; -$i=0; -while($i < 12) -{ - $j = $i + (empty($conf->global->SOCIETE_FISCAL_MONTH_START)?1:$conf->global->SOCIETE_FISCAL_MONTH_START); - if ($j > 12) $j -= 12; - print ''; - $i++; -} -print ''; - -$sql2 = "SELECT ffd.tva_tx AS vatrate,"; -$sql2 .= " ffd.product_type AS product_type,"; -$sql2 .= " cc.label AS country,"; -for($i = 1; $i <= 12; $i ++) { - $sql2 .= " SUM(" . $db->ifsql('MONTH(ff.datef)=' . $i, 'ffd.total_ht', '0') . ") AS month" . str_pad($i, 2, '0', STR_PAD_LEFT) . ","; -} -$sql2 .= " SUM(ffd.total_ht) as total"; -$sql2 .= " FROM " . MAIN_DB_PREFIX . "facture_fourn_det as ffd"; -$sql2 .= " INNER JOIN " . MAIN_DB_PREFIX . "facture_fourn as ff ON ff.rowid = ffd.fk_facture_fourn"; -$sql2 .= " INNER JOIN " . MAIN_DB_PREFIX . "societe as soc ON soc.rowid = ff.fk_soc"; -$sql2 .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as cc ON cc.rowid = soc.fk_pays"; -$sql2 .= " WHERE ff.datef >= '" . $db->idate($date_start) . "'"; -$sql2 .= " AND ff.datef <= '" . $db->idate($date_end) . "'"; -$sql.= " AND ff.fk_statut in (1,2)"; -if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { - $sql.= " AND ff.type IN (0,1,2,5)"; -} else { - $sql.= " AND ff.type IN (0,1,2,3,5)"; -} -$sql2 .= " AND ff.entity IN (" . getEntity("facture_fourn", 0) . ")"; -$sql2 .= " GROUP BY ffd.tva_tx, ffd.product_type, cc.label"; - -//print $sql2; -dol_syslog("htdocs/compta/tva/index.php sql=" . $sql, LOG_DEBUG); -$resql2 = $db->query($sql2); -if ($resql2) { - $num = $db->num_rows($resql2); - $totalpermonth = array(); - while ( $obj = $db->fetch_object($resql2)) { - print ''; - if ($obj->product_type == 0) { - print ''; - } else { - print ''; + //print $sql2; + dol_syslog("htdocs/compta/tva/index.php sql=" . $sql, LOG_DEBUG); + $resql2 = $db->query($sql2); + if ($resql2) { + $num = $db->num_rows($resql2); + $totalpermonth = array(); + while ( $obj = $db->fetch_object($resql2)) { + print ''; + if ($obj->product_type == 0) { + print ''; + } else { + print ''; + } + print ''; + for($i = 0; $i < 12; $i++) { + $j = $i + (empty($conf->global->SOCIETE_FISCAL_MONTH_START)?1:$conf->global->SOCIETE_FISCAL_MONTH_START); + if ($j > 12) $j -= 12; + $monthj = 'month'.str_pad($j, 2, '0', STR_PAD_LEFT); + print ''; + $totalpermonth[$j]=(empty($totalpermonth[$j])?0:$totalpermonth[$j])+$obj->$monthj; + } + print ''; + $totalpermonth['total']=(empty($totalpermonth['total'])?0:$totalpermonth['total'])+$obj->total; + print ''; } - print ''; + $db->free($resql2); + + // Total + print ''; + print ''; + print ''; for($i = 0; $i < 12; $i++) { $j = $i + (empty($conf->global->SOCIETE_FISCAL_MONTH_START)?1:$conf->global->SOCIETE_FISCAL_MONTH_START); if ($j > 12) $j -= 12; $monthj = 'month'.str_pad($j, 2, '0', STR_PAD_LEFT); - print ''; - $totalpermonth[$j]=(empty($totalpermonth[$j])?0:$totalpermonth[$j])+$obj->$monthj; + print ''; } - print ''; - $totalpermonth['total']=(empty($totalpermonth['total'])?0:$totalpermonth['total'])+$obj->total; + print ''; print ''; + } else { + print $db->lasterror(); // Show last sql error } - $db->free($resql2); - - // Total - print ''; - print ''; - print ''; - for($i = 0; $i < 12; $i++) { - $j = $i + (empty($conf->global->SOCIETE_FISCAL_MONTH_START)?1:$conf->global->SOCIETE_FISCAL_MONTH_START); - if ($j > 12) $j -= 12; - $monthj = 'month'.str_pad($j, 2, '0', STR_PAD_LEFT); - print ''; - } - print ''; - print ''; -} else { - print $db->lasterror(); // Show last sql error -} -print "
' . $langs->trans("TurnoverbyVatrate") . '' . $langs->trans("ProductOrService") . '' . $langs->trans("Country") . '' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . $langs->trans("TotalHT") . '
' . vatrate($obj->vatrate) . ''. $langs->trans("Product") . ''. $langs->trans("Service") . '
' . vatrate($obj->vatrate) . ''. $langs->trans("Product") . ''. $langs->trans("Service") . '' .$obj->country . '' . price($obj->$monthj) . '' . price($obj->total) . '
' .$obj->country . '
' . price($obj->$monthj) . '' . price($totalpermonth[$j]) . '' . price($obj->total) . '' . price($totalpermonth['total']) . '
' . $langs->trans("PurchasebyVatrate") . '' . $langs->trans("ProductOrService") . '' . $langs->trans("Country") . '' . price($totalpermonth[$j]) . '' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . price($totalpermonth['total']) . '
' . $langs->trans("TotalHT") . '
' . $langs->trans("PurchasebyVatrate") . '' . $langs->trans("ProductOrService") . '' . $langs->trans("Country") . '' . $langs->trans('MonthShort' . str_pad($j, 2, '0', STR_PAD_LEFT)) . '' . $langs->trans("TotalHT") . '
' . vatrate($obj->vatrate) . ''. $langs->trans("Product") . ''. $langs->trans("Service") . '
' . vatrate($obj->vatrate) . ''. $langs->trans("Product") . ''. $langs->trans("Service") . '' . $obj->country . '' . price($obj->$monthj) . '' . price($obj->total) . '
' . $obj->country . '
' . price($obj->$monthj) . '' . price($totalpermonth[$j]) . '' . price($obj->total) . '' . price($totalpermonth['total']) . '
' . price($totalpermonth[$j]) . '' . price($totalpermonth['total']) . '
\n"; + print "
\n"; } else { // $modecompta != 'CREANCES-DETTES' // "Calculation of part of each product for accountancy in this mode is not possible. When a partial payment (for example 5 euros) is done on an diff --git a/htdocs/compta/stats/cabyprodserv.php b/htdocs/compta/stats/cabyprodserv.php index 8a97be4d252..5570b08435b 100644 --- a/htdocs/compta/stats/cabyprodserv.php +++ b/htdocs/compta/stats/cabyprodserv.php @@ -240,7 +240,7 @@ if ($modecompta == 'CREANCES-DETTES') if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { $sql.= " AND f.type IN (0,1,2,5)"; } else { - $sql.= " AND f.type IN (0,1,2,3,5)"; + $sql.= " AND f.type IN (0,1,2,3,5)"; } if ($date_start && $date_end) { $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; @@ -326,7 +326,7 @@ if ($modecompta == 'CREANCES-DETTES') // Array header print "
'.$element['linked_element_label'].''.$element['linked_element_value'].'
trans("DolibarrLogin"); ?>
@@ -134,29 +131,27 @@ dol_htmloutput_errors($this->control->tpl['error'], $this->control->tpl['errors'
-control->tpl['showend']; ?> +control->tpl['showend']; -societe_id)) { ?> -
+if (empty($user->societe_id)) { + print '
'; + if ($user->rights->societe->contact->creer) { + print ''.$langs->trans('Modify').''; + } -rights->societe->contact->creer) { ?> -">trans('Modify'); ?> - + if (! $this->control->tpl['user_id'] && $user->rights->user->user->creer) { + print ''.$langs->trans("CreateDolibarrLogin").''; + } -control->tpl['user_id'] && $user->rights->user->user->creer) { ?> -">trans("CreateDolibarrLogin"); ?> - + if ($user->rights->societe->contact->supprimer) { + print ''.$langs->trans('Delete').''; + } -rights->societe->contact->supprimer) { ?> -">trans('Delete'); ?> - - -

-
'; +} echo $this->control->tpl['actionstodo']; echo $this->control->tpl['actionsdone']; -?> - +print "\n"; diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index f0f18ffc672..b68a0f9b124 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -678,7 +678,7 @@ else print $formcompany->select_state(GETPOST("state_id", 'alpha')?GETPOST("state_id", 'alpha'):$object->state_id, $object->country_code, 'state_id'); } else - { + { print $countrynotdefined; } print ''; diff --git a/htdocs/contact/consumption.php b/htdocs/contact/consumption.php index c82795b9449..00817ee5799 100644 --- a/htdocs/contact/consumption.php +++ b/htdocs/contact/consumption.php @@ -151,7 +151,7 @@ if ($object->thirdparty->fournisseur) if ($conf->fournisseur->enabled && $user->rights->fournisseur->commande->lire) $elementTypeArray['supplier_order']=$langs->transnoentitiesnoconv('SuppliersOrders'); // There no contact type for supplier proposals -// if ($conf->fournisseur->enabled && $user->rights->supplier_proposal->lire) $elementTypeArray['supplier_proposal']=$langs->transnoentitiesnoconv('SupplierProposals'); + // if ($conf->fournisseur->enabled && $user->rights->supplier_proposal->lire) $elementTypeArray['supplier_proposal']=$langs->transnoentitiesnoconv('SupplierProposals'); } print ''; @@ -298,7 +298,7 @@ if (!empty($sql_select)) $sql.= " "; if ($type_element != 'fichinter') $sql.= ", p.ref as prod_ref, p.label as product_label"; $sql.= " FROM "/*.MAIN_DB_PREFIX."societe as s, "*/.$tables_from; -// if ($type_element != 'fichinter') $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON d.fk_product = p.rowid '; + // if ($type_element != 'fichinter') $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON d.fk_product = p.rowid '; $sql.= $where; $sql.= dolSqlDateFilter($dateprint, 0, $month, $year); if ($sref) $sql.= " AND ".$doc_number." LIKE '%".$db->escape($sref)."%'"; diff --git a/htdocs/contact/document.php b/htdocs/contact/document.php index ad8bbb68e5f..1dbc22d1a51 100644 --- a/htdocs/contact/document.php +++ b/htdocs/contact/document.php @@ -63,8 +63,8 @@ $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; - if (! empty($conf->global->MAIN_DOC_SORT_FIELD)) { $sortfield=$conf->global->MAIN_DOC_SORT_FIELD; } - if (! empty($conf->global->MAIN_DOC_SORT_ORDER)) { $sortorder=$conf->global->MAIN_DOC_SORT_ORDER; } +if (! empty($conf->global->MAIN_DOC_SORT_FIELD)) { $sortfield=$conf->global->MAIN_DOC_SORT_FIELD; } +if (! empty($conf->global->MAIN_DOC_SORT_ORDER)) { $sortorder=$conf->global->MAIN_DOC_SORT_ORDER; } if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="name"; diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index d31766578b2..653ab5d1c58 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -680,9 +680,9 @@ if (! empty($arrayfields['p.thirdparty']['checked'])) if (! empty($arrayfields['p.priv']['checked'])) { print ''; - $selectarray=array('0'=>$langs->trans("ContactPublic"),'1'=>$langs->trans("ContactPrivate")); - print $form->selectarray('search_priv', $selectarray, $search_priv, 1); - print ''; + $selectarray=array('0'=>$langs->trans("ContactPublic"),'1'=>$langs->trans("ContactPrivate")); + print $form->selectarray('search_priv', $selectarray, $search_priv, 1); + print ''; } // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; @@ -930,9 +930,9 @@ while ($i < min($num, $limit)) print ''; if ($obj->socid) { - $objsoc = new Societe($db); - $objsoc->fetch($obj->socid); - print $objsoc->getNomUrl(1); + $objsoc = new Societe($db); + $objsoc->fetch($obj->socid); + print $objsoc->getNomUrl(1); } else print ' '; From 635306c084c018aae324533d3900434f486d7b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 26 Oct 2019 18:23:51 +0200 Subject: [PATCH 609/980] restore original rules to be mergeable without errors --- dev/setup/codesniffer/ruleset.xml | 4 +-- htdocs/contrat/agenda.php | 25 ++++++------- htdocs/contrat/card.php | 5 ++- htdocs/contrat/services_list.php | 23 ++++++------ htdocs/contrat/tpl/linkedobjectblock.tpl.php | 37 ++++++++++---------- 5 files changed, 47 insertions(+), 47 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 015733ed95f..8c01eea6d99 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -186,7 +186,7 @@ - + diff --git a/htdocs/contrat/agenda.php b/htdocs/contrat/agenda.php index e96425a0dae..df1629b46a6 100644 --- a/htdocs/contrat/agenda.php +++ b/htdocs/contrat/agenda.php @@ -164,19 +164,20 @@ if ($id > 0) $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->contrat->creer) { - if ($action != 'classify') + if ($action != 'classify') { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.='
'; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.='
'; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); - } + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.='
'; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.='
'; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index ef57c84443b..2ec6f63d84c 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -331,9 +331,8 @@ if (empty($reshook)) // Extrafields $array_options = array(); - if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && method_exists($lines[$i], 'fetch_optionals')) // For avoid conflicts if - // trigger used - { + // For avoid conflicts if trigger used + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && method_exists($lines[$i], 'fetch_optionals')) { $lines[$i]->fetch_optionals($lines[$i]->rowid); $array_options = $lines[$i]->array_options; } diff --git a/htdocs/contrat/services_list.php b/htdocs/contrat/services_list.php index fac71516e99..81c0b13449b 100644 --- a/htdocs/contrat/services_list.php +++ b/htdocs/contrat/services_list.php @@ -705,17 +705,18 @@ while ($i < min($num, $limit)) // Status if (! empty($arrayfields['status']['checked'])) { - print ''; - if ($obj->cstatut == 0) // If contract is draft, we say line is also draft - { - print $contractstatic->LibStatut(0, 5); - } - else - { - print $staticcontratligne->LibStatut($obj->statut, 5, ($obj->date_fin_validite && $db->jdate($obj->date_fin_validite) < $now)?1:0); - } - print ''; - if (! $i) $totalarray['nbfield']++; + print ''; + if ($obj->cstatut == 0) + { + // If contract is draft, we say line is also draft + print $contractstatic->LibStatut(0, 5); + } + else + { + print $staticcontratligne->LibStatut($obj->statut, 5, ($obj->date_fin_validite && $db->jdate($obj->date_fin_validite) < $now)?1:0); + } + print ''; + if (! $i) $totalarray['nbfield']++; } // Action column print ''; diff --git a/htdocs/contrat/tpl/linkedobjectblock.tpl.php b/htdocs/contrat/tpl/linkedobjectblock.tpl.php index bda12ea87cb..b52a6939882 100644 --- a/htdocs/contrat/tpl/linkedobjectblock.tpl.php +++ b/htdocs/contrat/tpl/linkedobjectblock.tpl.php @@ -23,11 +23,9 @@ if (empty($conf) || ! is_object($conf)) exit; } -?> - +print "\n"; - $objectlink) $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; -?> + ?> trans("Contract"); ?> getNomUrl(1); ?> date_contrat, 'day'); ?> rights->contrat->lire && empty($conf->global->CONTRACT_SHOW_TOTAL_OF_PRODUCT_AS_PRICE)) - { - $totalcontrat = 0; - foreach ($objectlink->lines as $linecontrat) { - $totalcontrat = $totalcontrat + $linecontrat->total_ht; - $total = $total + $linecontrat->total_ht; - } - echo price($totalcontrat); - } ?> + // Price of contract is not shown by default because a contract is a list of service with + // start and end date that change with time andd that may be different that the period of reference for price. + // So price of a contract does often means nothing. Prices is on the different invoices done on same contract. + if ($user->rights->contrat->lire && empty($conf->global->CONTRACT_SHOW_TOTAL_OF_PRODUCT_AS_PRICE)) + { + $totalcontrat = 0; + foreach ($objectlink->lines as $linecontrat) { + $totalcontrat = $totalcontrat + $linecontrat->total_ht; + $total = $total + $linecontrat->total_ht; + } + echo price($totalcontrat); + } ?> getLibStatut(7); ?> - ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?> + '.img_picto($langs->transnoentitiesnoconv("RemoveLink"), 'unlink'); ?> - + +print "\n"; From 1a133bffa2e7fa8ffb15bd59670c0880d6a17a5c Mon Sep 17 00:00:00 2001 From: wdammak <26695620+wdammak@users.noreply.github.com> Date: Sat, 26 Oct 2019 19:54:02 +0200 Subject: [PATCH 610/980] Remove limit time for upgrade remove set_time_limit --- htdocs/install/upgrade2.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 39e14283a40..428ed169022 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -64,7 +64,7 @@ $error = 0; // Ne fonctionne que si on est pas en safe_mode. $err=error_reporting(); error_reporting(0); -@set_time_limit(300); +//@set_time_limit(300); error_reporting($err); $setuplang=GETPOST("selectlang", 'aZ09', 3)?GETPOST("selectlang", 'aZ09', 3):'auto'; From a7797ba1dafa07979dbcf9a6647cdca91f338dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 26 Oct 2019 20:53:39 +0200 Subject: [PATCH 611/980] clean indent in variants directory --- dev/setup/codesniffer/ruleset.xml | 4 +- htdocs/variants/admin/admin.php | 10 +- htdocs/variants/ajax/getCombinations.php | 14 +- htdocs/variants/ajax/get_attribute_values.php | 24 +-- htdocs/variants/card.php | 128 +++++++------ .../class/ProductCombination.class.php | 4 +- htdocs/variants/combinations.php | 169 ++++++++---------- htdocs/variants/generator.php | 4 +- htdocs/variants/list.php | 49 +++-- htdocs/webservices/server_category.php | 68 +++---- htdocs/webservices/server_invoice.php | 6 +- htdocs/webservices/server_payment.php | 40 ++--- .../webservices/server_productorservice.php | 8 +- .../webservices/server_supplier_invoice.php | 50 +++--- htdocs/website/class/website.class.php | 2 +- htdocs/website/index.php | 16 +- 16 files changed, 286 insertions(+), 310 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 8c01eea6d99..015733ed95f 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -186,7 +186,7 @@ - + diff --git a/htdocs/variants/admin/admin.php b/htdocs/variants/admin/admin.php index b6bfb90e22c..3e89df4e587 100644 --- a/htdocs/variants/admin/admin.php +++ b/htdocs/variants/admin/admin.php @@ -35,11 +35,11 @@ if ($_POST) { setEventMessages($langs->trans('CoreErrorMessage'), null, 'errors'); } - if (dolibarr_set_const($db, 'PRODUIT_ATTRIBUTES_SEPARATOR', GETPOST('PRODUIT_ATTRIBUTES_SEPARATOR'), 'chaine', 0, '', $conf->entity)) { - setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); - } else { - setEventMessages($langs->trans('CoreErrorMessage'), null, 'errors'); - } + if (dolibarr_set_const($db, 'PRODUIT_ATTRIBUTES_SEPARATOR', GETPOST('PRODUIT_ATTRIBUTES_SEPARATOR'), 'chaine', 0, '', $conf->entity)) { + setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); + } else { + setEventMessages($langs->trans('CoreErrorMessage'), null, 'errors'); + } } $title = $langs->trans('ModuleSetup').' '.$langs->trans('ProductAttributes'); diff --git a/htdocs/variants/ajax/getCombinations.php b/htdocs/variants/ajax/getCombinations.php index 6f028f5aa8b..38affc574d2 100644 --- a/htdocs/variants/ajax/getCombinations.php +++ b/htdocs/variants/ajax/getCombinations.php @@ -31,18 +31,18 @@ header('Content-Type: application/json'); $id = GETPOST('id', 'int'); if (!$id) { -print json_encode(array( - 'error' => 'ID not set' - )); - exit(); + print json_encode(array( + 'error' => 'ID not set' + )); + exit(); } $product = new Product($db); if ($product->fetch($id) < 0) { -print json_encode(array( - 'error' => 'Product not found' - )); + print json_encode(array( + 'error' => 'Product not found' + )); } $prodcomb = new ProductCombination($db); diff --git a/htdocs/variants/ajax/get_attribute_values.php b/htdocs/variants/ajax/get_attribute_values.php index 0d72b16c5ed..866bac1ef78 100644 --- a/htdocs/variants/ajax/get_attribute_values.php +++ b/htdocs/variants/ajax/get_attribute_values.php @@ -31,19 +31,19 @@ header('Content-Type: application/json'); $id = GETPOST('id'); if (!$id) { -print json_encode(array( - 'error' => 'ID not set' - )); - exit(); + print json_encode(array( + 'error' => 'ID not set' + )); + exit(); } $prodattr = new ProductAttribute($db); if ($prodattr->fetch($id) < 0) { -print json_encode(array( - 'error' => 'Attribute not found' - )); - exit(); + print json_encode(array( + 'error' => 'Attribute not found' + )); + exit(); } $prodattrval = new ProductAttributeValue($db); @@ -51,10 +51,10 @@ $prodattrval = new ProductAttributeValue($db); $res = $prodattrval->fetchAllByProductAttribute($id); if ($res == -1) { -print json_encode(array( - 'error' => 'Internal error' - )); - exit(); + print json_encode(array( + 'error' => 'Internal error' + )); + exit(); } print json_encode($res); diff --git a/htdocs/variants/card.php b/htdocs/variants/card.php index e425aa16c5d..5847aa259b4 100644 --- a/htdocs/variants/card.php +++ b/htdocs/variants/card.php @@ -144,58 +144,54 @@ if ($action == 'edit') { } -if ($action != 'edit') -{ +if ($action != 'edit') { print '
'; print '
'; } -?> - - - - - - - - - +print '
trans('Ref') ?> - ref.'">'; - } else { - print dol_htmlentities($object->ref); - } ?> -
trans('Label') ?> - label.'">'; - } else { - print dol_htmlentities($object->label); - } ?> -
'; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; -
'.$langs->trans('Ref').''; +if ($action == 'edit') { + print ''; +} else { + print dol_htmlentities($object->ref); +} +print '
'.$langs->trans('Label').''; +if ($action == 'edit') { + print ''; +} else { + print dol_htmlentities($object->label); +} +print '
+print ''; -'; } dol_fiche_end(); -if ($action == 'edit') { ?> -
-
- -     - -
-
-'; + print '
'; + print ''; + print '   '; + print ''; + print '
'; + print '
'; +} else { if ($action == 'delete') { $form = new Form($db); -print $form->formconfirm( + print $form->formconfirm( "card.php?id=".$object->id, $langs->trans('Delete'), $langs->trans('ProductAttributeDeleteDialog'), @@ -208,7 +204,7 @@ print $form->formconfirm( if ($objectval->fetch($valueid) > 0) { $form = new Form($db); -print $form->formconfirm( + print $form->formconfirm( "card.php?id=".$object->id."&valueid=".$objectval->id, $langs->trans('Delete'), $langs->trans('ProductAttributeValueDeleteDialog', dol_htmlentities($objectval->value), dol_htmlentities($objectval->ref)), @@ -241,20 +237,19 @@ print $form->formconfirm( print ''; print ''; print ''; - } ?> + } - - - - - - + print '
trans('Ref') ?>trans('Value') ?>
'; + print ''; + print ''; + print ''; + print ''; + print ''; - fetchAllByProductAttribute($object->id) as $attrval) { - ?> - - id)): ?> + foreach ($objectval->fetchAllByProductAttribute($object->id) as $attrval) { + print ''; + if ($action == 'edit_value' && ($valueid == $attrval->id)) { + ?> - + - - - -
'.$langs->trans('Ref').''.$langs->trans('Value').'
@@ -262,31 +257,30 @@ print $form->formconfirm(     ref) ?> value) ?>
+ print ''; + } + print ''; - - - + if ($action == 'edit_value') { + print ''; + } - - - '; + print '
'; + print ''.$langs->trans('Create').''; + print '
'; + print '
'; } // End of page diff --git a/htdocs/variants/class/ProductCombination.class.php b/htdocs/variants/class/ProductCombination.class.php index db0d49a0e36..21346d6124e 100644 --- a/htdocs/variants/class/ProductCombination.class.php +++ b/htdocs/variants/class/ProductCombination.class.php @@ -572,9 +572,9 @@ WHERE c.fk_product_parent = ".(int) $productid." AND p.tosell = 1"; } if (isset($conf->global->PRODUIT_ATTRIBUTES_SEPARATOR)) { - $newproduct->ref .= $conf->global->PRODUIT_ATTRIBUTES_SEPARATOR . $prodattrval->ref; + $newproduct->ref .= $conf->global->PRODUIT_ATTRIBUTES_SEPARATOR . $prodattrval->ref; } else { - $newproduct->ref .= '_'.$prodattrval->ref; + $newproduct->ref .= '_'.$prodattrval->ref; } //The first one should not contain a linebreak diff --git a/htdocs/variants/combinations.php b/htdocs/variants/combinations.php index e5f1d17b8aa..a87959e76fb 100644 --- a/htdocs/variants/combinations.php +++ b/htdocs/variants/combinations.php @@ -425,7 +425,7 @@ if (! empty($id) || ! empty($ref)) fetch($pc2v->fk_prod_attr_val); - ?> + ?> variants_selected.index.push(fk_prod_attr ?>); variants_selected.info[fk_prod_attr ?>] = { attribute: variants_available[fk_prod_attr ?>], @@ -434,7 +434,7 @@ if (! empty($id) || ! empty($ref)) label: 'value ?>' } }; - @@ -484,7 +484,7 @@ if (! empty($id) || ! empty($ref)) }); - '; @@ -495,40 +495,36 @@ if (! empty($id) || ! empty($ref)) print ''; print ''."\n"; print ''."\n"; - if($valueid > 0) { + if ($valueid > 0) { print ''."\n"; } print dol_fiche_head(); - ?> - - - - - - '; + print '
- '; - print ''; - foreach ($prodattr_all as $attr) - { - //print ''; - print ''; - } - print ''; + print ''; + if ($action == 'add') { + print "\n"; + print ''; + print ''; + print ' @@ -555,15 +551,14 @@ if (! empty($id) || ! empty($ref)) - -
'; + if (is_array($prodattr_all)) { + print ''; + } - $htmltext=$langs->trans("GoOnMenuToCreateVairants", $langs->transnoentities("Product"), $langs->transnoentities("VariantAttributes")); - print $form->textwithpicto('', $htmltext); - /*print '     id).'">'; - print $langs->trans("Create"); - print '';*/ + $htmltext=$langs->trans("GoOnMenuToCreateVairants", $langs->transnoentities("Product"), $langs->transnoentities("VariantAttributes")); + print $form->textwithpicto('', $htmltext); + /*print '     id).'">'; + print $langs->trans("Create"); + print '';*/ - ?> + ?>
- -
- '; + print '
'; + } if (is_array($productCombination2ValuePairs1)) { - ?> + ?>
@@ -597,7 +592,7 @@ if (! empty($id) || ! empty($ref)) -isProduct()) { print ''; print ''; @@ -644,7 +639,7 @@ if (! empty($id) || ! empty($ref)) if ($productCombinations) { - ?> + ?> - - +print "\n"; -load("orders"); -$total=0; $ilink=0; +$total=0; +$ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { $ilink++; $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; -?> + ?> + if ($user->rights->fournisseur->commande->lire) { + $total = $total + $objectlink->total_ht; + echo price($objectlink->total_ht); + } ?> - 1) { @@ -74,6 +73,5 @@ if (count($linkedObjectBlock) > 1) - +print "\n"; diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index a724cf013eb..a548c1f8ccd 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2002-2005 Rodolphe Quiedeville * Copyright (C) 2004-2016 Laurent Destailleur * Copyright (C) 2004 Christophe Combelles * Copyright (C) 2005 Marc Barilley @@ -9,7 +9,7 @@ * Copyright (C) 2013 Florian Henry * Copyright (C) 2014-2016 Marcos García * Copyright (C) 2016-2017 Alexandre Spangaro - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2019 Frédéric France * Copyright (C) 2019 Ferran Marcet * * This program is free software; you can redistribute it and/or modify @@ -308,18 +308,20 @@ if (empty($reshook)) // Define output language $outputlangs = $langs; $newlang = ''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) { $newlang = GETPOST('lang_id', 'aZ09'); - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) - $newlang = $object->thirdparty->default_lang; - if (! empty($newlang)) { - $outputlangs = new Translate("", $conf); - $outputlangs->setDefaultLang($newlang); - } - if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { - $ret = $object->fetch($object->id); // Reload to get new records - $object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); - } + } + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) { + $newlang = $object->thirdparty->default_lang; + } + if (! empty($newlang)) { + $outputlangs = new Translate("", $conf); + $outputlangs->setDefaultLang($newlang); + } + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { + $ret = $object->fetch($object->id); // Reload to get new records + $object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); + } } } @@ -1017,97 +1019,97 @@ if (empty($reshook)) { $db->begin(); - $object->fetch($id); - $object->fetch_thirdparty(); + $object->fetch($id); + $object->fetch_thirdparty(); - $tva_tx = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0); + $tva_tx = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0); - if (GETPOST('price_ht') != '') - { - $up = price2num(GETPOST('price_ht')); - $price_base_type = 'HT'; - } - else - { - $up = price2num(GETPOST('price_ttc')); - $price_base_type = 'TTC'; - } + if (GETPOST('price_ht') != '') + { + $up = price2num(GETPOST('price_ht')); + $price_base_type = 'HT'; + } + else + { + $up = price2num(GETPOST('price_ttc')); + $price_base_type = 'TTC'; + } - if (GETPOST('productid') > 0) + if (GETPOST('productid') > 0) + { + $productsupplier = new ProductFournisseur($db); + if (! empty($conf->global->SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY)) { - $productsupplier = new ProductFournisseur($db); - if (! empty($conf->global->SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY)) + if (GETPOST('productid') > 0 && $productsupplier->get_buyprice(0, price2num($_POST['qty']), GETPOST('productid'), 'none', GETPOST('socid', 'int')) < 0 ) { - if (GETPOST('productid') > 0 && $productsupplier->get_buyprice(0, price2num($_POST['qty']), GETPOST('productid'), 'none', GETPOST('socid', 'int')) < 0 ) - { - setEventMessages($langs->trans("ErrorQtyTooLowForThisSupplier"), null, 'warnings'); - } - } - - $prod = new Product($db); - $prod->fetch(GETPOST('productid')); - $label = $prod->description; - if (trim($_POST['product_desc']) != trim($label)) $label=$_POST['product_desc']; - - $type = $prod->type; - } - else - { - $label = $_POST['product_desc']; - $type = $_POST["type"]?$_POST["type"]:0; - } - - $date_start=dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), GETPOST('date_startsec'), GETPOST('date_startmonth'), GETPOST('date_startday'), GETPOST('date_startyear')); - $date_end=dol_mktime(GETPOST('date_endhour'), GETPOST('date_endmin'), GETPOST('date_endsec'), GETPOST('date_endmonth'), GETPOST('date_endday'), GETPOST('date_endyear')); - - // Define info_bits - $info_bits = 0; - if (preg_match('/\*/', $tva_tx)) - $info_bits |= 0x01; - - // Define vat_rate - $tva_tx = str_replace('*', '', $tva_tx); - $localtax1_tx= get_localtax($tva_tx, 1, $mysoc, $object->thirdparty); - $localtax2_tx= get_localtax($tva_tx, 2, $mysoc, $object->thirdparty); - - $remise_percent=GETPOST('remise_percent'); - $pu_ht_devise = GETPOST('multicurrency_subprice'); - - // Extrafields Lines - $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line); - $array_options = $extrafields->getOptionalsFromPost($object->table_element_line); - // Unset extrafield POST Data - if (is_array($extralabelsline)) { - foreach ($extralabelsline as $key => $value) { - unset($_POST["options_" . $key]); + setEventMessages($langs->trans("ErrorQtyTooLowForThisSupplier"), null, 'warnings'); } } - $result=$object->updateline(GETPOST('lineid'), $label, $up, $tva_tx, $localtax1_tx, $localtax2_tx, GETPOST('qty'), GETPOST('productid'), $price_base_type, $info_bits, $type, $remise_percent, 0, $date_start, $date_end, $array_options, $_POST['units'], $pu_ht_devise, GETPOST('fourn_ref', 'alpha')); - if ($result >= 0) - { - unset($_POST['label']); - unset($_POST['fourn_ref']); - unset($_POST['date_starthour']); - unset($_POST['date_startmin']); - unset($_POST['date_startsec']); - unset($_POST['date_startday']); - unset($_POST['date_startmonth']); - unset($_POST['date_startyear']); - unset($_POST['date_endhour']); - unset($_POST['date_endmin']); - unset($_POST['date_endsec']); - unset($_POST['date_endday']); - unset($_POST['date_endmonth']); - unset($_POST['date_endyear']); + $prod = new Product($db); + $prod->fetch(GETPOST('productid')); + $label = $prod->description; + if (trim($_POST['product_desc']) != trim($label)) $label=$_POST['product_desc']; - $db->commit(); - } - else - { - $db->rollback(); - setEventMessages($object->error, $object->errors, 'errors'); + $type = $prod->type; + } + else + { + $label = $_POST['product_desc']; + $type = $_POST["type"]?$_POST["type"]:0; + } + + $date_start=dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), GETPOST('date_startsec'), GETPOST('date_startmonth'), GETPOST('date_startday'), GETPOST('date_startyear')); + $date_end=dol_mktime(GETPOST('date_endhour'), GETPOST('date_endmin'), GETPOST('date_endsec'), GETPOST('date_endmonth'), GETPOST('date_endday'), GETPOST('date_endyear')); + + // Define info_bits + $info_bits = 0; + if (preg_match('/\*/', $tva_tx)) + $info_bits |= 0x01; + + // Define vat_rate + $tva_tx = str_replace('*', '', $tva_tx); + $localtax1_tx= get_localtax($tva_tx, 1, $mysoc, $object->thirdparty); + $localtax2_tx= get_localtax($tva_tx, 2, $mysoc, $object->thirdparty); + + $remise_percent=GETPOST('remise_percent'); + $pu_ht_devise = GETPOST('multicurrency_subprice'); + + // Extrafields Lines + $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line); + $array_options = $extrafields->getOptionalsFromPost($object->table_element_line); + // Unset extrafield POST Data + if (is_array($extralabelsline)) { + foreach ($extralabelsline as $key => $value) { + unset($_POST["options_" . $key]); } + } + + $result=$object->updateline(GETPOST('lineid'), $label, $up, $tva_tx, $localtax1_tx, $localtax2_tx, GETPOST('qty'), GETPOST('productid'), $price_base_type, $info_bits, $type, $remise_percent, 0, $date_start, $date_end, $array_options, $_POST['units'], $pu_ht_devise, GETPOST('fourn_ref', 'alpha')); + if ($result >= 0) + { + unset($_POST['label']); + unset($_POST['fourn_ref']); + unset($_POST['date_starthour']); + unset($_POST['date_startmin']); + unset($_POST['date_startsec']); + unset($_POST['date_startday']); + unset($_POST['date_startmonth']); + unset($_POST['date_startyear']); + unset($_POST['date_endhour']); + unset($_POST['date_endmin']); + unset($_POST['date_endsec']); + unset($_POST['date_endday']); + unset($_POST['date_endmonth']); + unset($_POST['date_endyear']); + + $db->commit(); + } + else + { + $db->rollback(); + setEventMessages($object->error, $object->errors, 'errors'); + } } elseif ($action == 'addline' && $user->rights->fournisseur->facture->creer) @@ -1654,52 +1656,52 @@ if ($action == 'create') $element = 'projet'; } - // For compatibility - if ($element == 'order') { - $element = $subelement = 'commande'; - } - if ($element == 'propal') { - $element = 'comm/propal'; $subelement = 'propal'; - } - if ($element == 'contract') { - $element = $subelement = 'contrat'; - } - if ($element == 'order_supplier') { - $element = 'fourn'; $subelement = 'fournisseur.commande'; - } + // For compatibility + if ($element == 'order') { + $element = $subelement = 'commande'; + } + if ($element == 'propal') { + $element = 'comm/propal'; $subelement = 'propal'; + } + if ($element == 'contract') { + $element = $subelement = 'contrat'; + } + if ($element == 'order_supplier') { + $element = 'fourn'; $subelement = 'fournisseur.commande'; + } - require_once DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php'; - $classname = ucfirst($subelement); - if ($classname == 'Fournisseur.commande') $classname='CommandeFournisseur'; - $objectsrc = new $classname($db); - $objectsrc->fetch($originid); - $objectsrc->fetch_thirdparty(); + require_once DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php'; + $classname = ucfirst($subelement); + if ($classname == 'Fournisseur.commande') $classname='CommandeFournisseur'; + $objectsrc = new $classname($db); + $objectsrc->fetch($originid); + $objectsrc->fetch_thirdparty(); - $projectid = (!empty($objectsrc->fk_project)?$objectsrc->fk_project:''); - //$ref_client = (!empty($objectsrc->ref_client)?$object->ref_client:''); + $projectid = (!empty($objectsrc->fk_project)?$objectsrc->fk_project:''); + //$ref_client = (!empty($objectsrc->ref_client)?$object->ref_client:''); - $soc = $objectsrc->thirdparty; - $cond_reglement_id = (!empty($objectsrc->cond_reglement_id)?$objectsrc->cond_reglement_id:(!empty($soc->cond_reglement_supplier_id)?$soc->cond_reglement_supplier_id:0)); // TODO maybe add default value option - $mode_reglement_id = (!empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(!empty($soc->mode_reglement_supplier_id)?$soc->mode_reglement_supplier_id:0)); - $fk_account = (! empty($objectsrc->fk_account)?$objectsrc->fk_account:(! empty($soc->fk_account)?$soc->fk_account:0)); - $remise_percent = (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_supplier_percent)?$soc->remise_supplier_percent:0)); - $remise_absolue = (!empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0)); - $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''; + $soc = $objectsrc->thirdparty; + $cond_reglement_id = (!empty($objectsrc->cond_reglement_id)?$objectsrc->cond_reglement_id:(!empty($soc->cond_reglement_supplier_id)?$soc->cond_reglement_supplier_id:0)); // TODO maybe add default value option + $mode_reglement_id = (!empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(!empty($soc->mode_reglement_supplier_id)?$soc->mode_reglement_supplier_id:0)); + $fk_account = (! empty($objectsrc->fk_account)?$objectsrc->fk_account:(! empty($soc->fk_account)?$soc->fk_account:0)); + $remise_percent = (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_supplier_percent)?$soc->remise_supplier_percent:0)); + $remise_absolue = (!empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0)); + $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''; - if (!empty($conf->multicurrency->enabled)) - { - if (!empty($objectsrc->multicurrency_code)) $currency_code = $objectsrc->multicurrency_code; - if (!empty($conf->global->MULTICURRENCY_USE_ORIGIN_TX) && !empty($objectsrc->multicurrency_tx)) $currency_tx = $objectsrc->multicurrency_tx; - } + if (!empty($conf->multicurrency->enabled)) + { + if (!empty($objectsrc->multicurrency_code)) $currency_code = $objectsrc->multicurrency_code; + if (!empty($conf->global->MULTICURRENCY_USE_ORIGIN_TX) && !empty($objectsrc->multicurrency_tx)) $currency_tx = $objectsrc->multicurrency_tx; + } - $datetmp=dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); - $dateinvoice=($datetmp==''?(empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''):$datetmp); - $datetmp=dol_mktime(12, 0, 0, $_POST['echmonth'], $_POST['echday'], $_POST['echyear']); - $datedue=($datetmp==''?-1:$datetmp); + $datetmp=dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); + $dateinvoice=($datetmp==''?(empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''):$datetmp); + $datetmp=dol_mktime(12, 0, 0, $_POST['echmonth'], $_POST['echday'], $_POST['echyear']); + $datedue=($datetmp==''?-1:$datetmp); - // Replicate extrafields - $objectsrc->fetch_optionals($originid); - $object->array_options = $objectsrc->array_options; + // Replicate extrafields + $objectsrc->fetch_optionals($originid); + $object->array_options = $objectsrc->array_options; } else { @@ -2047,7 +2049,7 @@ if ($action == 'create') $doleditor = new DolEditor('note_public', $note_public, '', 80, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, '90%'); print $doleditor->Create(1); print ''; - // print ''; + // print ''; print ''; // Private note @@ -2376,19 +2378,20 @@ else $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->fournisseur->facture->creer) { - if ($action != 'classify') - $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects((empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS)?$object->socid:-1), $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + if ($action != 'classify') { + $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects((empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS)?$object->socid:-1), $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index c08178bc932..adcfb408166 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -614,12 +614,12 @@ if ($resql) FactureFournisseur::TYPE_CREDIT_NOTE=>$langs->trans("InvoiceAvoir"), FactureFournisseur::TYPE_DEPOSIT=>$langs->trans("InvoiceDeposit"), ); -/* + /* if (! empty($conf->global->INVOICE_USE_SITUATION)) { $listtype[Facture::TYPE_SITUATION] = $langs->trans("InvoiceSituation"); } -*/ + */ //$listtype[Facture::TYPE_PROFORMA]=$langs->trans("InvoiceProForma"); // A proformat invoice is not an invoice but must be an order. print $form->selectarray('search_type', $listtype, $search_type, 1, 0, 0, '', 0, 0, 0, 'ASC', 'maxwidth100'); print ''; @@ -1105,32 +1105,31 @@ if ($resql) // Show total line if (isset($totalarray['totalhtfield']) - || isset($totalarray['totalvatfield']) - || isset($totalarray['totallocaltax1field']) - || isset($totalarray['totallocaltax2field']) - || isset($totalarray['totalttcfield']) - || isset($totalarray['totalamfield']) - || isset($totalarray['totalrtpfield']) - ) - { + || isset($totalarray['totalvatfield']) + || isset($totalarray['totallocaltax1field']) + || isset($totalarray['totallocaltax2field']) + || isset($totalarray['totalttcfield']) + || isset($totalarray['totalamfield']) + || isset($totalarray['totalrtpfield']) + ) { print ''; $i=0; while ($i < $totalarray['nbfield']) { - $i++; - if ($i == 1) - { + $i++; + if ($i == 1) + { if ($num < $limit && empty($offset)) print ''; else print ''; - } - elseif ($totalarray['totalhtfield'] == $i) print ''; - elseif ($totalarray['totalvatfield'] == $i) print ''; - elseif ($totalarray['totallocaltax1field'] == $i) print ''; - elseif ($totalarray['totallocaltax2field'] == $i) print ''; - elseif ($totalarray['totalttcfield'] == $i) print ''; - elseif ($totalarray['totalamfield'] == $i) print ''; - elseif ($totalarray['totalrtpfield'] == $i) print ''; - else print ''; + } + elseif ($totalarray['totalhtfield'] == $i) print ''; + elseif ($totalarray['totalvatfield'] == $i) print ''; + elseif ($totalarray['totallocaltax1field'] == $i) print ''; + elseif ($totalarray['totallocaltax2field'] == $i) print ''; + elseif ($totalarray['totalttcfield'] == $i) print ''; + elseif ($totalarray['totalamfield'] == $i) print ''; + elseif ($totalarray['totalrtpfield'] == $i) print ''; + else print ''; } print ''; } diff --git a/htdocs/fourn/facture/note.php b/htdocs/fourn/facture/note.php index ba51b4688a9..03a4dda960e 100644 --- a/htdocs/fourn/facture/note.php +++ b/htdocs/fourn/facture/note.php @@ -102,20 +102,21 @@ if ($object->id > 0) $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->fournisseur->commande->creer) { - if ($action != 'classify') + if ($action != 'classify') { // $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + $morehtmlref.=' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/fourn/facture/paiement.php b/htdocs/fourn/facture/paiement.php index c68dcd98752..38136aa3b64 100644 --- a/htdocs/fourn/facture/paiement.php +++ b/htdocs/fourn/facture/paiement.php @@ -755,7 +755,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie $db->free($resql); } else - { + { dol_print_error($db); } } diff --git a/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php b/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php index ed94fdf23d4..cc3d3084464 100644 --- a/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php +++ b/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php @@ -25,11 +25,9 @@ if (empty($conf) || ! is_object($conf)) exit; } -?> - +print "\n"; - $objectlink) $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; -?> + ?> + if ($user->rights->fournisseur->facture->lire) { + $sign = 1; + if ($object->type == FactureFournisseur::TYPE_CREDIT_NOTE) $sign = -1; + if ($objectlink->statut != 3) + { + // If not abandonned + $total = $total + $sign * $objectlink->total_ht; + echo price($objectlink->total_ht); + } + else + { + echo ''.price($objectlink->total_ht).''; + } + } ?> - 1) { @@ -85,6 +84,5 @@ if (count($linkedObjectBlock) > 1) - +print "\n"; diff --git a/htdocs/fourn/recap-fourn.php b/htdocs/fourn/recap-fourn.php index db2a3bdc38a..deee321187b 100644 --- a/htdocs/fourn/recap-fourn.php +++ b/htdocs/fourn/recap-fourn.php @@ -77,7 +77,7 @@ if ($socid > 0) $sql.= " u.login, u.rowid as userid"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s,".MAIN_DB_PREFIX."facture_fourn as f,".MAIN_DB_PREFIX."user as u"; $sql.= " WHERE f.fk_soc = s.rowid AND s.rowid = ".$societe->id; - $sql.= " AND f.entity IN (".getEntity("facture_fourn").")"; // Reconaissance de l'entité attribuée à cette facture pour Multicompany + $sql.= " AND f.entity IN (".getEntity("facture_fourn").")"; // Reconaissance de l'entité attribuée à cette facture pour Multicompany $sql.= " AND f.fk_user_valid = u.rowid"; $sql.= " ORDER BY f.datef DESC"; diff --git a/htdocs/ftp/index.php b/htdocs/ftp/index.php index d69f1751911..32d8ed44bb4 100644 --- a/htdocs/ftp/index.php +++ b/htdocs/ftp/index.php @@ -359,7 +359,7 @@ llxHeader(); // Add logic to shoow/hide buttons if ($conf->use_javascript_ajax) { -?> + ?> -entity.")"; $sql.= " OR u.admin = 1"; - } - else + } else { $sql.= " WHERE u.entity IN (0,".$conf->entity.")"; + } - $sql.= " AND u.statut > 0"; - if ($filters) $sql.=$filters; + $sql.= " AND u.statut > 0"; + if ($filters) $sql.=$filters; - $resql=$this->db->query($sql); + $resql=$this->db->query($sql); - // Si pas d'erreur SQL - if ($resql) - { - $i = 0; - $tab_result = $this->holiday; - $num = $this->db->num_rows($resql); + // Si pas d'erreur SQL + if ($resql) + { + $i = 0; + $tab_result = $this->holiday; + $num = $this->db->num_rows($resql); - // Boucles du listage des utilisateurs - while($i < $num) { - $obj = $this->db->fetch_object($resql); + // Boucles du listage des utilisateurs + while($i < $num) { + $obj = $this->db->fetch_object($resql); - $tab_result[$i]['rowid'] = $obj->rowid; // rowid of user - $tab_result[$i]['name'] = $obj->lastname; // deprecated - $tab_result[$i]['lastname'] = $obj->lastname; - $tab_result[$i]['firstname'] = $obj->firstname; - $tab_result[$i]['gender'] = $obj->gender; - $tab_result[$i]['status'] = $obj->statut; - $tab_result[$i]['employee'] = $obj->employee; - $tab_result[$i]['photo'] = $obj->photo; - $tab_result[$i]['fk_user'] = $obj->fk_user; // rowid of manager - //$tab_result[$i]['type'] = $obj->type; - //$tab_result[$i]['nb_holiday'] = $obj->nb_holiday; + $tab_result[$i]['rowid'] = $obj->rowid; // rowid of user + $tab_result[$i]['name'] = $obj->lastname; // deprecated + $tab_result[$i]['lastname'] = $obj->lastname; + $tab_result[$i]['firstname'] = $obj->firstname; + $tab_result[$i]['gender'] = $obj->gender; + $tab_result[$i]['status'] = $obj->statut; + $tab_result[$i]['employee'] = $obj->employee; + $tab_result[$i]['photo'] = $obj->photo; + $tab_result[$i]['fk_user'] = $obj->fk_user; // rowid of manager + //$tab_result[$i]['type'] = $obj->type; + //$tab_result[$i]['nb_holiday'] = $obj->nb_holiday; - $i++; - } - // Retoune le tableau des utilisateurs - return $tab_result; - } - else - { - // Erreur SQL - $this->errors[]="Error ".$this->db->lasterror(); - return -1; + $i++; } + // Retoune le tableau des utilisateurs + return $tab_result; + } else { + // Erreur SQL + $this->errors[]="Error ".$this->db->lasterror(); + return -1; + } } else { diff --git a/htdocs/holiday/document.php b/htdocs/holiday/document.php index 05ddf164105..02e29774e93 100644 --- a/htdocs/holiday/document.php +++ b/htdocs/holiday/document.php @@ -213,7 +213,7 @@ if ($object->id) print ''; print '
>
trans("SupplierOrder"); ?> trans("ShowOrder"), "order").' '.$objectlink->ref; ?> ref_supplier; ?> date, 'day'); ?> rights->fournisseur->commande->lire) { - $total = $total + $objectlink->total_ht; - echo price($objectlink->total_ht); - } ?> getLibStatut(3); ?> ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?>
'.$langs->trans("Total").''.$langs->trans("Totalforthispage").''.price($totalarray['totalht']).''.price($totalarray['totalvat']).''.price($totalarray['totallocaltax1']).''.price($totalarray['totallocaltax2']).''.price($totalarray['totalttc']).''.price($totalarray['totalam']).''.price($totalarray['totalrtp']).''.price($totalarray['totalht']).''.price($totalarray['totalvat']).''.price($totalarray['totallocaltax1']).''.price($totalarray['totallocaltax2']).''.price($totalarray['totalttc']).''.price($totalarray['totalam']).''.price($totalarray['totalrtp']).'
trans("SupplierInvoice"); ?> trans("ShowBill"), "bill").' '.$objectlink->ref; ?> ref_supplier; ?> date, 'day'); ?> rights->fournisseur->facture->lire) { - $sign = 1; - if ($object->type == FactureFournisseur::TYPE_CREDIT_NOTE) $sign = -1; - if ($objectlink->statut != 3) // If not abandonned - { - $total = $total + $sign * $objectlink->total_ht; - echo price($objectlink->total_ht); - } - else - { - echo ''.price($objectlink->total_ht).''; - } - } ?> getLibStatut(3); ?> ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?>
'."\n"; -/* + /* print '
'; print '
'; print '
'; diff --git a/htdocs/holiday/month_report.php b/htdocs/holiday/month_report.php index a7efd8616f0..1d490cc8da3 100644 --- a/htdocs/holiday/month_report.php +++ b/htdocs/holiday/month_report.php @@ -119,75 +119,75 @@ print ''; if ($num == 0) { - print ''.$langs->trans('None').''; + print ''.$langs->trans('None').''; } else { - while ($obj = $db->fetch_object($resql)) - { - $user = new User($db); - $user->fetch($obj->fk_user); + while ($obj = $db->fetch_object($resql)) + { + $user = new User($db); + $user->fetch($obj->fk_user); - $date_start = $db->jdate($obj->date_debut, true); - $date_end = $db->jdate($obj->date_fin, true); + $date_start = $db->jdate($obj->date_debut, true); + $date_end = $db->jdate($obj->date_fin, true); - $tmpstart = dol_getdate($date_start); - $tmpend = dol_getdate($date_end); + $tmpstart = dol_getdate($date_start); + $tmpend = dol_getdate($date_end); - $starthalfday=($obj->halfday == -1 || $obj->halfday == 2)?'afternoon':'morning'; - $endhalfday=($obj->halfday == 1 || $obj->halfday == 2)?'morning':'afternoon'; + $starthalfday=($obj->halfday == -1 || $obj->halfday == 2)?'afternoon':'morning'; + $endhalfday=($obj->halfday == 1 || $obj->halfday == 2)?'morning':'afternoon'; - $halfdayinmonth = $obj->halfday; - $starthalfdayinmonth = $starthalfday; - $endhalfdayinmonth = $endhalfday; + $halfdayinmonth = $obj->halfday; + $starthalfdayinmonth = $starthalfday; + $endhalfdayinmonth = $endhalfday; - //0:Full days, 2:Start afternoon end morning, -1:Start afternoon end afternoon, 1:Start morning end morning + //0:Full days, 2:Start afternoon end morning, -1:Start afternoon end afternoon, 1:Start morning end morning - // Set date_start_gmt and date_end_gmt that are date to show for the selected month - $date_start_inmonth = $db->jdate($obj->date_debut, true); - $date_end_inmonth = $db->jdate($obj->date_fin, true); - if ($tmpstart['year'] < $search_year || $tmpstart['mon'] < $search_month) - { - $date_start_inmonth = dol_get_first_day($search_year, $search_month, true); - $starthalfdayinmonth = 'morning'; - if ($halfdayinmonth == 2) $halfdayinmonth=1; - if ($halfdayinmonth == -1) $halfdayinmonth=0; - } - if ($tmpend['year'] > $search_year || $tmpend['mon'] > $search_month) - { - $date_end_inmonth = dol_get_last_day($search_year, $search_month, true) - ((24 * 3600) - 1); - $endhalfdayinmonth = 'afternoon'; - if ($halfdayinmonth == 2) $halfdayinmonth=-1; - if ($halfdayinmonth == 1) $halfdayinmonth=0; - } + // Set date_start_gmt and date_end_gmt that are date to show for the selected month + $date_start_inmonth = $db->jdate($obj->date_debut, true); + $date_end_inmonth = $db->jdate($obj->date_fin, true); + if ($tmpstart['year'] < $search_year || $tmpstart['mon'] < $search_month) + { + $date_start_inmonth = dol_get_first_day($search_year, $search_month, true); + $starthalfdayinmonth = 'morning'; + if ($halfdayinmonth == 2) $halfdayinmonth=1; + if ($halfdayinmonth == -1) $halfdayinmonth=0; + } + if ($tmpend['year'] > $search_year || $tmpend['mon'] > $search_month) + { + $date_end_inmonth = dol_get_last_day($search_year, $search_month, true) - ((24 * 3600) - 1); + $endhalfdayinmonth = 'afternoon'; + if ($halfdayinmonth == 2) $halfdayinmonth=-1; + if ($halfdayinmonth == 1) $halfdayinmonth=0; + } - // Leave request - $holidaystatic->id=$obj->rowid; - $holidaystatic->ref=$obj->rowid; + // Leave request + $holidaystatic->id=$obj->rowid; + $holidaystatic->ref=$obj->rowid; - print ''; - print ''; - print $holidaystatic->getNomUrl(1, 1); - print ''; - print '' . $user->getFullName($langs) . ''; - print '' . $obj->label . ''; - print '' . dol_print_date($db->jdate($obj->date_debut), 'day'); - print ' ('.$langs->trans($listhalfday[$starthalfday]).')'; - print ''; - print '' . dol_print_date($db->jdate($obj->date_fin), 'day'); - print ' ('.$langs->trans($listhalfday[$endhalfday]).')'; - print ''; - print '' . num_open_day($date_start, $date_end, 0, 1, $obj->halfday) . ''; - print '' . dol_print_date($date_start_inmonth, 'day'); - print ' ('.$langs->trans($listhalfday[$starthalfdayinmonth]).')'; - print ''; - print '' . dol_print_date($date_end_inmonth, 'day'); - print ' ('.$langs->trans($listhalfday[$endhalfdayinmonth]).')'; - print ''; - print '' . num_open_day($date_start_inmonth, $date_end_inmonth, 0, 1, $halfdayinmonth) . ''; - print '' . dol_escape_htmltag(dolGetFirstLineOfText($obj->description)) . ''; - print ''; - } + print ''; + print ''; + print $holidaystatic->getNomUrl(1, 1); + print ''; + print '' . $user->getFullName($langs) . ''; + print '' . $obj->label . ''; + print '' . dol_print_date($db->jdate($obj->date_debut), 'day'); + print ' ('.$langs->trans($listhalfday[$starthalfday]).')'; + print ''; + print '' . dol_print_date($db->jdate($obj->date_fin), 'day'); + print ' ('.$langs->trans($listhalfday[$endhalfday]).')'; + print ''; + print '' . num_open_day($date_start, $date_end, 0, 1, $obj->halfday) . ''; + print '' . dol_print_date($date_start_inmonth, 'day'); + print ' ('.$langs->trans($listhalfday[$starthalfdayinmonth]).')'; + print ''; + print '' . dol_print_date($date_end_inmonth, 'day'); + print ' ('.$langs->trans($listhalfday[$endhalfdayinmonth]).')'; + print ''; + print '' . num_open_day($date_start_inmonth, $date_end_inmonth, 0, 1, $halfdayinmonth) . ''; + print '' . dol_escape_htmltag(dolGetFirstLineOfText($obj->description)) . ''; + print ''; + } } print ''; print '
'; diff --git a/htdocs/hrm/class/establishment.class.php b/htdocs/hrm/class/establishment.class.php index 0ea9b5ffba2..863f519231d 100644 --- a/htdocs/hrm/class/establishment.class.php +++ b/htdocs/hrm/class/establishment.class.php @@ -265,12 +265,12 @@ class Establishment extends CommonObject } } - /** - * Delete record - * - * @param int $id Id of record to delete - * @return int <0 if KO, >0 if OK - */ + /** + * Delete record + * + * @param int $id Id of record to delete + * @return int <0 if KO, >0 if OK + */ public function delete($id) { $this->db->begin(); diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index 9edc7f018a7..6a00679fd84 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -1962,15 +1962,16 @@ function show_elem($fieldssource, $pos, $key, $var, $nostyle = '') $height='24px'; - if ($key == 'none') {//stop multiple duplicate ids with no number + if ($key == 'none') { + //stop multiple duplicate ids with no number print "\n\n\n"; print '
' . "\n"; print '' . "\n"; } else { - print "\n\n\n"; + print "\n\n\n"; print '
' . "\n"; - print '
'."\n"; + print '
'."\n"; } if ($pos && $pos > count($fieldssource)) // No fields diff --git a/htdocs/install/fileconf.php b/htdocs/install/fileconf.php index c953790f8c0..a7cc08d4ef2 100644 --- a/htdocs/install/fileconf.php +++ b/htdocs/install/fileconf.php @@ -118,19 +118,21 @@ if (! empty($force_install_message)) +if (empty($dolibarr_main_url_root)) { + $dolibarr_main_document_root = detect_dolibarr_main_document_root(); +} +?> - @@ -245,9 +244,7 @@ if (! empty($force_install_message)) id="db_name" name="db_name" value="" - + > @@ -324,9 +321,7 @@ if (! empty($force_install_message)) ?> @@ -343,9 +338,7 @@ if (! empty($force_install_message)) id="db_host" name="db_host" value="" - + > @@ -391,12 +380,8 @@ if (! empty($force_install_message)) - + + > @@ -424,17 +407,16 @@ if (! empty($force_install_message)) + value=" + " + > @@ -446,12 +428,8 @@ if (! empty($force_install_message)) - + + > \n"; print "\n"; - print "
+ > " - + > " - + > trans("Examples").":
"; ?> @@ -214,19 +217,15 @@ if (! empty($force_install_message)) - + + >
trans("CheckToForceHttps"); ?>
trans("DatabaseName"); ?> trans("ServerAddressDescription"); ?> @@ -360,9 +353,7 @@ if (! empty($force_install_message)) name="db_port" id="db_port" value="" - + > trans("ServerPortDescription"); ?> @@ -377,9 +368,7 @@ if (! empty($force_install_message)) id="db_prefix" name="db_prefix" value="" - + > trans("DatabasePrefixDescription"); ?> trans("CheckToCreateDatabase"); ?> @@ -410,9 +395,7 @@ if (! empty($force_install_message)) id="db_user" name="db_user" value="" - + > trans("AdminLogin"); ?> trans("AdminPassword"); ?> trans("CheckToCreateUser"); ?> @@ -478,9 +456,7 @@ if (! empty($force_install_message)) name="db_user_root" class="needroot" value="" - 0 && ! empty($force_install_databaserootlogin)) { - print ' disabled'; - } ?> + 0 && ! empty($force_install_databaserootlogin)) { print ' disabled'; } ?> > trans("DatabaseRootLoginDescription"); ?> @@ -516,9 +492,7 @@ if (! empty($force_install_message)) } // Do not autofill password for remote access print dol_escape_htmltag($autofill); ?>" - 0 && ! empty($force_install_databaserootpass)) { - print ' disabled'; // May be removed by javascript - } ?> + 0 && ! empty($force_install_databaserootpass)) { print ' disabled'; // May be removed by javascript } ?> > trans("KeepEmptyIfNoPassword"); ?> diff --git a/htdocs/mailmanspip/class/mailmanspip.class.php b/htdocs/mailmanspip/class/mailmanspip.class.php index 6a1967bccf9..d8b5c7ed36e 100644 --- a/htdocs/mailmanspip/class/mailmanspip.class.php +++ b/htdocs/mailmanspip/class/mailmanspip.class.php @@ -379,7 +379,7 @@ class MailmanSpip return count($lists); } else - { + { $this->error="ADHERENT_MAILMAN_URL not defined"; return -1; } diff --git a/htdocs/margin/agentMargins.php b/htdocs/margin/agentMargins.php index 17caa1bf29e..e04a5e6ecc0 100644 --- a/htdocs/margin/agentMargins.php +++ b/htdocs/margin/agentMargins.php @@ -68,9 +68,9 @@ if (!empty($enddatemonth)) // Security check if ($user->rights->margins->read->all) { - $agentid = GETPOST('agentid', 'int'); + $agentid = GETPOST('agentid', 'int'); } else { - $agentid = $user->id; + $agentid = $user->id; } $result=restrictedArea($user, 'margins'); diff --git a/htdocs/margin/customerMargins.php b/htdocs/margin/customerMargins.php index 8d1e04cafd2..b8f530660f1 100644 --- a/htdocs/margin/customerMargins.php +++ b/htdocs/margin/customerMargins.php @@ -360,7 +360,7 @@ if ($result) print "".(($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%")."
"; + print ""; } else { diff --git a/htdocs/margin/productMargins.php b/htdocs/margin/productMargins.php index f63067d6af8..a4aed7f668a 100644 --- a/htdocs/margin/productMargins.php +++ b/htdocs/margin/productMargins.php @@ -103,13 +103,13 @@ dol_fiche_head($head, 'productMargins', $titre, 0, $picto); print ''; if ($id > 0) { - print ''; - print ''; + print ''; + print ''; - if (! $sortorder) $sortorder="DESC"; - if (! $sortfield) $sortfield="f.datef"; + if (! $sortorder) $sortorder="DESC"; + if (! $sortfield) $sortfield="f.datef"; } else { print ''; From 20f97807ceebaa3623801b640ccc042f3e3822b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 10:07:47 +0100 Subject: [PATCH 624/980] clean indent --- htdocs/contrat/card.php | 49 ++++++++--------- htdocs/contrat/class/contrat.class.php | 8 +-- htdocs/dav/dav.lib.php | 12 ++--- htdocs/public/agenda/agendaexport.php | 2 +- htdocs/public/payment/newpayment.php | 73 ++++++++++++-------------- 5 files changed, 70 insertions(+), 74 deletions(-) diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 2ec6f63d84c..3a8e4f99a65 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -444,13 +444,13 @@ if (empty($reshook)) $error++; } - $date_start = dol_mktime(GETPOST('date_start' . $predef . 'hour'), GETPOST('date_start' . $predef . 'min'), GETPOST('date_start' . $predef . 'sec'), GETPOST('date_start' . $predef . 'month'), GETPOST('date_start' . $predef . 'day'), GETPOST('date_start' . $predef . 'year')); - $date_end = dol_mktime(GETPOST('date_end' . $predef . 'hour'), GETPOST('date_end' . $predef . 'min'), GETPOST('date_end' . $predef . 'sec'), GETPOST('date_end' . $predef . 'month'), GETPOST('date_end' . $predef . 'day'), GETPOST('date_end' . $predef . 'year')); - if (!empty($date_start) && !empty($date_end) && $date_start > $date_end) - { - setEventMessages($langs->trans("Error").': '.$langs->trans("DateStartPlanned").' > '.$langs->trans("DateEndPlanned"), null, 'errors'); - $error++; - } + $date_start = dol_mktime(GETPOST('date_start' . $predef . 'hour'), GETPOST('date_start' . $predef . 'min'), GETPOST('date_start' . $predef . 'sec'), GETPOST('date_start' . $predef . 'month'), GETPOST('date_start' . $predef . 'day'), GETPOST('date_start' . $predef . 'year')); + $date_end = dol_mktime(GETPOST('date_end' . $predef . 'hour'), GETPOST('date_end' . $predef . 'min'), GETPOST('date_end' . $predef . 'sec'), GETPOST('date_end' . $predef . 'month'), GETPOST('date_end' . $predef . 'day'), GETPOST('date_end' . $predef . 'year')); + if (!empty($date_start) && !empty($date_end) && $date_start > $date_end) + { + setEventMessages($langs->trans("Error").': '.$langs->trans("DateStartPlanned").' > '.$langs->trans("DateEndPlanned"), null, 'errors'); + $error++; + } // Extrafields $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line); @@ -531,7 +531,7 @@ if (empty($reshook)) $pu_ht = price2num($pu_ttc / (1 + ($tmpvat/100)), 'MU'); } else - { + { $pu_ttc = price2num($pu_ht * (1 + ($tmpvat/100)), 'MU'); } } @@ -727,9 +727,9 @@ if (empty($reshook)) $objectline->pa_ht=$pa_ht; if ($fk_unit > 0) { - $objectline->fk_unit = GETPOST('unit'); + $objectline->fk_unit = GETPOST('unit'); } else { - $objectline->fk_unit = null; + $objectline->fk_unit = null; } // Extrafields @@ -1418,19 +1418,20 @@ else $morehtmlref.='
'.$langs->trans('Project') . ' '; if ($user->rights->contrat->creer) { - if ($action != 'classify') + if ($action != 'classify') { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.='
'; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); - } + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.='
'; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); @@ -2253,7 +2254,7 @@ $db->close(); if (! empty($conf->margin->enabled) && $action == 'editline') { // TODO Why this ? To manage margin on contracts ? -?> + ?> - * Copyright (C) 2014-2015 Marcos García * Copyright (C) 2018 Nicolas ZABOURI - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2019 Frédéric France * Copyright (C) 2015-2018 Ferran Marcet * * This program is free software; you can redistribute it and/or modify @@ -861,9 +861,9 @@ class Contrat extends CommonObject // multilangs if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($objp->fk_product) && ! empty($loadalsotranslation)) { - $line = new Product($this->db); - $line->fetch($objp->fk_product); - $line->getMultiLangs(); + $line = new Product($this->db); + $line->fetch($objp->fk_product); + $line->getMultiLangs(); } $this->lines[$pos] = $line; diff --git a/htdocs/dav/dav.lib.php b/htdocs/dav/dav.lib.php index c2c0895c4d8..e428faa0f85 100644 --- a/htdocs/dav/dav.lib.php +++ b/htdocs/dav/dav.lib.php @@ -24,19 +24,19 @@ // define CDAV_CONTACT_TAG if not if(!defined('CDAV_CONTACT_TAG')) { - if(isset($conf->global->CDAV_CONTACT_TAG)) + if (isset($conf->global->CDAV_CONTACT_TAG)) define('CDAV_CONTACT_TAG', $conf->global->CDAV_CONTACT_TAG); - else - define('CDAV_CONTACT_TAG', ''); + else + define('CDAV_CONTACT_TAG', ''); } // define CDAV_URI_KEY if not if(!defined('CDAV_URI_KEY')) { - if(isset($conf->global->CDAV_URI_KEY)) + if (isset($conf->global->CDAV_URI_KEY)) define('CDAV_URI_KEY', $conf->global->CDAV_URI_KEY); - else - define('CDAV_URI_KEY', substr(md5($_SERVER['HTTP_HOST']), 0, 8)); + else + define('CDAV_URI_KEY', substr(md5($_SERVER['HTTP_HOST']), 0, 8)); } diff --git a/htdocs/public/agenda/agendaexport.php b/htdocs/public/agenda/agendaexport.php index d2f11419ef9..9b76f2b90b3 100644 --- a/htdocs/public/agenda/agendaexport.php +++ b/htdocs/public/agenda/agendaexport.php @@ -220,7 +220,7 @@ if ($format == 'rss') $result=readfile($outputfile); if (! $result) print 'File '.$outputfile.' was empty.'; - // header("Location: ".DOL_URL_ROOT.'/document.php?modulepart=agenda&file='.urlencode($filename)); + // header("Location: ".DOL_URL_ROOT.'/document.php?modulepart=agenda&file='.urlencode($filename)); exit; } else diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index f82e3549630..067c371bf67 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1878,42 +1878,37 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment //if (empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($paymentintent)) //{ - print ' -
'.$langs->trans('ChooseProduct/Service').''; - print $form->select_produits($id, 'id', '', 20, 0, 1, 2, '', 1, array(), 0, 'All'); - print '
'.$langs->trans('ChooseProduct/Service').''; + print $form->select_produits($id, 'id', '', 20, 0, 1, 2, '', 1, array(), 0, 'All'); + print '
'.$langs->trans('ChooseProduct/Service').'
- '; + print '
'; + print ' + + -
'; - if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) - { - print '
'; - } + if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) + { + print '
'; + } - print ' -
+ print '
'; + print ''; - '; + if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) + { + print '
'; + } - if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) - { - print '
'; - } + print '
+ +
'; - print '
- -
+ print ' + +
'; - - + print '
'; + print ''; + print ''; -
- -
'; - - print ''; - print ''; - - print ' -
'; + print '
'; //} if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) @@ -2006,7 +2001,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment { print $e->getMessage(); } - ?> + ?> // Code for payment with option STRIPE_USE_NEW_CHECKOUT set // Create a Stripe client. @@ -2049,11 +2044,11 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment }); - global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) { - ?> + ?> // Code for payment with option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION set // Create a Stripe client. @@ -2153,11 +2148,11 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment } }); - + ?> // Old code for payment with option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION off and STRIPE_USE_NEW_CHECKOUT off // Create a Stripe client. @@ -2209,7 +2204,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment global->STRIPE_USE_3DSECURE)) // Ask credit card directly, no 3DS test { - ?> + ?> /* Use token */ stripe.createToken(card).then(function(result) { if (result.error) { @@ -2221,11 +2216,11 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment stripeTokenHandler(result.token); } }); - + ?> /* Use 3DS source */ stripe.createSource(card).then(function(result) { if (result.error) { @@ -2237,7 +2232,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment stripeSourceHandler(result.source); } }); - }); @@ -2291,7 +2286,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment form.submit(); } - '; From ac6da281351b61d18f813cf080d0e15820e479f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 10:19:36 +0100 Subject: [PATCH 625/980] fix --- htdocs/install/fileconf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/fileconf.php b/htdocs/install/fileconf.php index a7cc08d4ef2..b800f5f6ad4 100644 --- a/htdocs/install/fileconf.php +++ b/htdocs/install/fileconf.php @@ -492,7 +492,7 @@ if (!empty($force_install_noedit)) { } // Do not autofill password for remote access print dol_escape_htmltag($autofill); ?>" - 0 && ! empty($force_install_databaserootpass)) { print ' disabled'; // May be removed by javascript } ?> + 0 && ! empty($force_install_databaserootpass)) { print ' disabled'; /* May be removed by javascript*/ } ?> > trans("KeepEmptyIfNoPassword"); ?> From 16f58f1eeeb512ae35f0c93e13faeccc586eaa52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 10:38:52 +0100 Subject: [PATCH 626/980] clean indent --- htdocs/takepos/admin/setup.php | 20 +-- htdocs/takepos/admin/terminal.php | 4 +- htdocs/takepos/floors.php | 11 +- htdocs/takepos/pay.php | 25 ++- htdocs/takepos/receipt.php | 25 ++- htdocs/takepos/takepos.php | 12 +- htdocs/user/class/api_users.class.php | 6 +- htdocs/user/clicktodial.php | 2 +- htdocs/user/hierarchy.php | 229 +++++++++++++------------- htdocs/user/list.php | 33 ++-- htdocs/user/notify/card.php | 4 +- 11 files changed, 186 insertions(+), 185 deletions(-) diff --git a/htdocs/takepos/admin/setup.php b/htdocs/takepos/admin/setup.php index 6289f382273..a1f07f4f7ad 100644 --- a/htdocs/takepos/admin/setup.php +++ b/htdocs/takepos/admin/setup.php @@ -79,7 +79,7 @@ if (GETPOST('action', 'alpha') == 'set') $res = dolibarr_set_const($db, "TAKEPOS_NUM_TERMINALS", GETPOST('TAKEPOS_NUM_TERMINALS', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_DIRECT_PAYMENT", GETPOST('TAKEPOS_DIRECT_PAYMENT', 'int'), 'int', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_CUSTOM_RECEIPT", GETPOST('TAKEPOS_CUSTOM_RECEIPT', 'int'), 'int', 0, '', $conf->entity); - $res = dolibarr_set_const($db, "TAKEPOS_EMAIL_TEMPLATE_INVOICE", GETPOST('TAKEPOS_EMAIL_TEMPLATE_INVOICE', 'alpha'), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "TAKEPOS_EMAIL_TEMPLATE_INVOICE", GETPOST('TAKEPOS_EMAIL_TEMPLATE_INVOICE', 'alpha'), 'chaine', 0, '', $conf->entity); if ($conf->global->TAKEPOS_ORDER_NOTES==1) { @@ -247,15 +247,15 @@ $formmail = new FormMail($db); $nboftemplates = $formmail->fetchAllEMailTemplate('facture_send', $user, null, -1); // We set lang=null to get in priority record with no lang //$arraydefaultmessage = $formmail->getEMailTemplate($db, $tmp[1], $user, null, 0, 1, ''); $arrayofmessagename=array(); -if (is_array($formmail->lines_model)) -{ - foreach($formmail->lines_model as $modelmail) - { - //var_dump($modelmail); - $moreonlabel=''; - if (! empty($arrayofmessagename[$modelmail->label])) $moreonlabel=' ('.$langs->trans("SeveralLangugeVariatFound").')'; - $arrayofmessagename[$modelmail->label]=$langs->trans(preg_replace('/\(|\)/', '', $modelmail->label)).$moreonlabel; - } +if (is_array($formmail->lines_model)) { + foreach($formmail->lines_model as $modelmail) { + //var_dump($modelmail); + $moreonlabel=''; + if (! empty($arrayofmessagename[$modelmail->label])) { + $moreonlabel=' ('.$langs->trans("SeveralLangugeVariatFound").')'; + } + $arrayofmessagename[$modelmail->label]=$langs->trans(preg_replace('/\(|\)/', '', $modelmail->label)).$moreonlabel; + } } //var_dump($arraydefaultmessage); //var_dump($arrayofmessagename); diff --git a/htdocs/takepos/admin/terminal.php b/htdocs/takepos/admin/terminal.php index b34889a3dce..b009d01659b 100644 --- a/htdocs/takepos/admin/terminal.php +++ b/htdocs/takepos/admin/terminal.php @@ -166,12 +166,12 @@ if (! empty($conf->stock->enabled)) print ''.$langs->trans("CashDeskDoNotDecreaseStock").''; // Force warehouse (this is not a default value) print ''; if (empty($conf->productbatch->enabled)) { - print $form->selectyesno('CASHDESK_NO_DECREASE_STOCK'.$terminal, $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$terminal}, 1); + print $form->selectyesno('CASHDESK_NO_DECREASE_STOCK'.$terminal, $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$terminal}, 1); } else { if (!$conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$terminal}) { - $res = dolibarr_set_const($db, "CASHDESK_NO_DECREASE_STOCK".$terminal, 1, 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "CASHDESK_NO_DECREASE_STOCK".$terminal, 1, 'chaine', 0, '', $conf->entity); } print $langs->trans("Yes").'
'; print ''.$langs->trans('StockDecreaseForPointOfSaleDisabledbyBatch').''; diff --git a/htdocs/takepos/floors.php b/htdocs/takepos/floors.php index 74e83ffbef3..cd45d0c1792 100644 --- a/htdocs/takepos/floors.php +++ b/htdocs/takepos/floors.php @@ -157,8 +157,7 @@ $( document ).ready(function() { $('#'+val.label).draggable().bind('click', function(){ $(this).focus(); }) - + $('body').append('
'+val.label+'
'); }); @@ -168,13 +167,13 @@ $( document ).ready(function() { -admin){?> +admin) {?> diff --git a/htdocs/takepos/pay.php b/htdocs/takepos/pay.php index 349c03540b2..aea8d14ebba 100644 --- a/htdocs/takepos/pay.php +++ b/htdocs/takepos/pay.php @@ -223,7 +223,7 @@ $numpad=$conf->global->TAKEPOS_NUMPAD; if ($paycode == 'LIQ') $paycode = 'cash'; if ($paycode == 'CB') $paycode = 'card'; if ($paycode == 'CHQ') $paycode = 'cheque'; -?> + ?> @@ -236,11 +236,11 @@ $numpad=$conf->global->TAKEPOS_NUMPAD; if ($paycode == 'LIQ') $paycode = 'cash'; if ($paycode == 'CB') $paycode = 'card'; if ($paycode == 'CHQ') $paycode = 'cheque'; -?> + ?> + $button = array_pop($action_buttons); + ?> @@ -251,12 +251,11 @@ $button = array_pop($action_buttons); if ($paycode == 'LIQ') $paycode = 'cash'; if ($paycode == 'CB') $paycode = 'card'; if ($paycode == 'CHQ') $paycode = 'cheque'; -?> + ?> - - + @@ -265,17 +264,17 @@ $button = array_pop($action_buttons); + ?> - + ?> -
diff --git a/htdocs/takepos/receipt.php b/htdocs/takepos/receipt.php index 38ad9103ab9..ae61b5ec287 100644 --- a/htdocs/takepos/receipt.php +++ b/htdocs/takepos/receipt.php @@ -130,16 +130,17 @@ if ($conf->global->TAKEPOS_CUSTOM_RECEIPT && $conf->global->TAKEPOS_SHOW_CUSTOME lines as $line) { - ?> + ?> - product_label)) echo $line->product_label; - else echo $line->description;?> + + product_label)) echo $line->product_label; + else echo $line->description;?> qty;?> total_ttc/$line->qty;?> total_ttc);?> - @@ -150,30 +151,28 @@ if ($conf->global->TAKEPOS_CUSTOM_RECEIPT && $conf->global->TAKEPOS_SHOW_CUSTOME trans("TotalHT");?> total_ht, 1, '', 1, - 1, - 1, $conf->currency)."\n";?> -global->TAKEPOS_TICKET_VAT_GROUPPED):?> -global->TAKEPOS_TICKET_VAT_GROUPPED) { $vat_groups = array(); foreach ($object->lines as $line) { - if(!array_key_exists($line->tva_tx, $vat_groups)){ + if(!array_key_exists($line->tva_tx, $vat_groups)) { $vat_groups[$line->tva_tx] = 0; } $vat_groups[$line->tva_tx] += $line->total_tva; } - foreach($vat_groups as $key => $val){ - ?> + foreach($vat_groups as $key => $val) { + ?> trans("VAT").' '.vatrate($key, 1);?> currency)."\n";?> - - +} else { ?> trans("TotalVAT").''.price($object->total_tva, 1, '', 1, - 1, - 1, $conf->currency)."\n";?> - + trans("TotalTTC").''.price($object->total_ttc, 1, '', 1, - 1, - 1, $conf->currency)."\n";?> diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index d3a0f466fc8..dd65469ec05 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -747,7 +747,7 @@ $menus[$r++]=array('title'=>'< print ' '; print ''.img_picto('', 'searchclear').''; print '
'; -?> + ?> @@ -759,7 +759,7 @@ $menus[$r++]=array('title'=>'< $count=0; while ($count < $MAXCATEG) { - ?> + ?>
id="catdiv"> '<
+
- @@ -794,7 +794,7 @@ $menus[$r++]=array('title'=>'< $count=0; while ($count < $MAXPRODUCT) { - ?> + ?>
onclick="MoreProducts('less');" onclick="MoreProducts('more');" > '<
+
- diff --git a/htdocs/user/class/api_users.class.php b/htdocs/user/class/api_users.class.php index 9549fbe2ef1..778823d3d7d 100644 --- a/htdocs/user/class/api_users.class.php +++ b/htdocs/user/class/api_users.class.php @@ -72,7 +72,7 @@ class Users extends DolibarrApi $obj_ret = array(); if(! DolibarrApiAccess::$user->rights->user->user->lire) { - throw new RestException(401, "You are not allowed to read list of users"); + throw new RestException(401, "You are not allowed to read list of users"); } // case of external user, $societe param is ignored and replaced by user's socid @@ -226,10 +226,10 @@ class Users extends DolibarrApi if ($field == 'statut') { $result = $this->useraccount->setstatus($value); if ($result < 0) { - throw new RestException(500, 'Error when updating status of user: '.$this->useraccount->error); + throw new RestException(500, 'Error when updating status of user: '.$this->useraccount->error); } } else { - $this->useraccount->$field = $value; + $this->useraccount->$field = $value; } } diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php index 79b285bc114..04a0f4c3883 100644 --- a/htdocs/user/clicktodial.php +++ b/htdocs/user/clicktodial.php @@ -110,7 +110,7 @@ if ($id > 0) // Edit mode if ($action == 'edit') { - print ''; + print '
'; if ($user->admin) { diff --git a/htdocs/user/hierarchy.php b/htdocs/user/hierarchy.php index 8952b32f30b..a89fe447aa0 100644 --- a/htdocs/user/hierarchy.php +++ b/htdocs/user/hierarchy.php @@ -4,6 +4,7 @@ * Copyright (C) 2006-2015 Laurent Destailleur * Copyright (C) 2007 Patrick Raguin * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 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 @@ -81,138 +82,138 @@ if (! is_array($user_arbo) && $user_arbo < 0) } else { -// Define fulltree array -$fulltree=$user_arbo; -//var_dump($fulltree); -// Define data (format for treeview) -$data=array(); -$data[] = array('rowid'=>0,'fk_menu'=>-1,'title'=>"racine",'mainmenu'=>'','leftmenu'=>'','fk_mainmenu'=>'','fk_leftmenu'=>''); -foreach($fulltree as $key => $val) -{ - $userstatic->id=$val['id']; - $userstatic->ref=$val['label']; - $userstatic->login=$val['login']; - $userstatic->firstname=$val['firstname']; - $userstatic->lastname=$val['lastname']; - $userstatic->statut=$val['statut']; - $userstatic->email=$val['email']; - $userstatic->gender=$val['gender']; - $userstatic->societe_id=$val['fk_soc']; - $userstatic->admin=$val['admin']; - $userstatic->entity=$val['entity']; - $userstatic->photo=$val['photo']; + // Define fulltree array + $fulltree=$user_arbo; + //var_dump($fulltree); + // Define data (format for treeview) + $data=array(); + $data[] = array('rowid'=>0,'fk_menu'=>-1,'title'=>"racine",'mainmenu'=>'','leftmenu'=>'','fk_mainmenu'=>'','fk_leftmenu'=>''); + foreach($fulltree as $key => $val) + { + $userstatic->id=$val['id']; + $userstatic->ref=$val['label']; + $userstatic->login=$val['login']; + $userstatic->firstname=$val['firstname']; + $userstatic->lastname=$val['lastname']; + $userstatic->statut=$val['statut']; + $userstatic->email=$val['email']; + $userstatic->gender=$val['gender']; + $userstatic->societe_id=$val['fk_soc']; + $userstatic->admin=$val['admin']; + $userstatic->entity=$val['entity']; + $userstatic->photo=$val['photo']; - $entity=$val['entity']; - $entitystring=''; + $entity=$val['entity']; + $entitystring=''; - // TODO Set of entitystring should be done with a hook - if (! empty($conf->multicompany->enabled) && is_object($mc)) - { - if (empty($entity)) - { - $entitystring=$langs->trans("AllEntities"); - } - else - { - $mc->getInfo($entity); - $entitystring=$mc->label; - } - } + // TODO Set of entitystring should be done with a hook + if (! empty($conf->multicompany->enabled) && is_object($mc)) + { + if (empty($entity)) + { + $entitystring=$langs->trans("AllEntities"); + } + else + { + $mc->getInfo($entity); + $entitystring=$mc->label; + } + } - $li=$userstatic->getNomUrl(-1, '', 0, 1); - if (! empty($conf->multicompany->enabled) && $userstatic->admin && ! $userstatic->entity) - { - $li.=img_picto($langs->trans("SuperAdministrator"), 'redstar'); - } - elseif ($userstatic->admin) - { - $li.=img_picto($langs->trans("Administrator"), 'star'); - } - $li.=' ('.$val['login'].($entitystring?' - '.$entitystring:'').')'; + $li=$userstatic->getNomUrl(-1, '', 0, 1); + if (! empty($conf->multicompany->enabled) && $userstatic->admin && ! $userstatic->entity) + { + $li.=img_picto($langs->trans("SuperAdministrator"), 'redstar'); + } + elseif ($userstatic->admin) + { + $li.=img_picto($langs->trans("Administrator"), 'star'); + } + $li.=' ('.$val['login'].($entitystring?' - '.$entitystring:'').')'; - $data[] = array( - 'rowid'=>$val['rowid'], - 'fk_menu'=>$val['fk_user'], - 'statut'=>$val['statut'], - 'entry'=>'
'.$li.''.$userstatic->getLibStatut(3).'
' - ); -} + $data[] = array( + 'rowid'=>$val['rowid'], + 'fk_menu'=>$val['fk_user'], + 'statut'=>$val['statut'], + 'entry'=>'
'.$li.''.$userstatic->getLibStatut(3).'
' + ); + } -//var_dump($data); + //var_dump($data); -$title = $langs->trans("ListOfUsers"). ' - '.$langs->trans("HierarchicView"); + $title = $langs->trans("ListOfUsers"). ' - '.$langs->trans("HierarchicView"); -$param="search_statut=".urlencode($search_statut); + $param="search_statut=".urlencode($search_statut); -$newcardbutton=''; -if ($canadduser) -{ - $newcardbutton.= dolGetButtonTitle($langs->trans('NewUser'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/user/card.php?action=create'.($mode == 'employee' ? '&employee=1': '').'&leftmenu='); -} + $newcardbutton=''; + if ($canadduser) + { + $newcardbutton.= dolGetButtonTitle($langs->trans('NewUser'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/user/card.php?action=create'.($mode == 'employee' ? '&employee=1': '').'&leftmenu='); + } -$morehtmlright.= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-list paddingleft', DOL_URL_ROOT.'/user/list.php'.(($search_statut != '' && $search_statut >= 0) ?'?search_statut='.$search_statut:'')); + $morehtmlright.= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-list paddingleft', DOL_URL_ROOT.'/user/list.php'.(($search_statut != '' && $search_statut >= 0) ?'?search_statut='.$search_statut:'')); -print load_fiche_titre($title, $morehtmlright.' '.$newcardbutton); + print load_fiche_titre($title, $morehtmlright.' '.$newcardbutton); -print '
'."\n"; -if ($optioncss != '') print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; + print ''."\n"; + if ($optioncss != '') print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; -print ''; + print '
'; -print ''; -print ''; -print ''; -// Status -print ''; -print ''; -print ''; + print ''; + print ''; + print ''; + // Status + print ''; + print ''; + print ''; -print ''; -print_liste_field_titre("HierarchicView"); -print_liste_field_titre('', $_SERVER['PHP_SELF'], "", '', "", 'align="center"'); -print_liste_field_titre("Status", $_SERVER['PHP_SELF'], "", '', "", 'align="right"'); -print_liste_field_titre('', $_SERVER["PHP_SELF"], "", '', '', '', '', '', 'maxwidthsearch '); -print ''; + print ''; + print_liste_field_titre("HierarchicView"); + print_liste_field_titre('', $_SERVER['PHP_SELF'], "", '', "", 'align="center"'); + print_liste_field_titre("Status", $_SERVER['PHP_SELF'], "", '', "", 'align="right"'); + print_liste_field_titre('', $_SERVER["PHP_SELF"], "", '', '', '', '', '', 'maxwidthsearch '); + print ''; -$nbofentries=(count($data) - 1); + $nbofentries=(count($data) - 1); -if ($nbofentries > 0) -{ - print ''; - print ''; - print ''; -} -else -{ - print ''; - print ''; - print ''; - print ''; -} + if ($nbofentries > 0) + { + print ''; + print ''; + print ''; + } + else + { + print ''; + print ''; + print ''; + print ''; + } -print "
  '; -print $form->selectarray('search_statut', array('-1'=>'','1'=>$langs->trans('Enabled')), $search_statut); -print ''; -$searchpicto=$form->showFilterAndCheckAddButtons(0); -print $searchpicto; -print '
  '; + print $form->selectarray('search_statut', array('-1'=>'','1'=>$langs->trans('Enabled')), $search_statut); + print ''; + $searchpicto=$form->showFilterAndCheckAddButtons(0); + print $searchpicto; + print '
'; - tree_recur($data, $data[0], 0); - print '
'; - print ''; - print ''; - print ''; - print '
'.img_picto_common('', 'treemenu/branchbottom.gif').''; - print $langs->trans("NoCategoryYet"); - print ' 
'; - print '
'; + tree_recur($data, $data[0], 0); + print '
'; + print ''; + print ''; + print ''; + print '
'.img_picto_common('', 'treemenu/branchbottom.gif').''; + print $langs->trans("NoCategoryYet"); + print ' 
'; + print '
"; -print "
\n"; + print ""; + print "\n"; } // diff --git a/htdocs/user/list.php b/htdocs/user/list.php index 95b9529017c..3b334871c06 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -27,21 +27,24 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; -if (! empty($conf->categorie->enabled)) +if (! empty($conf->categorie->enabled)) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; +} -if (! $user->rights->user->user->lire && ! $user->admin) +if (! $user->rights->user->user->lire && ! $user->admin) { accessforbidden(); +} - // Load translation files required by page +// Load translation files required by page $langs->loadLangs(array('users', 'companies', 'hrm')); $contextpage=GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'userlist'; // To manage different context of search // Security check (for external users) $socid=0; -if ($user->societe_id > 0) +if ($user->societe_id > 0) { $socid = $user->societe_id; +} // Load mode employee $mode = GETPOST("mode", 'alpha'); @@ -535,29 +538,29 @@ while ($i < min($num, $limit)) } if (! empty($arrayfields['u.firstname']['checked'])) { - print ''.$obj->firstname.''; + print ''.$obj->firstname.''; if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['u.gender']['checked'])) { - print ''; - if ($obj->gender) print $langs->trans("Gender".$obj->gender); - print ''; + print ''; + if ($obj->gender) print $langs->trans("Gender".$obj->gender); + print ''; if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['u.employee']['checked'])) { - print ''.yn($obj->employee).''; + print ''.yn($obj->employee).''; if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['u.accountancy_code']['checked'])) { - print ''.$obj->accountancy_code.''; + print ''.$obj->accountancy_code.''; if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['u.email']['checked'])) { - print ''.$obj->email.''; + print ''.$obj->email.''; if (! $i) $totalarray['nbfield']++; } if (! empty($arrayfields['u.api_key']['checked'])) @@ -580,7 +583,7 @@ while ($i < min($num, $limit)) print $langs->trans("DomainUser"); } else - { + { print $langs->trans("InternalUser"); } print ''; @@ -673,9 +676,9 @@ while ($i < min($num, $limit)) // Status if (! empty($arrayfields['u.statut']['checked'])) { - $userstatic->statut=$obj->statut; - print ''.$userstatic->getLibStatut(3).''; - if (! $i) $totalarray['nbfield']++; + $userstatic->statut=$obj->statut; + print ''.$userstatic->getLibStatut(3).''; + if (! $i) $totalarray['nbfield']++; } // Action column print ''; diff --git a/htdocs/user/notify/card.php b/htdocs/user/notify/card.php index b48823d2aa0..577af6c04ba 100644 --- a/htdocs/user/notify/card.php +++ b/htdocs/user/notify/card.php @@ -208,7 +208,7 @@ if ($result > 0) print "\n"; -// $listofemails=$object->thirdparty_and_contact_email_array(); + // $listofemails=$object->thirdparty_and_contact_email_array(); if ($object->email) { $actions=array(); @@ -294,7 +294,7 @@ if ($result > 0) if ($num) { - $i = 0; + $i = 0; $userstatic=new user($db); From e203f87c84c9f9a36e929699aa18846951efec47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 11:18:36 +0100 Subject: [PATCH 627/980] clean indent --- htdocs/core/class/commonobject.class.php | 452 +++++++++--------- htdocs/core/class/dolgraph.class.php | 6 +- htdocs/core/class/fiscalyear.class.php | 12 +- htdocs/core/class/html.form.class.php | 62 +-- .../core/class/html.formaccounting.class.php | 10 +- htdocs/core/class/html.formother.class.php | 2 +- htdocs/reception/card.php | 133 +++--- htdocs/reception/list.php | 51 +- .../reception/tpl/linkedobjectblock.tpl.php | 34 +- 9 files changed, 378 insertions(+), 384 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 01ed67cce3e..07a588597b2 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 Frédéric France + * Copyright (C) 2018-2019 Frédéric France * Copyright (C) 2018 Josep Lluís Amador * * This program is free software; you can redistribute it and/or modify @@ -4612,252 +4612,251 @@ abstract class CommonObject $parameters = array('modelspath'=>$modelspath,'modele'=>$modele,'outputlangs'=>$outputlangs,'hidedetails'=>$hidedetails,'hidedesc'=>$hidedesc,'hideref'=>$hideref, 'moreparams'=>$moreparams); $reshook = $hookmanager->executeHooks('commonGenerateDocument', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks - if(empty($reshook)) + if (empty($reshook)) { - dol_syslog("commonGenerateDocument modele=".$modele." outputlangs->defaultlang=".(is_object($outputlangs)?$outputlangs->defaultlang:'null')); + dol_syslog("commonGenerateDocument modele=".$modele." outputlangs->defaultlang=".(is_object($outputlangs)?$outputlangs->defaultlang:'null')); - // Increase limit for PDF build - $err=error_reporting(); - error_reporting(0); - @set_time_limit(120); - error_reporting($err); + // Increase limit for PDF build + $err=error_reporting(); + error_reporting(0); + @set_time_limit(120); + error_reporting($err); - // If selected model is a filename template (then $modele="modelname" or "modelname:filename") - $tmp=explode(':', $modele, 2); - if (! empty($tmp[1])) - { - $modele=$tmp[0]; - $srctemplatepath=$tmp[1]; - } + // If selected model is a filename template (then $modele="modelname" or "modelname:filename") + $tmp=explode(':', $modele, 2); + if (! empty($tmp[1])) + { + $modele=$tmp[0]; + $srctemplatepath=$tmp[1]; + } - // Search template files - $file=''; $classname=''; $filefound=0; - $dirmodels=array('/'); - if (is_array($conf->modules_parts['models'])) $dirmodels=array_merge($dirmodels, $conf->modules_parts['models']); - foreach($dirmodels as $reldir) - { - foreach(array('doc','pdf') as $prefix) - { - if (in_array(get_class($this), array('Adherent'))) $file = $prefix."_".$modele.".class.php"; // Member module use prefix_module.class.php - else $file = $prefix."_".$modele.".modules.php"; + // Search template files + $file=''; + $classname=''; + $filefound=0; + $dirmodels=array('/'); + if (is_array($conf->modules_parts['models'])) $dirmodels=array_merge($dirmodels, $conf->modules_parts['models']); + foreach($dirmodels as $reldir) + { + foreach(array('doc','pdf') as $prefix) + { + if (in_array(get_class($this), array('Adherent'))) $file = $prefix."_".$modele.".class.php"; // Member module use prefix_module.class.php + else $file = $prefix."_".$modele.".modules.php"; - // On verifie l'emplacement du modele - $file=dol_buildpath($reldir.$modelspath.$file, 0); - if (file_exists($file)) - { - $filefound=1; - $classname=$prefix.'_'.$modele; - break; - } - } - if ($filefound) break; - } + // On verifie l'emplacement du modele + $file=dol_buildpath($reldir.$modelspath.$file, 0); + if (file_exists($file)) + { + $filefound=1; + $classname=$prefix.'_'.$modele; + break; + } + } + if ($filefound) break; + } - // If generator was found - if ($filefound) - { - global $db; // Required to solve a conception default making an include of code using $db instead of $this->db just after. + // If generator was found + if ($filefound) + { + global $db; // Required to solve a conception default making an include of code using $db instead of $this->db just after. - require_once $file; + require_once $file; - $obj = new $classname($this->db); + $obj = new $classname($this->db); - // If generator is ODT, we must have srctemplatepath defined, if not we set it. - if ($obj->type == 'odt' && empty($srctemplatepath)) - { - $varfortemplatedir=$obj->scandir; - if ($varfortemplatedir && ! empty($conf->global->$varfortemplatedir)) - { - $dirtoscan=$conf->global->$varfortemplatedir; + // If generator is ODT, we must have srctemplatepath defined, if not we set it. + if ($obj->type == 'odt' && empty($srctemplatepath)) + { + $varfortemplatedir=$obj->scandir; + if ($varfortemplatedir && ! empty($conf->global->$varfortemplatedir)) + { + $dirtoscan=$conf->global->$varfortemplatedir; - $listoffiles=array(); + $listoffiles=array(); - // Now we add first model found in directories scanned - $listofdir=explode(',', $dirtoscan); - foreach($listofdir as $key => $tmpdir) - { - $tmpdir=trim($tmpdir); - $tmpdir=preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir); - if (! $tmpdir) { unset($listofdir[$key]); continue; } - if (is_dir($tmpdir)) - { - $tmpfiles=dol_dir_list($tmpdir, 'files', 0, '\.od(s|t)$', '', 'name', SORT_ASC, 0); - if (count($tmpfiles)) $listoffiles=array_merge($listoffiles, $tmpfiles); - } - } + // Now we add first model found in directories scanned + $listofdir=explode(',', $dirtoscan); + foreach($listofdir as $key => $tmpdir) + { + $tmpdir=trim($tmpdir); + $tmpdir=preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir); + if (! $tmpdir) { unset($listofdir[$key]); continue; } + if (is_dir($tmpdir)) + { + $tmpfiles=dol_dir_list($tmpdir, 'files', 0, '\.od(s|t)$', '', 'name', SORT_ASC, 0); + if (count($tmpfiles)) $listoffiles=array_merge($listoffiles, $tmpfiles); + } + } - if (count($listoffiles)) - { - foreach($listoffiles as $record) - { - $srctemplatepath=$record['fullname']; - break; - } - } - } + if (count($listoffiles)) + { + foreach($listoffiles as $record) + { + $srctemplatepath=$record['fullname']; + break; + } + } + } - if (empty($srctemplatepath)) - { - $this->error='ErrorGenerationAskedForOdtTemplateWithSrcFileNotDefined'; - return -1; - } - } + if (empty($srctemplatepath)) + { + $this->error='ErrorGenerationAskedForOdtTemplateWithSrcFileNotDefined'; + return -1; + } + } - if ($obj->type == 'odt' && ! empty($srctemplatepath)) - { - if (! dol_is_file($srctemplatepath)) - { - $this->error='ErrorGenerationAskedForOdtTemplateWithSrcFileNotFound'; - return -1; - } - } + if ($obj->type == 'odt' && ! empty($srctemplatepath)) + { + if (! dol_is_file($srctemplatepath)) + { + $this->error='ErrorGenerationAskedForOdtTemplateWithSrcFileNotFound'; + return -1; + } + } - // We save charset_output to restore it because write_file can change it if needed for - // output format that does not support UTF8. - $sav_charset_output=$outputlangs->charset_output; + // We save charset_output to restore it because write_file can change it if needed for + // output format that does not support UTF8. + $sav_charset_output=$outputlangs->charset_output; - if (in_array(get_class($this), array('Adherent'))) - { - $arrayofrecords = array(); // The write_file of templates of adherent class need this var - $resultwritefile = $obj->write_file($this, $outputlangs, $srctemplatepath, 'member', 1, $moreparams); - } - else - { - $resultwritefile = $obj->write_file($this, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref, $moreparams); - } - // After call of write_file $obj->result['fullpath'] is set with generated file. It will be used to update the ECM database index. + if (in_array(get_class($this), array('Adherent'))) + { + $arrayofrecords = array(); // The write_file of templates of adherent class need this var + $resultwritefile = $obj->write_file($this, $outputlangs, $srctemplatepath, 'member', 1, $moreparams); + } + else + { + $resultwritefile = $obj->write_file($this, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref, $moreparams); + } + // After call of write_file $obj->result['fullpath'] is set with generated file. It will be used to update the ECM database index. - if ($resultwritefile > 0) - { - $outputlangs->charset_output=$sav_charset_output; + if ($resultwritefile > 0) + { + $outputlangs->charset_output=$sav_charset_output; - // We delete old preview - require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - dol_delete_preview($this); + // We delete old preview + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + dol_delete_preview($this); - // Index file in database - if (! empty($obj->result['fullpath'])) - { - $destfull = $obj->result['fullpath']; - $upload_dir = dirname($destfull); - $destfile = basename($destfull); - $rel_dir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT, '/').'/', '', $upload_dir); + // Index file in database + if (! empty($obj->result['fullpath'])) + { + $destfull = $obj->result['fullpath']; + $upload_dir = dirname($destfull); + $destfile = basename($destfull); + $rel_dir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT, '/').'/', '', $upload_dir); - if (! preg_match('/[\\/]temp[\\/]|[\\/]thumbs|\.meta$/', $rel_dir)) // If not a tmp dir - { - $filename = basename($destfile); - $rel_dir = preg_replace('/[\\/]$/', '', $rel_dir); - $rel_dir = preg_replace('/^[\\/]/', '', $rel_dir); + if (! preg_match('/[\\/]temp[\\/]|[\\/]thumbs|\.meta$/', $rel_dir)) // If not a tmp dir + { + $filename = basename($destfile); + $rel_dir = preg_replace('/[\\/]$/', '', $rel_dir); + $rel_dir = preg_replace('/^[\\/]/', '', $rel_dir); - include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; - $ecmfile=new EcmFiles($this->db); - $result = $ecmfile->fetch(0, '', ($rel_dir?$rel_dir.'/':'').$filename); + include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; + $ecmfile=new EcmFiles($this->db); + $result = $ecmfile->fetch(0, '', ($rel_dir?$rel_dir.'/':'').$filename); - // Set the public "share" key - $setsharekey = false; - if ($this->element == 'propal') - { - $useonlinesignature = $conf->global->MAIN_FEATURES_LEVEL; // Replace this with 1 when feature to make online signature is ok - if ($useonlinesignature) $setsharekey=true; - if (! empty($conf->global->PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD)) $setsharekey=true; - } - if ($this->element == 'commande' && ! empty($conf->global->ORDER_ALLOW_EXTERNAL_DOWNLOAD)) { - $setsharekey=true; - } - if ($this->element == 'facture' && ! empty($conf->global->INVOICE_ALLOW_EXTERNAL_DOWNLOAD)) { - $setsharekey=true; - } - if ($this->element == 'bank_account' && ! empty($conf->global->BANK_ACCOUNT_ALLOW_EXTERNAL_DOWNLOAD)) { - $setsharekey=true; - } + // Set the public "share" key + $setsharekey = false; + if ($this->element == 'propal') + { + $useonlinesignature = $conf->global->MAIN_FEATURES_LEVEL; // Replace this with 1 when feature to make online signature is ok + if ($useonlinesignature) $setsharekey=true; + if (! empty($conf->global->PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD)) $setsharekey=true; + } + if ($this->element == 'commande' && ! empty($conf->global->ORDER_ALLOW_EXTERNAL_DOWNLOAD)) { + $setsharekey=true; + } + if ($this->element == 'facture' && ! empty($conf->global->INVOICE_ALLOW_EXTERNAL_DOWNLOAD)) { + $setsharekey=true; + } + if ($this->element == 'bank_account' && ! empty($conf->global->BANK_ACCOUNT_ALLOW_EXTERNAL_DOWNLOAD)) { + $setsharekey=true; + } - if ($setsharekey) - { - if (empty($ecmfile->share)) // Because object not found or share not set yet - { - require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php'; - $ecmfile->share = getRandomPassword(true); - } - } + if ($setsharekey) { + if (empty($ecmfile->share)) // Because object not found or share not set yet + { + require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php'; + $ecmfile->share = getRandomPassword(true); + } + } - if ($result > 0) - { - $ecmfile->label = md5_file(dol_osencode($destfull)); // hash of file content - $ecmfile->fullpath_orig = ''; - $ecmfile->gen_or_uploaded = 'generated'; - $ecmfile->description = ''; // indexed content - $ecmfile->keyword = ''; // keyword content - $result = $ecmfile->update($user); - if ($result < 0) - { - setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings'); - } - } - else - { - $ecmfile->entity = $conf->entity; - $ecmfile->filepath = $rel_dir; - $ecmfile->filename = $filename; - $ecmfile->label = md5_file(dol_osencode($destfull)); // hash of file content - $ecmfile->fullpath_orig = ''; - $ecmfile->gen_or_uploaded = 'generated'; - $ecmfile->description = ''; // indexed content - $ecmfile->keyword = ''; // keyword content - $ecmfile->src_object_type = $this->table_element; - $ecmfile->src_object_id = $this->id; + if ($result > 0) + { + $ecmfile->label = md5_file(dol_osencode($destfull)); // hash of file content + $ecmfile->fullpath_orig = ''; + $ecmfile->gen_or_uploaded = 'generated'; + $ecmfile->description = ''; // indexed content + $ecmfile->keyword = ''; // keyword content + $result = $ecmfile->update($user); + if ($result < 0) { + setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings'); + } + } + else + { + $ecmfile->entity = $conf->entity; + $ecmfile->filepath = $rel_dir; + $ecmfile->filename = $filename; + $ecmfile->label = md5_file(dol_osencode($destfull)); // hash of file content + $ecmfile->fullpath_orig = ''; + $ecmfile->gen_or_uploaded = 'generated'; + $ecmfile->description = ''; // indexed content + $ecmfile->keyword = ''; // keyword content + $ecmfile->src_object_type = $this->table_element; + $ecmfile->src_object_id = $this->id; - $result = $ecmfile->create($user); - if ($result < 0) - { - setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings'); - } - } + $result = $ecmfile->create($user); + if ($result < 0) { + setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings'); + } + } - /*$this->result['fullname']=$destfull; - $this->result['filepath']=$ecmfile->filepath; - $this->result['filename']=$ecmfile->filename;*/ - //var_dump($obj->update_main_doc_field);exit; + /*$this->result['fullname']=$destfull; + $this->result['filepath']=$ecmfile->filepath; + $this->result['filename']=$ecmfile->filename;*/ + //var_dump($obj->update_main_doc_field);exit; - // Update the last_main_doc field into main object (if documenent generator has property ->update_main_doc_field set) - $update_main_doc_field=0; - if (! empty($obj->update_main_doc_field)) $update_main_doc_field=1; - if ($update_main_doc_field && ! empty($this->table_element)) - { - $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element." SET last_main_doc = '".$this->db->escape($ecmfile->filepath.'/'.$ecmfile->filename)."'"; - $sql.= ' WHERE rowid = '.$this->id; + // Update the last_main_doc field into main object (if documenent generator has property ->update_main_doc_field set) + $update_main_doc_field=0; + if (! empty($obj->update_main_doc_field)) $update_main_doc_field=1; + if ($update_main_doc_field && ! empty($this->table_element)) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element." SET last_main_doc = '".$this->db->escape($ecmfile->filepath.'/'.$ecmfile->filename)."'"; + $sql.= ' WHERE rowid = '.$this->id; - $resql = $this->db->query($sql); - if (! $resql) dol_print_error($this->db); - else - { - $this->last_main_doc = $ecmfile->filepath.'/'.$ecmfile->filename; - } - } - } - } - else - { - dol_syslog('Method ->write_file was called on object '.get_class($obj).' and return a success but the return array ->result["fullpath"] was not set.', LOG_WARNING); - } + $resql = $this->db->query($sql); + if (! $resql) { + dol_print_error($this->db); + } else { + $this->last_main_doc = $ecmfile->filepath.'/'.$ecmfile->filename; + } + } + } + } + else + { + dol_syslog('Method ->write_file was called on object '.get_class($obj).' and return a success but the return array ->result["fullpath"] was not set.', LOG_WARNING); + } - // Success in building document. We build meta file. - dol_meta_create($this); + // Success in building document. We build meta file. + dol_meta_create($this); - return 1; - } - else - { - $outputlangs->charset_output=$sav_charset_output; - dol_print_error($this->db, "Error generating document for ".__CLASS__.". Error: ".$obj->error, $obj->errors); - return -1; - } - } - else - { - $this->error=$langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists", $file); - dol_print_error('', $this->error); - return -1; - } + return 1; + } + else + { + $outputlangs->charset_output=$sav_charset_output; + dol_print_error($this->db, "Error generating document for ".__CLASS__.". Error: ".$obj->error, $obj->errors); + return -1; + } + } + else + { + $this->error=$langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists", $file); + dol_print_error('', $this->error); + return -1; + } } else return $reshook; } @@ -6063,18 +6062,19 @@ abstract class CommonObject $labeltoshow = dol_trunc($obj->{$InfoFieldList[1]}, 18); } } - if (empty($labeltoshow)) + if (empty($labeltoshow)) { $labeltoshow = '(not defined)'; + } - if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) { - $data[$obj->rowid]=$labeltoshow; - } - - if (! empty($InfoFieldList[3]) && $parentField) { - $parent = $parentName . ':' . $obj->{$parentField}; - } - + if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) { $data[$obj->rowid]=$labeltoshow; + } + + if (! empty($InfoFieldList[3]) && $parentField) { + $parent = $parentName . ':' . $obj->{$parentField}; + } + + $data[$obj->rowid]=$labeltoshow; } $i ++; diff --git a/htdocs/core/class/dolgraph.class.php b/htdocs/core/class/dolgraph.class.php index 07554671497..461867041eb 100644 --- a/htdocs/core/class/dolgraph.class.php +++ b/htdocs/core/class/dolgraph.class.php @@ -944,9 +944,9 @@ class DolGraph if (! empty($this->title)) $this->stringtoshow.='
'.$this->title.'
'; if (! empty($this->shownographyet)) { - $this->stringtoshow.='
'; - $this->stringtoshow.='
'.$langs->trans("NotEnoughDataYet").'
'; - return; + $this->stringtoshow.='
'; + $this->stringtoshow.='
'.$langs->trans("NotEnoughDataYet").'
'; + return; } $this->stringtoshow.='
'."\n"; diff --git a/htdocs/core/class/fiscalyear.class.php b/htdocs/core/class/fiscalyear.class.php index 94dea68ed67..f944ccdc0c0 100644 --- a/htdocs/core/class/fiscalyear.class.php +++ b/htdocs/core/class/fiscalyear.class.php @@ -248,12 +248,12 @@ class Fiscalyear extends CommonObject } } - /** - * Delete record - * - * @param int $id Id of record to delete - * @return int <0 if KO, >0 if OK - */ + /** + * Delete record + * + * @param int $id Id of record to delete + * @return int <0 if KO, >0 if OK + */ public function delete($id) { $this->db->begin(); diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index ca285642b2a..ceff26f12f6 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -227,14 +227,14 @@ class Form } elseif (preg_match('/^select;/', $typeofdata)) { - $arraydata=explode(',', preg_replace('/^select;/', '', $typeofdata)); - foreach($arraydata as $val) - { - $tmp=explode(':', $val); - $tmpkey=str_replace('|', ':', $tmp[0]); - $arraylist[$tmpkey]=$tmp[1]; - } - $ret.=$this->selectarray($htmlname, $arraylist, $value); + $arraydata=explode(',', preg_replace('/^select;/', '', $typeofdata)); + foreach($arraydata as $val) + { + $tmp=explode(':', $val); + $tmpkey=str_replace('|', ':', $tmp[0]); + $arraylist[$tmpkey]=$tmp[1]; + } + $ret.=$this->selectarray($htmlname, $arraylist, $value); } elseif (preg_match('/^ckeditor/', $typeofdata)) { @@ -5458,9 +5458,9 @@ class Form dateFormat: '".$langs->trans("FormatDateShortJQueryInput")."', autoclose: true, todayHighlight: true,"; - if (! empty($conf->dol_use_jmobile)) - { - $retstring.=" + if (! empty($conf->dol_use_jmobile)) + { + $retstring.=" beforeShow: function (input, datePicker) { input.disabled = true; }, @@ -5468,16 +5468,16 @@ class Form this.disabled = false; }, "; - } - // Note: We don't need monthNames, monthNamesShort, dayNames, dayNamesShort, dayNamesMin, they are set globally on datepicker component in lib_head.js.php - if (empty($conf->global->MAIN_POPUP_CALENDAR_ON_FOCUS)) - { + } + // Note: We don't need monthNames, monthNamesShort, dayNames, dayNamesShort, dayNamesMin, they are set globally on datepicker component in lib_head.js.php + if (empty($conf->global->MAIN_POPUP_CALENDAR_ON_FOCUS)) + { $retstring.=" showOn: 'button', buttonImage: '".DOL_URL_ROOT."/theme/".$conf->theme."/img/object_calendarday.png', buttonImageOnly: true"; - } - $retstring.=" + } + $retstring.=" }) });"; $retstring.=""; } @@ -6563,19 +6563,19 @@ class Form foreach($array as $key => $val) { - /* var_dump($val); + /* var_dump($val); var_dump(array_key_exists('enabled', $val)); var_dump(!$val['enabled']);*/ - if (array_key_exists('enabled', $val) && isset($val['enabled']) && ! $val['enabled']) - { - unset($array[$key]); // We don't want this field - continue; - } - if ($val['label']) - { - $lis.='
  • '; - $listcheckedstring.=(empty($val['checked'])?'':$key.','); - } + if (array_key_exists('enabled', $val) && isset($val['enabled']) && ! $val['enabled']) + { + unset($array[$key]); // We don't want this field + continue; + } + if ($val['label']) + { + $lis.='
  • '; + $listcheckedstring.=(empty($val['checked'])?'':$key.','); + } } $out =' @@ -6970,7 +6970,7 @@ class Form if (! empty($conf->use_javascript_ajax)) { - print ' + print ' - '; + '; } return $linktoelem; @@ -7017,7 +7017,7 @@ class Form $resultyesno .= ''."\n"; } else - { + { $selected=(($useempty && $value != '0' && $value != 'no')?'':' selected'); $resultyesno .= ''."\n"; $resultyesno .= ''."\n"; diff --git a/htdocs/core/class/html.formaccounting.class.php b/htdocs/core/class/html.formaccounting.class.php index 3dc095c91da..02a0a29b428 100644 --- a/htdocs/core/class/html.formaccounting.class.php +++ b/htdocs/core/class/html.formaccounting.class.php @@ -45,11 +45,11 @@ class FormAccounting extends Form */ public $error=''; - /** - * Constructor - * - * @param DoliDB $db Database handler - */ + /** + * Constructor + * + * @param DoliDB $db Database handler + */ public function __construct($db) { $this->db = $db; diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index 24242485339..69525c0f134 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -1292,7 +1292,7 @@ class FormOther $resultautomanual .= ''."\n"; } else - { + { $selected=(($useempty && $value != '0' && $value != 'manual')?'':' selected'); $resultautomanual .= ''."\n"; $resultautomanual .= ''."\n"; diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index 13eb53d86a6..832fd4fc70d 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -560,12 +560,12 @@ if (empty($reshook)) { if ($lines[$i]->id == $line_id) { - // delete single warehouse line - $line->id = $line_id; - if (! $error && $line->delete($user) < 0) - { - $error++; - } + // delete single warehouse line + $line->id = $line_id; + if (! $error && $line->delete($user) < 0) + { + $error++; + } } unset($_POST["lineid"]); } @@ -949,31 +949,28 @@ if ($action == 'create') print ''; - print '
    '; - print ''; - // Load receptions already done for same order $object->loadReceptions(); @@ -1113,59 +1110,57 @@ if ($action == 'create') $stock = + $product->stock_warehouse[$dispatchLines[$indiceAsked]['ent']]->real; // Convert to number $deliverableQty=$dispatchLines[$indiceAsked]['qty']; + // Quantity to send + print ''; - - // Quantity to send - print ''; - - // Stock - if (! empty($conf->stock->enabled)) + else { - print ''; + } + + if (!empty($conf->productbatch->enabled)) + { + if (!empty($product->status_batch)) + { + print ''; + print ''; + print ''; } - - if (!empty($conf->productbatch->enabled)) - { - if (!empty($product->status_batch)) - { - print ''; - print ''; - print ''; - } - else { - print ''; - } + else { + print ''; } - print "\n"; + } + print "\n"; } //Display lines extrafields diff --git a/htdocs/reception/list.php b/htdocs/reception/list.php index f5f605532b8..1a201a4bfd0 100644 --- a/htdocs/reception/list.php +++ b/htdocs/reception/list.php @@ -305,29 +305,28 @@ if (empty($reshook)) { $fk_parent_line = 0; } - $result = $object->addline( - $desc, - $lines[$i]->subprice, - $lines[$i]->tva_tx, - $lines[$i]->localtax1_tx, - $lines[$i]->localtax2_tx, - $lines[$i]->qty, - $lines[$i]->fk_product, - $lines[$i]->remise_percent, - $date_start, - $date_end, - 0, - $lines[$i]->info_bits, - 'HT', - $product_type, - $i, - false, - 0, - null, - $lines[$i]->rowid, - 0, - $lines[$i]->ref_supplier - + $result = $object->addline( + $desc, + $lines[$i]->subprice, + $lines[$i]->tva_tx, + $lines[$i]->localtax1_tx, + $lines[$i]->localtax2_tx, + $lines[$i]->qty, + $lines[$i]->fk_product, + $lines[$i]->remise_percent, + $date_start, + $date_end, + 0, + $lines[$i]->info_bits, + 'HT', + $product_type, + $i, + false, + 0, + null, + $lines[$i]->rowid, + 0, + $lines[$i]->ref_supplier ); $rcp->add_object_linked('facture_fourn_det', $result); @@ -533,9 +532,9 @@ if ($resql) } - $arrayofmassactions = array( -// 'presend'=>$langs->trans("SendByMail"), -); + $arrayofmassactions = array( + // 'presend'=>$langs->trans("SendByMail"), + ); if($user->rights->fournisseur->facture->creer)$arrayofmassactions['createbills']=$langs->trans("CreateInvoiceForThisSupplier"); if($massaction == 'createbills') $arrayofmassactions=array(); diff --git a/htdocs/reception/tpl/linkedobjectblock.tpl.php b/htdocs/reception/tpl/linkedobjectblock.tpl.php index 944e1f5e4f5..e4bae7558d1 100644 --- a/htdocs/reception/tpl/linkedobjectblock.tpl.php +++ b/htdocs/reception/tpl/linkedobjectblock.tpl.php @@ -42,38 +42,38 @@ $langs->load("receptions"); $linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); $total=0; $ilink=0; -foreach($linkedObjectBlock as $key => $objectlink) +foreach ($linkedObjectBlock as $key => $objectlink) { $ilink++; $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; -?> + ?> - - + + + if ($user->rights->reception->lire) { + $total = $total + $objectlink->total_ht; + echo price($objectlink->total_ht); + } ?> - 1) { From e2afcfb9997cf9f3e275eb67deb86d8fbb229df4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 11:53:20 +0100 Subject: [PATCH 628/980] clean indent --- htdocs/core/class/canvas.class.php | 12 +++---- htdocs/core/class/ccountry.class.php | 10 +++--- htdocs/core/class/commoninvoice.class.php | 2 +- .../class/commonstickergenerator.class.php | 8 ++--- htdocs/core/class/coreobject.class.php | 8 ++--- htdocs/core/class/ctyperesource.class.php | 2 +- htdocs/core/class/doleditor.class.php | 2 +- htdocs/core/class/html.formcontract.class.php | 11 +++--- htdocs/core/class/ldap.class.php | 24 ++++++------- htdocs/core/class/menubase.class.php | 27 +++++++------- htdocs/core/class/notify.class.php | 2 +- htdocs/core/class/openid.class.php | 4 +-- htdocs/core/lib/expedition.lib.php | 16 ++++----- htdocs/core/lib/functions2.lib.php | 18 +++++----- htdocs/core/lib/invoice.lib.php | 10 +++--- htdocs/core/lib/json.lib.php | 20 +++++------ htdocs/core/lib/pdf.lib.php | 10 +++--- htdocs/core/lib/price.lib.php | 36 +++++++++---------- htdocs/core/lib/project.lib.php | 4 +-- htdocs/core/lib/security.lib.php | 19 +++++++--- htdocs/core/lib/ticket.lib.php | 16 ++++----- 21 files changed, 132 insertions(+), 129 deletions(-) diff --git a/htdocs/core/class/canvas.class.php b/htdocs/core/class/canvas.class.php index 37e8270d449..cfdb09c527e 100644 --- a/htdocs/core/class/canvas.class.php +++ b/htdocs/core/class/canvas.class.php @@ -54,12 +54,12 @@ class Canvas public $control; // Initialized by getCanvas with controller instance - /** - * Constructor - * - * @param DoliDB $db Database handler - * @param string $actiontype Action type ('create', 'view', 'edit', 'list') - */ + /** + * Constructor + * + * @param DoliDB $db Database handler + * @param string $actiontype Action type ('create', 'view', 'edit', 'list') + */ public function __construct($db, $actiontype = 'view') { $this->db = $db; diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php index edbceec50fd..0934d85b3e7 100644 --- a/htdocs/core/class/ccountry.class.php +++ b/htdocs/core/class/ccountry.class.php @@ -171,16 +171,16 @@ class Ccountry // extends CommonObject public function fetch($id, $code = '', $code_iso = '') { global $langs; - $sql = "SELECT"; + $sql = "SELECT"; $sql.= " t.rowid,"; $sql.= " t.code,"; $sql.= " t.code_iso,"; $sql.= " t.label,"; $sql.= " t.active"; - $sql.= " FROM ".MAIN_DB_PREFIX."c_country as t"; - if ($id) $sql.= " WHERE t.rowid = ".$id; - elseif ($code) $sql.= " WHERE t.code = '".$this->db->escape($code)."'"; - elseif ($code_iso) $sql.= " WHERE t.code_iso = '".$this->db->escape($code_iso)."'"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_country as t"; + if ($id) $sql.= " WHERE t.rowid = ".$id; + elseif ($code) $sql.= " WHERE t.code = '".$this->db->escape($code)."'"; + elseif ($code_iso) $sql.= " WHERE t.code_iso = '".$this->db->escape($code_iso)."'"; dol_syslog(get_class($this)."::fetch", LOG_DEBUG); $resql=$this->db->query($sql); diff --git a/htdocs/core/class/commoninvoice.class.php b/htdocs/core/class/commoninvoice.class.php index 98a40c73c0b..ec27b83e0a0 100644 --- a/htdocs/core/class/commoninvoice.class.php +++ b/htdocs/core/class/commoninvoice.class.php @@ -154,7 +154,7 @@ abstract class CommonInvoice extends CommonObject if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier') { // TODO - return 0; + return 0; } require_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php'; diff --git a/htdocs/core/class/commonstickergenerator.class.php b/htdocs/core/class/commonstickergenerator.class.php index 6c6b14ee4e4..83450ee6462 100644 --- a/htdocs/core/class/commonstickergenerator.class.php +++ b/htdocs/core/class/commonstickergenerator.class.php @@ -182,16 +182,16 @@ abstract class CommonStickerGenerator for($i=$x1;$i<=$x2;$i+=$Pointilles+$Pointilles) { for($j=$i;$j<=($i+$Pointilles);$j++) { if($j<=($x2-1)) { - $pdf->Line($j, $y1, $j+1, $y1); // on trace le pointill? du haut, point par point - $pdf->Line($j, $y2, $j+1, $y2); // on trace le pointill? du bas, point par point + $pdf->Line($j, $y1, $j+1, $y1); // on trace le pointill? du haut, point par point + $pdf->Line($j, $y2, $j+1, $y2); // on trace le pointill? du bas, point par point } } } for($i=$y1;$i<=$y2;$i+=$Pointilles+$Pointilles) { for($j=$i;$j<=($i+$Pointilles);$j++) { if($j<=($y2-1)) { - $pdf->Line($x1, $j, $x1, $j+1); // on trace le pointill? du haut, point par point - $pdf->Line($x2, $j, $x2, $j+1); // on trace le pointill? du bas, point par point + $pdf->Line($x1, $j, $x1, $j+1); // on trace le pointill? du haut, point par point + $pdf->Line($x2, $j, $x2, $j+1); // on trace le pointill? du bas, point par point } } } diff --git a/htdocs/core/class/coreobject.class.php b/htdocs/core/class/coreobject.class.php index 19588333fcb..cc87a791c0d 100644 --- a/htdocs/core/class/coreobject.class.php +++ b/htdocs/core/class/coreobject.class.php @@ -392,10 +392,10 @@ class CoreObject extends CommonObject */ public function setDate($field, $date) { - if (empty($date)) - { - $this->{$field} = 0; - } + if (empty($date)) + { + $this->{$field} = 0; + } else { require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; diff --git a/htdocs/core/class/ctyperesource.class.php b/htdocs/core/class/ctyperesource.class.php index 5048e74b711..c790d89e407 100644 --- a/htdocs/core/class/ctyperesource.class.php +++ b/htdocs/core/class/ctyperesource.class.php @@ -252,7 +252,7 @@ class Ctyperesource $sql .= $this->db->order($sortfield, $sortorder); } if (!empty($limit)) { - $sql .= ' ' . $this->db->plimit($limit, $offset); + $sql .= ' ' . $this->db->plimit($limit, $offset); } $resql = $this->db->query($sql); diff --git a/htdocs/core/class/doleditor.class.php b/htdocs/core/class/doleditor.class.php index cc6172e441a..a0879160727 100644 --- a/htdocs/core/class/doleditor.class.php +++ b/htdocs/core/class/doleditor.class.php @@ -157,7 +157,7 @@ class DolEditor $fullpage=false; if (isset($conf->global->FCKEDITOR_ALLOW_ANY_CONTENT)) { - $disallowAnyContent=empty($conf->global->FCKEDITOR_ALLOW_ANY_CONTENT); // Only predefined list of html tags are allowed or all + $disallowAnyContent=empty($conf->global->FCKEDITOR_ALLOW_ANY_CONTENT); // Only predefined list of html tags are allowed or all } $found=0; diff --git a/htdocs/core/class/html.formcontract.class.php b/htdocs/core/class/html.formcontract.class.php index 87d367e23f1..6740ecb7bbf 100644 --- a/htdocs/core/class/html.formcontract.class.php +++ b/htdocs/core/class/html.formcontract.class.php @@ -76,13 +76,12 @@ class FormContract if ($socid > 0) { // CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY is 'all' or a list of ids separated by coma. - if (empty($conf->global->CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY)) - $sql.= " AND (c.fk_soc=".$socid." OR c.fk_soc IS NULL)"; - elseif ($conf->global->CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY != 'all') - { - $sql.= " AND (c.fk_soc IN (".$socid.", ".$conf->global->CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY.") "; + if (empty($conf->global->CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY)) { + $sql.= " AND (c.fk_soc=".$socid." OR c.fk_soc IS NULL)"; + } elseif ($conf->global->CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY != 'all') { + $sql.= " AND (c.fk_soc IN (".$socid.", ".$conf->global->CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY.") "; $sql.= " OR c.fk_soc IS NULL)"; - } + } } if ($socid == 0) $sql.= " AND (c.fk_soc = 0 OR c.fk_soc IS NULL)"; $sql.= " ORDER BY c.ref "; diff --git a/htdocs/core/class/ldap.class.php b/htdocs/core/class/ldap.class.php index 92b551db918..b22473ec483 100644 --- a/htdocs/core/class/ldap.class.php +++ b/htdocs/core/class/ldap.class.php @@ -1362,12 +1362,12 @@ class Ldap } } - /** - * UserAccountControl Flgs to more human understandable form... - * - * @param string $uacf UACF - * @return void - */ + /** + * UserAccountControl Flgs to more human understandable form... + * + * @param string $uacf UACF + * @return void + */ public function parseUACF($uacf) { //All flags array @@ -1408,12 +1408,12 @@ class Ldap return($retval); } - /** - * SamAccountType value to text - * - * @param string $samtype SamType - * @return string Sam string - */ + /** + * SamAccountType value to text + * + * @param string $samtype SamType + * @return string Sam string + */ public function parseSAT($samtype) { $stypes = array( diff --git a/htdocs/core/class/menubase.class.php b/htdocs/core/class/menubase.class.php index 1b9c9225258..5a63ad0efd6 100644 --- a/htdocs/core/class/menubase.class.php +++ b/htdocs/core/class/menubase.class.php @@ -137,22 +137,21 @@ class Menubase // an insert with a forced id. if (in_array($this->db->type, array('pgsql'))) { - $sql = "SELECT MAX(rowid) as maxrowid FROM ".MAIN_DB_PREFIX."menu"; - $resqlrowid=$this->db->query($sql); - if ($resqlrowid) - { - $obj=$this->db->fetch_object($resqlrowid); - $maxrowid=$obj->maxrowid; + $sql = "SELECT MAX(rowid) as maxrowid FROM ".MAIN_DB_PREFIX."menu"; + $resqlrowid=$this->db->query($sql); + if ($resqlrowid) { + $obj=$this->db->fetch_object($resqlrowid); + $maxrowid=$obj->maxrowid; - // Max rowid can be empty if there is no record yet - if(empty($maxrowid)) $maxrowid=1; + // Max rowid can be empty if there is no record yet + if(empty($maxrowid)) $maxrowid=1; - $sql = "SELECT setval('".MAIN_DB_PREFIX."menu_rowid_seq', ".($maxrowid).")"; - //print $sql; exit; - $resqlrowidset=$this->db->query($sql); - if (! $resqlrowidset) dol_print_error($this->db); - } - else dol_print_error($this->db); + $sql = "SELECT setval('".MAIN_DB_PREFIX."menu_rowid_seq', ".($maxrowid).")"; + //print $sql; exit; + $resqlrowidset=$this->db->query($sql); + if (! $resqlrowidset) dol_print_error($this->db); + } + else dol_print_error($this->db); } // Check that entry does not exists yet on key menu_handler-fk_menu-position-url-entity, to avoid errors with postgresql diff --git a/htdocs/core/class/notify.class.php b/htdocs/core/class/notify.class.php index f9482e843c3..3520b5f1c3c 100644 --- a/htdocs/core/class/notify.class.php +++ b/htdocs/core/class/notify.class.php @@ -571,7 +571,7 @@ class Notify } } else - { + { dol_syslog("No notification sent for ".$sendto." because email is empty"); } $i++; diff --git a/htdocs/core/class/openid.class.php b/htdocs/core/class/openid.class.php index c884f4bd7da..e4fe7843d1d 100644 --- a/htdocs/core/class/openid.class.php +++ b/htdocs/core/class/openid.class.php @@ -556,8 +556,8 @@ class SimpleOpenID return false; } else - { - dol_syslog(get_class($this).'::sendDiscoveryRequestToGetXRDS found endpoint = '.$server); + { + dol_syslog(get_class($this).'::sendDiscoveryRequestToGetXRDS found endpoint = '.$server); $this->SetOpenIDServer($server); return $server; } diff --git a/htdocs/core/lib/expedition.lib.php b/htdocs/core/lib/expedition.lib.php index 5625bc9c012..7c329940b2d 100644 --- a/htdocs/core/lib/expedition.lib.php +++ b/htdocs/core/lib/expedition.lib.php @@ -94,18 +94,18 @@ function expedition_admin_prepare_head() if (! empty($conf->global->MAIN_SUBMODULE_EXPEDITION)) { - $head[$h][0] = DOL_URL_ROOT.'/admin/expedition_extrafields.php'; - $head[$h][1] = $langs->trans("ExtraFields"); - $head[$h][2] = 'attributes_shipment'; - $h++; + $head[$h][0] = DOL_URL_ROOT.'/admin/expedition_extrafields.php'; + $head[$h][1] = $langs->trans("ExtraFields"); + $head[$h][2] = 'attributes_shipment'; + $h++; } if (! empty($conf->global->MAIN_SUBMODULE_EXPEDITION)) { - $head[$h][0] = DOL_URL_ROOT.'/admin/expeditiondet_extrafields.php'; - $head[$h][1] = $langs->trans("ExtraFieldsLines"); - $head[$h][2] = 'attributeslines_shipment'; - $h++; + $head[$h][0] = DOL_URL_ROOT.'/admin/expeditiondet_extrafields.php'; + $head[$h][1] = $langs->trans("ExtraFieldsLines"); + $head[$h][2] = 'attributeslines_shipment'; + $h++; } if (! empty($conf->global->MAIN_SUBMODULE_LIVRAISON)) diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index a05a62f5957..30eba9867b8 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -832,12 +832,12 @@ function get_next_value($db, $mask, $table, $field, $where = '', $objsoc = '', $ if (strstr($mask, 'user_extra_')) { - $start = "{user_extra_"; - $end = "\}"; - $extra= get_string_between($mask, "user_extra_", "}"); - if(!empty($user->array_options['options_'.$extra])){ - $mask = preg_replace('#('.$start.')(.*?)('.$end.')#si', $user->array_options['options_'.$extra], $mask); - } + $start = "{user_extra_"; + $end = "\}"; + $extra= get_string_between($mask, "user_extra_", "}"); + if (!empty($user->array_options['options_'.$extra])) { + $mask = preg_replace('#('.$start.')(.*?)('.$end.')#si', $user->array_options['options_'.$extra], $mask); + } } $maskwithonlyymcode=$mask; $maskwithonlyymcode=preg_replace('/\{(0+)([@\+][0-9\-\+\=]+)?([@\+][0-9\-\+\=]+)?\}/i', $maskcounter, $maskwithonlyymcode); @@ -1645,7 +1645,7 @@ function getListOfModels($db, $type, $maxfilenamelength = 0) //irtoscan.=($dirtoscan?',':'').preg_replace('/[\r\n]+/',',',trim($conf->global->$const)); $dirtoscan= preg_replace('/[\r\n]+/', ',', trim($conf->global->$const)); - $listoffiles=array(); + $listoffiles=array(); // Now we add models found in directories scanned $listofdir=explode(',', $dirtoscan); @@ -1656,8 +1656,8 @@ function getListOfModels($db, $type, $maxfilenamelength = 0) if (! $tmpdir) { unset($listofdir[$key]); continue; } if (is_dir($tmpdir)) { - // all type of template is allowed - $tmpfiles=dol_dir_list($tmpdir, 'files', 0, '', '', 'name', SORT_ASC, 0); + // all type of template is allowed + $tmpfiles=dol_dir_list($tmpdir, 'files', 0, '', '', 'name', SORT_ASC, 0); if (count($tmpfiles)) $listoffiles=array_merge($listoffiles, $tmpfiles); } } diff --git a/htdocs/core/lib/invoice.lib.php b/htdocs/core/lib/invoice.lib.php index 0b06d21c95d..004f355a27a 100644 --- a/htdocs/core/lib/invoice.lib.php +++ b/htdocs/core/lib/invoice.lib.php @@ -137,11 +137,11 @@ function invoice_admin_prepare_head() $head[$h][2] = 'payment'; $h++; - if($conf->global->INVOICE_USE_SITUATION){ - $head[$h][0] = DOL_URL_ROOT.'/admin/facture_situation.php'; - $head[$h][1] = $langs->trans("InvoiceSituation"); - $head[$h][2] = 'situation'; - $h++; + if ($conf->global->INVOICE_USE_SITUATION) { + $head[$h][0] = DOL_URL_ROOT.'/admin/facture_situation.php'; + $head[$h][1] = $langs->trans("InvoiceSituation"); + $head[$h][2] = 'situation'; + $h++; } // Show more tabs from modules diff --git a/htdocs/core/lib/json.lib.php b/htdocs/core/lib/json.lib.php index 8c97bbb348f..3ce9d871b7f 100644 --- a/htdocs/core/lib/json.lib.php +++ b/htdocs/core/lib/json.lib.php @@ -353,24 +353,24 @@ function utf82utf16($utf8) { // oh please oh please oh please oh please oh please if(function_exists('mb_convert_encoding')) { - return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); + return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); } switch(strlen($utf8)) { case 1: - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return $utf8; + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return $utf8; case 2: - // return a UTF-16 character from a 2-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0x07 & (ord($utf8{0}) >> 2)) . chr((0xC0 & (ord($utf8{0}) << 6)) | (0x3F & ord($utf8{1}))); + // return a UTF-16 character from a 2-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x07 & (ord($utf8{0}) >> 2)) . chr((0xC0 & (ord($utf8{0}) << 6)) | (0x3F & ord($utf8{1}))); case 3: - // return a UTF-16 character from a 3-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr((0xF0 & (ord($utf8{0}) << 4)) | (0x0F & (ord($utf8{1}) >> 2))) . chr((0xC0 & (ord($utf8{1}) << 6)) | (0x7F & ord($utf8{2}))); + // return a UTF-16 character from a 3-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr((0xF0 & (ord($utf8{0}) << 4)) | (0x0F & (ord($utf8{1}) >> 2))) . chr((0xC0 & (ord($utf8{1}) << 6)) | (0x7F & ord($utf8{2}))); } // ignoring UTF-32 for now, sorry diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 609201dd0c3..918b5ebb6a3 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -1417,8 +1417,8 @@ function pdf_getlinedesc($object, $i, $outputlangs, $hideref = 0, $hidedesc = 0, //print '>'.$outputlangs->charset_output.','.$period; if(!empty($conf->global->ADD_HTML_FORMATING_INTO_DESC_DOC)){ $libelleproduitservice.= ''."__N__ ".$period.''; - }else{ - $libelleproduitservice.="__N__".$period; + } else { + $libelleproduitservice.="__N__".$period; } //print $libelleproduitservice; } @@ -1705,8 +1705,8 @@ function pdf_getlineqty($object, $i, $outputlangs, $hidedetails = 0) } if (empty($reshook)) { - if ($object->lines[$i]->special_code == 3) return ''; - if (empty($hidedetails) || $hidedetails > 1) $result.=$object->lines[$i]->qty; + if ($object->lines[$i]->special_code == 3) return ''; + if (empty($hidedetails) || $hidedetails > 1) $result.=$object->lines[$i]->qty; } return $result; } @@ -2108,7 +2108,7 @@ function pdf_getLinkedObjects($object, $outputlangs) { if ($objecttype == 'facture') { - // For invoice, we don't want to have a reference line on document. Image we are using recuring invoice, we will have a line longer than document width. + // For invoice, we don't want to have a reference line on document. Image we are using recuring invoice, we will have a line longer than document width. } elseif ($objecttype == 'propal' || $objecttype == 'supplier_proposal') { diff --git a/htdocs/core/lib/price.lib.php b/htdocs/core/lib/price.lib.php index 9ba505e9eae..f4efd0c0ee9 100644 --- a/htdocs/core/lib/price.lib.php +++ b/htdocs/core/lib/price.lib.php @@ -204,15 +204,15 @@ function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocalt $localtaxes = array(0,0,0); $apply_tax = false; switch($localtax1_type) { - case '2': // localtax on product or service - $apply_tax = true; - break; - case '4': // localtax on product - if ($type == 0) $apply_tax = true; - break; - case '6': // localtax on service - if ($type == 1) $apply_tax = true; - break; + case '2': // localtax on product or service + $apply_tax = true; + break; + case '4': // localtax on product + if ($type == 0) $apply_tax = true; + break; + case '6': // localtax on service + if ($type == 1) $apply_tax = true; + break; } if ($uselocaltax1_rate && $apply_tax) { @@ -299,15 +299,15 @@ function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocalt $apply_tax = false; switch($localtax1_type) { - case '1': // localtax on product or service - $apply_tax = true; - break; - case '3': // localtax on product - if ($type == 0) $apply_tax = true; - break; - case '5': // localtax on service - if ($type == 1) $apply_tax = true; - break; + case '1': // localtax on product or service + $apply_tax = true; + break; + case '3': // localtax on product + if ($type == 0) $apply_tax = true; + break; + case '5': // localtax on service + if ($type == 1) $apply_tax = true; + break; } if ($uselocaltax1_rate && $apply_tax) { $result[14] = price2num(($tot_sans_remise * (1 + ( $localtax1_rate / 100))) - $tot_sans_remise, 'MT'); // amount tax1 for total_ht_without_discount diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index 106ce8336a8..0c80b05c9cd 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -1371,7 +1371,7 @@ function projectLinesPerWeek(&$inc, $firstdaytoshow, $fuser, $parent, $lines, &$ { for ($i = 0 ; $i < $numlines ; $i++) { - if ($lines[$i]->fk_task_parent) $lineswithoutlevel0[]=$lines[$i]; + if ($lines[$i]->fk_task_parent) $lineswithoutlevel0[]=$lines[$i]; } } @@ -1848,7 +1848,7 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks $resql = $db->query($sql2); if ($resql) { - $total_task = 0; + $total_task = 0; $total_opp_amount = 0; $ponderated_opp_amount = 0; diff --git a/htdocs/core/lib/security.lib.php b/htdocs/core/lib/security.lib.php index 0b72fe4645a..a4b96a6b650 100644 --- a/htdocs/core/lib/security.lib.php +++ b/htdocs/core/lib/security.lib.php @@ -312,17 +312,26 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f foreach($feature2 as $subfeature) { if (empty($user->rights->$feature->$subfeature->creer) - && empty($user->rights->$feature->$subfeature->write) - && empty($user->rights->$feature->$subfeature->create)) { $createok=0; $nbko++; } - else { $createok=1; break; } // Break to bypass second test if the first is ok + && empty($user->rights->$feature->$subfeature->write) + && empty($user->rights->$feature->$subfeature->create)) { + $createok=0; + $nbko++; + } else { + $createok=1; + // Break to bypass second test if the first is ok + break; + } } } elseif (! empty($feature)) // This is for permissions on 2 levels ('creer' or 'write') { //print '
    feature='.$feature.' creer='.$user->rights->$feature->creer.' write='.$user->rights->$feature->write; if (empty($user->rights->$feature->creer) - && empty($user->rights->$feature->write) - && empty($user->rights->$feature->create)) { $createok=0; $nbko++; } + && empty($user->rights->$feature->write) + && empty($user->rights->$feature->create)) { + $createok=0; + $nbko++; + } } } diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index 5ff41f97495..63e9a2fc9ff 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -234,7 +234,7 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $ } if (! empty($conf->global->TICKET_PUBLIC_INTERFACE_TOPIC)) { - print '' . ($conf->global->TICKET_PUBLIC_INTERFACE_TOPIC ? $conf->global->TICKET_PUBLIC_INTERFACE_TOPIC : $langs->trans("TicketSystem")) . ''; + print '' . ($conf->global->TICKET_PUBLIC_INTERFACE_TOPIC ? $conf->global->TICKET_PUBLIC_INTERFACE_TOPIC : $langs->trans("TicketSystem")) . ''; } print '
    '; } @@ -690,10 +690,10 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no $out.=$actionstatic->getNomUrl(1, -1).' '; } -// if ($user->rights->agenda->allactions->read || $actionstatic->authorid == $user->id) -// { -// $out.=''.$langs->trans('Show').''; -// } + //if ($user->rights->agenda->allactions->read || $actionstatic->authorid == $user->id) + //{ + // $out.=''.$langs->trans('Show').''; + //} if ($user->rights->agenda->allactions->create || @@ -723,9 +723,7 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no $out.="\n"; // Ref - - $out.='

    '; - + $out.='

    '; // Author of event $out.=''; @@ -739,11 +737,9 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no } $out.=''; - // Title $out .= ' '; - if($actionstatic->code == 'TICKET_MSG') { $out .= $langs->trans('TicketNewMessage'); } From a25ec35fd4983f1101e2b7ac422980c901183582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 12:22:57 +0100 Subject: [PATCH 629/980] clean indent --- htdocs/expedition/card.php | 31 +- htdocs/expedition/shipment.php | 27 +- .../expedition/tpl/linkedobjectblock.tpl.php | 22 +- htdocs/supplier_proposal/card.php | 264 +++++++++--------- .../class/supplier_proposal.class.php | 19 +- htdocs/supplier_proposal/contact.php | 27 +- htdocs/supplier_proposal/document.php | 27 +- htdocs/supplier_proposal/info.php | 27 +- htdocs/supplier_proposal/note.php | 27 +- .../tpl/linkedobjectblock.tpl.php | 22 +- 10 files changed, 252 insertions(+), 241 deletions(-) diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index a101f3964c0..536efaf885b 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -1072,31 +1072,28 @@ if ($action == 'create') print ''; - print '
    '; - print '

    '; + if ($line->product_type == Product::TYPE_PRODUCT || ! empty($conf->global->STOCK_SUPPORTS_SERVICES)) + { + if (GETPOST('qtyl'.$indiceAsked, 'int')) $defaultqty=GETPOST('qtyl'.$indiceAsked, 'int'); + print ''; + print ''; + } + else print $langs->trans("NA"); + print ''; - if ($line->product_type == Product::TYPE_PRODUCT || ! empty($conf->global->STOCK_SUPPORTS_SERVICES)) + // Stock + if (! empty($conf->stock->enabled)) + { + print ''; + if ($line->product_type == Product::TYPE_PRODUCT || ! empty($conf->global->STOCK_SUPPORTS_SERVICES)) // Type of product need stock change ? { - if (GETPOST('qtyl'.$indiceAsked, 'int')) $defaultqty=GETPOST('qtyl'.$indiceAsked, 'int'); - print ''; - print ''; + // Show warehouse combo list + $ent = "entl".$indiceAsked; + $idl = "idl".$indiceAsked; + $tmpentrepot_id = is_numeric(GETPOST($ent, 'int'))?GETPOST($ent, 'int'):$warehouse_id; + if ($line->fk_product > 0) + { + print ''; + print $formproduct->selectWarehouses($tmpentrepot_id, 'entl'.$indiceAsked, '', 0, 0, $line->fk_product, '', 1); + } } - else print $langs->trans("NA"); - print ''; - if ($line->product_type == Product::TYPE_PRODUCT || ! empty($conf->global->STOCK_SUPPORTS_SERVICES)) // Type of product need stock change ? - { - // Show warehouse combo list - $ent = "entl".$indiceAsked; - $idl = "idl".$indiceAsked; - $tmpentrepot_id = is_numeric(GETPOST($ent, 'int'))?GETPOST($ent, 'int'):$warehouse_id; - if ($line->fk_product > 0) - { - print ''; - print $formproduct->selectWarehouses($tmpentrepot_id, 'entl'.$indiceAsked, '', 0, 0, $line->fk_product, '', 1); - } - } - else - { - print $langs->trans("Service"); - } + print $langs->trans("Service"); + } + print ''; + print $form->selectDate($dispatchLines[$indiceAsked]['DLC'], 'dlc' . $indiceAsked, '', '', 1, ""); + print ''; + print $form->selectDate($dispatchLines[$indiceAsked]['DLUO'], 'dluo' . $indiceAsked, '', '', 1, ""); print ''; - print $form->selectDate($dispatchLines[$indiceAsked]['DLC'], 'dlc' . $indiceAsked, '', '', 1, ""); - print ''; - print $form->selectDate($dispatchLines[$indiceAsked]['DLUO'], 'dluo' . $indiceAsked, '', '', 1, ""); - print '
    trans("Reception"); ?> - global->MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES) print ' + global->MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES) print ' getNomUrl(1); ?>date_delivery, 'day'); ?>date_delivery, 'day'); ?> rights->reception->lire) { - $total = $total + $objectlink->total_ht; - echo price($objectlink->total_ht); - } ?> getLibStatut(3); ?> - element != 'order_supplier') { - ?> - ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?> - element != 'order_supplier') { ?> + ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?> +
    '; - // Load shipments already done for same order $object->loadExpeditions(); diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php index 293c00a2319..a5c9125d844 100644 --- a/htdocs/expedition/shipment.php +++ b/htdocs/expedition/shipment.php @@ -288,19 +288,20 @@ if ($id > 0 || ! empty($ref)) $morehtmlref.='
    '.$langs->trans('Project') . ' '; if ($user->rights->commande->creer) { - if ($action != 'classify') - $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + if ($action != 'classify') { + $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/expedition/tpl/linkedobjectblock.tpl.php b/htdocs/expedition/tpl/linkedobjectblock.tpl.php index a632584a510..8e27db03b45 100644 --- a/htdocs/expedition/tpl/linkedobjectblock.tpl.php +++ b/htdocs/expedition/tpl/linkedobjectblock.tpl.php @@ -23,11 +23,9 @@ if (empty($conf) || ! is_object($conf)) exit; } -?> - +print "\n"; -load("sendings"); -$total=0; $ilink=0; +$total=0; +$ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { $ilink++; $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; -?> + ?> + if ($user->rights->expedition->lire) { + $total = $total + $objectlink->total_ht; + echo price($objectlink->total_ht); + } ?> - 1) { ?> @@ -81,6 +80,5 @@ if (count($linkedObjectBlock) > 1) { - +print "\n"; diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 3bbd8d8a33f..b953087b885 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -319,78 +319,92 @@ if (empty($reshook)) $id = $object->create($user); if ($id > 0) { - dol_include_once('/' . $element . '/class/' . $subelement . '.class.php'); + dol_include_once('/' . $element . '/class/' . $subelement . '.class.php'); - $classname = ucfirst($subelement); - $srcobject = new $classname($db); + $classname = ucfirst($subelement); + $srcobject = new $classname($db); - dol_syslog("Try to find source object origin=" . $object->origin . " originid=" . $object->origin_id . " to add lines"); - $result = $srcobject->fetch($object->origin_id); + dol_syslog("Try to find source object origin=" . $object->origin . " originid=" . $object->origin_id . " to add lines"); + $result = $srcobject->fetch($object->origin_id); - if ($result > 0) + if ($result > 0) + { + $lines = $srcobject->lines; + if (empty($lines) && method_exists($srcobject, 'fetch_lines')) { + $srcobject->fetch_lines(); $lines = $srcobject->lines; - if (empty($lines) && method_exists($srcobject, 'fetch_lines')) - { - $srcobject->fetch_lines(); - $lines = $srcobject->lines; + } + + $fk_parent_line=0; + $num=count($lines); + for ($i=0;$i<$num;$i++) + { + $label=(! empty($lines[$i]->label)?$lines[$i]->label:''); + $desc=(! empty($lines[$i]->desc)?$lines[$i]->desc:$lines[$i]->libelle); + + // Positive line + $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0); + + // Reset fk_parent_line for no child products and special product + if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) { + $fk_parent_line = 0; } - $fk_parent_line=0; - $num=count($lines); - for ($i=0;$i<$num;$i++) - { - $label=(! empty($lines[$i]->label)?$lines[$i]->label:''); - $desc=(! empty($lines[$i]->desc)?$lines[$i]->desc:$lines[$i]->libelle); - - // Positive line - $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0); - - // Reset fk_parent_line for no child products and special product - if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) { - $fk_parent_line = 0; - } - - // Extrafields - if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && method_exists($lines[$i], 'fetch_optionals')) { - $lines[$i]->fetch_optionals(); - $array_options = $lines[$i]->array_options; - } - - $result = $object->addline( - $desc, $lines[$i]->subprice, $lines[$i]->qty, $lines[$i]->tva_tx, - $lines[$i]->localtax1_tx, $lines[$i]->localtax2_tx, - $lines[$i]->fk_product, $lines[$i]->remise_percent, - 'HT', 0, $lines[$i]->info_bits, $product_type, - $lines[$i]->rang, $lines[$i]->special_code, $fk_parent_line, - $lines[$i]->fk_fournprice, $lines[$i]->pa_ht, $label, $array_options, - $lines[$i]->ref_supplier, $lines[$i]->fk_unit - ); - - if ($result > 0) { - $lineid = $result; - } else { - $lineid = 0; - $error ++; - break; - } - - // Defined the new fk_parent_line - if ($result > 0 && $lines[$i]->product_type == 9) { - $fk_parent_line = $result; - } + // Extrafields + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && method_exists($lines[$i], 'fetch_optionals')) { + $lines[$i]->fetch_optionals(); + $array_options = $lines[$i]->array_options; } - // Hooks - $parameters = array('objFrom' => $srcobject); - $reshook = $hookmanager->executeHooks('createFrom', $parameters, $object, $action); // Note that $action and $object may have been - // modified by hook - if ($reshook < 0) + $result = $object->addline( + $desc, + $lines[$i]->subprice, + $lines[$i]->qty, + $lines[$i]->tva_tx, + $lines[$i]->localtax1_tx, + $lines[$i]->localtax2_tx, + $lines[$i]->fk_product, + $lines[$i]->remise_percent, + 'HT', + 0, + $lines[$i]->info_bits, + $product_type, + $lines[$i]->rang, + $lines[$i]->special_code, + $fk_parent_line, + $lines[$i]->fk_fournprice, + $lines[$i]->pa_ht, $label, + $array_options, + $lines[$i]->ref_supplier, + $lines[$i]->fk_unit + ); + + if ($result > 0) { + $lineid = $result; + } else { + $lineid = 0; $error ++; - } else { - setEventMessages($srcobject->error, $srcobject->errors, 'errors'); + break; + } + + // Defined the new fk_parent_line + if ($result > 0 && $lines[$i]->product_type == 9) { + $fk_parent_line = $result; + } + } + + // Hooks + $parameters = array('objFrom' => $srcobject); + $reshook = $hookmanager->executeHooks('createFrom', $parameters, $object, $action); // Note that $action and $object may have been + // modified by hook + if ($reshook < 0) { $error ++; } + } else { + setEventMessages($srcobject->error, $srcobject->errors, 'errors'); + $error ++; + } } else { setEventMessages($object->error, $object->errors, 'errors'); $error ++; @@ -736,64 +750,64 @@ if (empty($reshook)) if (! $error && $result > 0) { - $db->commit(); + $db->commit(); - $ret=$object->fetch($object->id); // Reload to get new records + $ret=$object->fetch($object->id); // Reload to get new records - // Define output language - if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) - { - $outputlangs = $langs; - $newlang = ''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09'); - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang; - if (! empty($newlang)) { - $outputlangs = new Translate("", $conf); - $outputlangs->setDefaultLang($newlang); - } - $model=$object->modelpdf; - $ret = $object->fetch($id); // Reload to get new records - - $result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); - if ($result < 0) dol_print_error($db, $result); + // Define output language + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) + { + $outputlangs = $langs; + $newlang = ''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09'); + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang; + if (! empty($newlang)) { + $outputlangs = new Translate("", $conf); + $outputlangs->setDefaultLang($newlang); } + $model=$object->modelpdf; + $ret = $object->fetch($id); // Reload to get new records - unset($_POST['prod_entry_mode']); + $result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); + if ($result < 0) dol_print_error($db, $result); + } - unset($_POST['qty']); - unset($_POST['type']); - unset($_POST['remise_percent']); - unset($_POST['pu']); - unset($_POST['price_ht']); - unset($_POST['multicurrency_price_ht']); - unset($_POST['price_ttc']); - unset($_POST['tva_tx']); - unset($_POST['label']); - unset($_POST['product_ref']); - unset($_POST['product_label']); - unset($_POST['product_desc']); - unset($_POST['fournprice']); - unset($_POST['buying_price']); - unset($localtax1_tx); - unset($localtax2_tx); - unset($_POST['np_marginRate']); - unset($_POST['np_markRate']); - unset($_POST['dp_desc']); - unset($_POST['idprodfournprice']); - unset($_POST['idprod']); + unset($_POST['prod_entry_mode']); - unset($_POST['date_starthour']); - unset($_POST['date_startmin']); - unset($_POST['date_startsec']); - unset($_POST['date_startday']); - unset($_POST['date_startmonth']); - unset($_POST['date_startyear']); - unset($_POST['date_endhour']); - unset($_POST['date_endmin']); - unset($_POST['date_endsec']); - unset($_POST['date_endday']); - unset($_POST['date_endmonth']); - unset($_POST['date_endyear']); + unset($_POST['qty']); + unset($_POST['type']); + unset($_POST['remise_percent']); + unset($_POST['pu']); + unset($_POST['price_ht']); + unset($_POST['multicurrency_price_ht']); + unset($_POST['price_ttc']); + unset($_POST['tva_tx']); + unset($_POST['label']); + unset($_POST['product_ref']); + unset($_POST['product_label']); + unset($_POST['product_desc']); + unset($_POST['fournprice']); + unset($_POST['buying_price']); + unset($localtax1_tx); + unset($localtax2_tx); + unset($_POST['np_marginRate']); + unset($_POST['np_markRate']); + unset($_POST['dp_desc']); + unset($_POST['idprodfournprice']); + unset($_POST['idprod']); + + unset($_POST['date_starthour']); + unset($_POST['date_startmin']); + unset($_POST['date_startsec']); + unset($_POST['date_startday']); + unset($_POST['date_startmonth']); + unset($_POST['date_startyear']); + unset($_POST['date_endhour']); + unset($_POST['date_endmin']); + unset($_POST['date_endsec']); + unset($_POST['date_endday']); + unset($_POST['date_endmonth']); + unset($_POST['date_endyear']); } else { @@ -801,7 +815,6 @@ if (empty($reshook)) setEventMessages($object->error, $object->errors, 'errors'); } - //} } } @@ -1452,19 +1465,20 @@ if ($action == 'create') $morehtmlref.='
    '.$langs->trans('Project') . ' '; if ($user->rights->supplier_proposal->creer) { - if ($action != 'classify') + if ($action != 'classify') { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects((empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS)?$object->socid:-1), $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects((empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS)?$object->socid:-1), $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index e4e0eb0b11c..be272ee2d36 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -1739,16 +1739,15 @@ class SupplierProposal extends CommonObject if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { - // Define output language - $outputlangs = $langs; - if (! empty($conf->global->MAIN_MULTILANGS)) - { - $outputlangs = new Translate("", $conf); - $newlang=(GETPOST('lang_id', 'aZ09') ? GETPOST('lang_id', 'aZ09') : $this->thirdparty->default_lang); - $outputlangs->setDefaultLang($newlang); - } - //$ret=$object->fetch($id); // Reload to get new records - $this->generateDocument($modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); + // Define output language + $outputlangs = $langs; + if (! empty($conf->global->MAIN_MULTILANGS)) { + $outputlangs = new Translate("", $conf); + $newlang=(GETPOST('lang_id', 'aZ09') ? GETPOST('lang_id', 'aZ09') : $this->thirdparty->default_lang); + $outputlangs->setDefaultLang($newlang); + } + //$ret=$object->fetch($id); // Reload to get new records + $this->generateDocument($modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); } // Call trigger diff --git a/htdocs/supplier_proposal/contact.php b/htdocs/supplier_proposal/contact.php index 69c6f0d193e..d60fb3c04bc 100644 --- a/htdocs/supplier_proposal/contact.php +++ b/htdocs/supplier_proposal/contact.php @@ -158,20 +158,21 @@ if ($id > 0 || ! empty($ref)) $morehtmlref.='
    '.$langs->trans('Project') . ' '; if ($permissiontoedit) { - if ($action != 'classify') + if ($action != 'classify') { //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + $morehtmlref.=' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/supplier_proposal/document.php b/htdocs/supplier_proposal/document.php index 7c5d533a401..991059b9141 100644 --- a/htdocs/supplier_proposal/document.php +++ b/htdocs/supplier_proposal/document.php @@ -113,20 +113,21 @@ if ($object->id > 0) $morehtmlref.='
    '.$langs->trans('Project') . ' '; if ($user->rights->supplier_proposal->creer) { - if ($action != 'classify') + if ($action != 'classify') { //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + $morehtmlref.=' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/supplier_proposal/info.php b/htdocs/supplier_proposal/info.php index e34ba2cd06c..ec269354af6 100644 --- a/htdocs/supplier_proposal/info.php +++ b/htdocs/supplier_proposal/info.php @@ -78,20 +78,21 @@ if (! empty($conf->projet->enabled)) $morehtmlref.='
    '.$langs->trans('Project') . ' '; if ($user->rights->supplier_proposal->creer) { - if ($action != 'classify') + if ($action != 'classify') { //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + $morehtmlref.=' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/supplier_proposal/note.php b/htdocs/supplier_proposal/note.php index b827117d7c5..447dc057979 100644 --- a/htdocs/supplier_proposal/note.php +++ b/htdocs/supplier_proposal/note.php @@ -98,20 +98,21 @@ if ($id > 0 || ! empty($ref)) $morehtmlref.='
    '.$langs->trans('Project') . ' '; if ($user->rights->supplier_proposal->creer) { - if ($action != 'classify') + if ($action != 'classify') { //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); - } + $morehtmlref.=' : '; + } + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); + } } else { if (! empty($object->fk_project)) { $proj = new Project($db); diff --git a/htdocs/supplier_proposal/tpl/linkedobjectblock.tpl.php b/htdocs/supplier_proposal/tpl/linkedobjectblock.tpl.php index 05cf99f3170..c87bb46adf3 100644 --- a/htdocs/supplier_proposal/tpl/linkedobjectblock.tpl.php +++ b/htdocs/supplier_proposal/tpl/linkedobjectblock.tpl.php @@ -24,39 +24,38 @@ if (empty($conf) || ! is_object($conf)) exit; } -?> - +print "\n"; - $objectlink) { $ilink++; $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; -?> + ?> + if ($user->rights->supplier_proposal->lire) { + $total = $total + $objectlink->total_ht; + echo price($objectlink->total_ht); + } ?> - 1) { @@ -72,6 +71,5 @@ if (count($linkedObjectBlock) > 1) - +print "\n"; From afa3ed499fdb9cca4240c21db65784d0ceec3b9b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 27 Oct 2019 15:56:20 +0100 Subject: [PATCH 630/980] Can export BOMs --- htdocs/bom/class/bom.class.php | 2 +- htdocs/core/commonfieldsinexport.inc.php | 3 ++- htdocs/core/modules/modBom.class.php | 21 +++++++++++------- htdocs/core/modules/modDav.class.php | 22 ------------------- .../core/modules/modEmailCollector.class.php | 22 ------------------- htdocs/core/modules/modTakePos.class.php | 22 ------------------- htdocs/core/modules/modWebsite.class.php | 1 - htdocs/core/modules/modZapier.class.php | 18 --------------- htdocs/exports/export.php | 8 +++++-- htdocs/langs/en_US/main.lang | 1 + htdocs/langs/en_US/mrp.lang | 3 +++ .../core/modules/modMyModule.class.php | 7 +++++- 12 files changed, 32 insertions(+), 98 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 0d59946216b..444caa2a4da 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -1036,7 +1036,7 @@ class BOMLine extends CommonObject * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",), + 'rowid' => array('type'=>'integer', 'label'=>'LineID', 'enabled'=>1, 'visible'=>-1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",), 'fk_bom' => array('type'=>'integer:BillOfMaterials:societe/class/bom.class.php', 'label'=>'BillOfMaterials', 'enabled'=>1, 'visible'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1,), 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>20, 'notnull'=>1, 'index'=>1,), 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,), diff --git a/htdocs/core/commonfieldsinexport.inc.php b/htdocs/core/commonfieldsinexport.inc.php index 9a84ae6c199..d68954fc568 100644 --- a/htdocs/core/commonfieldsinexport.inc.php +++ b/htdocs/core/commonfieldsinexport.inc.php @@ -6,6 +6,7 @@ if (empty($keyforclass) || empty($keyforclassfile) || empty($keyforelement)) dol_print_error('', 'include of file commonfieldsinexport.inc.php was done but var $keyforclass or $keyforclassfile or $keyforelement was not set'); exit; } +if (empty($keyforalias)) $keyforalias = 't'; dol_include_once($keyforclassfile); if (class_exists($keyforclass)) @@ -15,7 +16,7 @@ if (class_exists($keyforclass)) // Add common fields foreach($tmpobject->fields as $keyfield => $valuefield) { - $fieldname = 't' . '.' . $keyfield; + $fieldname = $keyforalias . '.' . $keyfield; $fieldlabel = ucfirst($valuefield['label']); $typeFilter = "Text"; $typefield=preg_replace('/\(.*$/', '', $valuefield['type']); // double(24,8) -> double diff --git a/htdocs/core/modules/modBom.class.php b/htdocs/core/modules/modBom.class.php index 92cd956a260..e333103fc8d 100644 --- a/htdocs/core/modules/modBom.class.php +++ b/htdocs/core/modules/modBom.class.php @@ -286,21 +286,26 @@ class modBom extends DolibarrModules $r=1; /* BEGIN MODULEBUILDER EXPORT BILLOFMATERIALS */ - /* - $langs->load("mrp@mrp"); + $langs->load("mrp"); $this->export_code[$r]=$this->rights_class.'_'.$r; - $this->export_label[$r]='BomLines'; // Translation key (used only if key ExportDataset_xxx_z not found) + $this->export_label[$r]='BomAndBomLines'; // Translation key (used only if key ExportDataset_xxx_z not found) $this->export_icon[$r]='bom'; - $keyforclass = 'Bom'; $keyforclassfile='/mymobule/class/bom.class.php'; $keyforelement='bom'; + $keyforclass = 'BOM'; $keyforclassfile='/bom/class/bom.class.php'; $keyforelement='bom'; include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php'; - $keyforselect='bom'; $keyforaliasextra='extra'; $keyforelement='bom'; + $keyforclass = 'BOMLine'; $keyforclassfile='/bom/class/bom.class.php'; $keyforelement='bomline'; $keyforalias='tl'; + include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php'; + unset($this->export_fields_array[$r]['tl.fk_bom']); + $keyforselect ='bom_bom'; $keyforaliasextra='extra'; $keyforelement='bom'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; - //$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields) + $keyforselect ='bom_bomline'; $keyforaliasextra='extraline'; $keyforelement='bomline'; + include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; + $this->export_dependencies_array[$r]=array('bomline'=>'tl.rowid'); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields) $this->export_sql_start[$r]='SELECT DISTINCT '; - $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'bom as t'; + $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'bom_bom as t'; + $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'bom_bomline as tl ON tl.fk_bom = t.rowid'; $this->export_sql_end[$r] .=' WHERE 1 = 1'; $this->export_sql_end[$r] .=' AND t.entity IN ('.getEntity('bom').')'; - $r++; */ + $r++; /* END MODULEBUILDER EXPORT BILLOFMATERIALS */ } diff --git a/htdocs/core/modules/modDav.class.php b/htdocs/core/modules/modDav.class.php index fb0da933df5..c4c38898566 100644 --- a/htdocs/core/modules/modDav.class.php +++ b/htdocs/core/modules/modDav.class.php @@ -255,28 +255,6 @@ class modDav extends DolibarrModules 'target'=>'', 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both END MODULEBUILDER LEFTMENU MYOBJECT */ - - - // Exports - $r=1; - - /* BEGIN MODULEBUILDER EXPORT MYOBJECT */ - /* - $langs->load("dav@dav"); - $this->export_code[$r]=$this->rights_class.'_'.$r; - $this->export_label[$r]='MyObjectLines'; // Translation key (used only if key ExportDataset_xxx_z not found) - $this->export_icon[$r]='myobject@dav'; - $keyforclass = 'MyObject'; $keyforclassfile='/mymobule/class/myobject.class.php'; $keyforelement='myobject'; - include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php'; - $keyforselect='myobject'; $keyforaliasextra='extra'; $keyforelement='myobject'; - include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; - //$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields) - $this->export_sql_start[$r]='SELECT DISTINCT '; - $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'myobject as t'; - $this->export_sql_end[$r] .=' WHERE 1 = 1'; - $this->export_sql_end[$r] .=' AND t.entity IN ('.getEntity('myobject').')'; - $r++; */ - /* END MODULEBUILDER EXPORT MYOBJECT */ } /** diff --git a/htdocs/core/modules/modEmailCollector.class.php b/htdocs/core/modules/modEmailCollector.class.php index 19ad3f512e5..3c8bbcb5aec 100644 --- a/htdocs/core/modules/modEmailCollector.class.php +++ b/htdocs/core/modules/modEmailCollector.class.php @@ -252,28 +252,6 @@ class modEmailCollector extends DolibarrModules 'target'=>'', 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both END MODULEBUILDER LEFTMENU MYOBJECT */ - - - // Exports - $r=1; - - /* BEGIN MODULEBUILDER EXPORT MYOBJECT */ - /* - $langs->load("dav@dav"); - $this->export_code[$r]=$this->rights_class.'_'.$r; - $this->export_label[$r]='MyObjectLines'; // Translation key (used only if key ExportDataset_xxx_z not found) - $this->export_icon[$r]='myobject@dav'; - $keyforclass = 'MyObject'; $keyforclassfile='/mymobule/class/myobject.class.php'; $keyforelement='myobject'; - include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php'; - $keyforselect='myobject'; $keyforaliasextra='extra'; $keyforelement='myobject'; - include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; - //$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields) - $this->export_sql_start[$r]='SELECT DISTINCT '; - $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'myobject as t'; - $this->export_sql_end[$r] .=' WHERE 1 = 1'; - $this->export_sql_end[$r] .=' AND t.entity IN ('.getEntity('myobject').')'; - $r++; */ - /* END MODULEBUILDER EXPORT MYOBJECT */ } /** diff --git a/htdocs/core/modules/modTakePos.class.php b/htdocs/core/modules/modTakePos.class.php index 8c92d97710d..7024a151bb9 100644 --- a/htdocs/core/modules/modTakePos.class.php +++ b/htdocs/core/modules/modTakePos.class.php @@ -253,28 +253,6 @@ class modTakePos extends DolibarrModules 'target'=>'', 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both END MODULEBUILDER LEFTMENU MYOBJECT */ - - - // Exports - $r=1; - - /* BEGIN MODULEBUILDER EXPORT MYOBJECT */ - /* - $langs->load("cashdesk"); - $this->export_code[$r]=$this->rights_class.'_'.$r; - $this->export_label[$r]='MyObjectLines'; // Translation key (used only if key ExportDataset_xxx_z not found) - $this->export_icon[$r]='myobject@takepos'; - $keyforclass = 'MyObject'; $keyforclassfile='/mymobule/class/myobject.class.php'; $keyforelement='myobject'; - include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php'; - $keyforselect='myobject'; $keyforaliasextra='extra'; $keyforelement='myobject'; - include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; - //$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields) - $this->export_sql_start[$r]='SELECT DISTINCT '; - $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'myobject as t'; - $this->export_sql_end[$r] .=' WHERE 1 = 1'; - $this->export_sql_end[$r] .=' AND t.entity IN ('.getEntity('myobject').')'; - $r++; */ - /* END MODULEBUILDER EXPORT MYOBJECT */ } /** diff --git a/htdocs/core/modules/modWebsite.class.php b/htdocs/core/modules/modWebsite.class.php index 7c11a4b98b0..d4ffc02aaa8 100644 --- a/htdocs/core/modules/modWebsite.class.php +++ b/htdocs/core/modules/modWebsite.class.php @@ -134,7 +134,6 @@ class modWebsite extends DolibarrModules include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php'; //$keyforselect='myobject'; $keyforelement='myobject'; $keyforaliasextra='extra'; //include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; - //$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields) $this->export_sql_start[$r]='SELECT DISTINCT '; $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'website_page as t, '.MAIN_DB_PREFIX.'website as p'; $this->export_sql_end[$r] .=' WHERE t.fk_website = p.rowid'; diff --git a/htdocs/core/modules/modZapier.class.php b/htdocs/core/modules/modZapier.class.php index fe8f43416f3..773298e9959 100644 --- a/htdocs/core/modules/modZapier.class.php +++ b/htdocs/core/modules/modZapier.class.php @@ -316,24 +316,6 @@ class modZapier extends DolibarrModules 'user'=>2, // 0=Menu for internal users, 1=external users, 2=both ); */ - // Exports - $r=1; - /* EXPORT */ - /* - $langs->load("zapier@zapier"); - $this->export_code[$r]=$this->rights_class.'_'.$r; - $this->export_label[$r]='MyObjectLines'; // Translation key (used only if key ExportDataset_xxx_z not found) - $this->export_icon[$r]='myobject@zapier'; - $keyforclass = 'MyObject'; $keyforclassfile='/mymobule/class/myobject.class.php'; $keyforelement='myobject'; - include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php'; - $keyforselect='myobject'; $keyforaliasextra='extra'; $keyforelement='myobject'; - include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; - //$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields) - $this->export_sql_start[$r]='SELECT DISTINCT '; - $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'myobject as t'; - $this->export_sql_end[$r] .=' WHERE 1 = 1'; - $this->export_sql_end[$r] .=' AND t.entity IN ('.getEntity('myobject').')'; - $r++; */ } /** diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php index 6190de933d7..ed6966eb083 100644 --- a/htdocs/exports/export.php +++ b/htdocs/exports/export.php @@ -73,7 +73,9 @@ $entitytoicon = array( 'expensereport_line'=> 'trip', 'holiday' => 'holiday', 'contract_line' => 'contract', - 'translation' => 'generic' + 'translation' => 'generic', + 'bomm' => 'bom', + 'bomline' => 'bom' ); // Translation code @@ -120,7 +122,9 @@ $entitytolang = array( 'holiday' => 'TitreRequestCP', 'contract' => 'Contract', 'contract_line'=> 'ContractLine', - 'translation' => 'Translation' + 'translation' => 'Translation', + 'bom' => 'BOM', + 'bomline' => 'BOMLine' ); $array_selected=isset($_SESSION["export_selected_fields"])?$_SESSION["export_selected_fields"]:array(); diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 0b47f9b5e54..8bd954b306b 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -114,6 +114,7 @@ InformationToHelpDiagnose=This information can be useful for diagnostic purposes MoreInformation=More information TechnicalInformation=Technical information TechnicalID=Technical ID +LineID=Line ID NotePublic=Note (public) NotePrivate=Note (private) PrecisionUnitIsLimitedToXDecimals=Dolibarr was setup to limit precision of unit prices to %s decimals. diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index 08073ac4364..66aea444ca4 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -34,6 +34,9 @@ ConfirmCloseBom=Are you sure you want to cancel this BOM (you won't be able to u ConfirmReopenBom=Are you sure you want to re-open this BOM (you will be able to use it to build new Manufacturing Orders) StatusMOProduced=Produced QtyFrozen=Frozen Qty +QuantityFrozen=Frozen Quantity QuantityConsumedInvariable=When this flag is set, the quantity consumed is always the value defined and is not relative to the quantity produced. DisableStockChange=Disable stock change DisableStockChangeHelp=When this flag is set, there is no stock change on this product, whatever is the quantity produced +BomAndBomLines=Bills Of Material and lines +BOMLine=Line of BOM \ No newline at end of file diff --git a/htdocs/modulebuilder/template/core/modules/modMyModule.class.php b/htdocs/modulebuilder/template/core/modules/modMyModule.class.php index 026f46fb925..6b522a45364 100644 --- a/htdocs/modulebuilder/template/core/modules/modMyModule.class.php +++ b/htdocs/modulebuilder/template/core/modules/modMyModule.class.php @@ -336,11 +336,16 @@ class modMyModule extends DolibarrModules $this->export_icon[$r]='myobject@mymodule'; $keyforclass = 'MyObject'; $keyforclassfile='/mymobule/class/myobject.class.php'; $keyforelement='myobject'; include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php'; + //$keyforclass = 'MyObjectLine'; $keyforclassfile='/mymodule/class/myobject.class.php'; $keyforelement='myobjectline'; $keyforalias='tl'; + //include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php'; $keyforselect='myobject'; $keyforaliasextra='extra'; $keyforelement='myobject'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; - //$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields) + //$keyforselect='myobjectline'; $keyforaliasextra='extraline'; $keyforelement='myobjectline'; + //include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; + //$this->export_dependencies_array[$r]=array('myobjectline'=>array('tl.rowid','tl.ref')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields) $this->export_sql_start[$r]='SELECT DISTINCT '; $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'myobject as t'; + //$this->export_sql_end[$r] =' LEFT JOIN '.MAIN_DB_PREFIX.'myobject_line as tl ON tl.fk_myobject = t.rowid'; $this->export_sql_end[$r] .=' WHERE 1 = 1'; $this->export_sql_end[$r] .=' AND t.entity IN ('.getEntity('myobject').')'; $r++; */ From 7f1b67f0e43064d1dc44cf88340b732e99fc72d7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 27 Oct 2019 16:28:03 +0100 Subject: [PATCH 631/980] Add warehouse for production on MO --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 3 ++- htdocs/install/mysql/tables/llx_mrp_mo.sql | 3 ++- htdocs/langs/en_US/mrp.lang | 3 ++- htdocs/modulebuilder/template/class/myobject.class.php | 2 +- htdocs/mrp/class/mo.class.php | 4 +++- htdocs/mrp/mo_card.php | 2 +- 6 files changed, 11 insertions(+), 6 deletions(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 97383de9051..9f0ee2c5827 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -368,7 +368,8 @@ CREATE TABLE llx_mrp_mo( ref varchar(128) DEFAULT '(PROV)' NOT NULL, entity integer DEFAULT 1 NOT NULL, label varchar(255), - qty real NOT NULL, + qty real NOT NULL, + fk_warehouse integer, fk_soc integer, note_public text, note_private text, diff --git a/htdocs/install/mysql/tables/llx_mrp_mo.sql b/htdocs/install/mysql/tables/llx_mrp_mo.sql index dbb8b0faa01..52a046191dc 100644 --- a/htdocs/install/mysql/tables/llx_mrp_mo.sql +++ b/htdocs/install/mysql/tables/llx_mrp_mo.sql @@ -20,7 +20,8 @@ CREATE TABLE llx_mrp_mo( ref varchar(128) DEFAULT '(PROV)' NOT NULL, entity integer DEFAULT 1 NOT NULL, label varchar(255), - qty real NOT NULL, + qty real NOT NULL, + fk_warehouse integer, fk_soc integer, note_public text, note_private text, diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index 66aea444ca4..1de5f40c79c 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -39,4 +39,5 @@ QuantityConsumedInvariable=When this flag is set, the quantity consumed is alway DisableStockChange=Disable stock change DisableStockChangeHelp=When this flag is set, there is no stock change on this product, whatever is the quantity produced BomAndBomLines=Bills Of Material and lines -BOMLine=Line of BOM \ No newline at end of file +BOMLine=Line of BOM +WarehouseForProduction=Warehouse for production \ No newline at end of file diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 4fbdd101c35..41d0af33d46 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -71,7 +71,7 @@ class MyObject extends CommonObject * '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) * '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. diff --git a/htdocs/mrp/class/mo.class.php b/htdocs/mrp/class/mo.class.php index b013d300845..0525f71ab5f 100644 --- a/htdocs/mrp/class/mo.class.php +++ b/htdocs/mrp/class/mo.class.php @@ -97,7 +97,8 @@ class Mo extends CommonObject 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'notnull'=>-1, 'searchall'=>1, 'showoncombobox'=>'1',), 'qty' => array('type'=>'real', 'label'=>'QtyToProduce', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'notnull'=>1, 'comment'=>"Qty to produce",), 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php:1', 'label'=>'ThirdParty', 'enabled'=>1, 'visible'=>-1, 'position'=>50, 'notnull'=>-1, 'index'=>1), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>61, 'notnull'=>-1,), + 'fk_warehouse' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php:0', 'label'=>'WarehouseForProduction', 'enabled'=>1, 'visible'=>-1, 'position'=>52), + 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>61, 'notnull'=>-1,), 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>62, 'notnull'=>-1,), 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>500, 'notnull'=>1,), 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'position'=>501, 'notnull'=>-1,), @@ -116,6 +117,7 @@ class Mo extends CommonObject public $entity; public $label; public $qty; + public $fk_warehouse; public $fk_soc; public $note_public; public $note_private; diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php index 7a26660d6dc..356ea7bb07f 100644 --- a/htdocs/mrp/mo_card.php +++ b/htdocs/mrp/mo_card.php @@ -369,7 +369,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print '
    trans("Shipment"); ?> getNomUrl(1); ?> date_delivery, 'day'); ?> rights->expedition->lire) { - $total = $total + $objectlink->total_ht; - echo price($objectlink->total_ht); - } ?> getLibStatut(3); ?> $objectlink) } ?>
    trans("SupplierProposal"); ?> trans("ShowSupplierProposal"), "supplier_proposal").' '.$objectlink->ref; ?> datec, 'day'); ?> rights->supplier_proposal->lire) { - $total = $total + $objectlink->total_ht; - echo price($objectlink->total_ht); - } ?> getLibStatut(3); ?> ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?>
    '."\n"; // Common attributes - $keyforbreak='qty'; + $keyforbreak='fk_warehouse'; unset($object->fields['fk_project']); unset($object->fields['fk_soc']); include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_view.tpl.php'; From 8f6d38ee82bac82eef17f2dc48cfd544a966cd34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 17:01:23 +0100 Subject: [PATCH 632/980] clean indent --- dev/setup/codesniffer/ruleset.xml | 4 +- htdocs/core/actions_builddoc.inc.php | 12 +- htdocs/core/actions_linkedfiles.inc.php | 123 +-- htdocs/core/actions_massactions.inc.php | 2 +- htdocs/core/db/mssql.class.php | 27 +- htdocs/core/db/pgsql.class.php | 47 +- htdocs/core/db/sqlite3.class.php | 6 +- htdocs/core/js/lib_head.js.php | 2 +- htdocs/core/login/functions_ldap.php | 59 +- htdocs/core/menus/standard/eldy_menu.php | 2 +- htdocs/core/menus/standard/empty.php | 14 +- .../doc/doc_generic_order_odt.modules.php | 2 +- .../commande/doc/pdf_einstein.modules.php | 176 ++-- .../commande/doc/pdf_eratosthene.modules.php | 181 ++-- .../doc/doc_generic_contract_odt.modules.php | 4 +- .../modules/dons/html_cerfafr.modules.php | 70 +- .../doc/doc_generic_shipment_odt.modules.php | 2 +- .../expedition/doc/pdf_rouget.modules.php | 39 +- .../expensereport/mod_expensereport_jade.php | 26 +- .../doc/doc_generic_invoice_odt.modules.php | 2 +- .../modules/facture/doc/pdf_crabe.modules.php | 171 ++-- .../facture/doc/pdf_sponge.modules.php | 309 +++--- .../fichinter/doc/pdf_soleil.modules.php | 4 +- .../modules/import/import_csv.modules.php | 4 +- .../core/modules/mailings/fraise.modules.php | 8 +- .../modules/mailings/thirdparties.modules.php | 41 +- htdocs/core/modules/modComptabilite.class.php | 21 +- htdocs/core/modules/modECM.class.php | 8 +- htdocs/core/modules/modExpedition.class.php | 9 +- htdocs/core/modules/modReception.class.php | 9 +- htdocs/core/modules/modSociete.class.php | 10 +- htdocs/core/modules/modStripe.class.php | 8 +- htdocs/core/modules/modVariants.class.php | 2 +- htdocs/core/modules/modWebsite.class.php | 18 +- .../product/doc/pdf_standard.modules.php | 3 +- .../project/doc/pdf_beluga.modules.php | 2 +- .../modules/project/mod_project_simple.php | 14 +- .../modules/project/mod_project_universal.php | 14 +- .../modules/project/task/mod_task_simple.php | 14 +- .../project/task/mod_task_universal.php | 14 +- .../doc/doc_generic_proposal_odt.modules.php | 2 +- .../modules/propale/doc/pdf_azur.modules.php | 184 ++-- .../modules/propale/doc/pdf_cyan.modules.php | 184 ++-- .../doc/doc_generic_reception_odt.modules.php | 2 +- .../reception/doc/pdf_squille.modules.php | 50 +- .../societe/doc/doc_generic_odt.modules.php | 32 +- .../doc/doc_generic_stock_odt.modules.php | 2 +- .../pdf/pdf_canelle.modules.php | 78 +- ...doc_generic_supplier_order_odt.modules.php | 4 +- .../doc/pdf_standard.modules.php | 4 +- ..._generic_supplier_proposal_odt.modules.php | 2 +- .../doc/pdf_aurore.modules.php | 192 ++-- htdocs/core/tpl/advtarget.tpl.php | 921 +++++++++--------- htdocs/core/tpl/contacts.tpl.php | 147 ++- htdocs/core/tpl/login.tpl.php | 28 +- htdocs/core/tpl/objectline_create.tpl.php | 488 +++++----- htdocs/core/tpl/objectline_edit.tpl.php | 38 +- htdocs/core/tpl/objectline_title.tpl.php | 24 +- htdocs/core/tpl/objectline_view.tpl.php | 491 +++++----- htdocs/core/tpl/passwordforgotten.tpl.php | 8 +- htdocs/expensereport/ajax/ajaxprojet.php | 4 +- .../class/expensereport.class.php | 40 +- htdocs/expensereport/list.php | 16 +- .../tpl/linkedobjectblock.tpl.php | 23 +- htdocs/fichinter/card.php | 27 +- htdocs/fichinter/contact.php | 29 +- htdocs/fichinter/document.php | 31 +- htdocs/fichinter/note.php | 29 +- .../fichinter/tpl/linkedobjectblock.tpl.php | 13 +- htdocs/index.php | 89 +- htdocs/salaries/card.php | 25 +- htdocs/societe/admin/societe.php | 22 +- .../canvas/company/tpl/card_create.tpl.php | 15 +- .../canvas/company/tpl/card_edit.tpl.php | 11 +- .../canvas/company/tpl/card_view.tpl.php | 4 +- .../canvas/individual/tpl/card_create.tpl.php | 15 +- .../canvas/individual/tpl/card_edit.tpl.php | 4 +- .../canvas/individual/tpl/card_view.tpl.php | 13 +- htdocs/societe/card.php | 18 +- .../societe/class/api_thirdparties.class.php | 100 +- .../class/companybankaccount.class.php | 34 +- htdocs/societe/class/societe.class.php | 26 +- htdocs/societe/list.php | 8 +- htdocs/societe/paymentmodes.php | 141 +-- htdocs/stripe/admin/stripe.php | 42 +- htdocs/stripe/charge.php | 52 +- htdocs/stripe/class/stripe.class.php | 10 +- htdocs/stripe/payment.php | 22 +- 88 files changed, 2591 insertions(+), 2636 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 8c01eea6d99..015733ed95f 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -186,7 +186,7 @@ - + diff --git a/htdocs/core/actions_builddoc.inc.php b/htdocs/core/actions_builddoc.inc.php index 5402236f47e..92bc2ff18f6 100644 --- a/htdocs/core/actions_builddoc.inc.php +++ b/htdocs/core/actions_builddoc.inc.php @@ -57,12 +57,12 @@ if ($action == 'builddoc' && $permissioncreate) // Special case to force bank account //if (property_exists($object, 'fk_bank')) //{ - if (GETPOST('fk_bank', 'int')) { - // this field may come from an external module - $object->fk_bank = GETPOST('fk_bank', 'int'); - } elseif (! empty($object->fk_account)) { - $object->fk_bank = $object->fk_account; - } + if (GETPOST('fk_bank', 'int')) { + // this field may come from an external module + $object->fk_bank = GETPOST('fk_bank', 'int'); + } elseif (! empty($object->fk_account)) { + $object->fk_bank = $object->fk_account; + } //} $outputlangs = $langs; diff --git a/htdocs/core/actions_linkedfiles.inc.php b/htdocs/core/actions_linkedfiles.inc.php index 760a54bc7b2..90c93f6177b 100644 --- a/htdocs/core/actions_linkedfiles.inc.php +++ b/htdocs/core/actions_linkedfiles.inc.php @@ -81,78 +81,79 @@ elseif (GETPOST('linkit', 'none') && ! empty($conf->global->MAIN_UPLOAD_DOC)) // Delete file/link if ($action == 'confirm_deletefile' && $confirm == 'yes') { - $urlfile = GETPOST('urlfile', 'alpha', 0, null, null, 1); // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP). - if (GETPOST('section', 'alpha')) // For a delete from the ECM module, upload_dir is ECM root dir and urlfile contains relative path from upload_dir + $urlfile = GETPOST('urlfile', 'alpha', 0, null, null, 1); // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP). + if (GETPOST('section', 'alpha')) { + // For a delete from the ECM module, upload_dir is ECM root dir and urlfile contains relative path from upload_dir + $file = $upload_dir . (preg_match('/\/$/', $upload_dir) ? '' : '/') . $urlfile; + } + else // For a delete from the file manager into another module, or from documents pages, upload_dir contains already path to file from module dir, so we clean path into urlfile. + { + $urlfile=basename($urlfile); + $file = $upload_dir . (preg_match('/\/$/', $upload_dir) ? '' : '/') . $urlfile; + if (! empty($upload_dirold)) $fileold = $upload_dirold . "/" . $urlfile; + } + $linkid = GETPOST('linkid', 'int'); + + if ($urlfile) { + // delete of a file + $dir = dirname($file).'/'; // Chemin du dossier contenant l'image d'origine + $dirthumb = $dir.'/thumbs/'; // Chemin du dossier contenant la vignette (if file is an image) + + $ret = dol_delete_file($file, 0, 0, 0, (is_object($object)?$object:null)); + if (! empty($fileold)) dol_delete_file($fileold, 0, 0, 0, (is_object($object)?$object:null)); // Delete file using old path + + // Si elle existe, on efface la vignette + if (preg_match('/(\.jpg|\.jpeg|\.bmp|\.gif|\.png|\.tiff)$/i', $file, $regs)) { - $file = $upload_dir . (preg_match('/\/$/', $upload_dir) ? '' : '/') . $urlfile; - } - else // For a delete from the file manager into another module, or from documents pages, upload_dir contains already path to file from module dir, so we clean path into urlfile. - { - $urlfile=basename($urlfile); - $file = $upload_dir . (preg_match('/\/$/', $upload_dir) ? '' : '/') . $urlfile; - if (! empty($upload_dirold)) $fileold = $upload_dirold . "/" . $urlfile; - } - $linkid = GETPOST('linkid', 'int'); - - if ($urlfile) // delete of a file - { - $dir = dirname($file).'/'; // Chemin du dossier contenant l'image d'origine - $dirthumb = $dir.'/thumbs/'; // Chemin du dossier contenant la vignette (if file is an image) - - $ret = dol_delete_file($file, 0, 0, 0, (is_object($object)?$object:null)); - if (! empty($fileold)) dol_delete_file($fileold, 0, 0, 0, (is_object($object)?$object:null)); // Delete file using old path - - // Si elle existe, on efface la vignette - if (preg_match('/(\.jpg|\.jpeg|\.bmp|\.gif|\.png|\.tiff)$/i', $file, $regs)) + $photo_vignette=basename(preg_replace('/'.$regs[0].'/i', '', $file).'_small'.$regs[0]); + if (file_exists(dol_osencode($dirthumb.$photo_vignette))) { - $photo_vignette=basename(preg_replace('/'.$regs[0].'/i', '', $file).'_small'.$regs[0]); - if (file_exists(dol_osencode($dirthumb.$photo_vignette))) - { - dol_delete_file($dirthumb.$photo_vignette); - } - - $photo_vignette=basename(preg_replace('/'.$regs[0].'/i', '', $file).'_mini'.$regs[0]); - if (file_exists(dol_osencode($dirthumb.$photo_vignette))) - { - dol_delete_file($dirthumb.$photo_vignette); - } + dol_delete_file($dirthumb.$photo_vignette); } - if ($ret) setEventMessages($langs->trans("FileWasRemoved", $urlfile), null, 'mesgs'); - else setEventMessages($langs->trans("ErrorFailToDeleteFile", $urlfile), null, 'errors'); + $photo_vignette=basename(preg_replace('/'.$regs[0].'/i', '', $file).'_mini'.$regs[0]); + if (file_exists(dol_osencode($dirthumb.$photo_vignette))) + { + dol_delete_file($dirthumb.$photo_vignette); + } } - elseif ($linkid) // delete of external link - { - require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; - $link = new Link($db); - $link->fetch($linkid); - $res = $link->delete($user); - $langs->load('link'); - if ($res > 0) { - setEventMessages($langs->trans("LinkRemoved", $link->label), null, 'mesgs'); + if ($ret) { + setEventMessages($langs->trans("FileWasRemoved", $urlfile), null, 'mesgs'); + } else { + setEventMessages($langs->trans("ErrorFailToDeleteFile", $urlfile), null, 'errors'); + } + } + elseif ($linkid) // delete of external link + { + require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; + $link = new Link($db); + $link->fetch($linkid); + $res = $link->delete($user); + + $langs->load('link'); + if ($res > 0) { + setEventMessages($langs->trans("LinkRemoved", $link->label), null, 'mesgs'); + } else { + if (count($link->errors)) { + setEventMessages('', $link->errors, 'errors'); } else { - if (count($link->errors)) { - setEventMessages('', $link->errors, 'errors'); - } else { - setEventMessages($langs->trans("ErrorFailedToDeleteLink", $link->label), null, 'errors'); - } + setEventMessages($langs->trans("ErrorFailedToDeleteLink", $link->label), null, 'errors'); } } + } - if (is_object($object) && $object->id > 0) - { - if ($backtopage) - { - header('Location: ' . $backtopage); - exit; - } - else - { - header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id.(GETPOST('section_dir', 'alpha')?'§ion_dir='.urlencode(GETPOST('section_dir', 'alpha')):'').(!empty($withproject)?'&withproject=1':'')); - exit; - } + if (is_object($object) && $object->id > 0) { + if ($backtopage) { + header('Location: ' . $backtopage); + exit; } + else + { + header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id.(GETPOST('section_dir', 'alpha')?'§ion_dir='.urlencode(GETPOST('section_dir', 'alpha')):'').(!empty($withproject)?'&withproject=1':'')); + exit; + } + } } elseif ($action == 'confirm_updateline' && GETPOST('save', 'alpha') && GETPOST('link', 'alpha')) { diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 7d8d621ff92..febcba244c0 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -1085,7 +1085,7 @@ if (! $error && $massaction == "builddoc" && $permtoread && ! GETPOST('button_se } else { - setEventMessages($langs->trans('NoPDFAvailableForDocGenAmongChecked'), null, 'errors'); + setEventMessages($langs->trans('NoPDFAvailableForDocGenAmongChecked'), null, 'errors'); } } } diff --git a/htdocs/core/db/mssql.class.php b/htdocs/core/db/mssql.class.php index 51a77b87c30..2c489b25181 100644 --- a/htdocs/core/db/mssql.class.php +++ b/htdocs/core/db/mssql.class.php @@ -220,11 +220,10 @@ class DoliDBMssql extends DoliDB */ public function close() { - if ($this->db) - { - if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened, LOG_ERR); - $this->connected=false; - return mssql_close($this->db); + if ($this->db) { + if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened, LOG_ERR); + $this->connected=false; + return mssql_close($this->db); } return false; } @@ -407,15 +406,15 @@ class DoliDBMssql extends DoliDB // Inserer la date en parametre et le reste de la requete $query = $newquery." DATEPART(week, ".$extractvalue.$endofquery; } - if (preg_match('/^insert\h+(?:INTO)?\h*(\w+?)\h*\(.*\b(?:row)?id\b.*\)\h+VALUES/i', $query, $matches)) - { - //var_dump($query); - //var_dump($matches); - //if (stripos($query,'llx_c_departements') !== false) var_dump($query); - $sql='SET IDENTITY_INSERT ['.trim($matches[1]).'] ON;'; - @mssql_query($sql, $this->db); - $post_query='SET IDENTITY_INSERT ['.trim($matches[1]).'] OFF;'; - } + if (preg_match('/^insert\h+(?:INTO)?\h*(\w+?)\h*\(.*\b(?:row)?id\b.*\)\h+VALUES/i', $query, $matches)) + { + //var_dump($query); + //var_dump($matches); + //if (stripos($query,'llx_c_departements') !== false) var_dump($query); + $sql='SET IDENTITY_INSERT ['.trim($matches[1]).'] ON;'; + @mssql_query($sql, $this->db); + $post_query='SET IDENTITY_INSERT ['.trim($matches[1]).'] OFF;'; + } } //print ""; diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php index 2347d3d77e5..2388b60c7e1 100644 --- a/htdocs/core/db/pgsql.class.php +++ b/htdocs/core/db/pgsql.class.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT .'/core/db/DoliDB.class.php'; class DoliDBPgsql extends DoliDB { //! Database type - public $type='pgsql'; // Name of manager + public $type='pgsql'; // Name of manager //! Database label const LABEL='PostgreSQL'; // Label of manager //! Charset @@ -174,9 +174,9 @@ class DoliDBPgsql extends DoliDB if ($type == 'auto') { - if (preg_match('/ALTER TABLE/i', $line)) $type='dml'; - elseif (preg_match('/CREATE TABLE/i', $line)) $type='dml'; - elseif (preg_match('/DROP TABLE/i', $line)) $type='dml'; + if (preg_match('/ALTER TABLE/i', $line)) $type='dml'; + elseif (preg_match('/CREATE TABLE/i', $line)) $type='dml'; + elseif (preg_match('/DROP TABLE/i', $line)) $type='dml'; } $line=preg_replace('/ as signed\)/i', ' as integer)', $line); @@ -457,8 +457,8 @@ class DoliDBPgsql extends DoliDB $resql=$this->query('SHOW server_version'); if ($resql) { - $liste=$this->fetch_array($resql); - return $liste['server_version']; + $liste=$this->fetch_array($resql); + return $liste['server_version']; } return ''; } @@ -483,9 +483,9 @@ class DoliDBPgsql extends DoliDB { if ($this->db) { - if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened, LOG_ERR); - $this->connected=false; - return pg_close($this->db); + if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened, LOG_ERR); + $this->connected=false; + return pg_close($this->db); } return false; } @@ -955,10 +955,10 @@ class DoliDBPgsql extends DoliDB $result = $this->query($sql); if ($result) { - while($row = $this->fetch_row($result)) - { + while($row = $this->fetch_row($result)) + { $infotables[] = $row; - } + } } return $infotables; } @@ -1127,21 +1127,24 @@ class DoliDBPgsql extends DoliDB $sql= "ALTER TABLE ".$table." ADD ".$field_name." "; $sql .= $field_desc['type']; if (preg_match("/^[^\s]/i", $field_desc['value'])) - if (! in_array($field_desc['type'], array('int','date','datetime'))) - { - $sql.= "(".$field_desc['value'].")"; - } + if (! in_array($field_desc['type'], array('int','date','datetime'))) + { + $sql.= "(".$field_desc['value'].")"; + } if (preg_match("/^[^\s]/i", $field_desc['attribute'])) $sql .= " ".$field_desc['attribute']; if (preg_match("/^[^\s]/i", $field_desc['null'])) $sql .= " ".$field_desc['null']; - if (preg_match("/^[^\s]/i", $field_desc['default'])) - if (preg_match("/null/i", $field_desc['default'])) + if (preg_match("/^[^\s]/i", $field_desc['default'])) { + if (preg_match("/null/i", $field_desc['default'])) { $sql .= " default ".$field_desc['default']; - else - $sql .= " default '".$field_desc['default']."'"; - if (preg_match("/^[^\s]/i", $field_desc['extra'])) - $sql .= " ".$field_desc['extra']; + } else { + $sql .= " default '".$field_desc['default']."'"; + } + } + if (preg_match("/^[^\s]/i", $field_desc['extra'])) { + $sql .= " ".$field_desc['extra']; + } $sql .= " ".$field_position; dol_syslog($sql, LOG_DEBUG); diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index 29308ab7b77..af529e97fae 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -149,9 +149,9 @@ class DoliDBSqlite3 extends DoliDB { if ($type == 'auto') { - if (preg_match('/ALTER TABLE/i', $line)) $type='dml'; - elseif (preg_match('/CREATE TABLE/i', $line)) $type='dml'; - elseif (preg_match('/DROP TABLE/i', $line)) $type='dml'; + if (preg_match('/ALTER TABLE/i', $line)) $type='dml'; + elseif (preg_match('/CREATE TABLE/i', $line)) $type='dml'; + elseif (preg_match('/DROP TABLE/i', $line)) $type='dml'; } if ($type == 'dml') diff --git a/htdocs/core/js/lib_head.js.php b/htdocs/core/js/lib_head.js.php index 54c0f02abde..103e3df3c5b 100644 --- a/htdocs/core/js/lib_head.js.php +++ b/htdocs/core/js/lib_head.js.php @@ -1081,7 +1081,7 @@ function price2numjs(amount) { global->MAIN_DISABLE_JQUERY_JNOTIFY) && ! defined('DISABLE_JQUERY_JNOTIFY')) { -?> + ?> // Defined properties for JNotify $(document).ready(function() { if (typeof $.jnotify == 'function') diff --git a/htdocs/core/login/functions_ldap.php b/htdocs/core/login/functions_ldap.php index 57a26523c12..63a4c6d01e6 100644 --- a/htdocs/core/login/functions_ldap.php +++ b/htdocs/core/login/functions_ldap.php @@ -156,41 +156,41 @@ function check_user_password_ldap($usertotest, $passwordtotest, $entitytotest) // ldap2dolibarr synchronisation if ($login && ! empty($conf->ldap->enabled) && $conf->global->LDAP_SYNCHRO_ACTIVE == 'ldap2dolibarr') // ldap2dolibarr synchronisation { - dol_syslog("functions_ldap::check_user_password_ldap Sync ldap2dolibarr"); + dol_syslog("functions_ldap::check_user_password_ldap Sync ldap2dolibarr"); - // On charge les attributs du user ldap - if ($ldapdebug) print "DEBUG: login ldap = ".$login."
    \n"; - $resultFetchLdapUser = $ldap->fetch($login, $userSearchFilter); + // On charge les attributs du user ldap + if ($ldapdebug) print "DEBUG: login ldap = ".$login."
    \n"; + $resultFetchLdapUser = $ldap->fetch($login, $userSearchFilter); - if ($ldapdebug) print "DEBUG: UACF = ".join(',', $ldap->uacf)."
    \n"; - if ($ldapdebug) print "DEBUG: pwdLastSet = ".dol_print_date($ldap->pwdlastset, 'day')."
    \n"; - if ($ldapdebug) print "DEBUG: badPasswordTime = ".dol_print_date($ldap->badpwdtime, 'day')."
    \n"; + if ($ldapdebug) print "DEBUG: UACF = ".join(',', $ldap->uacf)."
    \n"; + if ($ldapdebug) print "DEBUG: pwdLastSet = ".dol_print_date($ldap->pwdlastset, 'day')."
    \n"; + if ($ldapdebug) print "DEBUG: badPasswordTime = ".dol_print_date($ldap->badpwdtime, 'day')."
    \n"; - // On recherche le user dolibarr en fonction de son SID ldap (only for Active Directory) - $sid = null; - if ($conf->global->LDAP_SERVER_TYPE == "activedirectory") + // On recherche le user dolibarr en fonction de son SID ldap (only for Active Directory) + $sid = null; + if ($conf->global->LDAP_SERVER_TYPE == "activedirectory") + { + $sid = $ldap->getObjectSid($login); + if ($ldapdebug) print "DEBUG: sid = ".$sid."
    \n"; + } + + $usertmp=new User($db); + $resultFetchUser=$usertmp->fetch('', $login, $sid); + if ($resultFetchUser > 0) + { + dol_syslog("functions_ldap::check_user_password_ldap Sync user found user id=".$usertmp->id); + // On verifie si le login a change et on met a jour les attributs dolibarr + + if ($usertmp->login != $ldap->login && $ldap->login) { - $sid = $ldap->getObjectSid($login); - if ($ldapdebug) print "DEBUG: sid = ".$sid."
    \n"; + $usertmp->login = $ldap->login; + $usertmp->update($usertmp); + // TODO Que faire si update echoue car on update avec un login deja existant. } - $usertmp=new User($db); - $resultFetchUser=$usertmp->fetch('', $login, $sid); - if ($resultFetchUser > 0) - { - dol_syslog("functions_ldap::check_user_password_ldap Sync user found user id=".$usertmp->id); - // On verifie si le login a change et on met a jour les attributs dolibarr - - if ($usertmp->login != $ldap->login && $ldap->login) - { - $usertmp->login = $ldap->login; - $usertmp->update($usertmp); - // TODO Que faire si update echoue car on update avec un login deja existant. - } - - //$resultUpdate = $usertmp->update_ldap2dolibarr($ldap); - } - unset($usertmp); + //$resultUpdate = $usertmp->update_ldap2dolibarr($ldap); + } + unset($usertmp); } if (! empty($conf->multicompany->enabled)) // We must check entity (even if sync is not active) @@ -240,7 +240,6 @@ function check_user_password_ldap($usertotest, $passwordtotest, $entitytotest) // Load translation files required by the page $langs->loadLangs(array('main', 'other', 'errors')); -; $_SESSION["dol_loginmesg"]=($ldap->error?$ldap->error:$langs->trans("ErrorBadLoginPassword")); } diff --git a/htdocs/core/menus/standard/eldy_menu.php b/htdocs/core/menus/standard/eldy_menu.php index 089194aec2a..b5913bbde20 100644 --- a/htdocs/core/menus/standard/eldy_menu.php +++ b/htdocs/core/menus/standard/eldy_menu.php @@ -79,7 +79,7 @@ class MenuManager $_SESSION["leftmenuopened"]=""; } else - { + { // On va le chercher en session si non defini par le lien $mainmenu=isset($_SESSION["mainmenu"])?$_SESSION["mainmenu"]:''; } diff --git a/htdocs/core/menus/standard/empty.php b/htdocs/core/menus/standard/empty.php index 11d6ac9dd34..f3f0a5795c5 100644 --- a/htdocs/core/menus/standard/empty.php +++ b/htdocs/core/menus/standard/empty.php @@ -307,10 +307,12 @@ class MenuManager print $val2['titre']; if ($relurl2) { - if ($val2['enabled']) // Allowed - print ''; - else - print ''; + if ($val2['enabled']) { + // Allowed + print ''; + } else { + print ''; + } } print ''."\n"; } @@ -448,7 +450,7 @@ class MenuManager unset($this->menu->liste); } } -/* + /* if ($mode == 'jmobile') { foreach($this->menu->liste as $key => $val) // $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu' @@ -506,7 +508,7 @@ class MenuManager break; // Only first menu entry (so home) } } -*/ + */ unset($this->menu); return $res; diff --git a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php index f66fc13770c..c90eca21ae4 100644 --- a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php +++ b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php @@ -486,7 +486,7 @@ class doc_generic_order_odt extends ModelePDFCommandes } else { try { - $odfHandler->saveToDisk($file); + $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error=$e->getMessage(); dol_syslog($e->getMessage(), LOG_INFO); diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index c101f73fca0..5d69840644e 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -912,66 +912,64 @@ class pdf_einstein extends ModelePDFCommandes //Local tax 1 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} // VAT foreach($this->tva as $tvakey => $tvaval) @@ -1001,67 +999,67 @@ class pdf_einstein extends ModelePDFCommandes //Local tax 1 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey != 0) // On affiche pas taux 0 { - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey != 0) // On affiche pas taux 0 { - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} // Total TTC diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index d3f7f3016a0..30b8604a298 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -1,13 +1,13 @@ - * Copyright (C) 2005-2012 Regis Houssin +/* Copyright (C) 2004-2014 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2008 Raphael Bertrand * Copyright (C) 2010-2013 Juanjo Menent * Copyright (C) 2012 Christophe Battarel * Copyright (C) 2012 Cedric Salvador * Copyright (C) 2015 Marcos García * Copyright (C) 2017 Ferran Marcet - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2019 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 @@ -1099,66 +1099,63 @@ class pdf_eratosthene extends ModelePDFCommandes //Local tax 1 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} // VAT foreach($this->tva as $tvakey => $tvaval) @@ -1188,67 +1185,67 @@ class pdf_eratosthene extends ModelePDFCommandes //Local tax 1 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey != 0) // On affiche pas taux 0 { - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey != 0) // On affiche pas taux 0 { - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} // Total TTC diff --git a/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php b/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php index a6d9514d7a7..f1324605874 100644 --- a/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php +++ b/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php @@ -342,7 +342,7 @@ class doc_generic_contract_odt extends ModelePDFContract // Open and load template require_once ODTPHP_PATH.'odf.php'; try { - $odfHandler = new odf( + $odfHandler = new odf( $srctemplatepath, array( 'PATH_TO_TMP' => $conf->contrat->dir_temp, @@ -470,7 +470,7 @@ class doc_generic_contract_odt extends ModelePDFContract } else { try { - $odfHandler->saveToDisk($file); + $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error=$e->getMessage(); return -1; diff --git a/htdocs/core/modules/dons/html_cerfafr.modules.php b/htdocs/core/modules/dons/html_cerfafr.modules.php index 311f1d8f813..bcda35459f6 100644 --- a/htdocs/core/modules/dons/html_cerfafr.modules.php +++ b/htdocs/core/modules/dons/html_cerfafr.modules.php @@ -322,82 +322,80 @@ class html_cerfafr extends ModeleDon } elseif ($dix[$i]==2) { if ($unite[$i]==1) { - $secon[$i]='vingt et'; - $prim[$i]=$chif[$unite[$i]]; - } - else { - $secon[$i]='vingt'; - $prim[$i]=$chif[$unite[$i]]; + $secon[$i]='vingt et'; + $prim[$i]=$chif[$unite[$i]]; + } else { + $secon[$i]='vingt'; + $prim[$i]=$chif[$unite[$i]]; } } elseif ($dix[$i]==3) { if ($unite[$i]==1) { - $secon[$i]='trente et'; - $prim[$i]=$chif[$unite[$i]]; - } - else { - $secon[$i]='trente'; - $prim[$i]=$chif[$unite[$i]]; + $secon[$i]='trente et'; + $prim[$i]=$chif[$unite[$i]]; + } else { + $secon[$i]='trente'; + $prim[$i]=$chif[$unite[$i]]; } } elseif ($dix[$i]==4) { if ($unite[$i]==1) { - $secon[$i]='quarante et'; - $prim[$i]=$chif[$unite[$i]]; + $secon[$i]='quarante et'; + $prim[$i]=$chif[$unite[$i]]; } else { - $secon[$i]='quarante'; - $prim[$i]=$chif[$unite[$i]]; + $secon[$i]='quarante'; + $prim[$i]=$chif[$unite[$i]]; } } elseif ($dix[$i]==5) { if ($unite[$i]==1) { - $secon[$i]='cinquante et'; - $prim[$i]=$chif[$unite[$i]]; + $secon[$i]='cinquante et'; + $prim[$i]=$chif[$unite[$i]]; } else { - $secon[$i]='cinquante'; - $prim[$i]=$chif[$unite[$i]]; + $secon[$i]='cinquante'; + $prim[$i]=$chif[$unite[$i]]; } } elseif ($dix[$i]==6) { if ($unite[$i]==1) { - $secon[$i]='soixante et'; - $prim[$i]=$chif[$unite[$i]]; + $secon[$i]='soixante et'; + $prim[$i]=$chif[$unite[$i]]; } else { - $secon[$i]='soixante'; - $prim[$i]=$chif[$unite[$i]]; + $secon[$i]='soixante'; + $prim[$i]=$chif[$unite[$i]]; } } elseif ($dix[$i]==7) { if ($unite[$i]==1) { - $secon[$i]='soixante et'; - $prim[$i]=$chif[$unite[$i]+10]; + $secon[$i]='soixante et'; + $prim[$i]=$chif[$unite[$i]+10]; } else { - $secon[$i]='soixante'; - $prim[$i]=$chif[$unite[$i]+10]; + $secon[$i]='soixante'; + $prim[$i]=$chif[$unite[$i]+10]; } } elseif ($dix[$i]==8) { if ($unite[$i]==1) { - $secon[$i]='quatre-vingts et'; - $prim[$i]=$chif[$unite[$i]]; + $secon[$i]='quatre-vingts et'; + $prim[$i]=$chif[$unite[$i]]; } else { - $secon[$i]='quatre-vingt'; - $prim[$i]=$chif[$unite[$i]]; + $secon[$i]='quatre-vingt'; + $prim[$i]=$chif[$unite[$i]]; } } elseif ($dix[$i]==9) { if ($unite[$i]==1) { - $secon[$i]='quatre-vingts et'; - $prim[$i]=$chif[$unite[$i]+10]; + $secon[$i]='quatre-vingts et'; + $prim[$i]=$chif[$unite[$i]+10]; } else { - $secon[$i]='quatre-vingts'; - $prim[$i]=$chif[$unite[$i]+10]; + $secon[$i]='quatre-vingts'; + $prim[$i]=$chif[$unite[$i]+10]; } } if($cent[$i]==1) $trio[$i]='cent'; diff --git a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php index 797049e8f57..7dbd3002e33 100644 --- a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php +++ b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php @@ -562,7 +562,7 @@ class doc_generic_shipment_odt extends ModelePdfExpedition } else { try { - $odfHandler->saveToDisk($file); + $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error=$e->getMessage(); dol_syslog($e->getMessage(), LOG_INFO); diff --git a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php index 7757e3c9b56..25b691aaa70 100644 --- a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php @@ -218,26 +218,25 @@ class pdf_rouget extends ModelePdfExpedition $realpath=''; - foreach ($objphoto->liste_photos($dir, 1) as $key => $obj) + foreach ($objphoto->liste_photos($dir, 1) as $key => $obj) { + if (empty($conf->global->CAT_HIGH_QUALITY_IMAGES)) { + // If CAT_HIGH_QUALITY_IMAGES not defined, we use thumb if defined and then original photo + if ($obj['photo_vignette']) { - if (empty($conf->global->CAT_HIGH_QUALITY_IMAGES)) // If CAT_HIGH_QUALITY_IMAGES not defined, we use thumb if defined and then original photo - { - if ($obj['photo_vignette']) - { - $filename= $obj['photo_vignette']; - } - else - { - $filename=$obj['photo']; - } - } - else - { - $filename=$obj['photo']; - } + $filename= $obj['photo_vignette']; + } + else + { + $filename=$obj['photo']; + } + } + else + { + $filename=$obj['photo']; + } - $realpath = $dir.$filename; - break; + $realpath = $dir.$filename; + break; } if ($realpath) $realpatharray[$i]=$realpath; @@ -541,8 +540,8 @@ class pdf_rouget extends ModelePdfExpedition if (empty($conf->global->SHIPPING_PDF_HIDE_ORDERED)) { - $pdf->SetXY($this->posxqtyordered, $curY); - $pdf->MultiCell(($this->posxqtytoship - $this->posxqtyordered), 3, $object->lines[$i]->qty_asked, '', 'C'); + $pdf->SetXY($this->posxqtyordered, $curY); + $pdf->MultiCell(($this->posxqtytoship - $this->posxqtyordered), 3, $object->lines[$i]->qty_asked, '', 'C'); } if (empty($conf->global->SHIPPING_PDF_HIDE_QTYTOSHIP)) diff --git a/htdocs/core/modules/expensereport/mod_expensereport_jade.php b/htdocs/core/modules/expensereport/mod_expensereport_jade.php index 412446166d7..f703561ea03 100644 --- a/htdocs/core/modules/expensereport/mod_expensereport_jade.php +++ b/htdocs/core/modules/expensereport/mod_expensereport_jade.php @@ -139,19 +139,19 @@ class mod_expensereport_jade extends ModeleNumRefExpenseReport $result = $db->query($sql); - if($db->num_rows($result) > 0): - $objp = $db->fetch_object($result); - $newref = $objp->max; - $newref++; - while(strlen($newref) < $num_car): - $newref = "0".$newref; - endwhile; - else: - $newref = 1; - while(strlen($newref) < $num_car): - $newref = "0".$newref; - endwhile; - endif; + if ($db->num_rows($result) > 0) { + $objp = $db->fetch_object($result); + $newref = $objp->max; + $newref++; + while (strlen($newref) < $num_car) { + $newref = "0".$newref; + } + } else { + $newref = 1; + while (strlen($newref) < $num_car) { + $newref = "0".$newref; + } + } $ref_number_int = ($newref+1)-1; diff --git a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php index 008b9a191c2..bb39f88c45d 100644 --- a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php +++ b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php @@ -344,7 +344,7 @@ class doc_generic_invoice_odt extends ModelePDFFactures // Open and load template require_once ODTPHP_PATH.'odf.php'; try { - $odfHandler = new odf( + $odfHandler = new odf( $srctemplatepath, array( 'PATH_TO_TMP' => $conf->facture->dir_temp, diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 4320c63f58b..2b198c35336 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -1177,69 +1177,69 @@ class pdf_crabe extends ModelePDFFactures //Local tax 1 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} @@ -1271,43 +1271,12 @@ class pdf_crabe extends ModelePDFFactures //Local tax 1 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach ($this->localtax1 as $localtax_type => $localtax_rate) { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) - { - if ($tvakey != 0) // On affiche pas taux 0 - { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); - } - } - } - //} - //Local tax 2 after VAT - //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') - //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) - { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey != 0) // On affiche pas taux 0 { //$this->atleastoneratenotnull++; @@ -1320,15 +1289,45 @@ class pdf_crabe extends ModelePDFFactures $tvakey=str_replace('*', '', $tvakey); $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } + //} + //Local tax 2 after VAT + //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') + //{ + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) + { + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) + { + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; + } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + } + } //} // Revenue stamp diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index ae8b33793d2..07ed5f5783c 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -371,10 +371,10 @@ class pdf_sponge extends ModelePDFFactures // Does we have at least one line with discount $this->atleastonediscount foreach ($object->lines as $line) { - if ($line->remise_percent){ + if ($line->remise_percent) { $this->atleastonediscount = true; break; - } + } } @@ -769,65 +769,62 @@ class pdf_sponge extends ModelePDFFactures } // retrieve global local tax - if ($localtax1_type && $localtax1ligne != 0) - $this->localtax1[$localtax1_type][$localtax1_rate]+=$localtax1ligne; - if ($localtax2_type && $localtax2ligne != 0) - $this->localtax2[$localtax2_type][$localtax2_rate]+=$localtax2ligne; + if ($localtax1_type && $localtax1ligne != 0) { + $this->localtax1[$localtax1_type][$localtax1_rate]+=$localtax1ligne; + } + if ($localtax2_type && $localtax2ligne != 0) { + $this->localtax2[$localtax2_type][$localtax2_rate]+=$localtax2ligne; + } - if (($object->lines[$i]->info_bits & 0x01) == 0x01) $vatrate.='*'; - if (! isset($this->tva[$vatrate])) $this->tva[$vatrate]=0; - $this->tva[$vatrate] += $tvaligne; + if (($object->lines[$i]->info_bits & 0x01) == 0x01) $vatrate.='*'; + if (! isset($this->tva[$vatrate])) $this->tva[$vatrate]=0; + $this->tva[$vatrate] += $tvaligne; - $nexY = max($nexY, $posYAfterImage); + $nexY = max($nexY, $posYAfterImage); - // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) - { - $pdf->setPage($pageposafter); - $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); - //$pdf->SetDrawColor(190,190,200); - $pdf->line($this->marge_gauche, $nexY+1, $this->page_largeur - $this->marge_droite, $nexY+1); - $pdf->SetLineStyle(array('dash'=>0)); - } + // Add line + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { + $pdf->setPage($pageposafter); + $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); + //$pdf->SetDrawColor(190,190,200); + $pdf->line($this->marge_gauche, $nexY+1, $this->page_largeur - $this->marge_droite, $nexY+1); + $pdf->SetLineStyle(array('dash'=>0)); + } - $nexY+=2; // Add space between lines + $nexY+=2; // Add space between lines - // Detect if some page were added automatically and output _tableau for past pages - while ($pagenb < $pageposafter) - { - $pdf->setPage($pagenb); - if ($pagenb == $pageposbeforeprintlines) - { - $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, $hidetop, 1, $object->multicurrency_code); - } - else - { - $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1, $object->multicurrency_code); - } - $this->_pagefoot($pdf, $object, $outputlangs, 1); - $pagenb++; - $pdf->setPage($pagenb); - $pdf->setPageOrientation('', 1, 0); // The only function to edit the bottom margin of current page to set it. - if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs); - } + // Detect if some page were added automatically and output _tableau for past pages + while ($pagenb < $pageposafter) { + $pdf->setPage($pagenb); + if ($pagenb == $pageposbeforeprintlines) { + $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, $hidetop, 1, $object->multicurrency_code); + } + else + { + $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1, $object->multicurrency_code); + } + $this->_pagefoot($pdf, $object, $outputlangs, 1); + $pagenb++; + $pdf->setPage($pagenb); + $pdf->setPageOrientation('', 1, 0); // The only function to edit the bottom margin of current page to set it. + if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs); + } - if (isset($object->lines[$i+1]->pagebreak) && $object->lines[$i+1]->pagebreak) - { - if ($pagenb == $pageposafter) - { - $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, $hidetop, 1, $object->multicurrency_code); - } - else - { - $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1, $object->multicurrency_code); - } - $this->_pagefoot($pdf, $object, $outputlangs, 1); - // New page - $pdf->AddPage(); - if (! empty($tplidx)) $pdf->useTemplate($tplidx); - $pagenb++; - if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs); - } + if (isset($object->lines[$i+1]->pagebreak) && $object->lines[$i+1]->pagebreak) { + if ($pagenb == $pageposafter) { + $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, $hidetop, 1, $object->multicurrency_code); + } + else + { + $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1, $object->multicurrency_code); + } + $this->_pagefoot($pdf, $object, $outputlangs, 1); + // New page + $pdf->AddPage(); + if (! empty($tplidx)) $pdf->useTemplate($tplidx); + $pagenb++; + if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs); + } } // Show square @@ -1266,14 +1263,11 @@ class pdf_sponge extends ModelePDFFactures $deja_paye = 0; $i = 1; - if(!empty($TPreviousIncoice)){ + if (!empty($TPreviousIncoice)) { $pdf->setY($tab2_top); $posy = $pdf->GetY(); - - - - foreach ($TPreviousIncoice as &$fac){ + foreach ($TPreviousIncoice as &$fac) { if($posy > $this->page_hauteur - 4 ) { $this->_pagefoot($pdf, $object, $outputlangs, 1); $pdf->addPage(); @@ -1290,8 +1284,8 @@ class pdf_sponge extends ModelePDFFactures $pdf->SetXY($col2x, $posy); $facSign = ''; - if($i>1){ - $facSign = $fac->total_ht>=0?'+':''; + if ($i>1) { + $facSign = $fac->total_ht>=0?'+':''; } $displayAmount = ' '.$facSign.' '.price($fac->total_ht, 0, $outputlangs); @@ -1312,11 +1306,11 @@ class pdf_sponge extends ModelePDFFactures $pdf->SetXY($col2x, $posy); $facSign = ''; - if($i>1){ + if ($i>1) { $facSign = $object->total_ht>=0?'+':''; // management of a particular customer case } - if($fac->type === facture::TYPE_CREDIT_NOTE){ + if ($fac->type === facture::TYPE_CREDIT_NOTE) { $facSign = '-'; // les avoirs } @@ -1375,7 +1369,7 @@ class pdf_sponge extends ModelePDFFactures $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $tab2_top + 0); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHTBeforeDiscount"), 0, 'L', 1); - $pdf->SetXY($col2x, $tab2_top + 0); + $pdf->SetXY($col2x, $tab2_top + 0); $pdf->MultiCell($largcol2, $tab2_hl, price($total_line_remise + $total_ht, 0, $outputlangs), 0, 'R', 1); $index++; @@ -1410,70 +1404,67 @@ class pdf_sponge extends ModelePDFFactures //Local tax 1 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1', '3', '5'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1', '3', '5'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } - + } //} // VAT @@ -1527,68 +1518,68 @@ class pdf_sponge extends ModelePDFFactures //Local tax 1 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey != 0) // On affiche pas taux 0 { - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + // retrieve global local tax + if ($tvakey != 0) // On affiche pas taux 0 { - // retrieve global local tax - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } // Revenue stamp diff --git a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php index ac59960cf59..ff7bff51230 100644 --- a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php +++ b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php @@ -502,7 +502,7 @@ class pdf_soleil extends ModelePDFFicheinter $default_font_size = pdf_getPDFFontSize($outputlangs); -/* + /* $pdf->SetXY($this->marge_gauche, $tab_top); $pdf->MultiCell(190,8,$outputlangs->transnoentities("Description"),0,'L',0); $pdf->line($this->marge_gauche, $tab_top + 8, $this->page_largeur-$this->marge_droite, $tab_top + 8); @@ -526,7 +526,7 @@ class pdf_soleil extends ModelePDFFicheinter $pdf->line($this->marge_gauche, $nexY, $this->page_largeur-$this->marge_droite, $nexY); $pdf->MultiCell(0, 3, ''); // Set interline to 3. Then writeMultiCell must use 3 also. -*/ + */ // Output Rect $this->printRect($pdf, $this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height+1, 0, 0); // Rect takes a length in 3rd parameter and 4th parameter diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index cb3ae176026..08ac267445d 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -217,9 +217,9 @@ class ImportCsv extends ModeleImports * @return int <0 if KO, >=0 if OK */ public function import_get_nb_of_lines($file) - { + { // phpcs:enable - return dol_count_nb_of_line($file); + return dol_count_nb_of_line($file); } diff --git a/htdocs/core/modules/mailings/fraise.modules.php b/htdocs/core/modules/mailings/fraise.modules.php index 670b831c25f..25ffcb717fd 100644 --- a/htdocs/core/modules/mailings/fraise.modules.php +++ b/htdocs/core/modules/mailings/fraise.modules.php @@ -255,9 +255,11 @@ class mailing_fraise extends MailingTargets $sql.= " WHERE a.entity IN (".getEntity('member').") AND a.email <> ''"; // Note that null != '' is false $sql.= " AND a.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".$this->db->escape($mailing_id).")"; // Filter on status - if (isset($_POST["filter"]) && $_POST["filter"] == '-1') $sql.= " AND a.statut=-1"; - if (isset($_POST["filter"]) && $_POST["filter"] == '1a') $sql.= " AND a.statut=1 AND (a.datefin >= '".$this->db->idate($now)."' OR ta.subscription = 0)"; - if (isset($_POST["filter"]) && $_POST["filter"] == '1b') $sql.= " AND a.statut=1 AND ((a.datefin IS NULL or a.datefin < '".$this->db->idate($now)."') AND ta.subscription = 1)"; + if (isset($_POST["filter"]) && $_POST["filter"] == '-1') { + $sql.= " AND a.statut=-1"; + } + if (isset($_POST["filter"]) && $_POST["filter"] == '1a') $sql.= " AND a.statut=1 AND (a.datefin >= '".$this->db->idate($now)."' OR ta.subscription = 0)"; + if (isset($_POST["filter"]) && $_POST["filter"] == '1b') $sql.= " AND a.statut=1 AND ((a.datefin IS NULL or a.datefin < '".$this->db->idate($now)."') AND ta.subscription = 1)"; if (isset($_POST["filter"]) && $_POST["filter"] == '0') $sql.= " AND a.statut=0"; // Filter on date if ($dateendsubscriptionafter > 0) $sql.=" AND datefin > '".$this->db->idate($dateendsubscriptionafter)."'"; diff --git a/htdocs/core/modules/mailings/thirdparties.modules.php b/htdocs/core/modules/mailings/thirdparties.modules.php index 00db6eb89ea..68cb49e10d9 100644 --- a/htdocs/core/modules/mailings/thirdparties.modules.php +++ b/htdocs/core/modules/mailings/thirdparties.modules.php @@ -288,29 +288,28 @@ class mailing_thirdparties extends MailingTargets } $s.=' '; - $s.= $langs->trans('ProspectCustomer'); - $s.=': '; + $s.= ''; + if (empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) { + $s.= ''; + } + if (empty($conf->global->SOCIETE_DISABLE_PROSPECTS) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS) && empty($conf->global->SOCIETE_DISABLE_PROSPECTSCUSTOMERS)) { + $s.= ''; + } + if (empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) { + $s.= ''; + } + $s.= ''; - $s.=' '; + $s.= ' '; - $s.=$langs->trans("Status"); - $s.=': '; + $s.= $langs->trans("Status"); + $s.= ': '; return $s; } diff --git a/htdocs/core/modules/modComptabilite.class.php b/htdocs/core/modules/modComptabilite.class.php index dbea2fe8d8a..fc8557497b8 100644 --- a/htdocs/core/modules/modComptabilite.class.php +++ b/htdocs/core/modules/modComptabilite.class.php @@ -35,11 +35,11 @@ include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php'; class modComptabilite extends DolibarrModules { - /** - * Constructor. Define names, constants, directories, boxes, permissions - * - * @param DoliDB $db Database handler - */ + /** + * Constructor. Define names, constants, directories, boxes, permissions + * + * @param DoliDB $db Database handler + */ public function __construct($db) { global $conf; @@ -72,11 +72,12 @@ class modComptabilite extends DolibarrModules $this->const = array(); // Data directories to create when module is enabled - $this->dirs = array("/comptabilite/temp", - "/comptabilite/rapport", - "/comptabilite/export", - "/comptabilite/bordereau" - ); + $this->dirs = array( + "/comptabilite/temp", + "/comptabilite/rapport", + "/comptabilite/export", + "/comptabilite/bordereau" + ); // Boxes $this->boxes = array(); diff --git a/htdocs/core/modules/modECM.class.php b/htdocs/core/modules/modECM.class.php index bd11774eb21..1aefb52ea1c 100644 --- a/htdocs/core/modules/modECM.class.php +++ b/htdocs/core/modules/modECM.class.php @@ -32,10 +32,10 @@ include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php'; class modECM extends DolibarrModules { - /** - * Constructor. Define names, constants, directories, boxes, permissions - * - * @param DoliDB $db Database handler + /** + * Constructor. Define names, constants, directories, boxes, permissions + * + * @param DoliDB $db Database handler */ public function __construct($db) { diff --git a/htdocs/core/modules/modExpedition.class.php b/htdocs/core/modules/modExpedition.class.php index 152f2101893..68f4a3d5fba 100644 --- a/htdocs/core/modules/modExpedition.class.php +++ b/htdocs/core/modules/modExpedition.class.php @@ -298,11 +298,10 @@ class modExpedition extends DolibarrModules $this->export_sql_end[$r] .=' , '.MAIN_DB_PREFIX.'commandedet as cd'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on cd.fk_product = p.rowid'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product_extrafields as extraprod ON p.rowid = extraprod.fk_object'; - if ($idcontacts && ! empty($conf->global->SHIPMENT_ADD_CONTACTS_IN_EXPORT)) - { - $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'element_contact as ee ON ee.element_id = cd.fk_commande AND ee.fk_c_type_contact IN ('.$idcontacts.')'; - $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople as sp ON sp.rowid = ee.fk_socpeople'; - $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople_extrafields as extra3 ON sp.rowid = extra3.fk_object'; + if ($idcontacts && ! empty($conf->global->SHIPMENT_ADD_CONTACTS_IN_EXPORT)) { + $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'element_contact as ee ON ee.element_id = cd.fk_commande AND ee.fk_c_type_contact IN ('.$idcontacts.')'; + $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople as sp ON sp.rowid = ee.fk_socpeople'; + $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople_extrafields as extra3 ON sp.rowid = extra3.fk_object'; } $this->export_sql_end[$r] .=' WHERE c.fk_soc = s.rowid AND c.rowid = ed.fk_expedition AND ed.fk_origin_line = cd.rowid'; $this->export_sql_end[$r] .=' AND c.entity IN ('.getEntity('expedition').')'; diff --git a/htdocs/core/modules/modReception.class.php b/htdocs/core/modules/modReception.class.php index 06c8f51f76b..63146e87318 100644 --- a/htdocs/core/modules/modReception.class.php +++ b/htdocs/core/modules/modReception.class.php @@ -223,11 +223,10 @@ class modReception extends DolibarrModules $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'commande_fournisseur_dispatch_extrafields as extra2 ON ed.rowid = extra2.fk_object'; $this->export_sql_end[$r] .=' , '.MAIN_DB_PREFIX.'commande_fournisseurdet as cd'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on cd.fk_product = p.rowid'; - if ($idcontacts && ! empty($conf->global->RECEPTION_ADD_CONTACTS_IN_EXPORT)) - { - $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'element_contact as ee ON ee.element_id = cd.fk_commande AND ee.fk_c_type_contact IN ('.$idcontacts.')'; - $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople as sp ON sp.rowid = ee.fk_socpeople'; - $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople_extrafields as extra3 ON sp.rowid = extra3.fk_object'; + if ($idcontacts && ! empty($conf->global->RECEPTION_ADD_CONTACTS_IN_EXPORT)) { + $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'element_contact as ee ON ee.element_id = cd.fk_commande AND ee.fk_c_type_contact IN ('.$idcontacts.')'; + $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople as sp ON sp.rowid = ee.fk_socpeople'; + $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople_extrafields as extra3 ON sp.rowid = extra3.fk_object'; } $this->export_sql_end[$r] .=' WHERE c.fk_soc = s.rowid AND c.rowid = ed.fk_reception AND ed.fk_commandefourndet = cd.rowid'; $this->export_sql_end[$r] .=' AND c.entity IN ('.getEntity('reception').')'; diff --git a/htdocs/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php index a225fe47005..5a2c5040e88 100644 --- a/htdocs/core/modules/modSociete.class.php +++ b/htdocs/core/modules/modSociete.class.php @@ -148,7 +148,7 @@ class modSociete extends DolibarrModules $this->rights[$r][3] = 0; // La permission est-elle une permission par defaut $this->rights[$r][4] = 'lire'; -/* $r++; + /*$r++; $this->rights[$r][0] = 241; $this->rights[$r][1] = 'Read thirdparties customers'; $this->rights[$r][2] = 'r'; @@ -163,7 +163,7 @@ class modSociete extends DolibarrModules $this->rights[$r][3] = 0; $this->rights[$r][4] = 'thirdparty_supplier_advance'; // Visible if option MAIN_USE_ADVANCED_PERMS is on $this->rights[$r][5] = 'read'; -*/ + */ $r++; $this->rights[$r][0] = 122; // id de la permission @@ -172,8 +172,8 @@ class modSociete extends DolibarrModules $this->rights[$r][3] = 0; // La permission est-elle une permission par defaut $this->rights[$r][4] = 'creer'; -/* $r++; - $this->rights[$r][0] = 251; + /* $r++; + $this->rights[$r][0] = 251; $this->rights[$r][1] = 'Create thirdparties customers'; $this->rights[$r][2] = 'r'; $this->rights[$r][3] = 0; @@ -187,7 +187,7 @@ class modSociete extends DolibarrModules $this->rights[$r][3] = 0; $this->rights[$r][4] = 'thirdparty_supplier_advance'; // Visible if option MAIN_USE_ADVANCED_PERMS is on $this->rights[$r][5] = 'read'; -*/ + */ $r++; $this->rights[$r][0] = 125; // id de la permission diff --git a/htdocs/core/modules/modStripe.class.php b/htdocs/core/modules/modStripe.class.php index 7baf96f8d96..30d90b8a0c6 100644 --- a/htdocs/core/modules/modStripe.class.php +++ b/htdocs/core/modules/modStripe.class.php @@ -82,8 +82,8 @@ class modStripe extends DolibarrModules // New pages on tabs $this->tabs = array(); - // Boxes - $this->boxes = array(); // List of boxes + // List of boxes + $this->boxes = array(); $r=0; // Permissions @@ -92,8 +92,8 @@ class modStripe extends DolibarrModules // Main menu entries $r=0; - /* $this->menu[$r]=array( - 'fk_menu'=>'fk_mainmenu=billing,fk_leftmenu=customers_bills_payment', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode + /* $this->menu[$r]=array( + 'fk_menu'=>'fk_mainmenu=billing,fk_leftmenu=customers_bills_payment', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode 'mainmenu'=>'billing', 'leftmenu'=>'customers_bills_payment_stripe', 'type'=>'left', // This is a Left menu entry diff --git a/htdocs/core/modules/modVariants.class.php b/htdocs/core/modules/modVariants.class.php index 728107ea08f..2c9aad59425 100644 --- a/htdocs/core/modules/modVariants.class.php +++ b/htdocs/core/modules/modVariants.class.php @@ -92,7 +92,7 @@ class modVariants extends DolibarrModules // Array to add new pages in new tabs $this->tabs = array( -// 'product:+combinations:Combinaciones:products:1:/variants/combinations.php?id=__ID__' + // 'product:+combinations:Combinaciones:products:1:/variants/combinations.php?id=__ID__' ); // Dictionaries diff --git a/htdocs/core/modules/modWebsite.class.php b/htdocs/core/modules/modWebsite.class.php index 7c11a4b98b0..375d7c8c209 100644 --- a/htdocs/core/modules/modWebsite.class.php +++ b/htdocs/core/modules/modWebsite.class.php @@ -186,17 +186,15 @@ class modWebsite extends DolibarrModules dol_mkdir($destroot); $docs=dol_dir_list($srcroot, 'files', 0, 'website_.*(\.zip|\.jpg)$'); - foreach($docs as $cursorfile) - { - $src=$srcroot.'/'.$cursorfile['name']; - $dest=$destroot.'/'.$cursorfile['name']; + foreach($docs as $cursorfile) { + $src=$srcroot.'/'.$cursorfile['name']; + $dest=$destroot.'/'.$cursorfile['name']; - $result=dol_copy($src, $dest, 0, 0); - if ($result < 0) - { - $langs->load("errors"); - $this->error=$langs->trans('ErrorFailToCopyFile', $src, $dest); - } + $result=dol_copy($src, $dest, 0, 0); + if ($result < 0) { + $langs->load("errors"); + $this->error=$langs->trans('ErrorFailToCopyFile', $src, $dest); + } } $sql = array(); diff --git a/htdocs/core/modules/product/doc/pdf_standard.modules.php b/htdocs/core/modules/product/doc/pdf_standard.modules.php index ca0fbd50333..b5e857866b5 100644 --- a/htdocs/core/modules/product/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/product/doc/pdf_standard.modules.php @@ -668,8 +668,7 @@ class pdf_standard extends ModelePDFProduct $pdf->line($this->posxunit - 1, $tab_top, $this->posxunit - 1, $tab_top + $tab_height); if (empty($hidetop)) { $pdf->SetXY($this->posxunit - 1, $tab_top + 1); - $pdf->MultiCell($this->posxdiscount - $this->posxunit - 1, 2, $outputlangs->transnoentities("Unit"), '', - 'C'); + $pdf->MultiCell($this->posxdiscount - $this->posxunit - 1, 2, $outputlangs->transnoentities("Unit"), '', 'C'); } } diff --git a/htdocs/core/modules/project/doc/pdf_beluga.modules.php b/htdocs/core/modules/project/doc/pdf_beluga.modules.php index a9593c6bbef..b26b46604ff 100644 --- a/htdocs/core/modules/project/doc/pdf_beluga.modules.php +++ b/htdocs/core/modules/project/doc/pdf_beluga.modules.php @@ -107,7 +107,7 @@ class pdf_beluga extends ModelePDFProjects $this->emetteur=$mysoc; if (! $this->emetteur->country_code) $this->emetteur->country_code=substr($langs->defaultlang, -2); // By default if not defined - // Define position of columns + // Define position of columns if ($this->orientation == 'L' || $this->orientation == 'Landscape') { $this->posxref=$this->marge_gauche+1; $this->posxdate=$this->marge_gauche+105; diff --git a/htdocs/core/modules/project/mod_project_simple.php b/htdocs/core/modules/project/mod_project_simple.php index 5ccac833601..d73ee22fbae 100644 --- a/htdocs/core/modules/project/mod_project_simple.php +++ b/htdocs/core/modules/project/mod_project_simple.php @@ -116,13 +116,13 @@ class mod_project_simple extends ModeleNumRefProjects } - /** - * Return next value - * - * @param Societe $objsoc Object third party - * @param Project $project Object project - * @return string Value if OK, 0 if KO - */ + /** + * Return next value + * + * @param Societe $objsoc Object third party + * @param Project $project Object project + * @return string Value if OK, 0 if KO + */ public function getNextValue($objsoc, $project) { global $db,$conf; diff --git a/htdocs/core/modules/project/mod_project_universal.php b/htdocs/core/modules/project/mod_project_universal.php index edd90585089..342eaa26320 100644 --- a/htdocs/core/modules/project/mod_project_universal.php +++ b/htdocs/core/modules/project/mod_project_universal.php @@ -116,13 +116,13 @@ class mod_project_universal extends ModeleNumRefProjects return $numExample; } - /** - * Return next value - * - * @param Societe $objsoc Object third party - * @param Project $project Object project - * @return string Value if OK, 0 if KO - */ + /** + * Return next value + * + * @param Societe $objsoc Object third party + * @param Project $project Object project + * @return string Value if OK, 0 if KO + */ public function getNextValue($objsoc, $project) { global $db,$conf; diff --git a/htdocs/core/modules/project/task/mod_task_simple.php b/htdocs/core/modules/project/task/mod_task_simple.php index 811d5b1c97b..65c7deb8edf 100644 --- a/htdocs/core/modules/project/task/mod_task_simple.php +++ b/htdocs/core/modules/project/task/mod_task_simple.php @@ -117,13 +117,13 @@ class mod_task_simple extends ModeleNumRefTask } - /** - * Return next value - * - * @param Societe $objsoc Object third party - * @param Task $object Object Task - * @return string Value if OK, 0 if KO - */ + /** + * Return next value + * + * @param Societe $objsoc Object third party + * @param Task $object Object Task + * @return string Value if OK, 0 if KO + */ public function getNextValue($objsoc, $object) { global $db,$conf; diff --git a/htdocs/core/modules/project/task/mod_task_universal.php b/htdocs/core/modules/project/task/mod_task_universal.php index cfba42090d1..018a10c80a2 100644 --- a/htdocs/core/modules/project/task/mod_task_universal.php +++ b/htdocs/core/modules/project/task/mod_task_universal.php @@ -116,13 +116,13 @@ class mod_task_universal extends ModeleNumRefTask return $numExample; } - /** - * Return next value - * - * @param Societe $objsoc Object third party - * @param Task $object Object task - * @return string Value if OK, 0 if KO - */ + /** + * Return next value + * + * @param Societe $objsoc Object third party + * @param Task $object Object task + * @return string Value if OK, 0 if KO + */ public function getNextValue($objsoc, $object) { global $db,$conf; diff --git a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php index c7303683d5c..5412343941c 100644 --- a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php +++ b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php @@ -515,7 +515,7 @@ class doc_generic_proposal_odt extends ModelePDFPropales } else { try { - $odfHandler->saveToDisk($file); + $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error=$e->getMessage(); dol_syslog($e->getMessage(), LOG_INFO); diff --git a/htdocs/core/modules/propale/doc/pdf_azur.modules.php b/htdocs/core/modules/propale/doc/pdf_azur.modules.php index d3693932f76..a79c17b47ca 100644 --- a/htdocs/core/modules/propale/doc/pdf_azur.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_azur.modules.php @@ -1088,68 +1088,68 @@ class pdf_azur extends ModelePDFPropales //Local tax 1 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} // VAT foreach($this->tva as $tvakey => $tvaval) @@ -1179,68 +1179,68 @@ class pdf_azur extends ModelePDFPropales //Local tax 1 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey != 0) // On affiche pas taux 0 { - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + // retrieve global local tax + if ($tvakey != 0) // On affiche pas taux 0 { - // retrieve global local tax - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} // Total TTC diff --git a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php index 319f563ad28..7db062d3cbc 100644 --- a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php @@ -1191,68 +1191,68 @@ class pdf_cyan extends ModelePDFPropales //Local tax 1 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} // VAT foreach($this->tva as $tvakey => $tvaval) @@ -1282,68 +1282,68 @@ class pdf_cyan extends ModelePDFPropales //Local tax 1 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey != 0) // On affiche pas taux 0 { - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + // retrieve global local tax + if ($tvakey != 0) // On affiche pas taux 0 { - // retrieve global local tax - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} // Total TTC diff --git a/htdocs/core/modules/reception/doc/doc_generic_reception_odt.modules.php b/htdocs/core/modules/reception/doc/doc_generic_reception_odt.modules.php index 9741a8fbfc5..0cd252924f3 100644 --- a/htdocs/core/modules/reception/doc/doc_generic_reception_odt.modules.php +++ b/htdocs/core/modules/reception/doc/doc_generic_reception_odt.modules.php @@ -497,7 +497,7 @@ class doc_generic_reception_odt extends ModelePdfReception } else { try { - $odfHandler->saveToDisk($file); + $odfHandler->saveToDisk($file); } catch (Exception $e){ $this->error=$e->getMessage(); return -1; diff --git a/htdocs/core/modules/reception/doc/pdf_squille.modules.php b/htdocs/core/modules/reception/doc/pdf_squille.modules.php index a84b86e908b..9dffb0eee69 100644 --- a/htdocs/core/modules/reception/doc/pdf_squille.modules.php +++ b/htdocs/core/modules/reception/doc/pdf_squille.modules.php @@ -142,26 +142,25 @@ class pdf_squille extends ModelePdfReception $realpath=''; - foreach ($objphoto->liste_photos($dir, 1) as $key => $obj) + foreach ($objphoto->liste_photos($dir, 1) as $key => $obj) { + if (empty($conf->global->CAT_HIGH_QUALITY_IMAGES)) { + // If CAT_HIGH_QUALITY_IMAGES not defined, we use thumb if defined and then original photo + if ($obj['photo_vignette']) { - if (empty($conf->global->CAT_HIGH_QUALITY_IMAGES)) // If CAT_HIGH_QUALITY_IMAGES not defined, we use thumb if defined and then original photo - { - if ($obj['photo_vignette']) - { - $filename= $obj['photo_vignette']; - } - else - { - $filename=$obj['photo']; - } - } - else - { - $filename=$obj['photo']; - } + $filename= $obj['photo_vignette']; + } + else + { + $filename=$obj['photo']; + } + } + else + { + $filename=$obj['photo']; + } - $realpath = $dir.$filename; - break; + $realpath = $dir.$filename; + break; } if ($realpath) $realpatharray[$i]=$realpath; @@ -461,14 +460,13 @@ class pdf_squille extends ModelePdfReception $pdf->writeHTMLCell($this->posxqtyordered - $this->posxweightvol + 2, 3, $this->posxweightvol - 1, $curY, $weighttxt.(($weighttxt && $voltxt)?'
    ':'').$voltxt, 0, 0, false, true, 'C'); //$pdf->MultiCell(($this->posxqtyordered - $this->posxweightvol), 3, $weighttxt.(($weighttxt && $voltxt)?'
    ':'').$voltxt,'','C'); - if (empty($conf->global->RECEPTION_PDF_HIDE_ORDERED)) - { - $pdf->SetXY($this->posxqtyordered, $curY); - if($object->lines[$i]->fk_commandefourndet!=$fk_commandefourndet){ - $pdf->MultiCell(($this->posxqtytoship - $this->posxqtyordered), 3, $object->lines[$i]->qty_asked, '', 'C'); - $totalOrdered+=$object->lines[$i]->qty_asked; - } - $fk_commandefourndet = $object->lines[$i]->fk_commandefourndet; + if (empty($conf->global->RECEPTION_PDF_HIDE_ORDERED)) { + $pdf->SetXY($this->posxqtyordered, $curY); + if($object->lines[$i]->fk_commandefourndet!=$fk_commandefourndet){ + $pdf->MultiCell(($this->posxqtytoship - $this->posxqtyordered), 3, $object->lines[$i]->qty_asked, '', 'C'); + $totalOrdered+=$object->lines[$i]->qty_asked; + } + $fk_commandefourndet = $object->lines[$i]->fk_commandefourndet; } $pdf->SetXY($this->posxqtytoship, $curY); diff --git a/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php b/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php index c389a6f77ed..2f78deefe68 100644 --- a/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php +++ b/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php @@ -197,14 +197,13 @@ class doc_generic_odt extends ModeleThirdPartyDoc return -1; } - // Add odtgeneration hook - if (! is_object($hookmanager)) - { - include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php'; - $hookmanager=new HookManager($this->db); - } - $hookmanager->initHooks(array('odtgeneration')); - global $action; + // Add odtgeneration hook + if (! is_object($hookmanager)) { + include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php'; + $hookmanager=new HookManager($this->db); + } + $hookmanager->initHooks(array('odtgeneration')); + global $action; if (! is_object($outputlangs)) $outputlangs=$langs; $sav_charset_output=$outputlangs->charset_output; @@ -408,17 +407,16 @@ class doc_generic_odt extends ModeleThirdPartyDoc } else { try { - $odfHandler->creator = $user->getFullName($outputlangs); - $odfHandler->title = $object->builddoc_filename; - $odfHandler->subject = $object->builddoc_filename; + $odfHandler->creator = $user->getFullName($outputlangs); + $odfHandler->title = $object->builddoc_filename; + $odfHandler->subject = $object->builddoc_filename; - if (! empty($conf->global->ODT_ADD_DOLIBARR_ID)) - { - $odfHandler->userdefined['dol_id'] = $object->id; - $odfHandler->userdefined['dol_element'] = $object->element; - } + if (! empty($conf->global->ODT_ADD_DOLIBARR_ID)) { + $odfHandler->userdefined['dol_id'] = $object->id; + $odfHandler->userdefined['dol_element'] = $object->element; + } - $odfHandler->saveToDisk($file); + $odfHandler->saveToDisk($file); } catch (Exception $e){ $this->error=$e->getMessage(); dol_syslog($e->getMessage(), LOG_INFO); diff --git a/htdocs/core/modules/stock/doc/doc_generic_stock_odt.modules.php b/htdocs/core/modules/stock/doc/doc_generic_stock_odt.modules.php index e19814c3cd4..0d6d2e3d420 100644 --- a/htdocs/core/modules/stock/doc/doc_generic_stock_odt.modules.php +++ b/htdocs/core/modules/stock/doc/doc_generic_stock_odt.modules.php @@ -495,7 +495,7 @@ class doc_generic_stock_odt extends ModelePDFStock } else { try { - $odfHandler->saveToDisk($file); + $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error=$e->getMessage(); dol_syslog($e->getMessage(), LOG_INFO); diff --git a/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php b/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php index dd002a95766..89dbd9898bc 100644 --- a/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php +++ b/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php @@ -714,58 +714,56 @@ class pdf_canelle extends ModelePDFSuppliersInvoices { //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - //Local tax 1 - foreach($this->localtax1 as $tvakey => $tvaval) + //Local tax 1 + foreach ($this->localtax1 as $tvakey => $tvaval) { + if ($tvakey != 0) // On affiche pas taux 0 { - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - $totalvat.= vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + $totalvat.= vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval), 0, 'R', 1); } + } //} //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - //Local tax 2 - foreach($this->localtax2 as $tvakey => $tvaval) + //Local tax 2 + foreach($this->localtax2 as $tvakey => $tvaval) { + if ($tvakey != 0) // On affiche pas taux 0 { - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - $totalvat.= vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + $totalvat.= vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval), 0, 'R', 1); } + } //} } diff --git a/htdocs/core/modules/supplier_order/pdf/doc_generic_supplier_order_odt.modules.php b/htdocs/core/modules/supplier_order/pdf/doc_generic_supplier_order_odt.modules.php index b139f0330a1..bdb5e88bdb8 100644 --- a/htdocs/core/modules/supplier_order/pdf/doc_generic_supplier_order_odt.modules.php +++ b/htdocs/core/modules/supplier_order/pdf/doc_generic_supplier_order_odt.modules.php @@ -4,7 +4,7 @@ * Copyright (C) 2014 Marcos García * Copyright (C) 2016 Charlie Benke * Copyright (C) 2018-2019 Philippe Grand - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2019 Frédéric France * Copyright (C) 2019 Tim Otte * * This program is free software; you can redistribute it and/or modify @@ -485,7 +485,7 @@ class doc_generic_supplier_order_odt extends ModelePDFSuppliersOrders } else { try { - $odfHandler->saveToDisk($file); + $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error=$e->getMessage(); dol_syslog($e->getMessage(), LOG_INFO); diff --git a/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php b/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php index 5977764ca8a..f9b0d1b106c 100644 --- a/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php @@ -674,7 +674,7 @@ class pdf_standard extends ModelePDFSuppliersPayments $text=$this->emetteur->name; $pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0, 'L'); } -/* + /* $pdf->SetFont('','B', $default_font_size + 3); $pdf->SetXY($posx,$posy); $pdf->SetTextColor(0,0,60); @@ -734,7 +734,7 @@ class pdf_standard extends ModelePDFSuppliersPayments // Show list of linked objects $posy = pdf_writeLinkedObjects($pdf, $object, $outputlangs, $posx, $posy, 100, 3, 'R', $default_font_size); -*/ + */ if ($showaddress) { // Sender properties diff --git a/htdocs/core/modules/supplier_proposal/doc/doc_generic_supplier_proposal_odt.modules.php b/htdocs/core/modules/supplier_proposal/doc/doc_generic_supplier_proposal_odt.modules.php index eb53b7b74be..95f7b0e45d0 100644 --- a/htdocs/core/modules/supplier_proposal/doc/doc_generic_supplier_proposal_odt.modules.php +++ b/htdocs/core/modules/supplier_proposal/doc/doc_generic_supplier_proposal_odt.modules.php @@ -365,7 +365,7 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal // Open and load template require_once ODTPHP_PATH.'odf.php'; try { - $odfHandler = new odf( + $odfHandler = new odf( $srctemplatepath, array( 'PATH_TO_TMP' => $conf->supplier_proposal->dir_temp, diff --git a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php index 7e23b6b8c91..ff8ab76c674 100644 --- a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php +++ b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php @@ -941,68 +941,68 @@ class pdf_aurore extends ModelePDFSupplierProposal //Local tax 1 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 before VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('1','3','5'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey!=0) // On affiche pas taux 0 { - if ($tvakey!=0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} // VAT foreach($this->tva as $tvakey => $tvaval) @@ -1032,68 +1032,68 @@ class pdf_aurore extends ModelePDFSupplierProposal //Local tax 1 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') //{ - foreach($this->localtax1 as $localtax_type => $localtax_rate) + foreach($this->localtax1 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + if ($tvakey != 0) // On affiche pas taux 0 { - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; - - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT1", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} //Local tax 2 after VAT //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') //{ - foreach($this->localtax2 as $localtax_type => $localtax_rate) + foreach($this->localtax2 as $localtax_type => $localtax_rate) + { + if (in_array((string) $localtax_type, array('2','4','6'))) continue; + + foreach($localtax_rate as $tvakey => $tvaval) { - if (in_array((string) $localtax_type, array('2','4','6'))) continue; - - foreach($localtax_rate as $tvakey => $tvaval) + // retrieve global local tax + if ($tvakey != 0) // On affiche pas taux 0 { - // retrieve global local tax - if ($tvakey != 0) // On affiche pas taux 0 + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/', $tvakey)) { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/', $tvakey)) - { - $tvakey=str_replace('*', '', $tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; - - $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); + $tvakey=str_replace('*', '', $tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; } + $totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; + + $totalvat.=vatrate(abs($tvakey), 1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); } } + } //} // Total TTC @@ -1240,7 +1240,7 @@ class pdf_aurore extends ModelePDFSupplierProposal $pdf->line($this->posxunit - 1, $tab_top, $this->posxunit - 1, $tab_top + $tab_height); if (empty($hidetop)) { $pdf->SetXY($this->posxunit - 1, $tab_top + 1); - $pdf->MultiCell($this->posxdiscount - $this->posxunit - 1, 2, $outputlangs->transnoentities("Unit"), '', 'C'); + $pdf->MultiCell($this->posxdiscount - $this->posxunit - 1, 2, $outputlangs->transnoentities("Unit"), '', 'C'); } } @@ -1345,12 +1345,12 @@ class pdf_aurore extends ModelePDFSupplierProposal $pdf->SetTextColor(0, 0, 60); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("RefCustomer")." : " . $outputlangs->convToOutputCharset($object->ref_client), '', 'R'); } -/* PHFAVRE + /* PHFAVRE $posy+=4; $pdf->SetXY($posx,$posy); $pdf->SetTextColor(0,0,60); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("SupplierProposalDate")." : " . dol_print_date($object->date_livraison,"day",false,$outputlangs,true), '', 'R'); -*/ + $pdf->MultiCell(100, 3, $outputlangs->transnoentities("SupplierProposalDate")." : " . dol_print_date($object->date_livraison, "day", false, $outputlangs, true), '', 'R'); + */ if ($object->thirdparty->code_fournisseur) { diff --git a/htdocs/core/tpl/advtarget.tpl.php b/htdocs/core/tpl/advtarget.tpl.php index b59ca8c2b22..d1b1dfe1093 100644 --- a/htdocs/core/tpl/advtarget.tpl.php +++ b/htdocs/core/tpl/advtarget.tpl.php @@ -47,499 +47,492 @@ print ''; - print load_fiche_titre($langs->trans("AdvTgtTitle")); +print load_fiche_titre($langs->trans("AdvTgtTitle")); - print '
    ' . "\n"; - print '
    ' . "\n"; - print '' . "\n"; - print '' . "\n"; - print '
    ' . "\n"; +print '
    ' . "\n"; +print '' . "\n"; +print '' . "\n"; +print '' . "\n"; +print '
    ' . "\n"; - print '' . "\n"; - print '' . "\n"; +print '' . "\n"; - print '' . "\n"; +print '' . "\n"; +print '' . "\n"; - print '' . "\n"; +print '' . "\n"; - print '' . "\n"; +print '' . "\n"; - // Customer name - print '' . "\n"; +// Customer name +print '' . "\n"; - // Code Client - print '' . "\n"; +// Code Client +print '' . "\n"; - // Address Client - print '' . "\n"; +// Address Client +print '' . "\n"; - // Zip Client - print '' . "\n"; +// Zip Client +print '' . "\n"; - // City Client - print '' . "\n"; +// City Client +print '' . "\n"; - // Customer Country - print '' . "\n"; +// Customer Country +print '' . "\n"; - // State Customer - print '' . "\n"; +// State Customer +print '' . "\n"; - // Mother Company - print '' . "\n"; +// Mother Company +print '' . "\n"; - // Prospect/Customer - $selected = $array_query['cust_typecust']; - print '' . "\n"; +// Prospect/Customer +$selected = $array_query['cust_typecust']; +print '' . "\n"; - // Prospection status - print '' . "\n"; +// Prospection status +print '' . "\n"; - // Prospection comm status - print '' . "\n"; +// Prospection comm status +print '' . "\n"; - // Customer Type - print '' . "\n"; +// Customer Type +print '' . "\n"; - // Staff number - print '' . "\n"; +// Staff number +print '' . "\n"; - // Sales manager - print '' . "\n"; +// Sales manager +print '' . "\n"; - // Customer Default Langauge - if (! empty($conf->global->MAIN_MULTILANGS)) { - print '' . "\n"; +} + +if (! empty($conf->categorie->enabled) && $user->rights->categorie->lire) { + // Customer Categories + print '' . "\n"; +} + +// Standard Extrafield feature +if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) { + $elementtype = Societe::$table_element; + // fetch optionals attributes and labels + dol_include_once('/core/class/extrafields.class.php'); + $extrafields = new ExtraFields($db); + $extrafields->fetch_name_optionals_label($elementtype); + foreach ($extrafields->attributes[$elementtype]['label'] as $key => $val) { + if ($key != 'ts_nameextra' && $key != 'ts_payeur') { + print '' . "\n"; - } + print '' . "\n"; - } - - // Standard Extrafield feature - if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) { - $elementtype = Societe::$table_element; - // fetch optionals attributes and labels - dol_include_once('/core/class/extrafields.class.php'); - $extrafields = new ExtraFields($db); - $extrafields->fetch_name_optionals_label($elementtype); - foreach ($extrafields->attributes[$elementtype]['label'] as $key => $val) { - if ($key != 'ts_nameextra' && $key != 'ts_payeur') { - print '' . "\n"; - } - } - } else { - $std_soc = new Societe($db); - $action_search = 'query'; - - // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context - include_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php'; - $hookmanager = new HookManager($db); - $hookmanager->initHooks(array ('thirdpartycard')); - - $parameters=array(); - if (! empty($advTarget->id)) { - $parameters = array('array_query' => $advTarget->filtervalue); - } - // Other attributes - $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $std_soc, $action_search); - print $hookmanager->resPrint; - } - - // State Contact - print '' . "\n"; - - // Civility - print ''; - - // contact name - print '' . "\n"; - print '' . "\n"; - - // Contact Country - print '' . "\n"; - - // Never send mass mailing - print '' . "\n"; - - // Contact Date Create - print '' . "\n"; - - // Contact update Create - print '' . "\n"; - - if (! empty($conf->categorie->enabled) && $user->rights->categorie->lire) { - // Customer Categories - print '' . "\n"; - } - - // Standard Extrafield feature - if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) { - $elementype=Contact::$table_element; - // fetch optionals attributes and labels - dol_include_once('/core/class/extrafields.class.php'); - $extrafields = new ExtraFields($db); - $extrafields->fetch_name_optionals_label($elementype); - foreach($extrafields->attributes[$elementtype]['type'] as $key=>&$value) { - if($value == 'radio')$value = 'select'; - } - - foreach ($extrafields->attributes[$elementtype]['label'] as $key => $val) - { - print '' . "\n"; } + } +} else { + $std_soc = new Societe($db); + $action_search = 'query'; - print '' . "\n"; - print '' . "\n"; - print '' . "\n"; - print '
    ' . "\n"; +print '
    ' . "\n"; - print '' . "\n"; +print '' . "\n"; - print '
    ' . $langs->trans('AdvTgtNameTemplate') . ''; - if (! empty($template_id)) { - $default_template = $template_id; - } else { - $default_template = $advTarget->id; - } - print $formadvtargetemaling->selectAdvtargetemailingTemplate('template_id', $default_template, 0, $advTarget->type_element); - print ''; - print ''; - print ''; - print $langs->trans('AdvTgtOrCreateNewFilter'); - print ''; - print ''; - print '' . "\n"; - print '
    ' . $langs->trans('AdvTgtNameTemplate') . ''; +if (! empty($template_id)) { + $default_template = $template_id; +} else { + $default_template = $advTarget->id; +} +print $formadvtargetemaling->selectAdvtargetemailingTemplate('template_id', $default_template, 0, $advTarget->type_element); +print ''; +print ''; +print ''; +print $langs->trans('AdvTgtOrCreateNewFilter'); +print ''; +print ''; +print '' . "\n"; +print '
    ' . $langs->trans('AdvTgtTypeOfIncude') . ''; - print $form->selectarray('type_of_target', $advTarget->select_target_type, $array_query['type_of_target']); - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtTypeOfIncudeHelp"), 1, 'help'); - print '
    ' . $langs->trans('AdvTgtTypeOfIncude') . ''; +print $form->selectarray('type_of_target', $advTarget->select_target_type, $array_query['type_of_target']); +print '' . "\n"; +print $form->textwithpicto('', $langs->trans("AdvTgtTypeOfIncudeHelp"), 1, 'help'); +print '
    ' . $langs->trans('ThirdPartyName'); - if (! empty($array_query['cust_name'])) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); - print '
    ' . $langs->trans('ThirdPartyName'); +if (! empty($array_query['cust_name'])) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); +print '
    ' . $langs->trans('CustomerCode'); - if (! empty($array_query['cust_code'])) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); - print '
    ' . $langs->trans('CustomerCode'); +if (! empty($array_query['cust_code'])) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); +print '
    ' . $langs->trans('Address'); - if (! empty($array_query['cust_adress'])) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); - print '
    ' . $langs->trans('Address'); +if (! empty($array_query['cust_adress'])) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); +print '
    ' . $langs->trans('Zip'); - if (! empty($array_query['cust_zip'])) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); - print '
    ' . $langs->trans('Zip'); +if (! empty($array_query['cust_zip'])) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); +print '
    ' . $langs->trans('Town'); - if (! empty($array_query['cust_city'])) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); - print '
    ' . $langs->trans('Town'); +if (! empty($array_query['cust_city'])) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); +print '
    ' . $langs->trans("Country"); - if (count($array_query['cust_country']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $formadvtargetemaling->multiselectCountry('cust_country', $array_query['cust_country']); - print '' . "\n"; - print '
    ' . $langs->trans("Country"); +if (count($array_query['cust_country']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $formadvtargetemaling->multiselectCountry('cust_country', $array_query['cust_country']); +print '' . "\n"; +print '
    ' . $langs->trans('Status') . ' ' . $langs->trans('ThirdParty'); - if (count($array_query['cust_status']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print ''; - print $formadvtargetemaling->advMultiselectarray( - 'cust_status', array ( - '0' => $langs->trans('ActivityCeased'), - '1' => $langs->trans('InActivity') - ), - $array_query['cust_status'] - ); - print '' . "\n"; - print '
    ' . $langs->trans('Status') . ' ' . $langs->trans('ThirdParty'); +if (count($array_query['cust_status']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print ''; +print $formadvtargetemaling->advMultiselectarray( + 'cust_status', array ( + '0' => $langs->trans('ActivityCeased'), + '1' => $langs->trans('InActivity') + ), + $array_query['cust_status'] +); +print '' . "\n"; +print '
    ' . $langs->trans("Maison mère"); - if (! empty($array_query['cust_mothercompany'])) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print ''; - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); - print '
    ' . $langs->trans("Maison mère"); +if (! empty($array_query['cust_mothercompany'])) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print ''; +print '' . "\n"; +print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); +print '
    ' . $langs->trans('ProspectCustomer') . ' ' . $langs->trans('ThirdParty'); - if (count($array_query['cust_typecust']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print ''; - $options_array = array ( - 2 => $langs->trans('Prospect'), - 3 => $langs->trans('ProspectCustomer'), - 1 => $langs->trans('Customer'), - 0 => $langs->trans('NorProspectNorCustomer') - ); - print $formadvtargetemaling->advMultiselectarray('cust_typecust', $options_array, $array_query['cust_typecust']); - print '' . "\n"; - print '
    ' . $langs->trans('ProspectCustomer') . ' ' . $langs->trans('ThirdParty'); +if (count($array_query['cust_typecust']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print ''; +$options_array = array ( + 2 => $langs->trans('Prospect'), + 3 => $langs->trans('ProspectCustomer'), + 1 => $langs->trans('Customer'), + 0 => $langs->trans('NorProspectNorCustomer') +); +print $formadvtargetemaling->advMultiselectarray('cust_typecust', $options_array, $array_query['cust_typecust']); +print '' . "\n"; +print '
    ' . $langs->trans('ProspectLevel'); - if (count($array_query['cust_prospect_status']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print ''; - print $formadvtargetemaling->multiselectProspectionStatus($array_query['cust_prospect_status'], 'cust_prospect_status', 1); - print '' . "\n"; - print '
    ' . $langs->trans('ProspectLevel'); +if (count($array_query['cust_prospect_status']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print ''; +print $formadvtargetemaling->multiselectProspectionStatus($array_query['cust_prospect_status'], 'cust_prospect_status', 1); +print '' . "\n"; +print '
    ' . $langs->trans('StatusProsp'); - if (count($array_query['cust_comm_status']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print ''; - print $formadvtargetemaling->advMultiselectarray('cust_comm_status', $advTarget->type_statuscommprospect, $array_query['cust_comm_status']); - print '' . "\n"; - print '
    ' . $langs->trans('StatusProsp'); +if (count($array_query['cust_comm_status']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print ''; +print $formadvtargetemaling->advMultiselectarray('cust_comm_status', $advTarget->type_statuscommprospect, $array_query['cust_comm_status']); +print '' . "\n"; +print '
    ' . $langs->trans("ThirdPartyType"); - if (count($array_query['cust_typeent']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $formadvtargetemaling->advMultiselectarray('cust_typeent', $formcompany->typent_array(0, " AND id <> 0"), $array_query['cust_typeent']); - print '' . "\n"; - print '
    ' . $langs->trans("ThirdPartyType"); +if (count($array_query['cust_typeent']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $formadvtargetemaling->advMultiselectarray('cust_typeent', $formcompany->typent_array(0, " AND id <> 0"), $array_query['cust_typeent']); +print '' . "\n"; +print '
    ' . $langs->trans("Staff"); - if (count($array_query['cust_effectif_id']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print ''; - print $formadvtargetemaling->advMultiselectarray("cust_effectif_id", $formcompany->effectif_array(0, " AND id <> 0"), $array_query['cust_effectif_id']); - print '' . "\n"; - print '
    ' . $langs->trans("Staff"); +if (count($array_query['cust_effectif_id']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print ''; +print $formadvtargetemaling->advMultiselectarray("cust_effectif_id", $formcompany->effectif_array(0, " AND id <> 0"), $array_query['cust_effectif_id']); +print '' . "\n"; +print '
    ' . $langs->trans("SalesRepresentatives"); - if (count($array_query['cust_saleman']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $formadvtargetemaling->multiselectselectSalesRepresentatives('cust_saleman', $array_query['cust_saleman'], $user); - print '' . "\n"; - print '
    ' . $langs->trans("SalesRepresentatives"); +if (count($array_query['cust_saleman']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $formadvtargetemaling->multiselectselectSalesRepresentatives('cust_saleman', $array_query['cust_saleman'], $user); +print '' . "\n"; +print '
    ' . $langs->trans("DefaultLang"); - if (count($array_query['cust_language']) > 0) { +// Customer Default Langauge +if (! empty($conf->global->MAIN_MULTILANGS)) { + print '
    ' . $langs->trans("DefaultLang"); + if (count($array_query['cust_language']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); + } + print '' . "\n"; + print $formadvtargetemaling->multiselectselectLanguage('cust_language', $array_query['cust_language']); + print '' . "\n"; + print '
    ' . $langs->trans("CustomersCategoryShort"); + if (count($array_query['cust_categ']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); + } + print '' . "\n"; + print $formadvtargetemaling->multiselectCustomerCategories('cust_categ', $array_query['cust_categ']); + print '' . "\n"; + print '
    ' . $extrafields->attributes[$elementtype]['label'][$key]; + if (! empty($array_query['options_' . $key]) || (is_array($array_query['options_' . $key]) && count($array_query['options_' . $key]) > 0)) { print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); } - print '' . "\n"; - print $formadvtargetemaling->multiselectselectLanguage('cust_language', $array_query['cust_language']); - print '' . "\n"; - print '
    '; + if (($extrafields->attributes[$elementtype]['type'][$key] == 'varchar') || ($extrafields->attributes[$elementtype]['type'][$key] == 'text')) { + print '' . "\n"; + print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); + } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'int') || ($extrafields->attributes[$elementtype]['type'][$key] == 'double')) { + print $langs->trans("AdvTgtMinVal") . ''; + print $langs->trans("AdvTgtMaxVal") . ''; + print '' . "\n"; + print $form->textwithpicto('', $langs->trans("AdvTgtSearchIntHelp"), 1, 'help'); + } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'date') || ($extrafields->attributes[$elementtype]['type'][$key] == 'datetime')) { + print ''; + print '
    ' . $langs->trans("AdvTgtStartDt") . ''; + print $form->selectDate('', 'options_' . $key . '_st_dt'); + print '' . $langs->trans("AdvTgtEndDt") . ''; + print $form->selectDate('', 'options_' . $key . '_end_dt'); + print '
    '; - if (! empty($conf->categorie->enabled) && $user->rights->categorie->lire) { - // Customer Categories - print '
    ' . $langs->trans("CustomersCategoryShort"); - if (count($array_query['cust_categ']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $formadvtargetemaling->multiselectCustomerCategories('cust_categ', $array_query['cust_categ']); - print '' . "\n"; - print '
    ' . $extrafields->attributes[$elementtype]['label'][$key]; - if (! empty($array_query['options_' . $key]) || (is_array($array_query['options_' . $key]) && count($array_query['options_' . $key]) > 0)) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print ''; - if (($extrafields->attributes[$elementtype]['type'][$key] == 'varchar') || ($extrafields->attributes[$elementtype]['type'][$key] == 'text')) { - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); - } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'int') || ($extrafields->attributes[$elementtype]['type'][$key] == 'double')) { - print $langs->trans("AdvTgtMinVal") . ''; - print $langs->trans("AdvTgtMaxVal") . ''; - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchIntHelp"), 1, 'help'); - } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'date') || ($extrafields->attributes[$elementtype]['type'][$key] == 'datetime')) { - print ''; - print '
    ' . $langs->trans("AdvTgtStartDt") . ''; - print $form->selectDate('', 'options_' . $key . '_st_dt'); - print '' . $langs->trans("AdvTgtEndDt") . ''; - print $form->selectDate('', 'options_' . $key . '_end_dt'); - print '
    '; - - print '
    ' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchDtHelp"), 1, 'help'); - } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'boolean')) { - print $form->selectarray( - 'options_' . $key, - array ( - '' => '', - '1' => $langs->trans('Yes'), - '0' => $langs->trans('No') - ), - $array_query['options_' . $key] - ); - print '' . "\n"; - } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'select')) { - print $formadvtargetemaling->advMultiselectarray('options_' . $key, $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key]); - print '' . "\n"; - } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'sellist')) { - print $formadvtargetemaling->advMultiselectarraySelllist('options_' . $key, $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key]); - print '' . "\n"; - } else { - print ''; - print '
    '; - if (is_array($array_query['options_' . $key])) { - print $extrafields->showInputField($key, implode(',', $array_query['options_' . $key])); - } else { - print $extrafields->showInputField($key, $array_query['options_' . $key]); - } - print '
    '; - - print '
    ' . "\n"; - } - print '
    ' . $langs->trans('Status') . ' ' . $langs->trans('Contact'); - if (count($array_query['contact_status']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print ''; - print $formadvtargetemaling->advMultiselectarray( - 'contact_status', - array ( - '0' => $langs->trans('ActivityCeased'), - '1' => $langs->trans('InActivity') - ), - $array_query['contact_status'] - ); - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtContactHelp"), 1, 'help'); - print '
    ' . $langs->trans("UserTitle"); - if (count($array_query['contact_civility']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print ''; - print $formadvtargetemaling->multiselectCivility('contact_civility', $array_query['contact_civility']); - print '
    ' . $langs->trans('Contact') . ' ' . $langs->trans('Lastname'); - if (! empty($array_query['contact_lastname'])) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); - print '
    ' . $langs->trans('Contact') . ' ' . $langs->trans('Firstname'); - if (! empty($array_query['contact_firstname'])) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); - print '
    ' . $langs->trans('Contact') . ' ' . $langs->trans("Country"); - if (count($array_query['contact_country']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $formadvtargetemaling->multiselectCountry('contact_country', $array_query['contact_country']); - print '' . "\n"; - print '
    ' . $langs->trans('Contact') . ' ' . $langs->trans("No_Email"); - if (! empty($array_query['contact_no_email'])) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $form->selectarray( - 'contact_no_email', - array ( - '' => '', - '1' => $langs->trans('Yes'), - '0' => $langs->trans('No') - ), - $array_query['contact_no_email'] - ); - print '' . "\n"; - print '
    ' . $langs->trans('Contact') . ' ' . $langs->trans("DateCreation"); - if (! empty($array_query['contact_create_st_dt'])) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print ''; - print '
    ' . $langs->trans("AdvTgtStartDt") . ''; - print $form->selectDate($array_query['contact_create_st_dt'], 'contact_create_st_dt', 0, 0, 1, 'find_customer', 1, 1); - print '' . $langs->trans("AdvTgtEndDt") . ''; - print $form->selectDate($array_query['contact_create_end_dt'], 'contact_create_end_dt', 0, 0, 1, 'find_customer', 1, 1); - print '
    '; - print '
    ' . "\n"; - print '
    ' . $langs->trans('Contact') . ' ' . $langs->trans("DateLastModification"); - if (! empty($array_query['contact_update_st_dt'])) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print ''; - print '
    ' . $langs->trans("AdvTgtStartDt") . ''; - print $form->selectDate($array_query['contact_update_st_dt'], 'contact_update_st_dt', 0, 0, 1, 'find_customer', 1, 1); - print '' . $langs->trans("AdvTgtEndDt") . ''; - print $form->selectDate($array_query['contact_update_end_dt'], 'contact_update_end_dt', 0, 0, 1, 'find_customer', 1, 1); - print '
    '; - print '
    ' . "\n"; - print '
    ' . $langs->trans("ContactCategoriesShort"); - if (count($array_query['contact_categ']) > 0) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print '' . "\n"; - print $formadvtargetemaling->multiselectContactCategories('contact_categ', $array_query['contact_categ']); - print '' . "\n"; - print '
    ' . $extrafields->attributes[$elementtype]['label'][$key]; - if ($array_query['options_' . $key . '_cnct'] != '' || (is_array($array_query['options_' . $key . '_cnct']) && count($array_query['options_' . $key . '_cnct']) > 0)) { - print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); - } - print ''; - if (($extrafields->attributes[$elementtype]['type'][$key] == 'varchar') || ($extrafields->attributes[$elementtype]['type'][$key] == 'text')) { - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); - } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'int') || ($extrafields->attributes[$elementtype]['type'][$key] == 'double')) { - print $langs->trans("AdvTgtMinVal") . ''; - print $langs->trans("AdvTgtMaxVal") . ''; - print '' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchIntHelp"), 1, 'help'); - } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'date') || ($extrafields->attributes[$elementtype]['type'][$key] == 'datetime')) { - print ''; - print '
    ' . $langs->trans("AdvTgtStartDt") . ''; - print $form->selectDate('', 'options_' . $key . '_st_dt' . '_cnct'); - print '' . $langs->trans("AdvTgtEndDt") . ''; - print $form->selectDate('', 'options_' . $key . '_end_dt' . '_cnct'); - print '
    '; - - print '
    ' . "\n"; - print $form->textwithpicto('', $langs->trans("AdvTgtSearchDtHelp"), 1, 'help'); - } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'boolean')) { - print $form->selectarray( - 'options_' . $key . '_cnct', - array ( - '' => '', - '1' => $langs->trans('Yes'), - '0' => $langs->trans('No') - ), - $array_query['options_' . $key . '_cnct'] - ); - print '' . "\n"; - } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'select')) { - print $formadvtargetemaling->advMultiselectarray('options_' . $key . '_cnct', $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key . '_cnct']); - print '' . "\n"; - } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'sellist')) { - print $formadvtargetemaling->advMultiselectarraySelllist('options_' . $key . '_cnct', $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key . '_cnct']); - print '' . "\n"; + print '' . "\n"; + print $form->textwithpicto('', $langs->trans("AdvTgtSearchDtHelp"), 1, 'help'); + } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'boolean')) { + print $form->selectarray( + 'options_' . $key, + array ( + '' => '', + '1' => $langs->trans('Yes'), + '0' => $langs->trans('No') + ), + $array_query['options_' . $key] + ); + print '' . "\n"; + } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'select')) { + print $formadvtargetemaling->advMultiselectarray('options_' . $key, $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key]); + print '' . "\n"; + } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'sellist')) { + print $formadvtargetemaling->advMultiselectarraySelllist('options_' . $key, $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key]); + print '' . "\n"; + } else { + print ''; + print '' . "\n"; + print '
    '; + if (is_array($array_query['options_' . $key])) { + print $extrafields->showInputField($key, implode(',', $array_query['options_' . $key])); } else { - print ''; - print '
    '; - if (is_array($array_query['options_' . $key . '_cnct'])) { - print $extrafields->showInputField($key, implode(',', $array_query['options_' . $key . '_cnct']), '', '_cnct'); - } else { - print $extrafields->showInputField($key, $array_query['options_' . $key . '_cnct'], '', '_cnct'); - } - print '
    '; - - print '
    ' . "\n"; + print $extrafields->showInputField($key, $array_query['options_' . $key]); } - print '
    '; + + print '
    ' . "\n"; } + print '
    ' . "\n"; + // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context + include_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php'; + $hookmanager = new HookManager($db); + $hookmanager->initHooks(array ('thirdpartycard')); - print '' . "\n"; + $parameters=array(); + if (! empty($advTarget->id)) { + $parameters = array('array_query' => $advTarget->filtervalue); + } + // Other attributes + $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $std_soc, $action_search); + print $hookmanager->resPrint; +} - print '
    ' . "\n"; - print '' . "\n"; - print '' . "\n"; +// State Contact +print '' . $langs->trans('Status') . ' ' . $langs->trans('Contact'); +if (count($array_query['contact_status']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print ''; +print $formadvtargetemaling->advMultiselectarray( + 'contact_status', + array ( + '0' => $langs->trans('ActivityCeased'), + '1' => $langs->trans('InActivity') + ), + $array_query['contact_status'] +); +print '' . "\n"; +print $form->textwithpicto('', $langs->trans("AdvTgtContactHelp"), 1, 'help'); +print '' . "\n"; - print '
    '; - print ''; - print load_fiche_titre($langs->trans("ToClearAllRecipientsClickHere")); - print ''; - print ''; - print ''; - print ''; - print '
    '; - print '
    '; - print '
    '; +// Civility +print '' . $langs->trans("UserTitle"); +if (count($array_query['contact_civility']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print ''; +print $formadvtargetemaling->multiselectCivility('contact_civility', $array_query['contact_civility']); +print ''; + +// contact name +print '' . $langs->trans('Contact') . ' ' . $langs->trans('Lastname'); +if (! empty($array_query['contact_lastname'])) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); +print '' . "\n"; +print '' . $langs->trans('Contact') . ' ' . $langs->trans('Firstname'); +if (! empty($array_query['contact_firstname'])) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); +print '' . "\n"; + +// Contact Country +print '' . $langs->trans('Contact') . ' ' . $langs->trans("Country"); +if (count($array_query['contact_country']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $formadvtargetemaling->multiselectCountry('contact_country', $array_query['contact_country']); +print '' . "\n"; +print '' . "\n"; + +// Never send mass mailing +print '' . $langs->trans('Contact') . ' ' . $langs->trans("No_Email"); +if (! empty($array_query['contact_no_email'])) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print $form->selectarray( + 'contact_no_email', + array ( + '' => '', + '1' => $langs->trans('Yes'), + '0' => $langs->trans('No') + ), + $array_query['contact_no_email'] +); +print '' . "\n"; +print '' . "\n"; + +// Contact Date Create +print '' . $langs->trans('Contact') . ' ' . $langs->trans("DateCreation"); +if (! empty($array_query['contact_create_st_dt'])) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print ''; +print '
    ' . $langs->trans("AdvTgtStartDt") . ''; +print $form->selectDate($array_query['contact_create_st_dt'], 'contact_create_st_dt', 0, 0, 1, 'find_customer', 1, 1); +print '' . $langs->trans("AdvTgtEndDt") . ''; +print $form->selectDate($array_query['contact_create_end_dt'], 'contact_create_end_dt', 0, 0, 1, 'find_customer', 1, 1); +print '
    '; +print '' . "\n"; +print '' . "\n"; + +// Contact update Create +print '' . $langs->trans('Contact') . ' ' . $langs->trans("DateLastModification"); +if (! empty($array_query['contact_update_st_dt'])) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); +} +print '' . "\n"; +print ''; +print '
    ' . $langs->trans("AdvTgtStartDt") . ''; +print $form->selectDate($array_query['contact_update_st_dt'], 'contact_update_st_dt', 0, 0, 1, 'find_customer', 1, 1); +print '' . $langs->trans("AdvTgtEndDt") . ''; +print $form->selectDate($array_query['contact_update_end_dt'], 'contact_update_end_dt', 0, 0, 1, 'find_customer', 1, 1); +print '
    '; +print '' . "\n"; +print '' . "\n"; + +if (! empty($conf->categorie->enabled) && $user->rights->categorie->lire) { + // Customer Categories + print '' . $langs->trans("ContactCategoriesShort"); + if (count($array_query['contact_categ']) > 0) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); + } + print '' . "\n"; + print $formadvtargetemaling->multiselectContactCategories('contact_categ', $array_query['contact_categ']); + print '' . "\n"; + print '' . "\n"; +} + +// Standard Extrafield feature +if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) { + $elementype=Contact::$table_element; + // fetch optionals attributes and labels + dol_include_once('/core/class/extrafields.class.php'); + $extrafields = new ExtraFields($db); + $extrafields->fetch_name_optionals_label($elementype); + foreach($extrafields->attributes[$elementtype]['type'] as $key=>&$value) { + if($value == 'radio')$value = 'select'; + } + + foreach ($extrafields->attributes[$elementtype]['label'] as $key => $val) { + print '' . $extrafields->attributes[$elementtype]['label'][$key]; + if ($array_query['options_' . $key . '_cnct'] != '' || (is_array($array_query['options_' . $key . '_cnct']) && count($array_query['options_' . $key . '_cnct']) > 0)) { + print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); + } + print ''; + if (($extrafields->attributes[$elementtype]['type'][$key] == 'varchar') || ($extrafields->attributes[$elementtype]['type'][$key] == 'text')) { + print '' . "\n"; + print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); + } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'int') || ($extrafields->attributes[$elementtype]['type'][$key] == 'double')) { + print $langs->trans("AdvTgtMinVal") . ''; + print $langs->trans("AdvTgtMaxVal") . ''; + print '' . "\n"; + print $form->textwithpicto('', $langs->trans("AdvTgtSearchIntHelp"), 1, 'help'); + } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'date') || ($extrafields->attributes[$elementtype]['type'][$key] == 'datetime')) { + print ''; + print '
    ' . $langs->trans("AdvTgtStartDt") . ''; + print $form->selectDate('', 'options_' . $key . '_st_dt' . '_cnct'); + print '' . $langs->trans("AdvTgtEndDt") . ''; + print $form->selectDate('', 'options_' . $key . '_end_dt' . '_cnct'); + print '
    '; + print '' . "\n"; + print $form->textwithpicto('', $langs->trans("AdvTgtSearchDtHelp"), 1, 'help'); + } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'boolean')) { + print $form->selectarray( + 'options_' . $key . '_cnct', + array ( + '' => '', + '1' => $langs->trans('Yes'), + '0' => $langs->trans('No') + ), + $array_query['options_' . $key . '_cnct'] + ); + print '' . "\n"; + } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'select')) { + print $formadvtargetemaling->advMultiselectarray('options_' . $key . '_cnct', $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key . '_cnct']); + print '' . "\n"; + } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'sellist')) { + print $formadvtargetemaling->advMultiselectarraySelllist('options_' . $key . '_cnct', $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key . '_cnct']); + print '' . "\n"; + } else { + print ''; + print '
    '; + if (is_array($array_query['options_' . $key . '_cnct'])) { + print $extrafields->showInputField($key, implode(',', $array_query['options_' . $key . '_cnct']), '', '_cnct'); + } else { + print $extrafields->showInputField($key, $array_query['options_' . $key . '_cnct'], '', '_cnct'); + } + print '
    '; + print '' . "\n"; + } + print '' . "\n"; + } +} +print '' . "\n"; +print '' . "\n"; +print '' . "\n"; +print '' . "\n"; +print '' . "\n"; +print '' . "\n"; +print '' . "\n"; +print '' . "\n"; +print '
    '; +print ''; +print load_fiche_titre($langs->trans("ToClearAllRecipientsClickHere")); +print ''; +print ''; +print ''; +print ''; +print '
    '; +print '
    '; +print '
    '; diff --git a/htdocs/core/tpl/contacts.tpl.php b/htdocs/core/tpl/contacts.tpl.php index ca2cd9e1fd7..821881314d3 100644 --- a/htdocs/core/tpl/contacts.tpl.php +++ b/htdocs/core/tpl/contacts.tpl.php @@ -67,7 +67,7 @@ $userstatic=new User($db); + ?>
    trans("NatureOfContact"); ?>
    trans("ThirdParty"); ?>
    @@ -81,13 +81,13 @@ if ($permission) { if (empty($hideaddcontactforuser)) { - ?> + ?> " /> - '; ?> + '; ?>
    trans("Users"); ?>
    global->MAIN_INFO_SOCIETE_NOM; ?>
    select_dolusers($user->id, 'userid', 0, (! empty($userAlreadySelected)?$userAlreadySelected:null), 0, null, null, 0, 56, '', 0, '', 'minwidth200imp'); ?>
    @@ -101,19 +101,19 @@ if ($permission) {
    ">
    - + ?>
    " /> - '; ?> + '; ?>
    trans("ThirdPartyContacts"); ?>
    socid; ?> @@ -141,7 +141,7 @@ if ($permission) {
    - @@ -155,21 +155,21 @@ if ($permission) {
     
    - element == 'shipping'|| $object->element == 'reception') && is_object($objectsrc)) $tmpobject=$objectsrc; +$arrayofsource=array('internal','external'); // Show both link to user and thirdparties contacts +foreach($arrayofsource as $source) { + $tmpobject=$object; + if (($object->element == 'shipping'|| $object->element == 'reception') && is_object($objectsrc)) $tmpobject=$objectsrc; - $tab = $tmpobject->liste_contact(-1, $source); - $num=count($tab); + $tab = $tmpobject->liste_contact(-1, $source); + $num=count($tab); - $i = 0; - while ($i < $num) { - $var = ! $var; - ?> + $i = 0; + while ($i < $num) { + $var = ! $var; + ?>
    @@ -177,75 +177,68 @@ if ($permission) { trans("ThirdPartyContact"); ?>
    - 0) - { - $companystatic->fetch($tab[$i]['socid']); - echo $companystatic->getNomUrl(1); - } - if ($tab[$i]['socid'] < 0) - { - echo $conf->global->MAIN_INFO_SOCIETE_NOM; - } - if (! $tab[$i]['socid']) - { - echo ' '; - } - ?> + 0) + { + $companystatic->fetch($tab[$i]['socid']); + echo $companystatic->getNomUrl(1); + } + if ($tab[$i]['socid'] < 0) + { + echo $conf->global->MAIN_INFO_SOCIETE_NOM; + } + if (! $tab[$i]['socid']) + { + echo ' '; + } + ?>
    - fetch($tab[$i]['id']); - echo $userstatic->getNomUrl(-1, '', 0, 0, 0, 0, '', 'valignmiddle'); - } - if ($tab[$i]['source']=='external') - { - $contactstatic->fetch($tab[$i]['id']); - echo $contactstatic->getNomUrl(1, '', 0, '', 0, 0); - } - ?> + if ($tab[$i]['source']=='internal') + { + $userstatic->fetch($tab[$i]['id']); + echo $userstatic->getNomUrl(-1, '', 0, 0, 0, 0, '', 'valignmiddle'); + } + if ($tab[$i]['source']=='external') + { + $contactstatic->fetch($tab[$i]['id']); + echo $contactstatic->getNomUrl(1, '', 0, '', 0, 0); + } + ?>
    - - +} - - - -initHooks(array('contacttpl')); - $parameters=array(); - $reshook=$hookmanager->executeHooks('formContactTpl', $parameters, $object, $action); - } -?> - +print "\n"; +print "\n"; +print "\n"; +if (is_object($hookmanager)) { + $hookmanager->initHooks(array('contacttpl')); + $parameters=array(); + $reshook=$hookmanager->executeHooks('formContactTpl', $parameters, $object, $action); +} +print "\n"; diff --git a/htdocs/core/tpl/login.tpl.php b/htdocs/core/tpl/login.tpl.php index 2a0fe46dfdd..ba0c550debc 100644 --- a/htdocs/core/tpl/login.tpl.php +++ b/htdocs/core/tpl/login.tpl.php @@ -63,19 +63,17 @@ if (! isset($conf->global->THEME_ELDY_TOPMENU_BACK1)) $conf->global->THEME_ELDY_ $colorbackhmenu1 = empty($user->conf->THEME_ELDY_ENABLE_PERSONALIZED)?(empty($conf->global->THEME_ELDY_TOPMENU_BACK1)?$colorbackhmenu1:$conf->global->THEME_ELDY_TOPMENU_BACK1):(empty($user->conf->THEME_ELDY_TOPMENU_BACK1)?$colorbackhmenu1:$user->conf->THEME_ELDY_TOPMENU_BACK1); $colorbackhmenu1 = join(',', colorStringToArray($colorbackhmenu1)); // Normalize value to 'x,y,z' -?> - +print "\n"; -global->ADD_UNSPLASH_LOGIN_BACKGROUND)) { // For example $conf->global->ADD_UNSPLASH_LOGIN_BACKGROUND = 'https://source.unsplash.com/random' -?> + ?> - + ?> global->MAIN_LOGIN_BACKGROUND)?'':' style="background-size: cover; background-position: center center; background-attachment: fixed; background-repeat: no-repeat; background-image: url(\''.DOL_URL_ROOT.'/viewimage.php?cache=1&noalt=1&modulepart=mycompany&file=logos/'.urlencode($conf->global->MAIN_LOGIN_BACKGROUND).'\')"'; ?>> - @@ -179,7 +177,7 @@ if ($captcha) { if (preg_match('/\?/', $php_self)) $php_self.='&time='.dol_print_date(dol_now(), 'dayhourlog'); else $php_self.='?time='.dol_print_date(dol_now(), 'dayhourlog'); // TODO: provide accessible captcha variants -?> + ?>
    @@ -279,11 +277,11 @@ if (isset($conf->file->main_authentication) && preg_match('/openid/', $conf->fil // Show error message if defined if (! empty($_SESSION['dol_loginmesg'])) { -?> + ?> -global->MAIN_EASTER_EGG_COMMITSTRIP)) { + ?>
    - @@ -362,7 +360,7 @@ if (! empty($conf->google->enabled) && ! empty($conf->global->MAIN_GOOGLE_AD_CLI { if (empty($conf->dol_use_jmobile)) { -?> + ?>

    -
    -
    + diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index cb8138eedae..73d86fa56a5 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -90,13 +90,11 @@ if (!empty($extrafields)) } } -?> - -\n"; $nolinesbefore=(count($this->lines) == 0 || $forcetoshowtitlelines); if ($nolinesbefore) { -?> + ?> global->MAIN_VIEW_LINE_NUMBER)) { ?> @@ -107,9 +105,9 @@ if ($nolinesbefore) { element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') // We must have same test in printObjectLines { - ?> + ?> trans('SupplierRef'); ?> - trans('VAT'); ?> @@ -156,109 +154,109 @@ if ($nolinesbefore) { ?>   - global->MAIN_VIEW_LINE_NUMBER)) { - $coldisplay++; - echo ''; - } +$coldisplay=0; +// Adds a line numbering column +if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) { $coldisplay++; - ?> + echo ''; +} + +$coldisplay++; +?> - global->MAIN_DISABLE_FREE_LINES)) +$freelines = false; +if (empty($conf->global->MAIN_DISABLE_FREE_LINES)) +{ + $freelines = true; + $forceall=1; // We always force all type for free lines (module product or service means we use predefined product or service) + if ($object->element == 'contrat') { - $freelines = true; - $forceall=1; // We always force all type for free lines (module product or service means we use predefined product or service) - if ($object->element == 'contrat') - { - if (empty($conf->product->enabled) && empty($conf->service->enabled) && empty($conf->global->CONTRACT_SUPPORT_PRODUCTS)) $forceall=-1; // With contract, by default, no choice at all, except if CONTRACT_SUPPORT_PRODUCTS is set - elseif (empty($conf->global->CONTRACT_SUPPORT_PRODUCTS)) $forceall=3; - } - - // Free line - echo ''; - // Show radio free line - if ($forceall >= 0 && (! empty($conf->product->enabled) || ! empty($conf->service->enabled))) - { - echo ''; - echo ' '; - } - else - { - echo ''; - // Show type selector - if ($forceall >= 0) - { - if (empty($conf->product->enabled) || empty($conf->service->enabled)) echo $langs->trans("Type"); - else echo $langs->trans("FreeLineOfType"); - echo ' '; - } - } - - echo $form->select_type_of_lines(isset($_POST["type"])?GETPOST("type", 'alpha', 2):-1, 'type', 1, 1, $forceall); - - echo ''; + if (empty($conf->product->enabled) && empty($conf->service->enabled) && empty($conf->global->CONTRACT_SUPPORT_PRODUCTS)) $forceall=-1; // With contract, by default, no choice at all, except if CONTRACT_SUPPORT_PRODUCTS is set + elseif (empty($conf->global->CONTRACT_SUPPORT_PRODUCTS)) $forceall=3; } - // Predefined product/service - if (! empty($conf->product->enabled) || ! empty($conf->service->enabled)) + // Free line + echo ''; + // Show radio free line + if ($forceall >= 0 && (! empty($conf->product->enabled) || ! empty($conf->service->enabled))) { - if ($forceall >= 0 && $freelines) echo '
    '; - echo ''; - echo ''; +} + +// Predefined product/service +if (! empty($conf->product->enabled) || ! empty($conf->service->enabled)) +{ + if ($forceall >= 0 && $freelines) echo '
    '; + echo ''; + echo ''; + echo ' '; + + $filtertype=''; + if (! empty($object->element) && $object->element == 'contrat' && empty($conf->global->CONTRACT_SUPPORT_PRODUCTS)) $filtertype='1'; + + if (empty($senderissupplier)) + { + $statustoshow = 1; + if (! empty($conf->global->ENTREPOT_EXTRA_STATUS)) + { + // hide products in closed warehouse, but show products for internal transfer + $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, 'warehouseopen,warehouseinternal', GETPOST('combinations', 'array')); } else { - if (! empty($conf->product->enabled) && empty($conf->service->enabled)) echo $langs->trans('PredefinedProductsToPurchase'); - elseif (empty($conf->product->enabled) && ! empty($conf->service->enabled)) echo $langs->trans('PredefinedServicesToPurchase'); - else echo $langs->trans('PredefinedProductsAndServicesToPurchase'); + $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, '', GETPOST('combinations', 'array')); } - echo ''; - echo ' '; - $filtertype=''; - if (! empty($object->element) && $object->element == 'contrat' && empty($conf->global->CONTRACT_SUPPORT_PRODUCTS)) $filtertype='1'; - - if (empty($senderissupplier)) + if (! empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS)) { - $statustoshow = 1; - if (! empty($conf->global->ENTREPOT_EXTRA_STATUS)) - { - // hide products in closed warehouse, but show products for internal transfer - $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, 'warehouseopen,warehouseinternal', GETPOST('combinations', 'array')); - } - else - { - $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, '', GETPOST('combinations', 'array')); - } - - if (! empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS)) - { - ?> + ?> - array('qty'=>'qty','remise_percent' => 'discount','idprod' => 'idprod'), // html id tags that will be edited with which ajax json response key - 'option_disabled' => 'idthatdoesnotexists', // html id to disable once select is done - 'warning' => $langs->trans("NoPriceDefinedForThisSupplier") // translation of an error saved into var 'warning' (for example shown we select a disabled option into combo) - ); - $alsoproductwithnosupplierprice=0; - } - else - { - $ajaxoptions = array( - 'update' => array('remise_percent' => 'discount') // html id tags that will be edited with each ajax json response key - ); - $alsoproductwithnosupplierprice=1; - } + array('qty'=>'qty','remise_percent' => 'discount','idprod' => 'idprod'), // html id tags that will be edited with which ajax json response key + 'option_disabled' => 'idthatdoesnotexists', // html id to disable once select is done + 'warning' => $langs->trans("NoPriceDefinedForThisSupplier") // translation of an error saved into var 'warning' (for example shown we select a disabled option into combo) + ); + $alsoproductwithnosupplierprice=0; + } + else + { + $ajaxoptions = array( + 'update' => array('remise_percent' => 'discount') // html id tags that will be edited with each ajax json response key + ); + $alsoproductwithnosupplierprice=1; + } - $form->select_produits_fournisseurs($object->socid, GETPOST('idprodfournprice'), 'idprodfournprice', '', '', $ajaxoptions, 1, $alsoproductwithnosupplierprice, 'maxwidth300'); + $form->select_produits_fournisseurs($object->socid, GETPOST('idprodfournprice'), 'idprodfournprice', '', '', $ajaxoptions, 1, $alsoproductwithnosupplierprice, 'maxwidth300'); - if (! empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_SUPPLIER_PRODUCTS)) - { - ?> + if (! empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_SUPPLIER_PRODUCTS)) + { + ?> - '; - echo ''; + '; + echo '
    '; +} + +if (is_object($hookmanager) && empty($senderissupplier)) +{ + $parameters=array('fk_parent_line'=>GETPOST('fk_parent_line', 'int')); + $reshook=$hookmanager->executeHooks('formCreateProductOptions', $parameters, $object, $action); + if (!empty($hookmanager->resPrint)) { + print $hookmanager->resPrint; + } +} +if (is_object($hookmanager) && ! empty($senderissupplier)) +{ + $parameters=array('htmlname'=>'addproduct'); + $reshook=$hookmanager->executeHooks('formCreateProductSupplierOptions', $parameters, $object, $action); + if (!empty($hookmanager->resPrint)) { + print $hookmanager->resPrint; + } +} + + +if (! empty($conf->product->enabled) || ! empty($conf->service->enabled)) { + if (!empty($conf->variants->enabled)) { + echo '
    '; } - if (is_object($hookmanager) && empty($senderissupplier)) - { - $parameters=array('fk_parent_line'=>GETPOST('fk_parent_line', 'int')); - $reshook=$hookmanager->executeHooks('formCreateProductOptions', $parameters, $object, $action); - if (!empty($hookmanager->resPrint)) { - print $hookmanager->resPrint; - } - } - if (is_object($hookmanager) && ! empty($senderissupplier)) - { - $parameters=array('htmlname'=>'addproduct'); - $reshook=$hookmanager->executeHooks('formCreateProductSupplierOptions', $parameters, $object, $action); - if (!empty($hookmanager->resPrint)) { - print $hookmanager->resPrint; - } - } + echo '
    '; +} +// Editor wysiwyg +require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; +$nbrows=ROWS_2; +$enabled=(! empty($conf->global->FCKEDITOR_ENABLE_DETAILS)?$conf->global->FCKEDITOR_ENABLE_DETAILS:0); +if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT; +$toolbarname='dolibarr_details'; +if (! empty($conf->global->FCKEDITOR_ENABLE_DETAILS_FULL)) $toolbarname='dolibarr_notes'; +$doleditor=new DolEditor('dp_desc', GETPOST('dp_desc', 'none'), '', (empty($conf->global->MAIN_DOLEDITOR_HEIGHT)?100:$conf->global->MAIN_DOLEDITOR_HEIGHT), $toolbarname, '', false, true, $enabled, $nbrows, '98%'); +$doleditor->Create(); - if (! empty($conf->product->enabled) || ! empty($conf->service->enabled)) { - if (!empty($conf->variants->enabled)) { - echo '
    '; - } +// Show autofill date for recurring invoices +if (! empty($conf->service->enabled) && $object->element == 'facturerec') +{ + echo '

    '; + echo $langs->trans('AutoFillDateFrom').' '; + echo $form->selectyesno('date_start_fill', $line->date_start_fill, 1); + echo ' - '; + echo $langs->trans('AutoFillDateTo').' '; + echo $form->selectyesno('date_end_fill', $line->date_end_fill, 1); + echo '
    '; +} +echo ''; - echo '
    '; - } - - // Editor wysiwyg - require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $nbrows=ROWS_2; - $enabled=(! empty($conf->global->FCKEDITOR_ENABLE_DETAILS)?$conf->global->FCKEDITOR_ENABLE_DETAILS:0); - if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT; - $toolbarname='dolibarr_details'; - if (! empty($conf->global->FCKEDITOR_ENABLE_DETAILS_FULL)) $toolbarname='dolibarr_notes'; - $doleditor=new DolEditor('dp_desc', GETPOST('dp_desc', 'none'), '', (empty($conf->global->MAIN_DOLEDITOR_HEIGHT)?100:$conf->global->MAIN_DOLEDITOR_HEIGHT), $toolbarname, '', false, true, $enabled, $nbrows, '98%'); - $doleditor->Create(); - - // Show autofill date for recurring invoices - if (! empty($conf->service->enabled) && $object->element == 'facturerec') - { - echo '

    '; - echo $langs->trans('AutoFillDateFrom').' '; - echo $form->selectyesno('date_start_fill', $line->date_start_fill, 1); - echo ' - '; - echo $langs->trans('AutoFillDateTo').' '; - echo $form->selectyesno('date_end_fill', $line->date_end_fill, 1); - echo '
    '; - } - echo ''; - - if ($object->element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') // We must have same test in printObjectLines - { - $coldisplay++; - ?> - "> - - - element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') // We must have same test in printObjectLines +{ $coldisplay++; - if ($seller->tva_assuj == "0") echo ''.vatrate(0, true); - else echo $form->load_tva('tva_tx', (isset($_POST["tva_tx"])?GETPOST("tva_tx", 'alpha', 2):-1), $seller, $buyer, 0, 0, '', false, 1); - ?> + ?> + "> +'; +$coldisplay++; +if ($seller->tva_assuj == "0") echo ''.vatrate(0, true); +else echo $form->load_tva('tva_tx', (isset($_POST["tva_tx"])?GETPOST("tva_tx", 'alpha', 2):-1), $seller, $buyer, 0, 0, '', false, 1); +?> "> - multicurrency->enabled) && $this->multicurrency_code != $conf->currency) { - $coldisplay++; +multicurrency->enabled) && $this->multicurrency_code != $conf->currency) { + $coldisplay++; ?> "> - + "> - +$coldisplay++; +?> "> - global->PRODUCT_USE_UNITS) - { - $coldisplay++; - print ''; - print $form->selectUnits($line->fk_unit, "units"); - print ''; - } - $remise_percent = $buyer->remise_percent; - if($object->element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') - { - $remise_percent = $seller->remise_supplier_percent; - } +global->PRODUCT_USE_UNITS) +{ + $coldisplay++; + print ''; + print $form->selectUnits($line->fk_unit, "units"); + print ''; +} +$remise_percent = $buyer->remise_percent; +if($object->element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') +{ + $remise_percent = $seller->remise_supplier_percent; +} - $coldisplay++; - ?> +$coldisplay++; +?> ">% - situation_cycle_ref) { - $coldisplay++; - print '%'; - $coldisplay++; - print ''; - } +if ($this->situation_cycle_ref) { + $coldisplay++; + print '%'; + $coldisplay++; + print ''; +} - if (! empty($usemargins)) - { - if (!empty($user->rights->margins->creer)) { - $coldisplay++; - ?> +if (! empty($usemargins)) +{ + if (!empty($user->rights->margins->creer)) { + $coldisplay++; + ?> - product->enabled) || ! empty($conf->service->enabled)) { ?> + product->enabled) || ! empty($conf->service->enabled)) { ?> - + "> - global->DISPLAY_MARGIN_RATES)) - { - echo '%'; - $coldisplay++; - } - if (! empty($conf->global->DISPLAY_MARK_RATES)) - { - echo '%'; - $coldisplay++; - } + global->DISPLAY_MARGIN_RATES)) + { + echo '%'; + $coldisplay++; + } + if (! empty($conf->global->DISPLAY_MARK_RATES)) + { + echo '%'; + $coldisplay++; } } +} - $coldisplay+=$colspan; - ?> +$coldisplay+=$colspan; +?> @@ -512,37 +510,33 @@ if ((! empty($conf->service->enabled) || ($object->element == 'contrat')) && $da print 'jQuery("#date_endmin").val("'.$conf->global->MAIN_DEFAULT_DATE_END_MIN.'");'; } } - print '' - ?> - - -'; + print ''; + print "\n"; } -?> - - '; if ($companystatic->fk_parent > 0) { - $companyparent->fetch($companystatic->fk_parent); - print $companyparent->getNomUrl(1); + $companyparent->fetch($companystatic->fk_parent); + print $companyparent->getNomUrl(1); } print ""; if (! $i) $totalarray['nbfield']++; diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 6cb1b4abbbe..df803b180ab 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -564,13 +564,13 @@ if (empty($reshook)) $db->begin(); - if (empty($newcu)) { - $sql = "DELETE FROM ".MAIN_DB_PREFIX."societe_account WHERE site = 'stripe' AND fk_soc = ".$object->id." AND status = ".$servicestatus." AND entity = ".$conf->entity; - } else { - $sql = 'UPDATE '.MAIN_DB_PREFIX."societe_account"; - $sql.= " SET key_account = '".$db->escape(GETPOST('key_account', 'alpha'))."'"; - $sql.= " WHERE site = 'stripe' AND fk_soc = ".$object->id." AND status = ".$servicestatus." AND entity = ".$conf->entity; // Keep = here for entity. Only 1 record must be modified ! - } + if (empty($newcu)) { + $sql = "DELETE FROM ".MAIN_DB_PREFIX."societe_account WHERE site = 'stripe' AND fk_soc = ".$object->id." AND status = ".$servicestatus." AND entity = ".$conf->entity; + } else { + $sql = 'UPDATE '.MAIN_DB_PREFIX."societe_account"; + $sql.= " SET key_account = '".$db->escape(GETPOST('key_account', 'alpha'))."'"; + $sql.= " WHERE site = 'stripe' AND fk_soc = ".$object->id." AND status = ".$servicestatus." AND entity = ".$conf->entity; // Keep = here for entity. Only 1 record must be modified ! + } $resql = $db->query($sql); $num = $db->num_rows($resql); @@ -609,37 +609,33 @@ if (empty($reshook)) $db->begin(); - if (empty($newsup)) { - $sql = "DELETE FROM ".MAIN_DB_PREFIX."oauth_token WHERE fk_soc = ".$object->id." AND service = '".$service."' AND entity = ".$conf->entity; - } else { - try { - $stripesup = \Stripe\Account::retrieve($db->escape(GETPOST('key_account_supplier', 'alpha'))); - $tokenstring['stripe_user_id'] = $stripesup->id; - $tokenstring['type'] = $stripesup->type; - $sql = "UPDATE ".MAIN_DB_PREFIX."oauth_token"; - $sql.= " SET tokenstring = '".dol_json_encode($tokenstring)."'"; - $sql.= " WHERE fk_soc = ".$object->id." AND service = '".$service."' AND entity = ".$conf->entity; // Keep = here for entity. Only 1 record must be modified ! - } - catch(Exception $e) - { - $error++; - setEventMessages($e->getMessage(), null, 'errors'); - } + if (empty($newsup)) { + $sql = "DELETE FROM ".MAIN_DB_PREFIX."oauth_token WHERE fk_soc = ".$object->id." AND service = '".$service."' AND entity = ".$conf->entity; + } else { + try { + $stripesup = \Stripe\Account::retrieve($db->escape(GETPOST('key_account_supplier', 'alpha'))); + $tokenstring['stripe_user_id'] = $stripesup->id; + $tokenstring['type'] = $stripesup->type; + $sql = "UPDATE ".MAIN_DB_PREFIX."oauth_token"; + $sql.= " SET tokenstring = '".dol_json_encode($tokenstring)."'"; + $sql.= " WHERE fk_soc = ".$object->id." AND service = '".$service."' AND entity = ".$conf->entity; // Keep = here for entity. Only 1 record must be modified ! + } catch(Exception $e) { + $error++; + setEventMessages($e->getMessage(), null, 'errors'); } + } $resql = $db->query($sql); $num = $db->num_rows($resql); if (empty($num) && !empty($newsup)) { - try { - $stripesup = \Stripe\Account::retrieve($db->escape(GETPOST('key_account_supplier', 'alpha'))); - $tokenstring['stripe_user_id'] = $stripesup->id; - $tokenstring['type'] = $stripesup->type; - $sql = "INSERT INTO ".MAIN_DB_PREFIX."oauth_token (service, fk_soc, entity, tokenstring)"; - $sql .= " VALUES ('".$service."', ".$object->id.", ".$conf->entity.", '".dol_json_encode($tokenstring)."')"; - } - catch(Exception $e) - { + try { + $stripesup = \Stripe\Account::retrieve($db->escape(GETPOST('key_account_supplier', 'alpha'))); + $tokenstring['stripe_user_id'] = $stripesup->id; + $tokenstring['type'] = $stripesup->type; + $sql = "INSERT INTO ".MAIN_DB_PREFIX."oauth_token (service, fk_soc, entity, tokenstring)"; + $sql .= " VALUES ('".$service."', ".$object->id.", ".$conf->entity.", '".dol_json_encode($tokenstring)."')"; + } catch(Exception $e) { $error++; setEventMessages($e->getMessage(), null, 'errors'); } @@ -700,23 +696,25 @@ if (empty($reshook)) { try { if (preg_match('/pm_/', $source)) - { - $payment_method = \Stripe\PaymentMethod::retrieve($source, array("stripe_account" => $stripeacc)); - if ($payment_method) - { - $payment_method->detach(); + { + $payment_method = \Stripe\PaymentMethod::retrieve($source, array("stripe_account" => $stripeacc)); + if ($payment_method) + { + $payment_method->detach(); } } else { - $cu=$stripe->customerStripe($object, $stripeacc, $servicestatus); - $card=$cu->sources->retrieve("$source"); - if ($card) - { - // $card->detach(); Does not work with card_, only with src_ - if (method_exists($card, 'detach')) $card->detach(); - else $card->delete(); - } + $cu = $stripe->customerStripe($object, $stripeacc, $servicestatus); + $card = $cu->sources->retrieve("$source"); + if ($card) { + // $card->detach(); Does not work with card_, only with src_ + if (method_exists($card, 'detach')) { + $card->detach(); + } else { + $card->delete(); + } + } } $url=DOL_URL_ROOT.'/societe/paymentmodes.php?socid='.$object->id; @@ -1296,54 +1294,60 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' } print ""; print ""; - print '
    '; + print '
    '; } // List of Stripe payment modes if (! empty($conf->stripe->enabled) && ! empty($conf->stripeconnect->enabled) && $object->fournisseur && ! empty($stripesupplieracc)) { - print load_fiche_titre($langs->trans('StripeBalance').($stripesupplieracc?' (Stripe connection with StripeConnect account '.$stripesupplieracc.')':' (Stripe connection with keys from Stripe module setup)'), $morehtmlright, ''); - $balance = \Stripe\Balance::retrieve(array("stripe_account" => $stripesupplieracc)); + print load_fiche_titre($langs->trans('StripeBalance').($stripesupplieracc?' (Stripe connection with StripeConnect account '.$stripesupplieracc.')':' (Stripe connection with keys from Stripe module setup)'), $morehtmlright, ''); + $balance = \Stripe\Balance::retrieve(array("stripe_account" => $stripesupplieracc)); print ''."\n"; print ''; print ''; print ''; print ''; - print ''; - print ''; + print ''; + print ''; - $currencybalance = array(); + $currencybalance = array(); if (is_array($balance->available) && count($balance->available)) { foreach ($balance->available as $cpt) { - $arrayzerounitcurrency=array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF'); - if (! in_array($cpt->currency, $arrayzerounitcurrency)) $currencybalance[$cpt->currency]->available=$cpt->amount / 100; - else $currencybalance[$cpt->currency]->available=$cpt->amount; - $currencybalance[$cpt->currency]->currency=$cpt->currency; + $arrayzerounitcurrency=array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF'); + if (! in_array($cpt->currency, $arrayzerounitcurrency)) { + $currencybalance[$cpt->currency]->available=$cpt->amount / 100; + } else { + $currencybalance[$cpt->currency]->available=$cpt->amount; + } + $currencybalance[$cpt->currency]->currency=$cpt->currency; } } - if (is_array($balance->pending) && count($balance->pending)) + if (is_array($balance->pending) && count($balance->pending)) { foreach ($balance->pending as $cpt) { - $arrayzerounitcurrency=array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF'); - if (! in_array($cpt->currency, $arrayzerounitcurrency)) $currencybalance[$cpt->currency]->pending=$currencybalance[$cpt->currency]->available+$cpt->amount / 100; - else $currencybalance[$cpt->currency]->pending=$currencybalance[$cpt->currency]->available+$cpt->amount; + $arrayzerounitcurrency=array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF'); + if (! in_array($cpt->currency, $arrayzerounitcurrency)) { + $currencybalance[$cpt->currency]->pending=$currencybalance[$cpt->currency]->available+$cpt->amount / 100; + } else { + $currencybalance[$cpt->currency]->pending=$currencybalance[$cpt->currency]->available+$cpt->amount; + } } - } + } if (is_array($currencybalance)) { foreach ($currencybalance as $cpt) { - print ''; + print ''; } } - print '
    '.$langs->trans('Currency').''.$langs->trans('Available').''.$langs->trans('Pending').''.$langs->trans('Total').'
    '.$langs->trans('Total').'
    '.$langs->trans("Currency".strtoupper($cpt->currency)).''.price($cpt->available, 0, '', 1, - 1, - 1, strtoupper($cpt->currency)).''.price($cpt->pending, 0, '', 1, - 1, - 1, strtoupper($cpt->currency)).''.price($cpt->available+$cpt->pending, 0, '', 1, - 1, - 1, strtoupper($cpt->currency)).'
    '.$langs->trans("Currency".strtoupper($cpt->currency)).''.price($cpt->available, 0, '', 1, - 1, - 1, strtoupper($cpt->currency)).''.price($cpt->pending, 0, '', 1, - 1, - 1, strtoupper($cpt->currency)).''.price($cpt->available+$cpt->pending, 0, '', 1, - 1, - 1, strtoupper($cpt->currency)).'
    '; - print '
    '; + print ''; + print '
    '; } // List of bank accounts @@ -1394,12 +1398,13 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' $string .= $rib->code_guichet.' '; } elseif ($val == 'BankAccountNumberKey') { $string .= $rib->cle_rib.' '; - /* Already output after - }elseif ($val == 'BIC') { - $string .= $rib->bic.' '; - }elseif ($val == 'IBAN') { - $string .= $rib->iban.' ';*/ } + // Already output after + // } elseif ($val == 'BIC') { + // $string .= $rib->bic.' '; + // } elseif ($val == 'IBAN') { + // $string .= $rib->iban.' ';*/ + //} } if (! empty($rib->label) && $rib->number) { if (! checkBanForAccount($rib)) { diff --git a/htdocs/stripe/admin/stripe.php b/htdocs/stripe/admin/stripe.php index 05d8937f293..e101a40ffbf 100644 --- a/htdocs/stripe/admin/stripe.php +++ b/htdocs/stripe/admin/stripe.php @@ -177,12 +177,12 @@ print "\n"; print ''; print ''; print $langs->trans("StripeLiveEnabled").''; - if ($conf->use_javascript_ajax) { +if ($conf->use_javascript_ajax) { print ajax_constantonoff('STRIPE_LIVE'); - } else { +} else { $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); print $form->selectarray("STRIPE_LIVE", $arrval, $conf->global->STRIPE_LIVE); - } +} print ''; if (empty($conf->stripeconnect->enabled)) @@ -203,7 +203,7 @@ if (empty($conf->stripeconnect->enabled)) print ''.$langs->trans("STRIPE_TEST_WEBHOOK_KEY").''; if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { print ''; - print '   '.$langs->trans("Example").': we_xxxxxxxxxxxxxxxxxxxxxxxx
    '; + print '   '.$langs->trans("Example").': we_xxxxxxxxxxxxxxxxxxxxxxxx
    '; } print ''; print '   '.$langs->trans("Example").': whsec_xxxxxxxxxxxxxxxxxxxxxxxx'; @@ -239,7 +239,7 @@ if (empty($conf->stripeconnect->enabled)) print ''; print img_picto($langs->trans("Disabled"), 'switch_off'); } - //print $endpoint; + //print $endpoint; } else { @@ -275,8 +275,8 @@ if (empty($conf->stripeconnect->enabled)) print ''; print ''.$langs->trans("STRIPE_LIVE_WEBHOOK_KEY").''; if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { - print ''; - print '   '.$langs->trans("Example").': we_xxxxxxxxxxxxxxxxxxxxxxxx
    '; + print ''; + print '   '.$langs->trans("Example").': we_xxxxxxxxxxxxxxxxxxxxxxxx
    '; } print ''; print '   '.$langs->trans("Example").': whsec_xxxxxxxxxxxxxxxxxxxxxxxx'; @@ -312,7 +312,7 @@ if (empty($conf->stripeconnect->enabled)) print '
    '; print img_picto($langs->trans("Disabled"), 'switch_off'); } - //print $endpoint; + //print $endpoint; } else { @@ -366,14 +366,14 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) // What is this for ? // Activate Payment Request API if ($conf->global->MAIN_FEATURES_LEVEL >= 2) // TODO Not used by current code { - print ''; + print ''; print $langs->trans("STRIPE_PAYMENT_REQUEST_API").''; - if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STRIPE_PAYMENT_REQUEST_API'); - } else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STRIPE_PAYMENT_REQUEST_API", $arrval, $conf->global->STRIPE_PAYMENT_REQUEST_API); - } + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STRIPE_PAYMENT_REQUEST_API'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STRIPE_PAYMENT_REQUEST_API", $arrval, $conf->global->STRIPE_PAYMENT_REQUEST_API); + } print ''; } @@ -382,12 +382,12 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) // TODO Not used by current code { print ''; print $langs->trans("STRIPE_SEPA_DIRECT_DEBIT").''; - if ($conf->use_javascript_ajax) { - print ajax_constantonoff('STRIPE_SEPA_DIRECT_DEBIT'); - } else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("STRIPE_SEPA_DIRECT_DEBIT", $arrval, $conf->global->STRIPE_SEPA_DIRECT_DEBIT); - } + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('STRIPE_SEPA_DIRECT_DEBIT'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("STRIPE_SEPA_DIRECT_DEBIT", $arrval, $conf->global->STRIPE_SEPA_DIRECT_DEBIT); + } print ''; } diff --git a/htdocs/stripe/charge.php b/htdocs/stripe/charge.php index 99abc1fd510..a9e417aa581 100644 --- a/htdocs/stripe/charge.php +++ b/htdocs/stripe/charge.php @@ -1,5 +1,6 @@ +/* Copyright (C) 2018 Thibault FOUCART + * Copyright (C) 2019 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 @@ -121,29 +122,28 @@ if (!$rowid) //print $list; foreach ($list->data as $charge) { - if ($charge->refunded=='1'){ + if ($charge->refunded=='1') { $status = img_picto($langs->trans("refunded"), 'statut6'); - } elseif ($charge->paid=='1'){ - $status = img_picto($langs->trans("".$charge->status.""), 'statut4'); - } else { + } elseif ($charge->paid=='1') { + $status = img_picto($langs->trans("".$charge->status.""), 'statut4'); + } else { $label="Message: ".$charge->failure_message."
    "; $label.="Réseau: ".$charge->outcome->network_status."
    "; $label.="Statut: ".$langs->trans("".$charge->outcome->seller_message.""); $status = $form->textwithpicto(img_picto($langs->trans("".$charge->status.""), 'statut8'), $label, 1); - } + } - if ($charge->payment_method_details->type=='card') - { + if ($charge->payment_method_details->type=='card') { $type = $langs->trans("card"); - } elseif ($charge->source->type=='card'){ + } elseif ($charge->source->type=='card'){ $type = $langs->trans("card"); - } elseif ($charge->payment_method_details->type=='three_d_secure'){ + } elseif ($charge->payment_method_details->type=='three_d_secure'){ $type = $langs->trans("card3DS"); - } + } - if (! empty($charge->payment_intent)) { - $charge = \Stripe\PaymentIntent::retrieve($charge->payment_intent); - } + if (! empty($charge->payment_intent)) { + $charge = \Stripe\PaymentIntent::retrieve($charge->payment_intent); + } // The metadata FULLTAG is defined by the online payment page $FULLTAG=$charge->metadata->FULLTAG; @@ -211,19 +211,25 @@ if (!$rowid) print "\n"; // Origine print ""; - if ($charge->metadata->dol_type=="order"){ + if ($charge->metadata->dol_type=="order") { $object = new Commande($db); $object->fetch($charge->metadata->dol_id); - if ($object->id > 0) { - print "
    ".img_picto('', 'object_order')." ".$object->ref.""; - } else print $FULLTAG; - } elseif ($charge->metadata->dol_type=="invoice"){ + if ($object->id > 0) { + print "".img_picto('', 'object_order')." ".$object->ref.""; + } else { + print $FULLTAG; + } + } elseif ($charge->metadata->dol_type=="invoice") { $object = new Facture($db); $object->fetch($charge->metadata->dol_id); - if ($object->id > 0) { - print "".img_picto('', 'object_invoice')." ".$object->ref.""; - } else print $FULLTAG; - } else print $FULLTAG; + if ($object->id > 0) { + print "".img_picto('', 'object_invoice')." ".$object->ref.""; + } else { + print $FULLTAG; + } + } else { + print $FULLTAG; + } print "\n"; // Date payment print ''.dol_print_date($charge->created, '%d/%m/%Y %H:%M')."\n"; diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 593447919a7..021a9fac1f9 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -62,6 +62,9 @@ class Stripe extends CommonObject public $code; public $declinecode; + /** + * @var string Message + */ public $message; /** @@ -338,8 +341,11 @@ class Stripe extends CommonObject } elseif ($fee < $conf->global->STRIPE_APPLICATION_FEE_MINIMAL) { $fee = $conf->global->STRIPE_APPLICATION_FEE_MINIMAL; } - if (! in_array($currency_code, $arrayzerounitcurrency)) $stripefee = round($fee * 100); - else $stripefee = round($fee); + if (! in_array($currency_code, $arrayzerounitcurrency)) { + $stripefee = round($fee * 100); + } else { + $stripefee = round($fee); + } $paymentintent = null; diff --git a/htdocs/stripe/payment.php b/htdocs/stripe/payment.php index 45af7923fca..2614c8498f3 100644 --- a/htdocs/stripe/payment.php +++ b/htdocs/stripe/payment.php @@ -186,12 +186,12 @@ if (empty($reshook)) } } - // Check parameters -// if (! GETPOST('paiementcode')) -// { -// setEventMessages($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), null, 'errors'); -// $error++; -// } + // Check parameters + /*if (! GETPOST('paiementcode')) + { + setEventMessages($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), null, 'errors'); + $error++; + }*/ if (! empty($conf->banque->enabled)) { @@ -209,11 +209,11 @@ if (empty($reshook)) $error++; } -// if (empty($datepaye)) -// { -// setEventMessages($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('Date')), null, 'errors'); -// $error++; -// } + /*if (empty($datepaye)) + { + setEventMessages($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('Date')), null, 'errors'); + $error++; + }*/ // Check if payments in both currency if ($totalpayment > 0 && $multicurrency_totalpayment > 0) From 136762dfcdd37f4bc2cd23cf6f6b440f249be128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 17:24:36 +0100 Subject: [PATCH 633/980] Update 10.0.0-11.0.0.sql --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 9f0ee2c5827..45d949a4813 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -400,7 +400,7 @@ ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_bom (fk_bom); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_project (fk_project); -create table llx_mrp_myobject_extrafields +create table llx_mrp_mo_extrafields ( rowid integer AUTO_INCREMENT PRIMARY KEY, tms timestamp, @@ -408,7 +408,7 @@ create table llx_mrp_myobject_extrafields import_key varchar(14) -- import key ) ENGINE=innodb; -ALTER TABLE llx_mrp_myobject_extrafields ADD INDEX idx_fk_object(fk_object); +ALTER TABLE llx_mrp_mo_extrafields ADD INDEX idx_fk_object(fk_object); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_VALIDATE','BOM validated','Executed when a BOM is validated','bom',400); From e271aa631834555dba636c8ccbefaff344414769 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 17:41:40 +0100 Subject: [PATCH 634/980] Update 10.0.0-11.0.0.sql --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 45d949a4813..41dfa2c1c86 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -391,7 +391,7 @@ CREATE TABLE llx_mrp_mo( ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_ref (ref); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_entity (entity); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_soc (fk_soc); -ALTER TABLE llx_mrp_mo ADD CONSTRAINT llx_mrp_mo_fk_user_creat FOREIGN KEY (fk_user_creat) REFERENCES user(rowid); +ALTER TABLE llx_mrp_mo ADD CONSTRAINT fk_mrp_mo_fk_user_creat FOREIGN KEY (fk_user_creat) REFERENCES user(rowid); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_status (status); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_product (fk_product); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_date_start_planned (date_start_planned); From 0052349a6a81f72c3c6ff27762f9f5c30d54b004 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 17:48:11 +0100 Subject: [PATCH 635/980] Update 10.0.0-11.0.0.sql --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 41dfa2c1c86..4a60bb0996c 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -391,7 +391,7 @@ CREATE TABLE llx_mrp_mo( ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_ref (ref); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_entity (entity); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_soc (fk_soc); -ALTER TABLE llx_mrp_mo ADD CONSTRAINT fk_mrp_mo_fk_user_creat FOREIGN KEY (fk_user_creat) REFERENCES user(rowid); +ALTER TABLE llx_mrp_mo ADD CONSTRAINT fk_mrp_mo_fk_user_creat FOREIGN KEY (fk_user_creat) REFERENCES llx_user(rowid); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_status (status); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_product (fk_product); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_date_start_planned (date_start_planned); From 08f182fe984239fd27f97ef0a6925338a885a15b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 17:49:41 +0100 Subject: [PATCH 636/980] Update llx_mrp_mo.key.sql --- htdocs/install/mysql/tables/llx_mrp_mo.key.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/tables/llx_mrp_mo.key.sql b/htdocs/install/mysql/tables/llx_mrp_mo.key.sql index 8cda73f9450..5c218763ff6 100644 --- a/htdocs/install/mysql/tables/llx_mrp_mo.key.sql +++ b/htdocs/install/mysql/tables/llx_mrp_mo.key.sql @@ -18,7 +18,7 @@ ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_ref (ref); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_entity (entity); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_soc (fk_soc); -ALTER TABLE llx_mrp_mo ADD CONSTRAINT llx_mrp_mo_fk_user_creat FOREIGN KEY (fk_user_creat) REFERENCES user(rowid); +ALTER TABLE llx_mrp_mo ADD CONSTRAINT fk_mrp_mo_fk_user_creat FOREIGN KEY (fk_user_creat) REFERENCES llx_user(rowid); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_status (status); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_fk_product (fk_product); ALTER TABLE llx_mrp_mo ADD INDEX idx_mrp_mo_date_start_planned (date_start_planned); From dd5a9f4753852ba37a60fab29f72f438e3f21964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 17:56:49 +0100 Subject: [PATCH 637/980] clean --- .../install/mysql/migration/10.0.0-11.0.0.sql | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 4a60bb0996c..064db3be207 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -59,7 +59,7 @@ UPDATE llx_rights_def SET subperms = 'write' WHERE perms = 'fiscalyear' AND modu ALTER TABLE llx_bom_bom ADD COLUMN duration double(8,4) DEFAULT NULL; ALTER TABLE llx_bom_bomline ADD COLUMN position integer NOT NULL DEFAULT 0; ALTER TABLE llx_bom_bomline ADD COLUMN qty_frozen smallint DEFAULT 0; -ALTER TABLE llx_bom_bomline ADD COLUMN disable_stock_change smallint DEFAULT 0; +ALTER TABLE llx_bom_bomline ADD COLUMN disable_stock_change smallint DEFAULT 0; ALTER TABLE llx_bom_bomline DROP COLUMN rank; @@ -357,32 +357,32 @@ create table llx_c_shipment_package_type rowid integer AUTO_INCREMENT PRIMARY KEY, label varchar(50) NOT NULL, -- Short name description varchar(255), -- Description - active integer DEFAULT 1 NOT NULL, -- Active or not - entity integer DEFAULT 1 NOT NULL -- Multi company id + active integer DEFAULT 1 NOT NULL, -- Active or not + entity integer DEFAULT 1 NOT NULL -- Multi company id )ENGINE=innodb; CREATE TABLE llx_mrp_mo( -- BEGIN MODULEBUILDER FIELDS - rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL, - ref varchar(128) DEFAULT '(PROV)' NOT NULL, - entity integer DEFAULT 1 NOT NULL, - label varchar(255), + rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL, + ref varchar(128) DEFAULT '(PROV)' NOT NULL, + entity integer DEFAULT 1 NOT NULL, + label varchar(255), qty real NOT NULL, - fk_warehouse integer, - fk_soc integer, - note_public text, - note_private text, - date_creation datetime NOT NULL, - tms timestamp, - fk_user_creat integer NOT NULL, - fk_user_modif integer, - import_key varchar(14), - status integer NOT NULL, - fk_product integer NOT NULL, - date_start_planned datetime, - date_end_planned datetime, - fk_bom integer, + fk_warehouse integer, + fk_soc integer, + note_public text, + note_private text, + date_creation datetime NOT NULL, + tms timestamp, + fk_user_creat integer NOT NULL, + fk_user_modif integer, + import_key varchar(14), + status integer NOT NULL, + fk_product integer NOT NULL, + date_start_planned datetime, + date_end_planned datetime, + fk_bom integer, fk_project integer -- END MODULEBUILDER FIELDS ) ENGINE=innodb; From a9447bc9632a8b5c9b8db3864b644a2bf06ca310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 18:08:21 +0100 Subject: [PATCH 638/980] Update html.formmail.class.php --- htdocs/core/class/html.formmail.class.php | 40 +++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index 9981bb269a1..66f05010662 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -41,9 +41,21 @@ class FormMail extends Form */ public $db; - public $withform; // 1=Include HTML form tag and show submit button, 0=Do not include form tag and submit button, -1=Do not include form tag but include submit button + /** + * @var int 1 = Include HTML form tag and show submit button + * 0 = Do not include form tag and submit button + * -1 = Do not include form tag but include submit button + */ + public $withform; + /** + * @var string name from + */ public $fromname; + + /** + * @var string email from + */ public $frommail; /** @@ -52,10 +64,15 @@ class FormMail extends Form public $fromtype; /** - * @var int ID + * @var int from ID */ public $fromid; + /** + * @var int also from robot + */ + public $fromalsorobot; + /** * @var string thirdparty etc */ @@ -66,10 +83,29 @@ class FormMail extends Form */ public $toid; + /** + * @var string replyto name + */ public $replytoname; + + /** + * @var string replyto email + */ public $replytomail; + + /** + * @var string to name + */ public $toname; + + /** + * @var string to email + */ public $tomail; + + /** + * @var string trackid + */ public $trackid; public $withsubstit; // Show substitution array From 043a71442f4503a9826e1acc6f7a18c80b3956e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 27 Oct 2019 20:06:16 +0100 Subject: [PATCH 639/980] contact phone --- htdocs/contact/class/contact.class.php | 10 +++++----- htdocs/contact/list.php | 4 +++- htdocs/core/boxes/box_contacts.php | 4 ++++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index e1403b25578..fc77bd64356 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -1162,11 +1162,11 @@ class Contact extends CommonObject //if ($this->civility_id) $label.= '
    ' . $langs->trans("Civility") . ': '.$this->civility_id; // TODO Translate cibilty_id code if (! empty($this->poste)) $label.= '
    ' . $langs->trans("Poste") . ': '.$this->poste; $label.= '
    ' . $langs->trans("EMail") . ': '.$this->email; - $phonelist=array(); - if ($this->phone_pro) $phonelist[]=$this->phone_pro; - if ($this->phone_mobile) $phonelist[]=$this->phone_mobile; - if ($this->phone_perso) $phonelist[]=$this->phone_perso; - $label.= '
    ' . $langs->trans("Phone") . ': '.join(', ', $phonelist); + $phonelist = array(); + if ($this->phone_pro) $phonelist[] = dol_print_phone($this->phone_pro, $this->country_code, $this->id, 0, '', ' ', 'phone'); + if ($this->phone_mobile) $phonelist[] = dol_print_phone($this->phone_mobile, $this->country_code, $this->id, 0, '', ' ', 'mobile'); + if ($this->phone_perso) $phonelist[] = dol_print_phone($this->phone_perso, $this->country_code, $this->id, 0, '', ' ', 'phone'); + $label.= '
    ' . $langs->trans("Phone") . ': '.implode(' ', $phonelist); $label.= '
    ' . $langs->trans("Address") . ': '.dol_format_address($this, 1, ' ', $langs); $url = DOL_URL_ROOT.'/contact/card.php?id='.$this->id; diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index d31766578b2..a08af2a0fdb 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -277,7 +277,7 @@ $title = (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans(" $sql = "SELECT s.rowid as socid, s.nom as name,"; $sql.= " p.rowid, p.lastname as lastname, p.statut, p.firstname, p.zip, p.town, p.poste, p.email, p.no_email, p.skype,"; $sql.= " p.phone as phone_pro, p.phone_mobile, p.phone_perso, p.fax, p.fk_pays, p.priv, p.datec as date_creation, p.tms as date_update,"; -$sql.= " co.code as country_code"; +$sql.= " co.label as country, co.code as country_code"; // 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 : ''); @@ -796,6 +796,8 @@ while ($i < min($num, $limit)) $contactstatic->phone_mobile=$obj->phone_mobile; $contactstatic->zip=$obj->zip; $contactstatic->town=$obj->town; + $contactstatic->country = $obj->country; + $contactstatic->country_code = $obj->country_code; // ID if (! empty($arrayfields['p.rowid']['checked'])) diff --git a/htdocs/core/boxes/box_contacts.php b/htdocs/core/boxes/box_contacts.php index 82db6c9f240..09e33c5f6a8 100644 --- a/htdocs/core/boxes/box_contacts.php +++ b/htdocs/core/boxes/box_contacts.php @@ -86,7 +86,9 @@ class box_contacts extends ModeleBoxes $sql.= ", sp.address, sp.zip, sp.town, sp.phone, sp.phone_perso, sp.phone_mobile, sp.email as spemail"; $sql.= ", s.nom as socname, s.name_alias, s.email as semail"; $sql.= ", s.client, s.fournisseur, s.code_client, s.code_fournisseur"; + $sql.= ", co.label as country, co.code as country_code"; $sql.= " FROM ".MAIN_DB_PREFIX."socpeople as sp"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as co ON sp.fk_pays = co.rowid"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON sp.fk_soc = s.rowid"; if (! $user->rights->societe->client->voir && ! $user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE sp.entity IN (".getEntity('socpeople').")"; @@ -121,6 +123,8 @@ class box_contacts extends ModeleBoxes $contactstatic->address = $objp->address; $contactstatic->zip = $objp->zip; $contactstatic->town = $objp->town; + $contactstatic->country = $objp->country; + $contactstatic->country_code = $objp->country_code; $societestatic->id = $objp->fk_soc; $societestatic->name = $objp->socname; From 6e03e0ba83662c41cb59ace1a1416ad3752c0dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 28 Oct 2019 08:08:59 +0100 Subject: [PATCH 640/980] Update contact.class.php --- htdocs/contact/class/contact.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index e1403b25578..724b1a93c13 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -1264,7 +1264,7 @@ class Contact extends CommonObject // phpcs:enable global $langs; - if (empty($this->status) || empty($this->statusshort)) + if (empty($this->labelstatus) || empty($this->labelstatusshort)) { $this->labelstatus[0] = 'ActivityCeased'; $this->labelstatusshort[0] = 'ActivityCeased'; From 8a7a7ad0c880e582cccdf8c134375f8c6fe9c0b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 28 Oct 2019 08:16:43 +0100 Subject: [PATCH 641/980] Update contact.class.php --- htdocs/contact/class/contact.class.php | 27 +++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 724b1a93c13..3def7123d24 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -1264,23 +1264,24 @@ class Contact extends CommonObject // phpcs:enable global $langs; - if (empty($this->labelstatus) || empty($this->labelstatusshort)) - { - $this->labelstatus[0] = 'ActivityCeased'; - $this->labelstatusshort[0] = 'ActivityCeased'; - $this->labelstatus[5] = 'ActivityCeased'; - $this->labelstatusshort[5] = 'ActivityCeased'; - $this->labelstatus[1] = 'InActivity'; - $this->labelstatusshort[1] = 'InActivity'; - $this->labelstatus[4] = 'InActivity'; - $this->labelstatusshort[4] = 'InActivity'; - } + $labelstatus = array( + 0 => 'ActivityCeased', + 1 => 'InActivity', + 4 => 'InActivity', + 5 => 'ActivityCeased', + ); + $labelstatusshort = array( + 0 => 'ActivityCeased', + 1 => 'InActivity', + 4 => 'InActivity', + 5 => 'ActivityCeased', + ); $statusType = 'status4'; if ($status==0 || $status==5) $statusType = 'status5'; - $label = $langs->trans($this->labelstatus[$status]); - $labelshort = $langs->trans($this->labelstatusshort[$status]); + $label = $langs->trans($labelstatus[$status]); + $labelshort = $langs->trans($labelstatusshort[$status]); return dolGetStatus($label, $labelshort, '', $statusType, $mode); } From bfe7ad211f5b6bc46377133781b5c19f5a55e01f Mon Sep 17 00:00:00 2001 From: Tobias Sekan Date: Mon, 28 Oct 2019 09:53:27 +0100 Subject: [PATCH 642/980] Fix non-numeric error in sort event function Fix non-numeric error in sort event function and fix mixed space and tab indent, use spaces --- htdocs/comm/action/index.php | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index d503c1bc71d..b56910bb89d 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -1729,11 +1729,24 @@ function dol_color_minus($color, $minus, $minusunit = 16) */ function sort_events_by_date($a, $b) { - if($a->datep != $b->datep) - { - return $a->datep - $b->datep; - } + if($a->datep != $b->datep) + { + return $a->datep - $b->datep; + } - // If both events have the same start time, longest first - return $b->datef - $a->datef; + // If both events have the same start time, longest first + + if(! is_numeric($b->datef)) + { + // when event B have no end timestamp, event B should sort be before event A (All day events on top) + return 1; + } + + if(! is_numeric($a->datef)) + { + // when event A have no end timestamp , event A should sort be before event B (All day events on top) + return -1; + } + + return $b->datef - $a->datef; } From bc3be1275675a73388b1e5813a8cf9c898c8cd83 Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Mon, 28 Oct 2019 10:32:46 +0100 Subject: [PATCH 643/980] FIX contact card state address selected after filling addresss from thirdparty --- 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 f0f18ffc672..61cdaf25cad 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -972,7 +972,7 @@ else print ''; } - print $formcompany->select_state($object->state_id, isset($_POST["country_id"])?GETPOST("country_id"):$object->country_id, 'state_id'); + print $formcompany->select_state(GETPOST('state_id', 'alpha')?GETPOST('state_id', 'alpha'):$object->state_id, $object->country_code, 'state_id'); print ''; } From ed813b872f17116d34b6c8f7f791f01c957a4230 Mon Sep 17 00:00:00 2001 From: Tobias Sekan Date: Mon, 28 Oct 2019 10:40:07 +0100 Subject: [PATCH 644/980] Fix count array for invoice supplier --- htdocs/fourn/facture/card.php | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 369ab812d4e..88632a1f4af 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -2086,12 +2086,21 @@ if ($action == 'create') print ''.$txt.''.$objectsrc->getNomUrl(1); // We check if Origin document (id and type is known) has already at least one invoice attached to it $objectsrc->fetchObjectLinked($originid, $origin, '', 'invoice_supplier'); - $cntinvoice=count($objectsrc->linkedObjects['invoice_supplier']); - if ($cntinvoice>=1) + + $invoice_supplier = $objectsrc->linkedObjects['invoice_supplier']; + + // count function need a array as argument (Note: the array must implement Countable too) + if(is_array($invoice_supplier)) { - setEventMessages('WarningBillExist', null, 'warnings'); - echo ' ('.$langs->trans('LatestRelatedBill').end($objectsrc->linkedObjects['invoice_supplier'])->getNomUrl(1).')'; + $cntinvoice = count($invoice_supplier); + + if ($cntinvoice >= 1) + { + setEventMessages('WarningBillExist', null, 'warnings'); + echo ' ('.$langs->trans('LatestRelatedBill').end($invoice_supplier)->getNomUrl(1).')'; + } } + echo ''; print ''.$langs->trans('AmountHT').''.price($objectsrc->total_ht).''; print ''.$langs->trans('AmountVAT').''.price($objectsrc->total_tva).""; From abc7198db4e1a66849d4e34046d5c9096e3393ca Mon Sep 17 00:00:00 2001 From: Pierre Ardoin <32256817+mapiolca@users.noreply.github.com> Date: Mon, 28 Oct 2019 12:51:12 +0100 Subject: [PATCH 645/980] Fix Multicompany Filter Select only invoice in current company. --- htdocs/margin/customerMargins.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/margin/customerMargins.php b/htdocs/margin/customerMargins.php index b3a2c59e63f..32ef5030cb8 100644 --- a/htdocs/margin/customerMargins.php +++ b/htdocs/margin/customerMargins.php @@ -220,6 +220,7 @@ if ($socid > 0) $sql.= ' AND s.rowid = '.$socid; if (!$user->rights->societe->client->voir && ! $socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " AND f.fk_statut NOT IN (" . implode(', ', $invoice_status_except_list) . ")"; $sql.= ' AND s.entity IN ('.getEntity('societe').')'; +$sql.= ' AND f.entity IN ('.getEntity('').')'; $sql.= " AND d.fk_facture = f.rowid"; $sql.= " AND (d.product_type = 0 OR d.product_type = 1)"; if(! empty($TSelectedProducts)) { From eb73459899638df751943d7665c3974eb645dde8 Mon Sep 17 00:00:00 2001 From: oscim Date: Tue, 29 Oct 2019 10:39:15 +0100 Subject: [PATCH 646/980] Update modulehelp.php if module is not loaded, or not found, the $objMod display is last $objMod loaded but not this id for display --- htdocs/admin/modulehelp.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/modulehelp.php b/htdocs/admin/modulehelp.php index de9d1677932..6846d1a565a 100644 --- a/htdocs/admin/modulehelp.php +++ b/htdocs/admin/modulehelp.php @@ -214,15 +214,17 @@ asort($orders); //var_dump($modules); +unset($objMod); $i=0; foreach($orders as $tmpkey => $tmpvalue) { - $objMod = $modules[$tmpkey]; - if ($objMod->numero == $id) + $tmpMod = $modules[$tmpkey]; + if ($tmpMod->numero == $id) { $key = $i; $modName = $filename[$tmpkey]; $dirofmodule = $dirmod[$tmpkey]; + $objMod = $tmpMod; break; } $i++; From f0f61ff0fe5142ad37ce8256fb80b806fc7292ec Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 29 Oct 2019 09:41:47 +0000 Subject: [PATCH 647/980] Fixing style errors. --- htdocs/admin/modulehelp.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/modulehelp.php b/htdocs/admin/modulehelp.php index 6846d1a565a..0aafabb6c44 100644 --- a/htdocs/admin/modulehelp.php +++ b/htdocs/admin/modulehelp.php @@ -214,7 +214,7 @@ asort($orders); //var_dump($modules); -unset($objMod); +unset($objMod); $i=0; foreach($orders as $tmpkey => $tmpvalue) { @@ -224,7 +224,7 @@ foreach($orders as $tmpkey => $tmpvalue) $key = $i; $modName = $filename[$tmpkey]; $dirofmodule = $dirmod[$tmpkey]; - $objMod = $tmpMod; + $objMod = $tmpMod; break; } $i++; From 253e1530c1b6f2a1484e4b9fcc29d48a277685b3 Mon Sep 17 00:00:00 2001 From: oscim Date: Tue, 29 Oct 2019 10:45:57 +0100 Subject: [PATCH 648/980] Update modulehelp.php how not loaded module hidden. If module is hidden, it is not link to display in modulehelp. except in a specific context defined by the developer. In this case, this ligen blocks the information display capability of the module. --- htdocs/admin/modulehelp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/modulehelp.php b/htdocs/admin/modulehelp.php index de9d1677932..732e754c426 100644 --- a/htdocs/admin/modulehelp.php +++ b/htdocs/admin/modulehelp.php @@ -129,7 +129,7 @@ foreach ($modulesdir as $dir) if (preg_match('/deprecated/', $objMod->version) && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL >= 0))) $modulequalified=0; // We discard modules according to property disabled - if (! empty($objMod->hidden)) $modulequalified=0; + //if (! empty($objMod->hidden)) $modulequalified=0; if ($modulequalified > 0) { From 5e06fe0712f345035f92a28c28a42d12b7fd3826 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 29 Oct 2019 11:11:13 +0100 Subject: [PATCH 649/980] FIX Avoid fatal error when creating thumb from PDF --- htdocs/core/lib/files.lib.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 6b965a28f0e..e003b74f3e6 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1843,10 +1843,15 @@ function dol_convert_file($fileinput, $ext='png', $fileoutput='') if (empty($fileoutput)) $fileoutput=$fileinput.".".$ext; $count = $image->getNumberImages(); - if (! dol_is_file($fileoutput) || is_writeable($fileoutput)) { - $ret = $image->writeImages($fileoutput, true); + try { + $ret = $image->writeImages($fileoutput, true); + } + catch(Exception $e) + { + dol_syslog($e->getMessage(), LOG_WARNING); + } } else { From 490ab95dfab6b370ea0658cbbade0b0539326819 Mon Sep 17 00:00:00 2001 From: oscim Date: Tue, 29 Oct 2019 11:12:27 +0100 Subject: [PATCH 650/980] Update modulehelp.php add function modulehelp_prepare_head --- htdocs/admin/modulehelp.php | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/htdocs/admin/modulehelp.php b/htdocs/admin/modulehelp.php index de9d1677932..3db8453011e 100644 --- a/htdocs/admin/modulehelp.php +++ b/htdocs/admin/modulehelp.php @@ -233,25 +233,7 @@ $familyposition=$tab[0]; $familykey=$tab[1]; $module_position=$tab[2]; $numero=$ -$h = 0; - -$head[$h][0] = DOL_URL_ROOT."/admin/modulehelp.php?id=".$id.'&mode=desc'; -$head[$h][1] = $langs->trans("Description"); -$head[$h][2] = 'desc'; -$h++; - -$head[$h][0] = DOL_URL_ROOT."/admin/modulehelp.php?id=".$id.'&mode=feature'; -$head[$h][1] = $langs->trans("TechnicalServicesProvided"); -$head[$h][2] = 'feature'; -$h++; - -if ($objMod->isCoreOrExternalModule() == 'external') -{ - $head[$h][0] = DOL_URL_ROOT."/admin/modulehelp.php?id=".$id.'&mode=changelog'; - $head[$h][1] = $langs->trans("ChangeLog"); - $head[$h][2] = 'changelog'; - $h++; -} +$head = modulehelp_prepare_head($objMod); // Check filters $modulename=$objMod->getName(); From d310ca6e82a71fdae379bf6ab81d930a9c665ee1 Mon Sep 17 00:00:00 2001 From: oscim Date: Tue, 29 Oct 2019 11:15:03 +0100 Subject: [PATCH 651/980] Update admin.lib.php add function modulehelp_prepare_head --- htdocs/core/lib/admin.lib.php | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/htdocs/core/lib/admin.lib.php b/htdocs/core/lib/admin.lib.php index 21bff7bc8b3..216d6fc2b62 100644 --- a/htdocs/core/lib/admin.lib.php +++ b/htdocs/core/lib/admin.lib.php @@ -670,7 +670,45 @@ function security_prepare_head() return $head; } +/** + * Prepare array with list of tabs + * @param object $object descriptor class + * @return array Array of tabs to show + */ +function modulehelp_prepare_head($object) +{ + global $langs, $conf, $user; + $h = 0; + $head = array(); + + // FIX for compatibity habitual tabs + $object->id = $object->numero; + $head[$h][0] = DOL_URL_ROOT."/admin/modulehelp.php?id=".$object->id.'&mode=desc'; + $head[$h][1] = $langs->trans("Description"); + $head[$h][2] = 'desc'; + $h++; + + $head[$h][0] = DOL_URL_ROOT."/admin/modulehelp.php?id=".$object->id.'&mode=feature'; + $head[$h][1] = $langs->trans("TechnicalServicesProvided"); + $head[$h][2] = 'feature'; + $h++; + + if ($object->isCoreOrExternalModule() == 'external') + { + $head[$h][0] = DOL_URL_ROOT."/admin/modulehelp.php?id=".$object->id.'&mode=changelog'; + $head[$h][1] = $langs->trans("ChangeLog"); + $head[$h][2] = 'changelog'; + $h++; + } + + complete_head_from_modules($conf,$langs,null,$head,$h,'modulehelp_admin'); + + complete_head_from_modules($conf,$langs,null,$head,$h,'modulehelp_admin','remove'); + + + return $head; +} /** * Prepare array with list of tabs * From 52ef2bb990c3590e7ec266a9b91602099bcf18b9 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 29 Oct 2019 10:16:49 +0000 Subject: [PATCH 652/980] Fixing style errors. --- htdocs/core/lib/admin.lib.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/admin.lib.php b/htdocs/core/lib/admin.lib.php index 216d6fc2b62..e31f9b6d7d7 100644 --- a/htdocs/core/lib/admin.lib.php +++ b/htdocs/core/lib/admin.lib.php @@ -672,7 +672,7 @@ function security_prepare_head() /** * Prepare array with list of tabs - * @param object $object descriptor class + * @param object $object descriptor class * @return array Array of tabs to show */ function modulehelp_prepare_head($object) @@ -680,9 +680,9 @@ function modulehelp_prepare_head($object) global $langs, $conf, $user; $h = 0; $head = array(); - - // FIX for compatibity habitual tabs - $object->id = $object->numero; + + // FIX for compatibity habitual tabs + $object->id = $object->numero; $head[$h][0] = DOL_URL_ROOT."/admin/modulehelp.php?id=".$object->id.'&mode=desc'; $head[$h][1] = $langs->trans("Description"); @@ -702,9 +702,9 @@ function modulehelp_prepare_head($object) $h++; } - complete_head_from_modules($conf,$langs,null,$head,$h,'modulehelp_admin'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'modulehelp_admin'); - complete_head_from_modules($conf,$langs,null,$head,$h,'modulehelp_admin','remove'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'modulehelp_admin', 'remove'); return $head; From 9cfa20480f6abc8e03f3b72ba08f83e69914b20a Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 29 Oct 2019 10:18:10 +0000 Subject: [PATCH 653/980] Fixing style errors. --- htdocs/admin/modulehelp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/modulehelp.php b/htdocs/admin/modulehelp.php index 3db8453011e..ea7f754583b 100644 --- a/htdocs/admin/modulehelp.php +++ b/htdocs/admin/modulehelp.php @@ -233,7 +233,7 @@ $familyposition=$tab[0]; $familykey=$tab[1]; $module_position=$tab[2]; $numero=$ -$head = modulehelp_prepare_head($objMod); +$head = modulehelp_prepare_head($objMod); // Check filters $modulename=$objMod->getName(); From 2072768ec2991734b0388ca56a1cdb710f945357 Mon Sep 17 00:00:00 2001 From: iouston <4319513+iouston@users.noreply.github.com> Date: Tue, 29 Oct 2019 11:20:10 +0100 Subject: [PATCH 654/980] NEW : add name_alias in fields to search all --- htdocs/comm/propal/list.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 919ad77168d..1d647796ada 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -139,6 +139,7 @@ $fieldstosearchall = array( 'p.ref_client'=>'CustomerRef', 'pd.description'=>'Description', 's.nom'=>"ThirdParty", + 's.name_alias'=>"AliasNameShort", 'p.note_public'=>'NotePublic', ); if (empty($user->socid)) $fieldstosearchall["p.note_private"]="NotePrivate"; From d79a2f47339566b849f814535ffd31f589830893 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Tue, 29 Oct 2019 11:20:24 +0100 Subject: [PATCH 655/980] missing error message --- htdocs/don/payment/payment.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/don/payment/payment.php b/htdocs/don/payment/payment.php index c7d83155d51..f2888b7b522 100644 --- a/htdocs/don/payment/payment.php +++ b/htdocs/don/payment/payment.php @@ -91,6 +91,7 @@ if ($action == 'add_payment') { $error++; $errmsg='ErrorNoPaymentDefined'; + setEventMessages($errmsg, null, 'errors'); } if (! $error) From e88af13101406aa1ca6e3ea7e81f13e84d31c3f4 Mon Sep 17 00:00:00 2001 From: iouston <4319513+iouston@users.noreply.github.com> Date: Tue, 29 Oct 2019 11:22:15 +0100 Subject: [PATCH 656/980] NEW : add name_alias in fields to search all --- htdocs/commande/list.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 115bc46813a..37dd5a8d570 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -120,6 +120,7 @@ $fieldstosearchall = array( 'c.ref_client'=>'RefCustomerOrder', 'pd.description'=>'Description', 's.nom'=>"ThirdParty", + 's.name_alias'=>"AliasNameShort", 'c.note_public'=>'NotePublic', ); if (empty($user->socid)) $fieldstosearchall["c.note_private"]="NotePrivate"; From bd1969e1932221696635a982713dab43d5fedd5f Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Tue, 29 Oct 2019 11:26:28 +0100 Subject: [PATCH 657/980] missing error message --- htdocs/don/payment/payment.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/don/payment/payment.php b/htdocs/don/payment/payment.php index f2888b7b522..65929ffd6a8 100644 --- a/htdocs/don/payment/payment.php +++ b/htdocs/don/payment/payment.php @@ -113,6 +113,7 @@ if ($action == 'add_payment') if ($paymentid < 0) { $errmsg=$payment->error; + setEventMessages($errmsg, null, 'errors'); $error++; } } @@ -123,6 +124,7 @@ if ($action == 'add_payment') if (! $result > 0) { $errmsg=$payment->error; + setEventMessages($errmsg, null, 'errors'); $error++; } } From 21d15c3bcbf5883091f792e9890c079b23af3f98 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 29 Oct 2019 11:35:33 +0100 Subject: [PATCH 658/980] FIX Set unpaid of expense report --- .../class/expensereport.class.php | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 9bbf6617369..b9e60ed50d5 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -106,6 +106,11 @@ class ExpenseReport extends CommonObject */ const STATUS_VALIDATED = 2; + /** + * Classified canceled + */ + const STATUS_CANCELED = 4; + /** * Classified approved */ @@ -1205,10 +1210,10 @@ class ExpenseReport extends CommonObject $this->date_debut = $this->db->jdate($objp->date_debut); - if ($this->fk_statut != 2) + if ($this->fk_statut != self::STATUS_VALIDATED) { $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; - $sql.= " SET fk_statut = 2"; + $sql.= " SET fk_statut = ".self::STATUS_VALIDATED; $sql.= ' WHERE rowid = '.$this->id; dol_syslog(get_class($this)."::set_save_from_refuse sql=".$sql, LOG_DEBUG); @@ -1243,12 +1248,12 @@ class ExpenseReport extends CommonObject // date approval $this->date_approve = $now; - if ($this->fk_statut != 5) + if ($this->fk_statut != self::STATUS_APPROVED) { $this->db->begin(); $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; - $sql.= " SET ref = '".$this->db->escape($this->ref)."', fk_statut = 5, fk_user_approve = ".$fuser->id.","; + $sql.= " SET ref = '".$this->db->escape($this->ref)."', fk_statut = ".self::STATUS_APPROVED.", fk_user_approve = ".$fuser->id.","; $sql.= " date_approve='".$this->db->idate($this->date_approve)."'"; $sql.= ' WHERE rowid = '.$this->id; if ($this->db->query($sql)) @@ -1304,10 +1309,10 @@ class ExpenseReport extends CommonObject $error = 0; // date de refus - if ($this->fk_statut != 99) + if ($this->fk_statut != self::STATUS_REFUSED) { $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; - $sql.= " SET ref = '".$this->db->escape($this->ref)."', fk_statut = 99, fk_user_refuse = ".$fuser->id.","; + $sql.= " SET ref = '".$this->db->escape($this->ref)."', fk_statut = ".self::STATUS_REFUSED.", fk_user_refuse = ".$fuser->id.","; $sql.= " date_refuse='".$this->db->idate($now)."',"; $sql.= " detail_refuse='".$this->db->escape($details)."',"; $sql.= " fk_user_approve = NULL"; @@ -1371,7 +1376,7 @@ class ExpenseReport extends CommonObject $this->db->begin(); $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; - $sql.= " SET paid = 0"; + $sql.= " SET paid = 0, fk_statut = ".self::STATUS_APPROVED; $sql.= ' WHERE rowid = '.$this->id; dol_syslog(get_class($this)."::set_unpaid sql=".$sql, LOG_DEBUG); @@ -1426,12 +1431,12 @@ class ExpenseReport extends CommonObject { $error = 0; $this->date_cancel = $this->db->idate(gmmktime()); - if ($this->fk_statut != 4) + if ($this->fk_statut != self::STATUS_CANCELED) { $this->db->begin(); $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; - $sql.= " SET fk_statut = 4, fk_user_cancel = ".$fuser->id; + $sql.= " SET fk_statut = ".self::STATUS_CANCELED.", fk_user_cancel = ".$fuser->id; $sql.= ", date_cancel='".$this->db->idate($this->date_cancel)."'"; $sql.= " ,detail_cancel='".$this->db->escape($detail)."'"; $sql.= ' WHERE rowid = '.$this->id; From 149d63757fa6fa67db0701a4d6abf811816d4573 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 29 Oct 2019 11:43:56 +0100 Subject: [PATCH 659/980] Space --- htdocs/product/stock/replenishorders.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/stock/replenishorders.php b/htdocs/product/stock/replenishorders.php index ea8a4536be6..111f4c17678 100644 --- a/htdocs/product/stock/replenishorders.php +++ b/htdocs/product/stock/replenishorders.php @@ -272,7 +272,7 @@ if ($resql) $userstatic = new User($db); - while ($i < min($num, $sproduct?$num:$conf->liste_limit)) + while ($i < min($num,$sproduct?$num:$conf->liste_limit)) { $obj = $db->fetch_object($resql); From dae475bac1164e09882664c6b1596c0e16121c95 Mon Sep 17 00:00:00 2001 From: com4WEB <42214196+com4WEB@users.noreply.github.com> Date: Tue, 29 Oct 2019 12:37:08 +0100 Subject: [PATCH 660/980] Update ChangeLog some text erros in changelog --- ChangeLog | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index c430b258cda..9cb2225cd08 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,7 +22,6 @@ FIX: Clean the + of categories on the product view only in POS module FIX: access to public interface when origin email has an alias. FIX: Alias name is not into the email recipient label. FIX: allow standalone credit note even if no invoice -FIX: an admin can not access his own permissions after enabling advanced FIX: an admin can not access his own permissions after enabling advanced permissions FIX: Attachement of linked files on ticket when sending a message FIX: avoid non numeric warning @@ -91,17 +90,17 @@ FIX: #11752 FIX: #11789 FIX: #11790 FIX: #11804 list of tickets from a customer card display ALL tickets FIX: #11834 -FIX: Add char $ and ; in sanitizing of filenames. -FIX: Add comment before protected functions -FIX: Add log and type of content in dolWebsiteOutput and -FIX: Add repair.php option 'restore' to restore user picture after v10 +FIX: add char $ and ; in sanitizing of filenames +FIX: add comment before protected functions +FIX: add log and type of content in dolWebsiteOutput and +FIX: add repair.php option 'restore' to restore user picture after v10 FIX: amount opened on thirdparty card dont care of credit note not converted -FIX: Api of documents work with value 'thirdparty' +FIX: API of documents work with value 'thirdparty' FIX: author in message / ticket API -FIX: avoid sql error if fk_project is empty during update +FIX: avoid SQL error if fk_project is empty during update FIX: avoid Warning: A non-numeric value encountered -FIX: bad consistency in list of invoice for direct debit order. -FIX: Bad error management in zip compress and web site export +FIX: bad consistency in list of invoice for direct debit order +FIX: bad error management in zip compress and web site export FIX: bad substitution for extrafields type checkbox FIX: better help message with multicompany FIX: calculation of $products_dispatched @@ -110,11 +109,11 @@ FIX: Can't delete a draft leave even if it should FIX: Can't save setup of mailman module FIX: column jabberid missing FIX: Confirmation of deletion -FIX: Consistency in direct debit order lists. +FIX: Consistency in direct debit order lists FIX: Content send before header warning FIX: credit note can be split FIX: credit note used on list -FIX: Css was saved on wrong website. +FIX: CSS was saved on wrong website FIX: delivery extrafields FIX: Disabling a website does not put it offline FIX: display only stripe sources for customer @@ -131,13 +130,13 @@ FIX: Fatal situation if payment removed on expense report. Action FIX: filepath of generated documents doesn't handle products with special characters FIX: for MAIN_MAXTABS_IN_CARD = $i card FIX: gzip and bzip2 must use option -f -FIX: It was possible to create cashfence without entering data. +FIX: it was possible to create cashfence without entering data FIX: javascript error when using dol_use_jmobile=1 FIX: logout redirect to takepos.php FIX: Look and feel v10 FIX: Make protected all pfd models functions FIX: management of extrafields in modulebuilder -FIX: Missing div for buttons in tax, loan, various payment modules +FIX: missing div for buttons in tax, loan, various payment modules FIX: missing include (dol_convert_file not found) FIX: Missing some replacements in website module FIX: missing test on permission on button to delete ledger record @@ -161,13 +160,13 @@ FIX: Return code of pdf_einstein.modules.php and proformat FIX: round for application fee in stripe FIX: Sens of the balance (Debit - Credit in accountancy not contrary) FIX: Several pb in export of documents -FIX: SQL syntax error and CSRF check on vat reports +FIX: SQL syntax error and CSRF check on VAT reports FIX: takepos layout clear or focus search -FIX: too many record in sql request. Whena criteria is a filter, we must +FIX: too many record in sql request. When a criteria is a filter, we must FIX: Translation of month FIX: USEDOLIBARREDITOR not always set FIX: VAT number for Monaco (it uses FR) -FIX: vulenrability in uploading file found by 美创科技安全实验室 +FIX: vulnerability in uploading file found by 美创科技安全实验室 FIX: wrong display (and hidden input) for already dispatched quantity FIX: wrong parameters (same error in branch 9, 10, develop) FIX: Wrong variable. Must be PROJECT_HIDE_UNSELECTABLES From d28242a3c5ae12cc2cb5365a6948a0a8887a2ef9 Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Tue, 29 Oct 2019 16:40:47 +0100 Subject: [PATCH 661/980] FIX remove backward compatibility projectid and uses object id instead --- htdocs/projet/element.php | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index 44b803571ba..5f74a971f87 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -83,17 +83,16 @@ if (! isset($_POST['datesrfc']) && ! isset($_POST['datesday']) && ! empty($conf- //$dates=dol_time_plus_duree($datee, -1, 'y'); $dates=dol_get_first_day($tmp['year'], 1); } -if ($id == '' && $projectid == '' && $ref == '') +if ($id == '' && $ref == '') { - dol_print_error('', 'Bad parameter'); - exit; + setEventMessage($langs->trans('ErrorBadParameters'), 'errors'); + header('Location: list.php'); + exit(); } $mine = $_REQUEST['mode']=='mine' ? 1 : 0; //if (! $user->rights->projet->all->lire) $mine=1; // Special for projects -$projectid=$id; // For backward compatibility - $object = new Project($db); include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once @@ -102,7 +101,7 @@ if(! empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($ob // Security check $socid=$object->socid; //if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. -$result = restrictedArea($user, 'projet', $projectid, 'projet&project'); +$result = restrictedArea($user, 'projet', $object->id, 'projet&project'); $hookmanager->initHooks(array('projectOverview')); @@ -539,7 +538,7 @@ if ($action=="addelement") elseif ($action == "unlink") { $tablename = GETPOST("tablename", "aZ09"); - $projectField = GETPOST("projectfield", "aZ09"); + $projectField = GETPOST('projectfield', 'aZ09') ? GETPOST('projectfield', 'aZ09') : 'fk_projet'; $elementselectid = GETPOST("elementselect", "int"); $result = $object->remove_element($tablename, $elementselectid, $projectField); @@ -558,7 +557,7 @@ $showdatefilter=0; if (! $showdatefilter) { print '
    '; - print '
    '; + print ''; print ''; print ''; print ''; @@ -781,7 +780,7 @@ foreach ($listofreferent as $key => $value) if (empty($conf->global->PROJECT_LINK_ON_OVERWIEW_DISABLED) && $idtofilterthirdparty && !in_array($tablename, $exclude_select_element)) { $selectList=$formproject->select_element($tablename, $idtofilterthirdparty, 'minwidth300', -2, !empty($project_field)?$project_field:'fk_projet'); - if (! $selectList || ($selectList<0)) + if ($selectList<0) { setEventMessages($formproject->error, $formproject->errors, 'errors'); } @@ -789,7 +788,7 @@ foreach ($listofreferent as $key => $value) { // Define form with the combo list of elements to link $addform.='
    '; - $addform.=''; + $addform.=''; $addform.=''; $addform.=''; $addform.=''; @@ -916,7 +915,7 @@ foreach ($listofreferent as $key => $value) { if (empty($conf->global->PROJECT_DISABLE_UNLINK_FROM_OVERVIEW) || $user->admin) // PROJECT_DISABLE_UNLINK_FROM_OVERVIEW is empty by defaut, so this test true { - print ''; + print ''; print img_picto($langs->trans('Unlink'), 'unlink'); print ''; } From db86dff7d16bd7d03ae92ae8dff0e0dfd08af55e Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 29 Oct 2019 17:10:10 +0100 Subject: [PATCH 662/980] Fix sign for VAT repaid in report --- htdocs/compta/resultat/clientfourn.php | 10 +++++----- htdocs/compta/resultat/index.php | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php index efeffeb9b8c..2b74c167d83 100644 --- a/htdocs/compta/resultat/clientfourn.php +++ b/htdocs/compta/resultat/clientfourn.php @@ -1132,11 +1132,11 @@ else while ($i < $num) { $obj = $db->fetch_object($result); - $amount += $obj->amount; - $total_ht += $obj->amount; - $total_ttc += $obj->amount; - $subtotal_ht += $obj->amount; - $subtotal_ttc += $obj->amount; + $amount += -$obj->amount; + $total_ht += -$obj->amount; + $total_ttc += -$obj->amount; + $subtotal_ht += -$obj->amount; + $subtotal_ttc += -$obj->amount; $i++; } diff --git a/htdocs/compta/resultat/index.php b/htdocs/compta/resultat/index.php index 70129e80403..d12587eea6e 100644 --- a/htdocs/compta/resultat/index.php +++ b/htdocs/compta/resultat/index.php @@ -480,10 +480,10 @@ if (! empty($conf->tax->enabled) && ($modecompta == 'CREANCES-DETTES' || $modeco $obj = $db->fetch_object($result); if (! isset($encaiss[$obj->dm])) $encaiss[$obj->dm]=0; - $encaiss[$obj->dm] += $obj->amount; + $encaiss[$obj->dm] += -$obj->amount; if (! isset($encaiss_ttc[$obj->dm])) $encaiss_ttc[$obj->dm]=0; - $encaiss_ttc[$obj->dm] += $obj->amount; + $encaiss_ttc[$obj->dm] +=-$obj->amount; $i++; } From 1b7e138e0169928c0857cc1b2a655beb993a8a8f Mon Sep 17 00:00:00 2001 From: BENKE Charlene <1179011+defrance@users.noreply.github.com> Date: Tue, 29 Oct 2019 17:27:30 +0100 Subject: [PATCH 663/980] fix: delete function optional and id value --- htdocs/fourn/class/fournisseur.commande.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index fb9539f6e62..6c743e32da9 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -3585,7 +3585,7 @@ class CommandeFournisseurLigne extends CommonOrderLine * @param int $notrigger 1=Disable call to triggers * @return int <0 if KO, >0 if OK */ - public function delete($notrigger) + public function delete($notrigger = 0) { global $user; @@ -3593,7 +3593,7 @@ class CommandeFournisseurLigne extends CommonOrderLine $this->db->begin(); - $sql = 'DELETE FROM '.MAIN_DB_PREFIX."commande_fournisseurdet WHERE rowid=".$this->rowid; + $sql = 'DELETE FROM '.MAIN_DB_PREFIX."commande_fournisseurdet WHERE rowid=".$this->id; dol_syslog(__METHOD__, LOG_DEBUG); $resql=$this->db->query($sql); From 66337ec234a1e61300365151139168ed244a39f8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 30 Oct 2019 00:36:47 +0100 Subject: [PATCH 664/980] NEW Add widgets for BOMs and MOs --- htdocs/core/boxes/box_boms.php | 182 ++++++++++++++++++ htdocs/core/boxes/box_commandes.php | 2 +- htdocs/core/boxes/box_mos.php | 182 ++++++++++++++++++ htdocs/core/modules/modBom.class.php | 4 +- .../{mrp => }/core/modules/modMrp.class.php | 7 +- htdocs/langs/en_US/boxes.lang | 2 + 6 files changed, 369 insertions(+), 10 deletions(-) create mode 100644 htdocs/core/boxes/box_boms.php create mode 100644 htdocs/core/boxes/box_mos.php rename htdocs/{mrp => }/core/modules/modMrp.class.php (98%) diff --git a/htdocs/core/boxes/box_boms.php b/htdocs/core/boxes/box_boms.php new file mode 100644 index 00000000000..b4ac04b3051 --- /dev/null +++ b/htdocs/core/boxes/box_boms.php @@ -0,0 +1,182 @@ + + * Copyright (C) 2004-2009 Laurent Destailleur + * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2015 Frederic 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/core/boxes/box_boms.php + * \ingroup bom + * \brief Widget for latest modified BOM + */ + +include_once DOL_DOCUMENT_ROOT.'/core/boxes/modules_boxes.php'; + + +/** + * Class to manage the box to show last orders + */ +class box_boms extends ModeleBoxes +{ + public $boxcode="lastboms"; + public $boximg="object_bom"; + public $boxlabel="BoxTitleLatestModifiedBoms"; + public $depends = array("bom"); + + /** + * @var DoliDB Database handler. + */ + public $db; + + public $param; + + public $info_box_head = array(); + public $info_box_contents = array(); + + + /** + * Constructor + * + * @param DoliDB $db Database handler + * @param string $param More parameters + */ + public function __construct($db, $param) + { + global $user; + + $this->db = $db; + + $this->hidden = ! ($user->rights->bom->read); + } + + /** + * Load data for box to show them later + * + * @param int $max Maximum number of records to load + * @return void + */ + public function loadBox($max = 5) + { + global $user, $langs, $conf; + + $this->max = $max; + + include_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php'; + include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; + + $bomstatic = new Bom($this->db); + $productstatic = new Product($this->db); + $userstatic = new User($this->db); + + $this->info_box_head = array('text' => $langs->trans("BoxTitleLatestModifiedBoms", $max)); + + if ($user->rights->bom->read) + { + $sql = "SELECT p.ref as product_ref"; + $sql.= ", c.rowid"; + $sql.= ", c.date_creation"; + $sql.= ", c.tms"; + $sql.= ", c.ref"; + $sql.= ", c.status"; + $sql.= ", c.fk_user_valid"; + $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; + $sql.= ", ".MAIN_DB_PREFIX."bom_bom as c"; + $sql.= " WHERE c.fk_product = p.rowid"; + $sql.= " AND c.entity = ".$conf->entity; + $sql.= " ORDER BY c.tms DESC, c.ref DESC"; + $sql.= " ".$this->db->plimit($max, 0); + + $result = $this->db->query($sql); + if ($result) { + $num = $this->db->num_rows($result); + + $line = 0; + + while ($line < $num) { + $objp = $this->db->fetch_object($result); + $datem=$this->db->jdate($objp->tms); + $bomstatic->id = $objp->rowid; + $bomstatic->ref = $objp->ref; + $bomstatic->id = $objp->socid; + $bomstatic->status = $objp->status; + $productstatic->ref = $objp->product_ref; + + $this->info_box_contents[$line][] = array( + 'td' => '', + 'text' => $bomstatic->getNomUrl(1), + 'asis' => 1, + ); + + $this->info_box_contents[$line][] = array( + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', + 'text' => $productstatic->getNomUrl(1), + 'asis' => 1, + ); + + if (! empty($conf->global->BOM_BOX_LAST_BOMS_SHOW_VALIDATE_USER)) { + if ($objp->fk_user_valid > 0) $userstatic->fetch($objp->fk_user_valid); + $this->info_box_contents[$line][] = array( + 'td' => 'class="right"', + 'text' => (($objp->fk_user_valid > 0)?$userstatic->getNomUrl(1):''), + 'asis' => 1, + ); + } + + $this->info_box_contents[$line][] = array( + 'td' => 'class="right"', + 'text' => dol_print_date($datem, 'day'), + ); + + $this->info_box_contents[$line][] = array( + 'td' => 'class="right" width="18"', + 'text' => $bomstatic->LibStatut($objp->status, 3), + ); + + $line++; + } + + if ($num==0) $this->info_box_contents[$line][0] = array('td' => 'class="center"','text'=>$langs->trans("NoRecordedOrders")); + + $this->db->free($result); + } else { + $this->info_box_contents[0][0] = array( + 'td' => '', + 'maxlength'=>500, + 'text' => ($this->db->error().' sql='.$sql), + ); + } + } else { + $this->info_box_contents[0][0] = array( + 'td' => 'class="nohover opacitymedium left"', + 'text' => $langs->trans("ReadPermissionNotAllowed") + ); + } + } + + /** + * Method to show box + * + * @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 string + */ + public function showBox($head = null, $contents = null, $nooutput = 0) + { + return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); + } +} diff --git a/htdocs/core/boxes/box_commandes.php b/htdocs/core/boxes/box_commandes.php index 00e3d54386c..327f06fc0c9 100644 --- a/htdocs/core/boxes/box_commandes.php +++ b/htdocs/core/boxes/box_commandes.php @@ -21,7 +21,7 @@ /** * \file htdocs/core/boxes/box_commandes.php * \ingroup commande - * \brief Module de generation de l'affichage de la box commandes + * \brief Widget for latest sale orders */ include_once DOL_DOCUMENT_ROOT.'/core/boxes/modules_boxes.php'; diff --git a/htdocs/core/boxes/box_mos.php b/htdocs/core/boxes/box_mos.php new file mode 100644 index 00000000000..32ae864fc2f --- /dev/null +++ b/htdocs/core/boxes/box_mos.php @@ -0,0 +1,182 @@ + + * Copyright (C) 2004-2009 Laurent Destailleur + * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2015 Frederic 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/core/boxes/box_mos.php + * \ingroup mrp + * \brief Widget for latest modified MOs + */ + +include_once DOL_DOCUMENT_ROOT.'/core/boxes/modules_boxes.php'; + + +/** + * Class to manage the box to show last orders + */ +class box_mos extends ModeleBoxes +{ + public $boxcode="lastmos"; + public $boximg="object_mrp"; + public $boxlabel="BoxTitleLatestModifiedMos"; + public $depends = array("mrp"); + + /** + * @var DoliDB Database handler. + */ + public $db; + + public $param; + + public $info_box_head = array(); + public $info_box_contents = array(); + + + /** + * Constructor + * + * @param DoliDB $db Database handler + * @param string $param More parameters + */ + public function __construct($db, $param) + { + global $user; + + $this->db = $db; + + $this->hidden = ! ($user->rights->bom->read); + } + + /** + * Load data for box to show them later + * + * @param int $max Maximum number of records to load + * @return void + */ + public function loadBox($max = 5) + { + global $user, $langs, $conf; + + $this->max = $max; + + include_once DOL_DOCUMENT_ROOT.'/mrp/class/mo.class.php'; + include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; + + $mostatic = new Mo($this->db); + $productstatic = new Product($this->db); + $userstatic = new User($this->db); + + $this->info_box_head = array('text' => $langs->trans("BoxTitleLatestModifiedMos", $max)); + + if ($user->rights->mrp->read) + { + $sql = "SELECT p.ref as product_ref"; + $sql.= ", c.rowid"; + $sql.= ", c.date_creation"; + $sql.= ", c.tms"; + $sql.= ", c.ref"; + $sql.= ", c.status"; + //$sql.= ", c.fk_user_valid"; + $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; + $sql.= ", ".MAIN_DB_PREFIX."mrp_mo as c"; + $sql.= " WHERE c.fk_product = p.rowid"; + $sql.= " AND c.entity = ".$conf->entity; + $sql.= " ORDER BY c.tms DESC, c.ref DESC"; + $sql.= " ".$this->db->plimit($max, 0); + + $result = $this->db->query($sql); + if ($result) { + $num = $this->db->num_rows($result); + + $line = 0; + + while ($line < $num) { + $objp = $this->db->fetch_object($result); + $datem=$this->db->jdate($objp->tms); + $mostatic->id = $objp->rowid; + $mostatic->ref = $objp->ref; + $mostatic->id = $objp->socid; + $mostatic->status = $objp->status; + $productstatic->ref = $objp->product_ref; + + $this->info_box_contents[$line][] = array( + 'td' => '', + 'text' => $mostatic->getNomUrl(1), + 'asis' => 1, + ); + + $this->info_box_contents[$line][] = array( + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', + 'text' => $productstatic->getNomUrl(1), + 'asis' => 1, + ); + + if (! empty($conf->global->MRP_BOX_LAST_MOS_SHOW_VALIDATE_USER)) { + if ($objp->fk_user_valid > 0) $userstatic->fetch($objp->fk_user_valid); + $this->info_box_contents[$line][] = array( + 'td' => 'class="right"', + 'text' => (($objp->fk_user_valid > 0)?$userstatic->getNomUrl(1):''), + 'asis' => 1, + ); + } + + $this->info_box_contents[$line][] = array( + 'td' => 'class="right"', + 'text' => dol_print_date($datem, 'day'), + ); + + $this->info_box_contents[$line][] = array( + 'td' => 'class="right" width="18"', + 'text' => $mostatic->LibStatut($objp->status, 3), + ); + + $line++; + } + + if ($num==0) $this->info_box_contents[$line][0] = array('td' => 'class="center"','text'=>$langs->trans("NoRecordedOrders")); + + $this->db->free($result); + } else { + $this->info_box_contents[0][0] = array( + 'td' => '', + 'maxlength'=>500, + 'text' => ($this->db->error().' sql='.$sql), + ); + } + } else { + $this->info_box_contents[0][0] = array( + 'td' => 'class="nohover opacitymedium left"', + 'text' => $langs->trans("ReadPermissionNotAllowed") + ); + } + } + + /** + * Method to show box + * + * @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 string + */ + public function showBox($head = null, $contents = null, $nooutput = 0) + { + return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); + } +} diff --git a/htdocs/core/modules/modBom.class.php b/htdocs/core/modules/modBom.class.php index e333103fc8d..720721ac156 100644 --- a/htdocs/core/modules/modBom.class.php +++ b/htdocs/core/modules/modBom.class.php @@ -189,9 +189,7 @@ class modBom extends DolibarrModules // Boxes/Widgets // Add here list of php file(s) stored in bom/core/boxes that contains class to show a widget. $this->boxes = array( - //0=>array('file'=>'bomwidget1.php@bom','note'=>'Widget provided by Bom','enabledbydefaulton'=>'Home'), - //1=>array('file'=>'bomwidget2.php@bom','note'=>'Widget provided by Bom'), - //2=>array('file'=>'bomwidget3.php@bom','note'=>'Widget provided by Bom') + 0=>array('file'=>'box_boms.php','note'=>'','enabledbydefaulton'=>'Home') ); diff --git a/htdocs/mrp/core/modules/modMrp.class.php b/htdocs/core/modules/modMrp.class.php similarity index 98% rename from htdocs/mrp/core/modules/modMrp.class.php rename to htdocs/core/modules/modMrp.class.php index 7e57f70c6c8..53f778d063f 100644 --- a/htdocs/mrp/core/modules/modMrp.class.php +++ b/htdocs/core/modules/modMrp.class.php @@ -206,12 +206,7 @@ class modMrp extends DolibarrModules // Boxes/Widgets // Add here list of php file(s) stored in mrp/core/boxes that contains a class to show a widget. $this->boxes = array( - // 0 => array( - // 'file' => 'mrpwidget1.php@mrp', - // 'note' => 'Widget provided by Mrp', - // 'enabledbydefaulton' => 'Home', - // ), - // ... + 0 => array('file' => 'box_mos.php', 'note' => '', 'enabledbydefaulton' => 'Home') ); // Cronjobs (List of cron jobs entries to add when module is enabled) diff --git a/htdocs/langs/en_US/boxes.lang b/htdocs/langs/en_US/boxes.lang index eee7d7dcfac..a55a0194632 100644 --- a/htdocs/langs/en_US/boxes.lang +++ b/htdocs/langs/en_US/boxes.lang @@ -44,6 +44,8 @@ BoxTitleLastActionsToDo=Latest %s actions to do BoxTitleLastContracts=Latest %s modified contracts BoxTitleLastModifiedDonations=Latest %s modified donations BoxTitleLastModifiedExpenses=Latest %s modified expense reports +BoxTitleLatestModifiedBoms=Latest %s modified BOMs +BoxTitleLatestModifiedMos=Latest %s modified Manufacturing Orders BoxGlobalActivity=Global activity (invoices, proposals, orders) BoxGoodCustomers=Good customers BoxTitleGoodCustomers=%s Good customers From beb85ee3a885ca9b92aae8205c66655dca2ad13e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 30 Oct 2019 00:56:57 +0100 Subject: [PATCH 665/980] Work on MO --- htdocs/core/actions_addupdatedelete.inc.php | 1 - htdocs/langs/en_US/mrp.lang | 1 + htdocs/mrp/index.php | 56 ++++++++++++++++++++- htdocs/mrp/mo_card.php | 13 +++++ 4 files changed, 68 insertions(+), 3 deletions(-) diff --git a/htdocs/core/actions_addupdatedelete.inc.php b/htdocs/core/actions_addupdatedelete.inc.php index 72ad67db52e..dcb8f75c637 100644 --- a/htdocs/core/actions_addupdatedelete.inc.php +++ b/htdocs/core/actions_addupdatedelete.inc.php @@ -108,7 +108,6 @@ if ($action == 'update' && ! empty($permissiontoadd)) { if (! GETPOSTISSET($key)) continue; // The field was not submited to be edited if (in_array($key, array('rowid', 'entity', 'date_creation', 'tms', 'fk_user_creat', 'fk_user_modif', 'import_key'))) continue; // Ignore special fields - var_dump($object->fields[$key]['type']); // Set value to update if (in_array($object->fields[$key]['type'], array('text', 'html'))) { $value = GETPOST($key, 'none'); diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index 1de5f40c79c..6bf86dac102 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -5,6 +5,7 @@ MRPArea=MRP Area MrpSetupPage=Setup of module MO MenuBOM=Bills of material LatestBOMModified=Latest %s Bills of materials modified +LatestMOModified=Latest %s Manufacturing Orders modified Bom=Bills of Material BillOfMaterials=Bill of Material BOMsSetup=Setup of module BOM diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index 18cef7f75ea..742d94109e2 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -1,7 +1,7 @@ * Copyright (C) 2003 Jean-Louis Bergamo - * Copyright (C) 2004-2017 Laurent Destailleur + * Copyright (C) 2004-2019 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2019 Nicolas ZABOURI * Copyright (C) 2019 Frédéric France @@ -130,6 +130,7 @@ print '
    '; /* * Last modified BOM */ + $max=5; $sql = "SELECT a.rowid, a.status, a.ref, a.tms as datem, a.status"; @@ -179,12 +180,63 @@ else dol_print_error($db); } +/* + * Last modified MOs + */ +$max=5; + +$sql = "SELECT a.rowid, a.status, a.ref, a.tms as datem, a.status"; +$sql.= " FROM ".MAIN_DB_PREFIX."mrp_mo as a"; +$sql.= " WHERE a.entity IN (".getEntity('mo').")"; +$sql.= $db->order("a.tms", "DESC"); +$sql.= $db->plimit($max, 0); + +$resql=$db->query($sql); +if ($resql) +{ + print '
    '; + print ''; + print ''; + print ''; + + $num = $db->num_rows($resql); + if ($num) + { + $i = 0; + while ($i < $num) + { + $obj = $db->fetch_object($resql); + + $staticmo->id=$obj->rowid; + $staticmo->ref=$obj->ref; + $staticmo->date_modification=$obj->datem; + $staticmo->status=$obj->status; + + print ''; + print ''; + print ''; + print ''; + print ''; + $i++; + } + } else { + print ''; + print ''; + print ''; + } + print "
    '.$langs->trans("LatestMOModified", $max).'
    '.$staticmo->getNomUrl(1, 32).''.dol_print_date($db->jdate($obj->datem), 'dayhour').''.$staticmo->getLibStatut(5).'
    ' . $langs->trans("None") . '
    "; + print "
    "; +} +else +{ + dol_print_error($db); +} print '
    '; $parameters = array('type' => $type, 'user' => $user); -$reshook = $hookmanager->executeHooks('dashboardMRP', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('dashboardMRP', $parameters, null); // Note that $action and $object may have been modified by hook // End of page llxFooter(); diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php index 356ea7bb07f..680a19fb18a 100644 --- a/htdocs/mrp/mo_card.php +++ b/htdocs/mrp/mo_card.php @@ -463,6 +463,19 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ''.$langs->trans('Modify').''."\n"; } + // Validate + if ($user->rights->mrp->write && $object->status == MO::STATUS_DRAFT) + { + if (is_array($object->lines) && count($object->lines) > 0) + { + print '' . $langs->trans("Validate") . ''; + } + else + { + print '' . $langs->trans("Validate") . ''; + } + } + // Clone if (! empty($user->rights->mrp->write)) { From bc3f088f504d090d7a091cab2a8a5cc62b45abb6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 30 Oct 2019 01:35:41 +0100 Subject: [PATCH 666/980] Enhance modulebuilder Work on MO --- htdocs/core/class/commonobject.class.php | 2 +- .../bom/doc/doc_generic_bom_odt.modules.php | 518 ++++++++++++++++++ htdocs/core/modules/bom/mod_bom_advanced.php | 2 +- htdocs/core/modules/bom/mod_bom_standard.php | 2 +- htdocs/core/modules/bom/modules_bom.php | 2 +- htdocs/core/modules/modTicket.class.php | 2 - .../mrp/doc/doc_generic_mo_odt.modules.php | 518 ++++++++++++++++++ htdocs/core/modules/mrp/mod_mrp_advanced.php | 146 +++++ htdocs/core/modules/mrp/mod_mrp_standard.php | 149 +++++ htdocs/core/modules/mrp/modules_mrp.php | 151 +++++ .../doc/doc_generic_myobject_odt.modules.php | 518 ++++++++++++++++++ .../myobject/mod_myobject_advanced.php | 146 +++++ .../myobject/mod_myobject_standard.php | 149 +++++ .../modules/myobject/modules_myobject.php | 151 +++++ htdocs/mrp/mo_card.php | 16 +- 15 files changed, 2457 insertions(+), 15 deletions(-) create mode 100644 htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php create mode 100644 htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php create mode 100644 htdocs/core/modules/mrp/mod_mrp_advanced.php create mode 100644 htdocs/core/modules/mrp/mod_mrp_standard.php create mode 100644 htdocs/core/modules/mrp/modules_mrp.php create mode 100644 htdocs/modulebuilder/template/core/modules/myobject/doc/doc_generic_myobject_odt.modules.php create mode 100644 htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_advanced.php create mode 100644 htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_standard.php create mode 100644 htdocs/modulebuilder/template/core/modules/myobject/modules_myobject.php diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 01ed67cce3e..a1faa0e97ae 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -4605,7 +4605,7 @@ abstract class CommonObject */ protected function commonGenerateDocument($modelspath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams = null) { - global $conf, $langs, $user, $hookmanager; + global $conf, $langs, $user, $hookmanager, $action; $srctemplatepath=''; diff --git a/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php new file mode 100644 index 00000000000..8885348bb16 --- /dev/null +++ b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php @@ -0,0 +1,518 @@ + + * Copyright (C) 2012 Juanjo Menent + * Copyright (C) 2014 Marcos García + * Copyright (C) 2016 Charlie Benke + * Copyright (C) 2018-2019 Philippe Grand + * Copyright (C) 2018 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see https://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php + * \ingroup bom + * \brief File of class to build ODT documents for BOMs + */ + +require_once DOL_DOCUMENT_ROOT.'/core/modules/bom/modules_bom.php'; +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php'; + + +/** + * Class to build documents using ODF templates generator + */ +class doc_generic_bom_odt extends ModelePDFBOMs +{ + /** + * Issuer + * @var Societe + */ + public $emetteur; + + /** + * @var array Minimum version of PHP required by module. + * e.g.: PHP ≥ 5.5 = array(5, 5) + */ + public $phpmin = array(5, 5); + + /** + * @var string Dolibarr version of the loaded document + */ + public $version = 'dolibarr'; + + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + public function __construct($db) + { + global $conf, $langs, $mysoc; + + // Load translation files required by the page + $langs->loadLangs(array("main","companies")); + + $this->db = $db; + $this->name = "ODT templates"; + $this->description = $langs->trans("DocumentModelOdt"); + $this->scandir = 'BOM_ADDON_PDF_ODT_PATH'; // Name of constant that is used to save list of directories to scan + + // Page size for A4 format + $this->type = 'odt'; + $this->page_largeur = 0; + $this->page_hauteur = 0; + $this->format = array($this->page_largeur,$this->page_hauteur); + $this->marge_gauche=0; + $this->marge_droite=0; + $this->marge_haute=0; + $this->marge_basse=0; + + $this->option_logo = 1; // Affiche logo + $this->option_tva = 0; // Gere option tva COMMANDE_TVAOPTION + $this->option_modereg = 0; // Affiche mode reglement + $this->option_condreg = 0; // Affiche conditions reglement + $this->option_codeproduitservice = 0; // Affiche code produit-service + $this->option_multilang = 1; // Dispo en plusieurs langues + $this->option_escompte = 0; // Affiche si il y a eu escompte + $this->option_credit_note = 0; // Support credit notes + $this->option_freetext = 1; // Support add of a personalised text + $this->option_draft_watermark = 0; // Support add of a watermark on drafts + + // Recupere emetteur + $this->emetteur=$mysoc; + if (! $this->emetteur->country_code) $this->emetteur->country_code=substr($langs->defaultlang, -2); // By default if not defined + } + + + /** + * Return description of a module + * + * @param Translate $langs Lang object to use for output + * @return string Description + */ + public function info($langs) + { + global $conf,$langs; + + // Load translation files required by the page + $langs->loadLangs(array("errors","companies")); + + $form = new Form($this->db); + + $texte = $this->description.".
    \n"; + $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= ''; + + // List of directories area + $texte.= ''; + + $texte.= ''; + $texte.= ''; + + $texte.= '
    '; + $texttitle=$langs->trans("ListOfDirectories"); + $listofdir=explode(',', preg_replace('/[\r\n]+/', ',', trim($conf->global->BOM_ADDON_PDF_ODT_PATH))); + $listoffiles=array(); + foreach($listofdir as $key=>$tmpdir) + { + $tmpdir=trim($tmpdir); + $tmpdir=preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir); + if (! $tmpdir) { + unset($listofdir[$key]); continue; + } + if (! is_dir($tmpdir)) $texttitle.=img_warning($langs->trans("ErrorDirNotFound", $tmpdir), 0); + else + { + $tmpfiles=dol_dir_list($tmpdir, 'files', 0, '\.(ods|odt)'); + if (count($tmpfiles)) $listoffiles=array_merge($listoffiles, $tmpfiles); + } + } + $texthelp=$langs->trans("ListOfDirectoriesForModelGenODT"); + // Add list of substitution keys + $texthelp.='
    '.$langs->trans("FollowingSubstitutionKeysCanBeUsed").'
    '; + $texthelp.=$langs->transnoentitiesnoconv("FullListOnOnlineDocumentation"); // This contains an url, we don't modify it + + $texte.= $form->textwithpicto($texttitle, $texthelp, 1, 'help', '', 1); + $texte.= '
    '; + $texte.= ''; + $texte.= '
    '; + $texte.= ''; + $texte.= '
    '; + + // Scan directories + $nbofiles=count($listoffiles); + if (! empty($conf->global->BOM_ADDON_PDF_ODT_PATH)) + { + $texte.=$langs->trans("NumberOfModelFilesFound").': '; + //$texte.=$nbofiles?'':''; + $texte.=count($listoffiles); + //$texte.=$nbofiles?'':''; + $texte.=''; + } + + if ($nbofiles) + { + $texte.='
    '; + $texte.= $langs->trans("ExampleOfDirectoriesForModelGen"); + $texte.= '
    '; + $texte.= ''; + + return $texte; + } + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Function to build a document on disk using the generic odt module. + * + * @param Commande $object Object source to build document + * @param Translate $outputlangs Lang output object + * @param string $srctemplatepath Full path of source filename for generator using a template file + * @param int $hidedetails Do not show line details + * @param int $hidedesc Do not show desc + * @param int $hideref Do not show ref + * @return int 1 if OK, <=0 if KO + */ + public function write_file($object, $outputlangs, $srctemplatepath, $hidedetails = 0, $hidedesc = 0, $hideref = 0) + { + // phpcs:enable + global $user,$langs,$conf,$mysoc,$hookmanager; + + if (empty($srctemplatepath)) + { + dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING); + return -1; + } + + // Add odtgeneration hook + if (! is_object($hookmanager)) + { + include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php'; + $hookmanager=new HookManager($this->db); + } + $hookmanager->initHooks(array('odtgeneration')); + global $action; + + if (! is_object($outputlangs)) $outputlangs=$langs; + $sav_charset_output=$outputlangs->charset_output; + $outputlangs->charset_output='UTF-8'; + + $outputlangs->loadLangs(array("main", "dict", "companies", "bills")); + + if ($conf->commande->dir_output) + { + // If $object is id instead of object + if (! is_object($object)) + { + $id = $object; + $object = new Commande($this->db); + $result=$object->fetch($id); + if ($result < 0) + { + dol_print_error($this->db, $object->error); + return -1; + } + } + + $dir = $conf->commande->multidir_output[$object->entity]; + $objectref = dol_sanitizeFileName($object->ref); + if (! preg_match('/specimen/i', $objectref)) $dir.= "/" . $objectref; + $file = $dir . "/" . $objectref . ".odt"; + + if (! file_exists($dir)) + { + if (dol_mkdir($dir) < 0) + { + $this->error=$langs->transnoentities("ErrorCanNotCreateDir", $dir); + return -1; + } + } + + if (file_exists($dir)) + { + //print "srctemplatepath=".$srctemplatepath; // Src filename + $newfile=basename($srctemplatepath); + $newfiletmp=preg_replace('/\.od(t|s)/i', '', $newfile); + $newfiletmp=preg_replace('/template_/i', '', $newfiletmp); + $newfiletmp=preg_replace('/modele_/i', '', $newfiletmp); + $newfiletmp=$objectref.'_'.$newfiletmp; + //$file=$dir.'/'.$newfiletmp.'.'.dol_print_date(dol_now(),'%Y%m%d%H%M%S').'.odt'; + // Get extension (ods or odt) + $newfileformat=substr($newfile, strrpos($newfile, '.')+1); + if ( ! empty($conf->global->MAIN_DOC_USE_TIMING)) + { + $format=$conf->global->MAIN_DOC_USE_TIMING; + if ($format == '1') $format='%Y%m%d%H%M%S'; + $filename=$newfiletmp.'-'.dol_print_date(dol_now(), $format).'.'.$newfileformat; + } + else + { + $filename=$newfiletmp.'.'.$newfileformat; + } + $file=$dir.'/'.$filename; + //print "newdir=".$dir; + //print "newfile=".$newfile; + //print "file=".$file; + //print "conf->societe->dir_temp=".$conf->societe->dir_temp; + + dol_mkdir($conf->bom->dir_temp); + + + // If CUSTOMER contact defined on order, we use it + $usecontact=false; + $arrayidcontact=$object->getIdContact('external', 'CUSTOMER'); + if (count($arrayidcontact) > 0) + { + $usecontact=true; + $result=$object->fetch_contact($arrayidcontact[0]); + } + + // Recipient name + $contactobject=null; + if (! empty($usecontact)) + { + // On peut utiliser le nom de la societe du contact + if (! empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) $socobject = $object->contact; + else { + $socobject = $object->thirdparty; + // if we have a CUSTOMER contact and we dont use it as recipient we store the contact object for later use + $contactobject = $object->contact; + } + } + else + { + $socobject=$object->thirdparty; + } + + // Make substitution + $substitutionarray=array( + '__FROM_NAME__' => $this->emetteur->name, + '__FROM_EMAIL__' => $this->emetteur->email, + '__TOTAL_TTC__' => $object->total_ttc, + '__TOTAL_HT__' => $object->total_ht, + '__TOTAL_VAT__' => $object->total_vat + ); + complete_substitutions_array($substitutionarray, $langs, $object); + // Call the ODTSubstitution hook + $parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$substitutionarray); + $reshook=$hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + // Line of free text + $newfreetext=''; + $paramfreetext='ORDER_FREE_TEXT'; + if (! empty($conf->global->$paramfreetext)) + { + $newfreetext=make_substitutions($conf->global->$paramfreetext, $substitutionarray); + } + + // Open and load template + require_once ODTPHP_PATH.'odf.php'; + try { + $odfHandler = new odf( + $srctemplatepath, + array( + 'PATH_TO_TMP' => $conf->commande->dir_temp, + 'ZIP_PROXY' => 'PclZipProxy', // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy. + 'DELIMITER_LEFT' => '{', + 'DELIMITER_RIGHT' => '}' + ) + ); + } + catch(Exception $e) + { + $this->error=$e->getMessage(); + dol_syslog($e->getMessage(), LOG_INFO); + return -1; + } + // After construction $odfHandler->contentXml contains content and + // [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by + // [!-- BEGIN lines --]*[!-- END lines --] + //print html_entity_decode($odfHandler->__toString()); + //print exit; + + + // Make substitutions into odt of freetext + try { + $odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8'); + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + + // Define substitution array + $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); + $array_object_from_properties=$this->get_substitutionarray_each_var_object($object, $outputlangs); + $array_objet=$this->get_substitutionarray_object($object, $outputlangs); + $array_user=$this->get_substitutionarray_user($user, $outputlangs); + $array_soc=$this->get_substitutionarray_mysoc($mysoc, $outputlangs); + $array_thirdparty=$this->get_substitutionarray_thirdparty($socobject, $outputlangs); + $array_other=$this->get_substitutionarray_other($outputlangs); + // retrieve contact information for use in object as contact_xxx tags + $array_thirdparty_contact = array(); + if ($usecontact && is_object($contactobject)) $array_thirdparty_contact=$this->get_substitutionarray_contact($contactobject, $outputlangs, 'contact'); + + $tmparray = array_merge($substitutionarray, $array_object_from_properties, $array_user, $array_soc, $array_thirdparty, $array_objet, $array_other, $array_thirdparty_contact); + complete_substitutions_array($tmparray, $outputlangs, $object); + + // Call the ODTSubstitution hook + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); + $reshook=$hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + foreach($tmparray as $key=>$value) + { + try { + if (preg_match('/logo$/', $key)) // Image + { + if (file_exists($value)) $odfHandler->setImage($key, $value); + else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); + } + else // Text + { + $odfHandler->setVars($key, $value, true, 'UTF-8'); + } + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + } + // Replace tags of lines + try + { + $foundtagforlines = 1; + try { + $listlines = $odfHandler->setSegment('lines'); + } + catch(OdfException $e) + { + // We may arrive here if tags for lines not present into template + $foundtagforlines = 0; + dol_syslog($e->getMessage(), LOG_INFO); + } + if ($foundtagforlines) + { + foreach ($object->lines as $line) + { + $tmparray=$this->get_substitutionarray_lines($line, $outputlangs); + complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); + // Call the ODTSubstitutionLine hook + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray,'line'=>$line); + $reshook=$hookmanager->executeHooks('ODTSubstitutionLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + foreach($tmparray as $key => $val) + { + try + { + $listlines->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + catch(SegmentException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + } + $listlines->merge(); + } + $odfHandler->mergeSegment($listlines); + } + } + catch(OdfException $e) + { + $this->error=$e->getMessage(); + dol_syslog($this->error, LOG_WARNING); + return -1; + } + + // Replace labels translated + $tmparray=$outputlangs->get_translations_for_substitutions(); + foreach($tmparray as $key=>$value) + { + try { + $odfHandler->setVars($key, $value, true, 'UTF-8'); + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + } + + // Call the beforeODTSave hook + + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); + $reshook=$hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + // Write new file + if (!empty($conf->global->MAIN_ODT_AS_PDF)) { + try { + $odfHandler->exportAsAttachedPDF($file); + }catch (Exception $e){ + $this->error=$e->getMessage(); + dol_syslog($e->getMessage(), LOG_INFO); + return -1; + } + } + else { + try { + $odfHandler->saveToDisk($file); + } catch (Exception $e) { + $this->error=$e->getMessage(); + dol_syslog($e->getMessage(), LOG_INFO); + return -1; + } + } + + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); + $reshook=$hookmanager->executeHooks('afterODTCreation', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + if (! empty($conf->global->MAIN_UMASK)) + @chmod($file, octdec($conf->global->MAIN_UMASK)); + + $odfHandler=null; // Destroy object + + $this->result = array('fullpath'=>$file); + + return 1; // Success + } + else + { + $this->error=$langs->transnoentities("ErrorCanNotCreateDir", $dir); + return -1; + } + } + + return -1; + } +} diff --git a/htdocs/core/modules/bom/mod_bom_advanced.php b/htdocs/core/modules/bom/mod_bom_advanced.php index eed79c037fd..4a139b98379 100644 --- a/htdocs/core/modules/bom/mod_bom_advanced.php +++ b/htdocs/core/modules/bom/mod_bom_advanced.php @@ -23,7 +23,7 @@ /** * \file htdocs/core/modules/bom/mod_bom_advanced.php * \ingroup bom - * \brief File containing class for numbering model of bom advanced + * \brief File containing class for numbering model of BOMs advanced */ require_once DOL_DOCUMENT_ROOT .'/core/modules/bom/modules_bom.php'; diff --git a/htdocs/core/modules/bom/mod_bom_standard.php b/htdocs/core/modules/bom/mod_bom_standard.php index eefbc7570c0..77c0856d3f6 100644 --- a/htdocs/core/modules/bom/mod_bom_standard.php +++ b/htdocs/core/modules/bom/mod_bom_standard.php @@ -20,7 +20,7 @@ /** * \file htdocs/core/modules/bom/mod_bom_standard.php * \ingroup bom - * \brief File of class to manage customer order numbering rules standard + * \brief File of class to manage BOMs numbering rules standard */ require_once DOL_DOCUMENT_ROOT .'/core/modules/bom/modules_bom.php'; diff --git a/htdocs/core/modules/bom/modules_bom.php b/htdocs/core/modules/bom/modules_bom.php index 9f871d0b578..f8f29fec2e6 100644 --- a/htdocs/core/modules/bom/modules_bom.php +++ b/htdocs/core/modules/bom/modules_bom.php @@ -52,7 +52,7 @@ abstract class ModelePDFBoms extends CommonDocGenerator // phpcs:enable global $conf; - $type = 'order'; + $type = 'bom'; $list = array(); include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; diff --git a/htdocs/core/modules/modTicket.class.php b/htdocs/core/modules/modTicket.class.php index 8b973c45624..8d7f16fcaf7 100644 --- a/htdocs/core/modules/modTicket.class.php +++ b/htdocs/core/modules/modTicket.class.php @@ -81,8 +81,6 @@ class modTicket extends DolibarrModules $this->module_parts = array( // Set this to 1 if module has its own trigger directory 'triggers' => 1, - // Set this to 1 if module has its own models directory - 'models' => 1, ); // Data directories to create when module is enabled. diff --git a/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php new file mode 100644 index 00000000000..6d85bfd3553 --- /dev/null +++ b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php @@ -0,0 +1,518 @@ + + * Copyright (C) 2012 Juanjo Menent + * Copyright (C) 2014 Marcos García + * Copyright (C) 2016 Charlie Benke + * Copyright (C) 2018-2019 Philippe Grand + * Copyright (C) 2018 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see https://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php + * \ingroup mrp + * \brief File of class to build ODT documents for MOs + */ + +require_once DOL_DOCUMENT_ROOT.'/core/modules/bom/modules_bom.php'; +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php'; + + +/** + * Class to build documents using ODF templates generator + */ +class doc_generic_mo_odt extends ModelePDFMOs +{ + /** + * Issuer + * @var Societe + */ + public $emetteur; + + /** + * @var array Minimum version of PHP required by module. + * e.g.: PHP ≥ 5.5 = array(5, 5) + */ + public $phpmin = array(5, 5); + + /** + * @var string Dolibarr version of the loaded document + */ + public $version = 'dolibarr'; + + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + public function __construct($db) + { + global $conf, $langs, $mysoc; + + // Load translation files required by the page + $langs->loadLangs(array("main","companies")); + + $this->db = $db; + $this->name = "ODT templates"; + $this->description = $langs->trans("DocumentModelOdt"); + $this->scandir = 'MRP_MO_ADDON_PDF_ODT_PATH'; // Name of constant that is used to save list of directories to scan + + // Page size for A4 format + $this->type = 'odt'; + $this->page_largeur = 0; + $this->page_hauteur = 0; + $this->format = array($this->page_largeur,$this->page_hauteur); + $this->marge_gauche=0; + $this->marge_droite=0; + $this->marge_haute=0; + $this->marge_basse=0; + + $this->option_logo = 1; // Affiche logo + $this->option_tva = 0; // Gere option tva COMMANDE_TVAOPTION + $this->option_modereg = 0; // Affiche mode reglement + $this->option_condreg = 0; // Affiche conditions reglement + $this->option_codeproduitservice = 0; // Affiche code produit-service + $this->option_multilang = 1; // Dispo en plusieurs langues + $this->option_escompte = 0; // Affiche si il y a eu escompte + $this->option_credit_note = 0; // Support credit notes + $this->option_freetext = 1; // Support add of a personalised text + $this->option_draft_watermark = 0; // Support add of a watermark on drafts + + // Recupere emetteur + $this->emetteur=$mysoc; + if (! $this->emetteur->country_code) $this->emetteur->country_code=substr($langs->defaultlang, -2); // By default if not defined + } + + + /** + * Return description of a module + * + * @param Translate $langs Lang object to use for output + * @return string Description + */ + public function info($langs) + { + global $conf,$langs; + + // Load translation files required by the page + $langs->loadLangs(array("errors","companies")); + + $form = new Form($this->db); + + $texte = $this->description.".
    \n"; + $texte.= '
    '; + $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= ''; + + // List of directories area + $texte.= ''; + + $texte.= ''; + $texte.= ''; + + $texte.= '
    '; + $texttitle=$langs->trans("ListOfDirectories"); + $listofdir=explode(',', preg_replace('/[\r\n]+/', ',', trim($conf->global->MRP_MO_ADDON_PDF_ODT_PATH))); + $listoffiles=array(); + foreach($listofdir as $key=>$tmpdir) + { + $tmpdir=trim($tmpdir); + $tmpdir=preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir); + if (! $tmpdir) { + unset($listofdir[$key]); continue; + } + if (! is_dir($tmpdir)) $texttitle.=img_warning($langs->trans("ErrorDirNotFound", $tmpdir), 0); + else + { + $tmpfiles=dol_dir_list($tmpdir, 'files', 0, '\.(ods|odt)'); + if (count($tmpfiles)) $listoffiles=array_merge($listoffiles, $tmpfiles); + } + } + $texthelp=$langs->trans("ListOfDirectoriesForModelGenODT"); + // Add list of substitution keys + $texthelp.='
    '.$langs->trans("FollowingSubstitutionKeysCanBeUsed").'
    '; + $texthelp.=$langs->transnoentitiesnoconv("FullListOnOnlineDocumentation"); // This contains an url, we don't modify it + + $texte.= $form->textwithpicto($texttitle, $texthelp, 1, 'help', '', 1); + $texte.= '
    '; + $texte.= ''; + $texte.= '
    '; + $texte.= ''; + $texte.= '
    '; + + // Scan directories + $nbofiles=count($listoffiles); + if (! empty($conf->global->MRP_MO_ADDON_PDF_ODT_PATH)) + { + $texte.=$langs->trans("NumberOfModelFilesFound").': '; + //$texte.=$nbofiles?'':''; + $texte.=count($listoffiles); + //$texte.=$nbofiles?'':''; + $texte.=''; + } + + if ($nbofiles) + { + $texte.='
    '; + $texte.= $langs->trans("ExampleOfDirectoriesForModelGen"); + $texte.= '
    '; + $texte.= '
    '; + + return $texte; + } + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Function to build a document on disk using the generic odt module. + * + * @param Commande $object Object source to build document + * @param Translate $outputlangs Lang output object + * @param string $srctemplatepath Full path of source filename for generator using a template file + * @param int $hidedetails Do not show line details + * @param int $hidedesc Do not show desc + * @param int $hideref Do not show ref + * @return int 1 if OK, <=0 if KO + */ + public function write_file($object, $outputlangs, $srctemplatepath, $hidedetails = 0, $hidedesc = 0, $hideref = 0) + { + // phpcs:enable + global $user,$langs,$conf,$mysoc,$hookmanager; + + if (empty($srctemplatepath)) + { + dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING); + return -1; + } + + // Add odtgeneration hook + if (! is_object($hookmanager)) + { + include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php'; + $hookmanager=new HookManager($this->db); + } + $hookmanager->initHooks(array('odtgeneration')); + global $action; + + if (! is_object($outputlangs)) $outputlangs=$langs; + $sav_charset_output=$outputlangs->charset_output; + $outputlangs->charset_output='UTF-8'; + + $outputlangs->loadLangs(array("main", "dict", "companies", "bills")); + + if ($conf->commande->dir_output) + { + // If $object is id instead of object + if (! is_object($object)) + { + $id = $object; + $object = new Commande($this->db); + $result=$object->fetch($id); + if ($result < 0) + { + dol_print_error($this->db, $object->error); + return -1; + } + } + + $dir = $conf->commande->multidir_output[$object->entity]; + $objectref = dol_sanitizeFileName($object->ref); + if (! preg_match('/specimen/i', $objectref)) $dir.= "/" . $objectref; + $file = $dir . "/" . $objectref . ".odt"; + + if (! file_exists($dir)) + { + if (dol_mkdir($dir) < 0) + { + $this->error=$langs->transnoentities("ErrorCanNotCreateDir", $dir); + return -1; + } + } + + if (file_exists($dir)) + { + //print "srctemplatepath=".$srctemplatepath; // Src filename + $newfile=basename($srctemplatepath); + $newfiletmp=preg_replace('/\.od(t|s)/i', '', $newfile); + $newfiletmp=preg_replace('/template_/i', '', $newfiletmp); + $newfiletmp=preg_replace('/modele_/i', '', $newfiletmp); + $newfiletmp=$objectref.'_'.$newfiletmp; + //$file=$dir.'/'.$newfiletmp.'.'.dol_print_date(dol_now(),'%Y%m%d%H%M%S').'.odt'; + // Get extension (ods or odt) + $newfileformat=substr($newfile, strrpos($newfile, '.')+1); + if ( ! empty($conf->global->MAIN_DOC_USE_TIMING)) + { + $format=$conf->global->MAIN_DOC_USE_TIMING; + if ($format == '1') $format='%Y%m%d%H%M%S'; + $filename=$newfiletmp.'-'.dol_print_date(dol_now(), $format).'.'.$newfileformat; + } + else + { + $filename=$newfiletmp.'.'.$newfileformat; + } + $file=$dir.'/'.$filename; + //print "newdir=".$dir; + //print "newfile=".$newfile; + //print "file=".$file; + //print "conf->societe->dir_temp=".$conf->societe->dir_temp; + + dol_mkdir($conf->bom->dir_temp); + + + // If CUSTOMER contact defined on order, we use it + $usecontact=false; + $arrayidcontact=$object->getIdContact('external', 'CUSTOMER'); + if (count($arrayidcontact) > 0) + { + $usecontact=true; + $result=$object->fetch_contact($arrayidcontact[0]); + } + + // Recipient name + $contactobject=null; + if (! empty($usecontact)) + { + // On peut utiliser le nom de la societe du contact + if (! empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) $socobject = $object->contact; + else { + $socobject = $object->thirdparty; + // if we have a CUSTOMER contact and we dont use it as recipient we store the contact object for later use + $contactobject = $object->contact; + } + } + else + { + $socobject=$object->thirdparty; + } + + // Make substitution + $substitutionarray=array( + '__FROM_NAME__' => $this->emetteur->name, + '__FROM_EMAIL__' => $this->emetteur->email, + '__TOTAL_TTC__' => $object->total_ttc, + '__TOTAL_HT__' => $object->total_ht, + '__TOTAL_VAT__' => $object->total_vat + ); + complete_substitutions_array($substitutionarray, $langs, $object); + // Call the ODTSubstitution hook + $parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$substitutionarray); + $reshook=$hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + // Line of free text + $newfreetext=''; + $paramfreetext='ORDER_FREE_TEXT'; + if (! empty($conf->global->$paramfreetext)) + { + $newfreetext=make_substitutions($conf->global->$paramfreetext, $substitutionarray); + } + + // Open and load template + require_once ODTPHP_PATH.'odf.php'; + try { + $odfHandler = new odf( + $srctemplatepath, + array( + 'PATH_TO_TMP' => $conf->commande->dir_temp, + 'ZIP_PROXY' => 'PclZipProxy', // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy. + 'DELIMITER_LEFT' => '{', + 'DELIMITER_RIGHT' => '}' + ) + ); + } + catch(Exception $e) + { + $this->error=$e->getMessage(); + dol_syslog($e->getMessage(), LOG_INFO); + return -1; + } + // After construction $odfHandler->contentXml contains content and + // [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by + // [!-- BEGIN lines --]*[!-- END lines --] + //print html_entity_decode($odfHandler->__toString()); + //print exit; + + + // Make substitutions into odt of freetext + try { + $odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8'); + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + + // Define substitution array + $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); + $array_object_from_properties=$this->get_substitutionarray_each_var_object($object, $outputlangs); + $array_objet=$this->get_substitutionarray_object($object, $outputlangs); + $array_user=$this->get_substitutionarray_user($user, $outputlangs); + $array_soc=$this->get_substitutionarray_mysoc($mysoc, $outputlangs); + $array_thirdparty=$this->get_substitutionarray_thirdparty($socobject, $outputlangs); + $array_other=$this->get_substitutionarray_other($outputlangs); + // retrieve contact information for use in object as contact_xxx tags + $array_thirdparty_contact = array(); + if ($usecontact && is_object($contactobject)) $array_thirdparty_contact=$this->get_substitutionarray_contact($contactobject, $outputlangs, 'contact'); + + $tmparray = array_merge($substitutionarray, $array_object_from_properties, $array_user, $array_soc, $array_thirdparty, $array_objet, $array_other, $array_thirdparty_contact); + complete_substitutions_array($tmparray, $outputlangs, $object); + + // Call the ODTSubstitution hook + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); + $reshook=$hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + foreach($tmparray as $key=>$value) + { + try { + if (preg_match('/logo$/', $key)) // Image + { + if (file_exists($value)) $odfHandler->setImage($key, $value); + else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); + } + else // Text + { + $odfHandler->setVars($key, $value, true, 'UTF-8'); + } + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + } + // Replace tags of lines + try + { + $foundtagforlines = 1; + try { + $listlines = $odfHandler->setSegment('lines'); + } + catch(OdfException $e) + { + // We may arrive here if tags for lines not present into template + $foundtagforlines = 0; + dol_syslog($e->getMessage(), LOG_INFO); + } + if ($foundtagforlines) + { + foreach ($object->lines as $line) + { + $tmparray=$this->get_substitutionarray_lines($line, $outputlangs); + complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); + // Call the ODTSubstitutionLine hook + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray,'line'=>$line); + $reshook=$hookmanager->executeHooks('ODTSubstitutionLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + foreach($tmparray as $key => $val) + { + try + { + $listlines->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + catch(SegmentException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + } + $listlines->merge(); + } + $odfHandler->mergeSegment($listlines); + } + } + catch(OdfException $e) + { + $this->error=$e->getMessage(); + dol_syslog($this->error, LOG_WARNING); + return -1; + } + + // Replace labels translated + $tmparray=$outputlangs->get_translations_for_substitutions(); + foreach($tmparray as $key=>$value) + { + try { + $odfHandler->setVars($key, $value, true, 'UTF-8'); + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + } + + // Call the beforeODTSave hook + + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); + $reshook=$hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + // Write new file + if (!empty($conf->global->MAIN_ODT_AS_PDF)) { + try { + $odfHandler->exportAsAttachedPDF($file); + }catch (Exception $e){ + $this->error=$e->getMessage(); + dol_syslog($e->getMessage(), LOG_INFO); + return -1; + } + } + else { + try { + $odfHandler->saveToDisk($file); + } catch (Exception $e) { + $this->error=$e->getMessage(); + dol_syslog($e->getMessage(), LOG_INFO); + return -1; + } + } + + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); + $reshook=$hookmanager->executeHooks('afterODTCreation', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + if (! empty($conf->global->MAIN_UMASK)) + @chmod($file, octdec($conf->global->MAIN_UMASK)); + + $odfHandler=null; // Destroy object + + $this->result = array('fullpath'=>$file); + + return 1; // Success + } + else + { + $this->error=$langs->transnoentities("ErrorCanNotCreateDir", $dir); + return -1; + } + } + + return -1; + } +} diff --git a/htdocs/core/modules/mrp/mod_mrp_advanced.php b/htdocs/core/modules/mrp/mod_mrp_advanced.php new file mode 100644 index 00000000000..1c24b4010ba --- /dev/null +++ b/htdocs/core/modules/mrp/mod_mrp_advanced.php @@ -0,0 +1,146 @@ + + * Copyright (C) 2004-2007 Laurent Destailleur + * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2008 Raphael Bertrand (Resultic) + * Copyright (C) 2019 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see https://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/mrp/mod_mrp_advanced.php + * \ingroup mrp + * \brief File containing class for numbering model of MOs advanced + */ + +require_once DOL_DOCUMENT_ROOT .'/core/modules/mrp/modules_mrp.php'; + + +/** + * Class to manage customer Bom numbering rules advanced + */ +class mod_mrp_advanced extends ModeleNumRefMos +{ + /** + * Dolibarr version of the loaded document + * @var string + */ + public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr' + + /** + * @var string Error message + */ + public $error = ''; + + /** + * @var string name + */ + public $name='advanced'; + + + /** + * Returns the description of the numbering model + * + * @return string Texte descripif + */ + public function info() + { + global $conf, $langs, $db; + + $langs->load("bills"); + + $form = new Form($db); + + $texte = $langs->trans('GenericNumRefModelDesc')."
    \n"; + $texte.= '
    '; + $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= ''; + + $tooltip=$langs->trans("GenericMaskCodes", $langs->transnoentities("Mo"), $langs->transnoentities("Mo")); + $tooltip.=$langs->trans("GenericMaskCodes2"); + $tooltip.=$langs->trans("GenericMaskCodes3"); + $tooltip.=$langs->trans("GenericMaskCodes4a", $langs->transnoentities("Mo"), $langs->transnoentities("Mo")); + $tooltip.=$langs->trans("GenericMaskCodes5"); + + // Parametrage du prefix + $texte.= ''; + $texte.= ''; + + $texte.= ''; + + $texte.= ''; + + $texte.= '
    '.$langs->trans("Mask").':'.$form->textwithpicto('', $tooltip, 1, 1).' 
    '; + $texte.= '
    '; + + return $texte; + } + + /** + * Return an example of numbering + * + * @return string Example + */ + public function getExample() + { + global $conf,$langs,$mysoc; + + $old_code_client=$mysoc->code_client; + $old_code_type=$mysoc->typent_code; + $mysoc->code_client='CCCCCCCCCC'; + $mysoc->typent_code='TTTTTTTTTT'; + $numExample = $this->getNextValue($mysoc, ''); + $mysoc->code_client=$old_code_client; + $mysoc->typent_code=$old_code_type; + + if (! $numExample) + { + $numExample = $langs->trans('NotConfigured'); + } + return $numExample; + } + + /** + * Return next free value + * + * @param Product $objprod Object product + * @param Object $object Object we need next value for + * @return string Value if KO, <0 if KO + */ + public function getNextValue($objprod, $object) + { + global $db,$conf; + + require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php'; + + // We get cursor rule + $mask=$conf->global->MRP_ADVANCED_MASK; + + if (! $mask) + { + $this->error='NotConfigured'; + return 0; + } + + $date = ($object->date_mo ? $object->date_mo : $object->date); + + $numFinal=get_next_value($db, $mask, 'mrp_mo', 'ref', '', null, $date); + + return $numFinal; + } +} diff --git a/htdocs/core/modules/mrp/mod_mrp_standard.php b/htdocs/core/modules/mrp/mod_mrp_standard.php new file mode 100644 index 00000000000..24f1b0a1f69 --- /dev/null +++ b/htdocs/core/modules/mrp/mod_mrp_standard.php @@ -0,0 +1,149 @@ + + * Copyright (C) 2005-2009 Regis Houssin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see https://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/mrp/mod_mrp_standard.php + * \ingroup mrp + * \brief File of class to manage MO numbering rules standard + */ +require_once DOL_DOCUMENT_ROOT .'/core/modules/mrp/modules_mrp.php'; + +/** + * Class to manage customer order numbering rules standard + */ +class mod_mrp_standard extends ModeleNumRefMos +{ + /** + * Dolibarr version of the loaded document + * @var string + */ + public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr' + + public $prefix='MO'; + + /** + * @var string Error code (or message) + */ + public $error=''; + + /** + * @var string name + */ + public $name='standard'; + + + /** + * Return description of numbering module + * + * @return string Text with description + */ + public function info() + { + global $langs; + return $langs->trans("SimpleNumRefModelDesc", $this->prefix); + } + + + /** + * Return an example of numbering + * + * @return string Example + */ + public function getExample() + { + return $this->prefix."0501-0001"; + } + + + /** + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. + * + * @return boolean false if conflict, true if ok + */ + public function canBeActivated() + { + global $conf,$langs,$db; + + $coyymm=''; $max=''; + + $posindice=8; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; + $sql.= " FROM ".MAIN_DB_PREFIX."bom"; + $sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; + $sql.= " AND entity = ".$conf->entity; + + $resql=$db->query($sql); + if ($resql) + { + $row = $db->fetch_row($resql); + if ($row) { $coyymm = substr($row[0], 0, 6); $max=$row[0]; } + } + if ($coyymm && ! preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorNumRefModel', $max); + return false; + } + + return true; + } + + /** + * Return next free value + * + * @param Product $objprod Object product + * @param Object $object Object we need next value for + * @return string Value if KO, <0 if KO + */ + public function getNextValue($objprod, $object) + { + global $db,$conf; + + // D'abord on recupere la valeur max + $posindice=9; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; + $sql.= " FROM ".MAIN_DB_PREFIX."bom_bom"; + $sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; + $sql.= " AND entity = ".$conf->entity; + + $resql=$db->query($sql); + if ($resql) + { + $obj = $db->fetch_object($resql); + if ($obj) $max = intval($obj->max); + else $max=0; + } + else + { + dol_syslog("mod_mrp_standard::getNextValue", LOG_DEBUG); + return -1; + } + + //$date=time(); + $date=$object->date_creation; + $yymm = strftime("%y%m", $date); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s", $max+1); + + dol_syslog("mod_mrp_standard::getNextValue return ".$this->prefix.$yymm."-".$num); + return $this->prefix.$yymm."-".$num; + } +} diff --git a/htdocs/core/modules/mrp/modules_mrp.php b/htdocs/core/modules/mrp/modules_mrp.php new file mode 100644 index 00000000000..bd83fab70b7 --- /dev/null +++ b/htdocs/core/modules/mrp/modules_mrp.php @@ -0,0 +1,151 @@ + + * Copyright (C) 2004-2011 Laurent Destailleur + * Copyright (C) 2004 Eric Seigne + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2006 Andre Cianfarani + * Copyright (C) 2012 Juanjo Menent + * Copyright (C) 2014 Marcos García + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see https://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/mrp/modules_mrp.php + * \ingroup bom + * \brief File that contains parent class for mos models + * and parent class for mos numbering models + */ + +require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // required for use by classes that inherit + + +/** + * Parent class for mos models + */ +abstract class ModelePDFMos extends CommonDocGenerator +{ + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Return list of active generation modules + * + * @param DoliDB $db Database handler + * @param integer $maxfilenamelength Max length of value to show + * @return array List of templates + */ + public static function liste_modeles($db, $maxfilenamelength = 0) + { + // phpcs:enable + global $conf; + + $type = 'mo'; + $list = array(); + + include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; + $list = getListOfModels($db, $type, $maxfilenamelength); + + return $list; + } +} + + + +/** + * Parent class to manage numbering of MOs + */ +abstract class ModeleNumRefMos +{ + /** + * @var string Error code (or message) + */ + public $error=''; + + /** + * Return if a module can be used or not + * + * @return boolean true if module can be used + */ + public function isEnabled() + { + return true; + } + + /** + * Returns the default description of the numbering template + * + * @return string Texte descripif + */ + public function info() + { + global $langs; + $langs->load("mrp"); + return $langs->trans("NoDescription"); + } + + /** + * Returns an example of numbering + * + * @return string Example + */ + public function getExample() + { + global $langs; + $langs->load("mrp"); + return $langs->trans("NoExample"); + } + + /** + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. + * + * @return boolean false if conflict, true if ok + */ + public function canBeActivated() + { + return true; + } + + /** + * Returns next assigned value + * + * @param Societe $objsoc Object thirdparty + * @param Object $object Object we need next value for + * @return string Valeur + */ + public function getNextValue($objsoc, $object) + { + global $langs; + return $langs->trans("NotAvailable"); + } + + /** + * Returns version of numbering module + * + * @return string Valeur + */ + public function getVersion() + { + global $langs; + $langs->load("admin"); + + if ($this->version == 'development') return $langs->trans("VersionDevelopment"); + if ($this->version == 'experimental') return $langs->trans("VersionExperimental"); + if ($this->version == 'dolibarr') return DOL_VERSION; + if ($this->version) return $this->version; + return $langs->trans("NotAvailable"); + } +} diff --git a/htdocs/modulebuilder/template/core/modules/myobject/doc/doc_generic_myobject_odt.modules.php b/htdocs/modulebuilder/template/core/modules/myobject/doc/doc_generic_myobject_odt.modules.php new file mode 100644 index 00000000000..bffc0d5c470 --- /dev/null +++ b/htdocs/modulebuilder/template/core/modules/myobject/doc/doc_generic_myobject_odt.modules.php @@ -0,0 +1,518 @@ + + * Copyright (C) 2012 Juanjo Menent + * Copyright (C) 2014 Marcos García + * Copyright (C) 2016 Charlie Benke + * Copyright (C) 2018-2019 Philippe Grand + * Copyright (C) 2018 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see https://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/commande/doc/doc_generic_myobject_odt.modules.php + * \ingroup mymodule + * \brief File of class to build ODT documents for myobjects + */ + +require_once DOL_DOCUMENT_ROOT.'/core/modules/myobject/modules_myobject.php'; +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php'; + + +/** + * Class to build documents using ODF templates generator + */ +class doc_generic_myobject_odt extends ModelePDFMyObject +{ + /** + * Issuer + * @var Societe + */ + public $emetteur; + + /** + * @var array Minimum version of PHP required by module. + * e.g.: PHP ≥ 5.5 = array(5, 5) + */ + public $phpmin = array(5, 5); + + /** + * @var string Dolibarr version of the loaded document + */ + public $version = 'dolibarr'; + + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + public function __construct($db) + { + global $conf, $langs, $mysoc; + + // Load translation files required by the page + $langs->loadLangs(array("main","companies")); + + $this->db = $db; + $this->name = "ODT templates"; + $this->description = $langs->trans("DocumentModelOdt"); + $this->scandir = 'MYMODULE_MYOBJECT_ADDON_PDF_ODT_PATH'; // Name of constant that is used to save list of directories to scan + + // Page size for A4 format + $this->type = 'odt'; + $this->page_largeur = 0; + $this->page_hauteur = 0; + $this->format = array($this->page_largeur,$this->page_hauteur); + $this->marge_gauche=0; + $this->marge_droite=0; + $this->marge_haute=0; + $this->marge_basse=0; + + $this->option_logo = 1; // Affiche logo + $this->option_tva = 0; // Gere option tva COMMANDE_TVAOPTION + $this->option_modereg = 0; // Affiche mode reglement + $this->option_condreg = 0; // Affiche conditions reglement + $this->option_codeproduitservice = 0; // Affiche code produit-service + $this->option_multilang = 1; // Dispo en plusieurs langues + $this->option_escompte = 0; // Affiche si il y a eu escompte + $this->option_credit_note = 0; // Support credit notes + $this->option_freetext = 1; // Support add of a personalised text + $this->option_draft_watermark = 0; // Support add of a watermark on drafts + + // Recupere emetteur + $this->emetteur=$mysoc; + if (! $this->emetteur->country_code) $this->emetteur->country_code=substr($langs->defaultlang, -2); // By default if not defined + } + + + /** + * Return description of a module + * + * @param Translate $langs Lang object to use for output + * @return string Description + */ + public function info($langs) + { + global $conf,$langs; + + // Load translation files required by the page + $langs->loadLangs(array("errors","companies")); + + $form = new Form($this->db); + + $texte = $this->description.".
    \n"; + $texte.= '
    '; + $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= ''; + + // List of directories area + $texte.= ''; + + $texte.= ''; + $texte.= ''; + + $texte.= '
    '; + $texttitle=$langs->trans("ListOfDirectories"); + $listofdir=explode(',', preg_replace('/[\r\n]+/', ',', trim($conf->global->MYMODULE_MYOBJECT_ADDON_PDF_ODT_PATH))); + $listoffiles=array(); + foreach($listofdir as $key=>$tmpdir) + { + $tmpdir=trim($tmpdir); + $tmpdir=preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir); + if (! $tmpdir) { + unset($listofdir[$key]); continue; + } + if (! is_dir($tmpdir)) $texttitle.=img_warning($langs->trans("ErrorDirNotFound", $tmpdir), 0); + else + { + $tmpfiles=dol_dir_list($tmpdir, 'files', 0, '\.(ods|odt)'); + if (count($tmpfiles)) $listoffiles=array_merge($listoffiles, $tmpfiles); + } + } + $texthelp=$langs->trans("ListOfDirectoriesForModelGenODT"); + // Add list of substitution keys + $texthelp.='
    '.$langs->trans("FollowingSubstitutionKeysCanBeUsed").'
    '; + $texthelp.=$langs->transnoentitiesnoconv("FullListOnOnlineDocumentation"); // This contains an url, we don't modify it + + $texte.= $form->textwithpicto($texttitle, $texthelp, 1, 'help', '', 1); + $texte.= '
    '; + $texte.= ''; + $texte.= '
    '; + $texte.= ''; + $texte.= '
    '; + + // Scan directories + $nbofiles=count($listoffiles); + if (! empty($conf->global->MYMODULE_MYOBJECT_ADDON_PDF_ODT_PATH)) + { + $texte.=$langs->trans("NumberOfModelFilesFound").': '; + //$texte.=$nbofiles?'':''; + $texte.=count($listoffiles); + //$texte.=$nbofiles?'':''; + $texte.=''; + } + + if ($nbofiles) + { + $texte.='
    '; + $texte.= $langs->trans("ExampleOfDirectoriesForModelGen"); + $texte.= '
    '; + $texte.= '
    '; + + return $texte; + } + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Function to build a document on disk using the generic odt module. + * + * @param Commande $object Object source to build document + * @param Translate $outputlangs Lang output object + * @param string $srctemplatepath Full path of source filename for generator using a template file + * @param int $hidedetails Do not show line details + * @param int $hidedesc Do not show desc + * @param int $hideref Do not show ref + * @return int 1 if OK, <=0 if KO + */ + public function write_file($object, $outputlangs, $srctemplatepath, $hidedetails = 0, $hidedesc = 0, $hideref = 0) + { + // phpcs:enable + global $user,$langs,$conf,$mysoc,$hookmanager; + + if (empty($srctemplatepath)) + { + dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING); + return -1; + } + + // Add odtgeneration hook + if (! is_object($hookmanager)) + { + include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php'; + $hookmanager=new HookManager($this->db); + } + $hookmanager->initHooks(array('odtgeneration')); + global $action; + + if (! is_object($outputlangs)) $outputlangs=$langs; + $sav_charset_output=$outputlangs->charset_output; + $outputlangs->charset_output='UTF-8'; + + $outputlangs->loadLangs(array("main", "dict", "companies", "bills")); + + if ($conf->commande->dir_output) + { + // If $object is id instead of object + if (! is_object($object)) + { + $id = $object; + $object = new Commande($this->db); + $result=$object->fetch($id); + if ($result < 0) + { + dol_print_error($this->db, $object->error); + return -1; + } + } + + $dir = $conf->commande->multidir_output[$object->entity]; + $objectref = dol_sanitizeFileName($object->ref); + if (! preg_match('/specimen/i', $objectref)) $dir.= "/" . $objectref; + $file = $dir . "/" . $objectref . ".odt"; + + if (! file_exists($dir)) + { + if (dol_mkdir($dir) < 0) + { + $this->error=$langs->transnoentities("ErrorCanNotCreateDir", $dir); + return -1; + } + } + + if (file_exists($dir)) + { + //print "srctemplatepath=".$srctemplatepath; // Src filename + $newfile=basename($srctemplatepath); + $newfiletmp=preg_replace('/\.od(t|s)/i', '', $newfile); + $newfiletmp=preg_replace('/template_/i', '', $newfiletmp); + $newfiletmp=preg_replace('/modele_/i', '', $newfiletmp); + $newfiletmp=$objectref.'_'.$newfiletmp; + //$file=$dir.'/'.$newfiletmp.'.'.dol_print_date(dol_now(),'%Y%m%d%H%M%S').'.odt'; + // Get extension (ods or odt) + $newfileformat=substr($newfile, strrpos($newfile, '.')+1); + if ( ! empty($conf->global->MAIN_DOC_USE_TIMING)) + { + $format=$conf->global->MAIN_DOC_USE_TIMING; + if ($format == '1') $format='%Y%m%d%H%M%S'; + $filename=$newfiletmp.'-'.dol_print_date(dol_now(), $format).'.'.$newfileformat; + } + else + { + $filename=$newfiletmp.'.'.$newfileformat; + } + $file=$dir.'/'.$filename; + //print "newdir=".$dir; + //print "newfile=".$newfile; + //print "file=".$file; + //print "conf->societe->dir_temp=".$conf->societe->dir_temp; + + dol_mkdir($conf->mymodule->dir_temp); + + + // If CUSTOMER contact defined on order, we use it + $usecontact=false; + $arrayidcontact=$object->getIdContact('external', 'CUSTOMER'); + if (count($arrayidcontact) > 0) + { + $usecontact=true; + $result=$object->fetch_contact($arrayidcontact[0]); + } + + // Recipient name + $contactobject=null; + if (! empty($usecontact)) + { + // On peut utiliser le nom de la societe du contact + if (! empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) $socobject = $object->contact; + else { + $socobject = $object->thirdparty; + // if we have a CUSTOMER contact and we dont use it as recipient we store the contact object for later use + $contactobject = $object->contact; + } + } + else + { + $socobject=$object->thirdparty; + } + + // Make substitution + $substitutionarray=array( + '__FROM_NAME__' => $this->emetteur->name, + '__FROM_EMAIL__' => $this->emetteur->email, + '__TOTAL_TTC__' => $object->total_ttc, + '__TOTAL_HT__' => $object->total_ht, + '__TOTAL_VAT__' => $object->total_vat + ); + complete_substitutions_array($substitutionarray, $langs, $object); + // Call the ODTSubstitution hook + $parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$substitutionarray); + $reshook=$hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + // Line of free text + $newfreetext=''; + $paramfreetext='ORDER_FREE_TEXT'; + if (! empty($conf->global->$paramfreetext)) + { + $newfreetext=make_substitutions($conf->global->$paramfreetext, $substitutionarray); + } + + // Open and load template + require_once ODTPHP_PATH.'odf.php'; + try { + $odfHandler = new odf( + $srctemplatepath, + array( + 'PATH_TO_TMP' => $conf->commande->dir_temp, + 'ZIP_PROXY' => 'PclZipProxy', // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy. + 'DELIMITER_LEFT' => '{', + 'DELIMITER_RIGHT' => '}' + ) + ); + } + catch(Exception $e) + { + $this->error=$e->getMessage(); + dol_syslog($e->getMessage(), LOG_INFO); + return -1; + } + // After construction $odfHandler->contentXml contains content and + // [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by + // [!-- BEGIN lines --]*[!-- END lines --] + //print html_entity_decode($odfHandler->__toString()); + //print exit; + + + // Make substitutions into odt of freetext + try { + $odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8'); + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + + // Define substitution array + $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); + $array_object_from_properties=$this->get_substitutionarray_each_var_object($object, $outputlangs); + $array_objet=$this->get_substitutionarray_object($object, $outputlangs); + $array_user=$this->get_substitutionarray_user($user, $outputlangs); + $array_soc=$this->get_substitutionarray_mysoc($mysoc, $outputlangs); + $array_thirdparty=$this->get_substitutionarray_thirdparty($socobject, $outputlangs); + $array_other=$this->get_substitutionarray_other($outputlangs); + // retrieve contact information for use in object as contact_xxx tags + $array_thirdparty_contact = array(); + if ($usecontact && is_object($contactobject)) $array_thirdparty_contact=$this->get_substitutionarray_contact($contactobject, $outputlangs, 'contact'); + + $tmparray = array_merge($substitutionarray, $array_object_from_properties, $array_user, $array_soc, $array_thirdparty, $array_objet, $array_other, $array_thirdparty_contact); + complete_substitutions_array($tmparray, $outputlangs, $object); + + // Call the ODTSubstitution hook + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); + $reshook=$hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + foreach($tmparray as $key=>$value) + { + try { + if (preg_match('/logo$/', $key)) // Image + { + if (file_exists($value)) $odfHandler->setImage($key, $value); + else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); + } + else // Text + { + $odfHandler->setVars($key, $value, true, 'UTF-8'); + } + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + } + // Replace tags of lines + try + { + $foundtagforlines = 1; + try { + $listlines = $odfHandler->setSegment('lines'); + } + catch(OdfException $e) + { + // We may arrive here if tags for lines not present into template + $foundtagforlines = 0; + dol_syslog($e->getMessage(), LOG_INFO); + } + if ($foundtagforlines) + { + foreach ($object->lines as $line) + { + $tmparray=$this->get_substitutionarray_lines($line, $outputlangs); + complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); + // Call the ODTSubstitutionLine hook + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray,'line'=>$line); + $reshook=$hookmanager->executeHooks('ODTSubstitutionLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + foreach($tmparray as $key => $val) + { + try + { + $listlines->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + catch(SegmentException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + } + $listlines->merge(); + } + $odfHandler->mergeSegment($listlines); + } + } + catch(OdfException $e) + { + $this->error=$e->getMessage(); + dol_syslog($this->error, LOG_WARNING); + return -1; + } + + // Replace labels translated + $tmparray=$outputlangs->get_translations_for_substitutions(); + foreach($tmparray as $key=>$value) + { + try { + $odfHandler->setVars($key, $value, true, 'UTF-8'); + } + catch(OdfException $e) + { + dol_syslog($e->getMessage(), LOG_INFO); + } + } + + // Call the beforeODTSave hook + + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); + $reshook=$hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + // Write new file + if (!empty($conf->global->MAIN_ODT_AS_PDF)) { + try { + $odfHandler->exportAsAttachedPDF($file); + }catch (Exception $e){ + $this->error=$e->getMessage(); + dol_syslog($e->getMessage(), LOG_INFO); + return -1; + } + } + else { + try { + $odfHandler->saveToDisk($file); + } catch (Exception $e) { + $this->error=$e->getMessage(); + dol_syslog($e->getMessage(), LOG_INFO); + return -1; + } + } + + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); + $reshook=$hookmanager->executeHooks('afterODTCreation', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + + if (! empty($conf->global->MAIN_UMASK)) + @chmod($file, octdec($conf->global->MAIN_UMASK)); + + $odfHandler=null; // Destroy object + + $this->result = array('fullpath'=>$file); + + return 1; // Success + } + else + { + $this->error=$langs->transnoentities("ErrorCanNotCreateDir", $dir); + return -1; + } + } + + return -1; + } +} diff --git a/htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_advanced.php b/htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_advanced.php new file mode 100644 index 00000000000..dfcd1a574e7 --- /dev/null +++ b/htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_advanced.php @@ -0,0 +1,146 @@ + + * Copyright (C) 2004-2007 Laurent Destailleur + * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2008 Raphael Bertrand (Resultic) + * Copyright (C) 2019 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see https://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/bom/mod_bom_advanced.php + * \ingroup bom + * \brief File containing class for advanced numbering model of MyObject + */ + +require_once DOL_DOCUMENT_ROOT .'/core/modules/bom/modules_bom.php'; + + +/** + * Class to manage customer Bom numbering rules advanced + */ +class mod_myobject_advanced extends ModeleNumRefMyObject +{ + /** + * Dolibarr version of the loaded document + * @var string + */ + public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr' + + /** + * @var string Error message + */ + public $error = ''; + + /** + * @var string name + */ + public $name='advanced'; + + + /** + * Returns the description of the numbering model + * + * @return string Texte descripif + */ + public function info() + { + global $conf, $langs, $db; + + $langs->load("bills"); + + $form = new Form($db); + + $texte = $langs->trans('GenericNumRefModelDesc')."
    \n"; + $texte.= '
    '; + $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= ''; + + $tooltip=$langs->trans("GenericMaskCodes", $langs->transnoentities("Bom"), $langs->transnoentities("Bom")); + $tooltip.=$langs->trans("GenericMaskCodes2"); + $tooltip.=$langs->trans("GenericMaskCodes3"); + $tooltip.=$langs->trans("GenericMaskCodes4a", $langs->transnoentities("Bom"), $langs->transnoentities("Bom")); + $tooltip.=$langs->trans("GenericMaskCodes5"); + + // Parametrage du prefix + $texte.= ''; + $texte.= ''; + + $texte.= ''; + + $texte.= ''; + + $texte.= '
    '.$langs->trans("Mask").':'.$form->textwithpicto('', $tooltip, 1, 1).' 
    '; + $texte.= '
    '; + + return $texte; + } + + /** + * Return an example of numbering + * + * @return string Example + */ + public function getExample() + { + global $conf,$langs,$mysoc; + + $old_code_client=$mysoc->code_client; + $old_code_type=$mysoc->typent_code; + $mysoc->code_client='CCCCCCCCCC'; + $mysoc->typent_code='TTTTTTTTTT'; + $numExample = $this->getNextValue($mysoc, ''); + $mysoc->code_client=$old_code_client; + $mysoc->typent_code=$old_code_type; + + if (! $numExample) + { + $numExample = $langs->trans('NotConfigured'); + } + return $numExample; + } + + /** + * Return next free value + * + * @param Product $objprod Object product + * @param Object $object Object we need next value for + * @return string Value if KO, <0 if KO + */ + public function getNextValue($objprod, $object) + { + global $db,$conf; + + require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php'; + + // We get cursor rule + $mask=$conf->global->MYMODULE_MYOBJECT_ADVANCED_MASK; + + if (! $mask) + { + $this->error='NotConfigured'; + return 0; + } + + $date = ($object->date_bom ? $object->date_bom : $object->date); + + $numFinal=get_next_value($db, $mask, 'bom_bom', 'ref', '', null, $date); + + return $numFinal; + } +} diff --git a/htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_standard.php b/htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_standard.php new file mode 100644 index 00000000000..0da53adb55f --- /dev/null +++ b/htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_standard.php @@ -0,0 +1,149 @@ + + * Copyright (C) 2005-2009 Regis Houssin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see https://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/bom/mod_bom_standard.php + * \ingroup bom + * \brief File of class to manage MyObject numbering rules standard + */ +require_once DOL_DOCUMENT_ROOT .'/core/modules/bom/modules_bom.php'; + +/** + * Class to manage customer order numbering rules standard + */ +class mod_myobject_standard extends ModeleNumRefMyObject +{ + /** + * Dolibarr version of the loaded document + * @var string + */ + public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr' + + public $prefix='MYOBJECT'; + + /** + * @var string Error code (or message) + */ + public $error=''; + + /** + * @var string name + */ + public $name='standard'; + + + /** + * Return description of numbering module + * + * @return string Text with description + */ + public function info() + { + global $langs; + return $langs->trans("SimpleNumRefModelDesc", $this->prefix); + } + + + /** + * Return an example of numbering + * + * @return string Example + */ + public function getExample() + { + return $this->prefix."0501-0001"; + } + + + /** + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. + * + * @return boolean false if conflict, true if ok + */ + public function canBeActivated() + { + global $conf,$langs,$db; + + $coyymm=''; $max=''; + + $posindice=8; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; + $sql.= " FROM ".MAIN_DB_PREFIX."bom"; + $sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; + $sql.= " AND entity = ".$conf->entity; + + $resql=$db->query($sql); + if ($resql) + { + $row = $db->fetch_row($resql); + if ($row) { $coyymm = substr($row[0], 0, 6); $max=$row[0]; } + } + if ($coyymm && ! preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorNumRefModel', $max); + return false; + } + + return true; + } + + /** + * Return next free value + * + * @param Product $objprod Object product + * @param Object $object Object we need next value for + * @return string Value if KO, <0 if KO + */ + public function getNextValue($objprod, $object) + { + global $db,$conf; + + // D'abord on recupere la valeur max + $posindice=9; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; + $sql.= " FROM ".MAIN_DB_PREFIX."bom_bom"; + $sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; + $sql.= " AND entity = ".$conf->entity; + + $resql=$db->query($sql); + if ($resql) + { + $obj = $db->fetch_object($resql); + if ($obj) $max = intval($obj->max); + else $max=0; + } + else + { + dol_syslog("mod_bom_standard::getNextValue", LOG_DEBUG); + return -1; + } + + //$date=time(); + $date=$object->date_creation; + $yymm = strftime("%y%m", $date); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s", $max+1); + + dol_syslog("mod_bom_standard::getNextValue return ".$this->prefix.$yymm."-".$num); + return $this->prefix.$yymm."-".$num; + } +} diff --git a/htdocs/modulebuilder/template/core/modules/myobject/modules_myobject.php b/htdocs/modulebuilder/template/core/modules/myobject/modules_myobject.php new file mode 100644 index 00000000000..4598a010287 --- /dev/null +++ b/htdocs/modulebuilder/template/core/modules/myobject/modules_myobject.php @@ -0,0 +1,151 @@ + + * Copyright (C) 2004-2011 Laurent Destailleur + * Copyright (C) 2004 Eric Seigne + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2006 Andre Cianfarani + * Copyright (C) 2012 Juanjo Menent + * Copyright (C) 2014 Marcos García + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see https://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/bom/modules_bom.php + * \ingroup bom + * \brief File that contains parent class for boms models + * and parent class for boms numbering models + */ + +require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // required for use by classes that inherit + + +/** + * Parent class for boms models + */ +abstract class ModelePDFMyObject extends CommonDocGenerator +{ + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Return list of active generation modules + * + * @param DoliDB $db Database handler + * @param integer $maxfilenamelength Max length of value to show + * @return array List of templates + */ + public static function liste_modeles($db, $maxfilenamelength = 0) + { + // phpcs:enable + global $conf; + + $type = 'bom'; + $list = array(); + + include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; + $list = getListOfModels($db, $type, $maxfilenamelength); + + return $list; + } +} + + + +/** + * Parent class to manage numbering of BOMs + */ +abstract class ModeleNumRefMyObject +{ + /** + * @var string Error code (or message) + */ + public $error=''; + + /** + * Return if a module can be used or not + * + * @return boolean true if module can be used + */ + public function isEnabled() + { + return true; + } + + /** + * Returns the default description of the numbering template + * + * @return string Texte descripif + */ + public function info() + { + global $langs; + $langs->load("mrp"); + return $langs->trans("NoDescription"); + } + + /** + * Returns an example of numbering + * + * @return string Example + */ + public function getExample() + { + global $langs; + $langs->load("mrp"); + return $langs->trans("NoExample"); + } + + /** + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. + * + * @return boolean false if conflict, true if ok + */ + public function canBeActivated() + { + return true; + } + + /** + * Returns next assigned value + * + * @param Societe $objsoc Object thirdparty + * @param Object $object Object we need next value for + * @return string Valeur + */ + public function getNextValue($objsoc, $object) + { + global $langs; + return $langs->trans("NotAvailable"); + } + + /** + * Returns version of numbering module + * + * @return string Valeur + */ + public function getVersion() + { + global $langs; + $langs->load("admin"); + + if ($this->version == 'development') return $langs->trans("VersionDevelopment"); + if ($this->version == 'experimental') return $langs->trans("VersionExperimental"); + if ($this->version == 'dolibarr') return DOL_VERSION; + if ($this->version) return $this->version; + return $langs->trans("NotAvailable"); + } +} diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php index 680a19fb18a..0ecbefc32a7 100644 --- a/htdocs/mrp/mo_card.php +++ b/htdocs/mrp/mo_card.php @@ -538,17 +538,15 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } //Select mail models is same action as presend - /* - if (GETPOST('modelselected')) $action = 'presend'; + if (GETPOST('modelselected')) $action = 'presend'; - // Presend form - $modelmail='inventory'; - $defaulttopic='InformationMessage'; - $diroutput = $conf->product->dir_output.'/inventory'; - $trackid = 'stockinv'.$object->id; + // Presend form + $modelmail='mo'; + $defaulttopic='InformationMessage'; + $diroutput = $conf->mrp->dir_output; + $trackid = 'mo'.$object->id; - include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php'; - */ + include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php'; } // End of page From f03bf149bdd7755eac49811d8e92a56c10b4cca4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 30 Oct 2019 02:09:29 +0100 Subject: [PATCH 667/980] Fix autoselect of field with modulebuilder --- htdocs/core/class/html.form.class.php | 19 ++++++++++++++----- htdocs/core/lib/ajax.lib.php | 2 +- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index ca285642b2a..321a4fe8fbc 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5835,10 +5835,11 @@ class Form * @param string $moreparams More params provided to ajax call * @param int $forcecombo Force to load all values and output a standard combobox (with no beautification) * @param int $disabled 1=Html component is disabled + * @param string $selected_input_value Value of preselected input text (for use with ajax) * @return string Return HTML string * @see selectForFormsList() select_thirdparty */ - public function selectForForms($objectdesc, $htmlname, $preselectedvalue, $showempty = '', $searchkey = '', $placeholder = '', $morecss = '', $moreparams = '', $forcecombo = 0, $disabled = 0) + public function selectForForms($objectdesc, $htmlname, $preselectedvalue, $showempty = '', $searchkey = '', $placeholder = '', $morecss = '', $moreparams = '', $forcecombo = 0, $disabled = 0, $selected_input_value = '') { global $conf, $user; @@ -5870,20 +5871,28 @@ class Form $confkeyforautocompletemode=strtoupper($prefixforautocompletemode).'_USE_SEARCH_TO_SELECT'; // For example COMPANY_USE_SEARCH_TO_SELECT dol_syslog(get_class($this)."::selectForForms object->filter=".$objecttmp->filter, LOG_DEBUG); - $out=''; if (! empty($conf->use_javascript_ajax) && ! empty($conf->global->$confkeyforautocompletemode) && ! $forcecombo) { - $objectdesc=$classname.':'.$classpath.':'.$addcreatebuttonornot.':'.$filter; + // No immediate load of all database + $placeholder=''; + if ($preselectedvalue && empty($selected_input_value)) + { + $objecttmp->fetch($preselectedvalue); + $selected_input_value=($prefixforautocompletemode == 'company' ? $objecttmp->name : $objecttmp->ref); + //unset($objecttmp); + } + + $objectdesc=$classname.':'.$classpath.':'.$addcreatebuttonornot.':'.$filter; $urlforajaxcall = DOL_URL_ROOT.'/core/ajax/selectobject.php'; // No immediate load of all database - $urloption='htmlname='.$htmlname.'&outjson=1&objectdesc='.$objectdesc.($moreparams?$moreparams:''); + $urloption='htmlname='.$htmlname.'&outjson=1&objectdesc='.$objectdesc.'&filter='.urlencode($objecttmp->filter).($moreparams?$moreparams:''); // Activate the auto complete using ajax call. $out.= ajax_autocompleter($preselectedvalue, $htmlname, $urlforajaxcall, $urloption, $conf->global->$confkeyforautocompletemode, 0, array()); $out.= ''; if ($placeholder) $placeholder=' placeholder="'.$placeholder.'"'; - $out.= ''; + $out.= ''; } else { diff --git a/htdocs/core/lib/ajax.lib.php b/htdocs/core/lib/ajax.lib.php index 9ab911ca1de..8991e1ad23b 100644 --- a/htdocs/core/lib/ajax.lib.php +++ b/htdocs/core/lib/ajax.lib.php @@ -31,7 +31,7 @@ * * @param string $selected Preselected value * @param string $htmlname HTML name of input field - * @param string $url Url for request: /path/page.php. Must return a json array ('key'=>id, 'value'=>String shown into input field once selected, 'label'=>String shown into combo list) + * @param string $url Ajax Url to call for request: /path/page.php. Must return a json array ('key'=>id, 'value'=>String shown into input field once selected, 'label'=>String shown into combo list) * @param string $urloption More parameters on URL request * @param int $minLength Minimum number of chars to trigger that Ajax search * @param int $autoselect Automatic selection if just one value From 8849cd9897a0cface1198a6108c12820b75b3ad0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 30 Oct 2019 02:19:32 +0100 Subject: [PATCH 668/980] Update index.php --- htdocs/compta/resultat/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/resultat/index.php b/htdocs/compta/resultat/index.php index d12587eea6e..d40f00a9c42 100644 --- a/htdocs/compta/resultat/index.php +++ b/htdocs/compta/resultat/index.php @@ -483,7 +483,7 @@ if (! empty($conf->tax->enabled) && ($modecompta == 'CREANCES-DETTES' || $modeco $encaiss[$obj->dm] += -$obj->amount; if (! isset($encaiss_ttc[$obj->dm])) $encaiss_ttc[$obj->dm]=0; - $encaiss_ttc[$obj->dm] +=-$obj->amount; + $encaiss_ttc[$obj->dm] += -$obj->amount; $i++; } From 15d0d6e2717006575d14a70bad970725eb50dea0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 30 Oct 2019 02:39:51 +0100 Subject: [PATCH 669/980] FIX #12258 --- htdocs/contact/card.php | 12 ++++++------ htdocs/contact/class/contact.class.php | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index aaf1cd0a2b9..12e7db0f2b4 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -179,7 +179,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility_id = GETPOST("civility_id", 'alpha'); + $object->civility_code = GETPOST("civility_code", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); $object->zip = GETPOST("zipcode", 'alpha'); @@ -366,7 +366,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility_id = GETPOST("civility_id", 'alpha'); + $object->civility_code = GETPOST("civility_code", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); @@ -619,8 +619,8 @@ else } // Civility - print ''; - print $formcompany->select_civility(GETPOST("civility", 'alpha')?GETPOST("civility", 'alpha'):$object->civility_code); + print ''; + print $formcompany->select_civility(GETPOSTISSET("civility_code")?GETPOST("civility_code", 'alpha'):$object->civility_code, 'civility_code'); print ''; print ''; @@ -918,8 +918,8 @@ else } // Civility - print ''; - print $formcompany->select_civility(isset($_POST["civility"])?GETPOST("civility"):$object->civility_code); + print ''; + print $formcompany->select_civility(GETPOSTISSET("civility_code")?GETPOST("civility", "aZ09"):$object->civility_code, 'civility_code'); print ''; print ''; diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index eb25d0ad712..109b6298499 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -325,13 +325,13 @@ class Contact extends CommonObject $this->town=(empty($this->town)?'':$this->town); $this->country_id=($this->country_id > 0?$this->country_id:$this->country_id); if (empty($this->statut)) $this->statut = 0; - + if (empty($this->civility_code) && ! is_numeric($this->civility_id)) $this->civility_code = $this->civility_id; // For backward compatibility $this->db->begin(); $sql = "UPDATE ".MAIN_DB_PREFIX."socpeople SET "; if ($this->socid > 0) $sql .= " fk_soc='".$this->db->escape($this->socid)."',"; elseif ($this->socid == -1) $sql .= " fk_soc=null,"; - $sql .= " civility='".$this->db->escape($this->civility_id)."'"; + $sql .= " civility='".$this->db->escape($this->civility_code)."'"; $sql .= ", lastname='".$this->db->escape($this->lastname)."'"; $sql .= ", firstname='".$this->db->escape($this->firstname)."'"; $sql .= ", address='".$this->db->escape($this->address)."'"; From 350e01a5a3144ca886fd1126b04808b39d5d92c8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 30 Oct 2019 02:59:24 +0100 Subject: [PATCH 670/980] Update card.php --- 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 61cdaf25cad..6d2df681492 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -972,7 +972,7 @@ else print ''; } - print $formcompany->select_state(GETPOST('state_id', 'alpha')?GETPOST('state_id', 'alpha'):$object->state_id, $object->country_code, 'state_id'); + print $formcompany->select_state(GETPOSTISSET('state_id')?GETPOST('state_id', 'alpha'):$object->state_id, $object->country_code, 'state_id'); print ''; } From ad608d0cb9506f9cf2d69e9e1c52604d29afe253 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 30 Oct 2019 03:07:02 +0100 Subject: [PATCH 671/980] Update payment.php --- htdocs/don/payment/payment.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/don/payment/payment.php b/htdocs/don/payment/payment.php index 82a6651e6e7..872466e2471 100644 --- a/htdocs/don/payment/payment.php +++ b/htdocs/don/payment/payment.php @@ -235,8 +235,9 @@ if (GETPOST('action', 'aZ09') == 'create') dol_fiche_end(); /* - * Autres charges impayees + * List of payments on donation */ + $num = 1; $i = 0; From 5b57bf1f6133283a5b2bba12370277efdb549339 Mon Sep 17 00:00:00 2001 From: dolibarr95 <24292300+dolibarr95@users.noreply.github.com> Date: Wed, 30 Oct 2019 08:42:43 +0100 Subject: [PATCH 672/980] array name error --- htdocs/commande/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index a428b25481d..2351fb7885e 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -790,7 +790,7 @@ if ($resql) $companystatic->name = $obj->name; $companystatic->client = $obj->client; $companystatic->email = $obj->email; - if (!isset($cacheGetNomUrl[$obj->socid])) { + if (!isset($getNomUrl_cache[$obj->socid])) { $getNomUrl_cache[$obj->socid] = $companystatic->getNomUrl(1, 'customer'); } From 1963e5c95917a72380ac907b14db00b1a36991ba Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 09:35:45 +0100 Subject: [PATCH 673/980] add comment --- htdocs/holiday/class/holiday.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 0eb02e006e5..ffb727120aa 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -53,7 +53,10 @@ class Holiday extends CommonObject * @var int Field with ID of parent key if this field has a parent */ public $fk_element = 'fk_holiday'; - + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto = 'holiday'; /** From 345a060bbe6abd9d119f108a818c04630025932d Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Wed, 30 Oct 2019 08:36:59 +0000 Subject: [PATCH 674/980] Fixing style errors. --- htdocs/holiday/class/holiday.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index ffb727120aa..7a86d471948 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -53,7 +53,7 @@ class Holiday extends CommonObject * @var int Field with ID of parent key if this field has a parent */ public $fk_element = 'fk_holiday'; - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ From a80243e5282db20ca9dbd760a7f65380ead6f78d Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 09:48:34 +0100 Subject: [PATCH 675/980] add comment --- htdocs/core/modules/mailings/advthirdparties.modules.php | 4 ++++ htdocs/core/modules/mailings/contacts1.modules.php | 4 ++++ htdocs/core/modules/mailings/example.modules.php | 4 ++++ htdocs/core/modules/mailings/fraise.modules.php | 4 ++++ htdocs/core/modules/mailings/pomme.modules.php | 4 ++++ htdocs/core/modules/mailings/thirdparties.modules.php | 4 ++++ .../mailings/thirdparties_services_expired.modules.php | 4 ++++ htdocs/core/modules/mailings/xinputfile.modules.php | 4 ++++ htdocs/core/modules/mailings/xinputuser.modules.php | 4 ++++ 9 files changed, 36 insertions(+) diff --git a/htdocs/core/modules/mailings/advthirdparties.modules.php b/htdocs/core/modules/mailings/advthirdparties.modules.php index 581fca03f8b..2e4f0be6ed8 100644 --- a/htdocs/core/modules/mailings/advthirdparties.modules.php +++ b/htdocs/core/modules/mailings/advthirdparties.modules.php @@ -31,6 +31,10 @@ class mailing_advthirdparties extends MailingTargets public $require_admin=0; public $require_module=array("none"); // This module should not be displayed as Selector in mailling + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='company'; /** diff --git a/htdocs/core/modules/mailings/contacts1.modules.php b/htdocs/core/modules/mailings/contacts1.modules.php index aa951426a12..4ec70504e4d 100644 --- a/htdocs/core/modules/mailings/contacts1.modules.php +++ b/htdocs/core/modules/mailings/contacts1.modules.php @@ -37,6 +37,10 @@ class mailing_contacts1 extends MailingTargets public $desc='Contacts of thirdparties (prospects, customers, suppliers...)'; public $require_module=array("societe"); // Module mailing actif si modules require_module actifs public $require_admin=0; // Module mailing actif pour user admin ou non + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='contact'; /** diff --git a/htdocs/core/modules/mailings/example.modules.php b/htdocs/core/modules/mailings/example.modules.php index a96457c2625..394def035b0 100644 --- a/htdocs/core/modules/mailings/example.modules.php +++ b/htdocs/core/modules/mailings/example.modules.php @@ -36,6 +36,10 @@ class mailing_example extends MailingTargets public $tooltip='MyTooltipLangKey'; public $require_module=array(); + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto=''; /** diff --git a/htdocs/core/modules/mailings/fraise.modules.php b/htdocs/core/modules/mailings/fraise.modules.php index 25ffcb717fd..74a2d5b3296 100644 --- a/htdocs/core/modules/mailings/fraise.modules.php +++ b/htdocs/core/modules/mailings/fraise.modules.php @@ -40,6 +40,10 @@ class mailing_fraise extends MailingTargets public $require_admin=0; public $require_module=array('adherent'); + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='user'; /** diff --git a/htdocs/core/modules/mailings/pomme.modules.php b/htdocs/core/modules/mailings/pomme.modules.php index 970339e4dbb..36708ae34e4 100644 --- a/htdocs/core/modules/mailings/pomme.modules.php +++ b/htdocs/core/modules/mailings/pomme.modules.php @@ -35,6 +35,10 @@ class mailing_pomme extends MailingTargets public $desc='Dolibarr users with emails'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouv�e public $require_module=array(); // Module mailing actif si modules require_module actifs public $require_admin=1; // Module mailing actif pour user admin ou non + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='user'; /** diff --git a/htdocs/core/modules/mailings/thirdparties.modules.php b/htdocs/core/modules/mailings/thirdparties.modules.php index 68cb49e10d9..97b744ca977 100644 --- a/htdocs/core/modules/mailings/thirdparties.modules.php +++ b/htdocs/core/modules/mailings/thirdparties.modules.php @@ -30,6 +30,10 @@ class mailing_thirdparties extends MailingTargets public $require_admin=0; public $require_module=array("societe"); // This module allows to select by categories must be also enabled if category module is not activated + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='company'; /** diff --git a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php index 75dc4b9499b..1af4ba0961d 100644 --- a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php +++ b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php @@ -28,6 +28,10 @@ class mailing_thirdparties_services_expired extends MailingTargets public $require_admin=0; public $require_module=array('contrat'); + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='company'; /** diff --git a/htdocs/core/modules/mailings/xinputfile.modules.php b/htdocs/core/modules/mailings/xinputfile.modules.php index 4987c9ebc17..172d29cf957 100644 --- a/htdocs/core/modules/mailings/xinputfile.modules.php +++ b/htdocs/core/modules/mailings/xinputfile.modules.php @@ -35,6 +35,10 @@ class mailing_xinputfile extends MailingTargets public $desc='EMails from a file'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouv�e public $require_module=array(); // Module mailing actif si modules require_module actifs public $require_admin=0; // Module mailing actif pour user admin ou non + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='generic'; public $tooltip='UseFormatFileEmailToTarget'; diff --git a/htdocs/core/modules/mailings/xinputuser.modules.php b/htdocs/core/modules/mailings/xinputuser.modules.php index 8d4ecf0b72e..01f89f31e6d 100644 --- a/htdocs/core/modules/mailings/xinputuser.modules.php +++ b/htdocs/core/modules/mailings/xinputuser.modules.php @@ -35,6 +35,10 @@ class mailing_xinputuser extends MailingTargets public $desc='EMails input by user'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouv�e public $require_module=array(); // Module mailing actif si modules require_module actifs public $require_admin=0; // Module mailing actif pour user admin ou non + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='generic'; public $tooltip='UseFormatInputEmailToTarget'; From 445d09cf8ae10a03efeb95ee9f8605b28ff084e5 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 09:50:06 +0100 Subject: [PATCH 676/980] add comment --- htdocs/core/modules/printing/printgcp.modules.php | 4 ++++ htdocs/core/modules/printing/printipp.modules.php | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/htdocs/core/modules/printing/printgcp.modules.php b/htdocs/core/modules/printing/printgcp.modules.php index eeef6ab34e5..6d842244fbf 100644 --- a/htdocs/core/modules/printing/printgcp.modules.php +++ b/htdocs/core/modules/printing/printgcp.modules.php @@ -37,6 +37,10 @@ class printing_printgcp extends PrintingDriver { public $name = 'printgcp'; public $desc = 'PrintGCPDesc'; + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto = 'printer'; public $active = 'PRINTING_PRINTGCP'; public $conf = array(); diff --git a/htdocs/core/modules/printing/printipp.modules.php b/htdocs/core/modules/printing/printipp.modules.php index 1d76fe6f574..9b67ea05c1e 100644 --- a/htdocs/core/modules/printing/printipp.modules.php +++ b/htdocs/core/modules/printing/printipp.modules.php @@ -32,6 +32,10 @@ class printing_printipp extends PrintingDriver { public $name = 'printipp'; public $desc = 'PrintIPPDesc'; + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto = 'printer'; public $active = 'PRINTING_PRINTIPP'; public $conf = array(); From 2fc09b3530008be8ec712b2e8cb0b947a0a669d9 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 09:52:25 +0100 Subject: [PATCH 677/980] add comment --- htdocs/expensereport/class/expensereport.class.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 485373c5840..0b91f2c2699 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -46,6 +46,10 @@ class ExpenseReport extends CommonObject public $table_element_line = 'expensereport_det'; public $fk_element = 'fk_expensereport'; + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto = 'trip'; public $lines=array(); From af288e1fc61b7f360e928a44db075c595a633834 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 09:53:12 +0100 Subject: [PATCH 678/980] add comment --- htdocs/fichinter/class/fichinterrec.class.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/fichinter/class/fichinterrec.class.php b/htdocs/fichinter/class/fichinterrec.class.php index f88653e70eb..9d7173b578b 100644 --- a/htdocs/fichinter/class/fichinterrec.class.php +++ b/htdocs/fichinter/class/fichinterrec.class.php @@ -42,6 +42,10 @@ class FichinterRec extends Fichinter public $table_element = 'fichinter_rec'; public $table_element_line = 'fichinter_rec'; public $fk_element = 'fk_fichinter'; + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto = 'intervention'; public $title; From ed9a13621187d25e1bbab3eed43eb7f013a5d9a5 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Wed, 30 Oct 2019 08:58:19 +0000 Subject: [PATCH 679/980] Fixing style errors. --- htdocs/core/modules/mailings/advthirdparties.modules.php | 2 +- htdocs/core/modules/mailings/contacts1.modules.php | 2 +- htdocs/core/modules/mailings/example.modules.php | 2 +- htdocs/core/modules/mailings/fraise.modules.php | 2 +- htdocs/core/modules/mailings/pomme.modules.php | 2 +- htdocs/core/modules/mailings/thirdparties.modules.php | 2 +- .../modules/mailings/thirdparties_services_expired.modules.php | 2 +- htdocs/core/modules/mailings/xinputfile.modules.php | 2 +- htdocs/core/modules/mailings/xinputuser.modules.php | 2 +- htdocs/core/modules/printing/printgcp.modules.php | 2 +- htdocs/core/modules/printing/printipp.modules.php | 2 +- htdocs/expensereport/class/expensereport.class.php | 2 +- htdocs/fichinter/class/fichinterrec.class.php | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/htdocs/core/modules/mailings/advthirdparties.modules.php b/htdocs/core/modules/mailings/advthirdparties.modules.php index 2e4f0be6ed8..558744d87e8 100644 --- a/htdocs/core/modules/mailings/advthirdparties.modules.php +++ b/htdocs/core/modules/mailings/advthirdparties.modules.php @@ -31,7 +31,7 @@ class mailing_advthirdparties extends MailingTargets public $require_admin=0; public $require_module=array("none"); // This module should not be displayed as Selector in mailling - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/core/modules/mailings/contacts1.modules.php b/htdocs/core/modules/mailings/contacts1.modules.php index 4ec70504e4d..b3687e4f603 100644 --- a/htdocs/core/modules/mailings/contacts1.modules.php +++ b/htdocs/core/modules/mailings/contacts1.modules.php @@ -37,7 +37,7 @@ class mailing_contacts1 extends MailingTargets public $desc='Contacts of thirdparties (prospects, customers, suppliers...)'; public $require_module=array("societe"); // Module mailing actif si modules require_module actifs public $require_admin=0; // Module mailing actif pour user admin ou non - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/core/modules/mailings/example.modules.php b/htdocs/core/modules/mailings/example.modules.php index 394def035b0..88af802ecfe 100644 --- a/htdocs/core/modules/mailings/example.modules.php +++ b/htdocs/core/modules/mailings/example.modules.php @@ -36,7 +36,7 @@ class mailing_example extends MailingTargets public $tooltip='MyTooltipLangKey'; public $require_module=array(); - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/core/modules/mailings/fraise.modules.php b/htdocs/core/modules/mailings/fraise.modules.php index 74a2d5b3296..7dc4bf78121 100644 --- a/htdocs/core/modules/mailings/fraise.modules.php +++ b/htdocs/core/modules/mailings/fraise.modules.php @@ -40,7 +40,7 @@ class mailing_fraise extends MailingTargets public $require_admin=0; public $require_module=array('adherent'); - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/core/modules/mailings/pomme.modules.php b/htdocs/core/modules/mailings/pomme.modules.php index 36708ae34e4..8d55bd86adc 100644 --- a/htdocs/core/modules/mailings/pomme.modules.php +++ b/htdocs/core/modules/mailings/pomme.modules.php @@ -35,7 +35,7 @@ class mailing_pomme extends MailingTargets public $desc='Dolibarr users with emails'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouv�e public $require_module=array(); // Module mailing actif si modules require_module actifs public $require_admin=1; // Module mailing actif pour user admin ou non - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/core/modules/mailings/thirdparties.modules.php b/htdocs/core/modules/mailings/thirdparties.modules.php index 97b744ca977..e0c148e4f9f 100644 --- a/htdocs/core/modules/mailings/thirdparties.modules.php +++ b/htdocs/core/modules/mailings/thirdparties.modules.php @@ -30,7 +30,7 @@ class mailing_thirdparties extends MailingTargets public $require_admin=0; public $require_module=array("societe"); // This module allows to select by categories must be also enabled if category module is not activated - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php index 1af4ba0961d..7e3b468fc6d 100644 --- a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php +++ b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php @@ -28,7 +28,7 @@ class mailing_thirdparties_services_expired extends MailingTargets public $require_admin=0; public $require_module=array('contrat'); - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/core/modules/mailings/xinputfile.modules.php b/htdocs/core/modules/mailings/xinputfile.modules.php index 172d29cf957..a69800230b1 100644 --- a/htdocs/core/modules/mailings/xinputfile.modules.php +++ b/htdocs/core/modules/mailings/xinputfile.modules.php @@ -35,7 +35,7 @@ class mailing_xinputfile extends MailingTargets public $desc='EMails from a file'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouv�e public $require_module=array(); // Module mailing actif si modules require_module actifs public $require_admin=0; // Module mailing actif pour user admin ou non - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/core/modules/mailings/xinputuser.modules.php b/htdocs/core/modules/mailings/xinputuser.modules.php index 01f89f31e6d..7014f5f894d 100644 --- a/htdocs/core/modules/mailings/xinputuser.modules.php +++ b/htdocs/core/modules/mailings/xinputuser.modules.php @@ -35,7 +35,7 @@ class mailing_xinputuser extends MailingTargets public $desc='EMails input by user'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouv�e public $require_module=array(); // Module mailing actif si modules require_module actifs public $require_admin=0; // Module mailing actif pour user admin ou non - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/core/modules/printing/printgcp.modules.php b/htdocs/core/modules/printing/printgcp.modules.php index 6d842244fbf..1477f4d65f3 100644 --- a/htdocs/core/modules/printing/printgcp.modules.php +++ b/htdocs/core/modules/printing/printgcp.modules.php @@ -37,7 +37,7 @@ class printing_printgcp extends PrintingDriver { public $name = 'printgcp'; public $desc = 'PrintGCPDesc'; - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/core/modules/printing/printipp.modules.php b/htdocs/core/modules/printing/printipp.modules.php index 9b67ea05c1e..37659cec199 100644 --- a/htdocs/core/modules/printing/printipp.modules.php +++ b/htdocs/core/modules/printing/printipp.modules.php @@ -32,7 +32,7 @@ class printing_printipp extends PrintingDriver { public $name = 'printipp'; public $desc = 'PrintIPPDesc'; - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 0b91f2c2699..572d1345824 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -46,7 +46,7 @@ class ExpenseReport extends CommonObject public $table_element_line = 'expensereport_det'; public $fk_element = 'fk_expensereport'; - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/fichinter/class/fichinterrec.class.php b/htdocs/fichinter/class/fichinterrec.class.php index 9d7173b578b..783faac70f8 100644 --- a/htdocs/fichinter/class/fichinterrec.class.php +++ b/htdocs/fichinter/class/fichinterrec.class.php @@ -42,7 +42,7 @@ class FichinterRec extends Fichinter public $table_element = 'fichinter_rec'; public $table_element_line = 'fichinter_rec'; public $fk_element = 'fk_fichinter'; - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ From ccb957623cea9c1c73c89fa3f205167a6282a200 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:00:52 +0100 Subject: [PATCH 680/980] add some comment --- htdocs/fourn/class/fournisseur.commande.class.php | 5 ++++- htdocs/fourn/class/fournisseur.facture.class.php | 3 +++ htdocs/fourn/class/paiementfourn.class.php | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index a6d4751169e..4ef407c4a0e 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -62,7 +62,10 @@ class CommandeFournisseur extends CommonOrder */ public $fk_element = 'fk_commande'; - public $picto='order'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ + public $picto='order'; /** * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 0e28c5302ce..ca207ad4e73 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -63,6 +63,9 @@ class FactureFournisseur extends CommonInvoice */ public $fk_element='fk_facture_fourn'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='bill'; /** diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php index 14d09c20d6e..979c7803dc4 100644 --- a/htdocs/fourn/class/paiementfourn.class.php +++ b/htdocs/fourn/class/paiementfourn.class.php @@ -46,6 +46,9 @@ class PaiementFourn extends Paiement */ public $table_element='paiementfourn'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto = 'payment'; public $statut; //Status of payment. 0 = unvalidated; 1 = validated From 991e1b8767542844ea83a5317bf72c28feda78ba Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:02:44 +0100 Subject: [PATCH 681/980] add some comment --- htdocs/hrm/class/establishment.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/hrm/class/establishment.class.php b/htdocs/hrm/class/establishment.class.php index 863f519231d..20c80d07981 100644 --- a/htdocs/hrm/class/establishment.class.php +++ b/htdocs/hrm/class/establishment.class.php @@ -55,7 +55,10 @@ class Establishment extends CommonObject */ public $ismultientitymanaged = 1; - public $picto='building'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ + public $picto='building'; /** * @var int ID From 3f15c4e3a9f3bb05a013f907821e86cd3ddcd49d Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:03:15 +0100 Subject: [PATCH 682/980] add some comment --- htdocs/loan/class/loan.class.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/loan/class/loan.class.php b/htdocs/loan/class/loan.class.php index c8e241186d2..f54375135a8 100644 --- a/htdocs/loan/class/loan.class.php +++ b/htdocs/loan/class/loan.class.php @@ -41,6 +41,9 @@ class Loan extends CommonObject */ public $table_element='loan'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto = 'bill'; /** From a1bd895e4170154a4ed3a8557eec9e077230310b Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:04:03 +0100 Subject: [PATCH 683/980] add some comment --- .../mailings/mailinglist_mymodule_myobject.modules.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php b/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php index 854e7f37bd5..7ebd90a3298 100644 --- a/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php +++ b/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php @@ -26,6 +26,10 @@ class mailing_mailinglist_mymodule_myobject extends MailingTargets public $enabled=0; public $require_module=array(); + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='mymodule@mymodule'; /** From ae2dc713c48888fed88a429f400c118f42563916 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Wed, 30 Oct 2019 09:03:43 +0000 Subject: [PATCH 684/980] Fixing style errors. --- .../modules/mailings/mailinglist_mymodule_myobject.modules.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php b/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php index 7ebd90a3298..43970122919 100644 --- a/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php +++ b/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php @@ -26,7 +26,7 @@ class mailing_mailinglist_mymodule_myobject extends MailingTargets public $enabled=0; public $require_module=array(); - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ From 99a41604b81e93e73802b67c2a377e1ed07c2a4d Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:06:45 +0100 Subject: [PATCH 685/980] add some comment --- htdocs/opensurvey/class/opensurveysondage.class.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/opensurvey/class/opensurveysondage.class.php b/htdocs/opensurvey/class/opensurveysondage.class.php index 786ed7220b5..b1cdeac1f36 100644 --- a/htdocs/opensurvey/class/opensurveysondage.class.php +++ b/htdocs/opensurvey/class/opensurveysondage.class.php @@ -44,6 +44,9 @@ class Opensurveysondage extends CommonObject */ public $table_element='opensurvey_sondage'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto = 'opensurvey'; public $id_sondage; From b029febff13439443e0a8b77437504ff2c48b84b Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:07:54 +0100 Subject: [PATCH 686/980] add some comment --- htdocs/product/stock/class/entrepot.class.php | 3 +++ htdocs/product/stock/class/productlot.class.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/htdocs/product/stock/class/entrepot.class.php b/htdocs/product/stock/class/entrepot.class.php index 35b433c5a28..d84d33cd116 100644 --- a/htdocs/product/stock/class/entrepot.class.php +++ b/htdocs/product/stock/class/entrepot.class.php @@ -44,6 +44,9 @@ class Entrepot extends CommonObject */ public $table_element='entrepot'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='stock'; public $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe diff --git a/htdocs/product/stock/class/productlot.class.php b/htdocs/product/stock/class/productlot.class.php index 3848a592f21..bcac4bb9a36 100644 --- a/htdocs/product/stock/class/productlot.class.php +++ b/htdocs/product/stock/class/productlot.class.php @@ -45,6 +45,9 @@ class Productlot extends CommonObject */ public $table_element = 'product_lot'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='barcode'; /** From e02da55c2d65575d1ba2fa380af220ea4eb99120 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:08:36 +0100 Subject: [PATCH 687/980] add some comment --- htdocs/projet/class/project.class.php | 3 +++ htdocs/projet/class/task.class.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index a873b53dbc0..0848f87ed19 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -60,6 +60,9 @@ class Project extends CommonObject */ public $ismultientitymanaged = 1; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto = 'projectpub'; /** diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php index 1bd044bc985..b4d556cda78 100644 --- a/htdocs/projet/class/task.class.php +++ b/htdocs/projet/class/task.class.php @@ -47,6 +47,9 @@ class Task extends CommonObject */ public $fk_element='fk_task'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto = 'task'; /** From 7eb3e2ff3cd36ae1a866b23c6df25da69a02c19d Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:09:08 +0100 Subject: [PATCH 688/980] add some comment --- htdocs/reception/class/reception.class.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index dd819adff0a..72c5187b307 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -48,7 +48,11 @@ class Reception extends CommonObject public $table_element="reception"; public $table_element_line="commande_fournisseur_dispatch"; protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe - public $picto = 'reception'; + + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ + public $picto = 'reception'; public $socid; public $ref_supplier; From 9407afcacb12890ac8d1bba72ba0a7427678dfaa Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:09:37 +0100 Subject: [PATCH 689/980] add some comment --- htdocs/resource/class/dolresource.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/resource/class/dolresource.class.php b/htdocs/resource/class/dolresource.class.php index c85f040f896..db64c635fd5 100644 --- a/htdocs/resource/class/dolresource.class.php +++ b/htdocs/resource/class/dolresource.class.php @@ -39,7 +39,10 @@ class Dolresource extends CommonObject */ public $table_element='resource'; - public $picto = 'resource'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ + public $picto = 'resource'; public $resource_id; public $resource_type; From d0a468e11bee845682b6d5c7fe10c1987a150577 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Wed, 30 Oct 2019 09:10:12 +0000 Subject: [PATCH 690/980] Fixing style errors. --- htdocs/reception/class/reception.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 72c5187b307..820e39d78f4 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -48,7 +48,7 @@ class Reception extends CommonObject public $table_element="reception"; public $table_element_line="commande_fournisseur_dispatch"; protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe - + /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ From 502d08af0cc9277e8645107ad4767752475c0de0 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:10:22 +0100 Subject: [PATCH 691/980] add some comment --- htdocs/societe/class/societe.class.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index b20f80f5439..74288d54e08 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -69,6 +69,9 @@ class Societe extends CommonObject */ protected $childtablesoncascade=array("societe_prices", "societe_log", "societe_address", "product_fournisseur_price", "product_customer_price_log", "product_customer_price", "socpeople", "adherent", "societe_account", "societe_rib", "societe_remise", "societe_remise_except", "societe_commerciaux", "categorie", "notify", "notify_def", "actioncomm"); + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto = 'company'; /** From 213f40f4804409abe94130e1efae3590732fb01b Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:12:15 +0100 Subject: [PATCH 692/980] add some comment --- htdocs/supplier_proposal/class/supplier_proposal.class.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index be272ee2d36..0aef06f58c6 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -66,6 +66,9 @@ class SupplierProposal extends CommonObject */ public $fk_element='fk_supplier_proposal'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ public $picto='propal'; /** From 1a0723c1cdd1cc260f68d8a8e7e1b7eb74e7cbcf Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 10:13:57 +0100 Subject: [PATCH 693/980] add some comment --- htdocs/user/class/usergroup.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/user/class/usergroup.class.php b/htdocs/user/class/usergroup.class.php index b624bdb34d9..40bc6c08fb7 100644 --- a/htdocs/user/class/usergroup.class.php +++ b/htdocs/user/class/usergroup.class.php @@ -52,7 +52,10 @@ class UserGroup extends CommonObject */ public $ismultientitymanaged = 1; - public $picto='group'; + /** + * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + */ + public $picto='group'; /** * @var int Entity of group From b7e1a849a031a0fa567d9edd1fdb99fb48fa84cc Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Wed, 30 Oct 2019 15:23:24 +0100 Subject: [PATCH 694/980] fix payment mode issue --- htdocs/don/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/don/card.php b/htdocs/don/card.php index 54d4e392f61..133b533cc71 100644 --- a/htdocs/don/card.php +++ b/htdocs/don/card.php @@ -564,7 +564,7 @@ if (! empty($id) && $action == 'edit') } // Payment mode print "".$langs->trans("PaymentMode")."\n"; - if ($object->modepaymentid) $selected = $object->modepaymentid; + if ($object->mode_reglement_id) $selected = $object->mode_reglement_id; else $selected = ''; $form->select_types_paiements($selected, 'modepayment', 'CRDT', 0, 1); print "\n"; @@ -708,7 +708,7 @@ if (! empty($id) && $action != 'edit') // Payment mode print "".$langs->trans("PaymentMode").""; - $form->form_modes_reglement(null, $object->modepaymentid, 'none'); + $form->form_modes_reglement(null, $object->mode_reglement_id, 'none'); print "\n"; // Other attributes From 5658065296d1364175d7831101c704486a1e9eb8 Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 30 Oct 2019 15:25:37 +0100 Subject: [PATCH 695/980] Fix fatal error missing global --- htdocs/main.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 0a225bb3aaf..69ef6826b4e 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1984,7 +1984,7 @@ function top_menu_bookmark() */ function top_menu_search() { - global $langs, $conf, $db, $user; + global $langs, $conf, $db, $user, $hookmanager; $html = ''; From f626f249cf9cefae5fede1c3620211cdf2a68be5 Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 30 Oct 2019 15:40:06 +0100 Subject: [PATCH 696/980] Fix missing lang --- htdocs/langs/en_US/main.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 8bd954b306b..6e3ba31d36c 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -184,6 +184,7 @@ Hide=Hide ShowCardHere=Show card Search=Search SearchOf=Search +SearchMenuShortCut=Ctrl + shift + f Valid=Valid Approve=Approve Disapprove=Disapprove From 2f68a73a2ad5b3a6e097eec694532592d01efbd8 Mon Sep 17 00:00:00 2001 From: atm-ph Date: Wed, 30 Oct 2019 15:45:04 +0100 Subject: [PATCH 697/980] New update comments is now available --- htdocs/core/actions_comments.inc.php | 18 +++++ htdocs/core/class/comment.class.php | 30 +++++--- htdocs/core/tpl/bloc_comment.tpl.php | 77 ++++++++++++++----- .../install/mysql/migration/10.0.0-11.0.0.sql | 2 + htdocs/install/mysql/tables/llx_comment.sql | 1 + htdocs/theme/eldy/global.inc.php | 8 ++ 6 files changed, 107 insertions(+), 29 deletions(-) diff --git a/htdocs/core/actions_comments.inc.php b/htdocs/core/actions_comments.inc.php index a84edb0150a..1c679c88825 100644 --- a/htdocs/core/actions_comments.inc.php +++ b/htdocs/core/actions_comments.inc.php @@ -57,6 +57,24 @@ if ($action == 'addcomment') } } } +if ($action === 'updatecomment') +{ + if ($comment->fetch($idcomment) >= 0) + { + $comment->description = GETPOST('comment_description', 'none'); + if ($comment->update($user) > 0) + { + setEventMessages($langs->trans("CommentAdded"), null, 'mesgs'); + header('Location: '.$varpage.'?id='.$id.($withproject?'&withproject=1#comment':'')); + exit; + } + else + { + setEventMessages($comment->error, $comment->errors, 'errors'); + $action=''; + } + } +} if ($action == 'deletecomment') { if ($comment->fetch($idcomment) >= 0) diff --git a/htdocs/core/class/comment.class.php b/htdocs/core/class/comment.class.php index 3f4b486f547..18c20b0b07c 100644 --- a/htdocs/core/class/comment.class.php +++ b/htdocs/core/class/comment.class.php @@ -62,6 +62,11 @@ class Comment extends CommonObject */ public $fk_user_author; + /** + * @var int ID + */ + public $fk_user_modif; + /** * @var int Entity */ @@ -94,17 +99,18 @@ class Comment extends CommonObject */ public function create($user, $notrigger = 0) { - global $conf, $langs; + global $user; $error=0; // Insert request - $sql = "INSERT INTO ".MAIN_DB_PREFIX."comment ("; + $sql = "INSERT INTO ".MAIN_DB_PREFIX.$this->table_element." ("; $sql.= "description"; $sql.= ", datec"; $sql.= ", fk_element"; $sql.= ", element_type"; $sql.= ", fk_user_author"; + $sql.= ", fk_user_modif"; $sql.= ", entity"; $sql.= ", import_key"; $sql.= ") VALUES ("; @@ -113,6 +119,7 @@ class Comment extends CommonObject $sql.= ", '".(isset($this->fk_element)?$this->fk_element:"null")."'"; $sql.= ", '".$this->db->escape($this->element_type)."'"; $sql.= ", '".(isset($this->fk_user_author)?$this->fk_user_author:"null")."'"; + $sql.= ", ".$user->id.""; $sql.= ", ".(!empty($this->entity)?$this->entity:'1'); $sql.= ", ".(!empty($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null"); $sql.= ")"; @@ -128,7 +135,7 @@ class Comment extends CommonObject if (! $error) { - $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."projet_task_comment"); + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX.$this->table_element); if (! $notrigger) { @@ -177,9 +184,10 @@ class Comment extends CommonObject $sql.= " c.fk_element,"; $sql.= " c.element_type,"; $sql.= " c.fk_user_author,"; + $sql.= " c.fk_user_modif,"; $sql.= " c.entity,"; $sql.= " c.import_key"; - $sql.= " FROM ".MAIN_DB_PREFIX."comment as c"; + $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as c"; $sql.= " WHERE c.rowid = ".$id; dol_syslog(get_class($this)."::fetch", LOG_DEBUG); @@ -196,8 +204,9 @@ class Comment extends CommonObject $this->description = $obj->description; $this->element_type = $obj->element_type; $this->datec = $this->db->jdate($obj->datec); - $this->tms = $obj->tms; + $this->tms = $this->db->jdate($obj->tms); $this->fk_user_author = $obj->fk_user_author; + $this->fk_user_modif = $obj->fk_user_modif; $this->fk_element = $obj->fk_element; $this->entity = $obj->entity; $this->import_key = $obj->import_key; @@ -225,22 +234,21 @@ class Comment extends CommonObject */ public function update(User $user, $notrigger = 0) { - global $conf, $langs; + global $user; $error=0; // Clean parameters if (isset($this->fk_element)) $this->fk_project=(int) trim($this->fk_element); - if (isset($this->fk_user_author)) $this->fk_user_author=(int) trim($this->fk_user_author); if (isset($this->description)) $this->description=trim($this->description); // Update request - $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task_comment SET"; + $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET"; $sql.= " description=".(isset($this->description)?"'".$this->db->escape($this->description)."'":"null").","; $sql.= " datec=".($this->datec!=''?"'".$this->db->idate($this->datec)."'":'null').","; $sql.= " fk_element=".(isset($this->fk_element)?$this->fk_element:"null").","; $sql.= " element_type='".$this->db->escape($this->element_type)."',"; - $sql.= " fk_user_author=".(isset($this->fk_user_author)?$this->fk_user_author:"null").","; + $sql.= " fk_user_modif=".$user->id.","; $sql.= " entity=".(!empty($this->entity)?$this->entity:'1').","; $sql.= " import_key=".(!empty($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null"); $sql.= " WHERE rowid=".$this->id; @@ -297,7 +305,7 @@ class Comment extends CommonObject $this->db->begin(); - $sql = "DELETE FROM ".MAIN_DB_PREFIX."comment"; + $sql = "DELETE FROM ".MAIN_DB_PREFIX.$this->table_element; $sql.= " WHERE rowid=".$this->id; $resql = $this->db->query($sql); @@ -345,7 +353,7 @@ class Comment extends CommonObject if(!empty($element_type) && !empty($fk_element)) { $sql = "SELECT"; $sql.= " c.rowid"; - $sql.= " FROM ".MAIN_DB_PREFIX."comment as c"; + $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as c"; $sql.= " WHERE c.fk_element = ".$fk_element; $sql.= " AND c.element_type = '".$db->escape($element_type)."'"; $sql.= " AND c.entity = ".$conf->entity; diff --git a/htdocs/core/tpl/bloc_comment.tpl.php b/htdocs/core/tpl/bloc_comment.tpl.php index fba0810e7cd..d7b5e5d7532 100644 --- a/htdocs/core/tpl/bloc_comment.tpl.php +++ b/htdocs/core/tpl/bloc_comment.tpl.php @@ -36,21 +36,25 @@ print ''; print ''; print "\n"; -print ''; +if ($action !== 'editcomment') +{ + print ''; -// Description -print ''; + // Description + print ''; -$desc = GETPOST('comment_description'); + $desc = GETPOST('comment_description'); -$doleditor = new DolEditor('comment_description', $desc, '', 80, 'dolibarr_notes', 'In', 0, true, true, ROWS_3, '100%'); -print $doleditor->Create(1); + $doleditor = new DolEditor('comment_description', $desc, '', 80, 'dolibarr_notes', 'In', 0, true, true, ROWS_3, '100%'); + print $doleditor->Create(1); -print ''; + print ''; + + print ''; + print ''; + print ''; +} -print ''; -print ''; -print ''; print ''; // List of comments @@ -91,15 +95,52 @@ if (!empty($object->comments)) print '
    '; print '
    '; - print '
    '; - print $comment->description; + + if ($action === 'editcomment' && $comment->id == $idcomment) + { + print '
    '; + print ''; + print ''; + print ''; + print ''; + print ''; + } + + print '
    '; + if ($action === 'editcomment' && $comment->id == $idcomment) + { + $doleditor = new DolEditor('comment_description', $comment->description, '', 80, 'dolibarr_notes', 'In', 0, true, true, ROWS_3, '100%'); + print $doleditor->Create(1); + } + else + { + print $comment->description; + } print '
    '; // End comment-description - if(($first && $fk_user == $user->id) || $user->admin == 1) { - print ''; - print img_picto('', 'delete.png'); - print ''; - } - print '
    '; // End comment-table + + if ($action === 'editcomment' && $comment->id == $idcomment) + { + print ''; + print ''; + + print ''; + } + else + { + if ($fk_user == $user->id || $user->admin == 1) + { + print ''; + print img_picto('', 'edit.png'); + print ''; + } + if(($first && $fk_user == $user->id) || $user->admin == 1) { + print ''; + print img_picto('', 'delete.png'); + print ''; + } + } + + print '
    '; // End comment-table print '
    '; // End comment-right print ''; // End comment diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 064db3be207..232fc10026a 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -420,3 +420,5 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_VALIDATE','MO validated','Executed when a MO is validated','bom',410); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_PRODUCED','MO disabled','Executed when a MO is produced','bom',411); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_DELETE','MO deleted','Executed when a MO is deleted','bom',412); + +ALTER TABLE llx_comment ADD COLUMN fk_user_modif integer DEFAULT NULL; \ No newline at end of file diff --git a/htdocs/install/mysql/tables/llx_comment.sql b/htdocs/install/mysql/tables/llx_comment.sql index d881c84c0e3..22b2c40b9f1 100644 --- a/htdocs/install/mysql/tables/llx_comment.sql +++ b/htdocs/install/mysql/tables/llx_comment.sql @@ -22,6 +22,7 @@ CREATE TABLE llx_comment ( tms timestamp, description text NOT NULL, fk_user_author integer DEFAULT NULL, + fk_user_modif integer DEFAULT NULL, fk_element integer DEFAULT NULL, element_type varchar(50) DEFAULT NULL, entity integer DEFAULT 1, diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 28029def9ff..ad4a6a0cf16 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -4399,6 +4399,14 @@ pre#editfilecontentaceeditorid { #comment .comment-delete:hover { background:rgba(250,20,20,0.8); } +#comment .comment-edit { + width: 100px; + text-align:center; + vertical-align:middle; +} +#comment .comment-edit:hover { + background:rgba(0,184,148,0.8); +} #comment textarea { width: 100%; } From 0cff122ccd09625ff07d34dab65c045268134c9b Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 30 Oct 2019 17:46:18 +0100 Subject: [PATCH 698/980] Add file display in ticket --- htdocs/core/lib/ticket.lib.php | 69 ++++++++++++++++++++++++++++++ htdocs/theme/eldy/timeline.inc.php | 29 ++++++++++++- 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index 63e9a2fc9ff..7a2a96d074a 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -819,6 +819,46 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no } } + $documents = getTicketActionCommEcmList($actionstatic) ; + if(!empty($documents)) + { + $footer.= '
    '; + foreach ($documents as $doc) + { + $footer.= 'id.'" '; + $footer.= ' data-path="'.$doc->filepath.'"'; + $footer.= ' data-filename="'.dol_escape_htmltag($doc->filename).'" '; + $footer.= '>'; + + $filePath = DOL_DATA_ROOT . '/'. $doc->filepath . '/'. $doc->filename; + $mime = dol_mimetype($filePath); + $file = $actionstatic->id.'/'.$doc->filename; + $thumb = $actionstatic->id.'/thumbs/'.substr($doc->filename, 0, strrpos($doc->filename,'.')).'_mini'.substr($doc->filename, strrpos($doc->filename,'.')); + $doclink = dol_buildpath('document.php', 1).'?modulepart=actions&attachment=0&file='.urlencode($file).'&entity='.$conf->entity; + $viewlink = dol_buildpath('viewimage.php', 1).'?modulepart=actions&file='.urlencode($thumb).'&entity='.$conf->entity; + + $mimeAttr = ' mime="'.$mime.'" '; + $class = ''; + if(in_array($mime, array('image/png', 'image/jpeg', 'application/pdf'))){ + $class.= ' documentpreview'; + } + + $footer.= ''; + $footer.= img_mime($filePath).' '.$doc->filename; + $footer.= ''; + + $footer.= ''; + } + $footer.= '
    '; + } + + + + + + + if(!empty($footer)){ $out.=''; } @@ -838,3 +878,32 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no if ($noprint) return $out; else print $out; } + + +/** + * @var $object ActionComm + * @return array + */ +function getTicketActionCommEcmList($object) +{ + global $conf, $db; + + $documents = array(); + + $sql = 'SELECT ecm.rowid as id, ecm.src_object_type, ecm.src_object_id, ecm.filepath, ecm.filename'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'ecm_files ecm'; + $sql.= ' WHERE ecm.filepath = \'agenda/'.$object->id.'\''; + //$sql.= ' ecm.src_object_type = \''.$object->element.'\' AND ecm.src_object_id = '.$object->id; // Actually upload file doesn't add type + $sql.= ' ORDER BY ecm.position ASC'; + + $resql= $db->query($sql); + if ($resql) { + if ($db->num_rows($resql)) { + while ($obj = $db->fetch_object($resql)) { + $documents[$obj->id] = $obj; + } + } + } + + return $documents; +} diff --git a/htdocs/theme/eldy/timeline.inc.php b/htdocs/theme/eldy/timeline.inc.php index 2cb3461d713..d81ae4b8bed 100644 --- a/htdocs/theme/eldy/timeline.inc.php +++ b/htdocs/theme/eldy/timeline.inc.php @@ -125,7 +125,12 @@ a.timeline-btn:hover font-weight: normal; line-height: 1.1; } -.timeline > li.timeline-code-ticket_msg_private > .timeline-item > .timeline-header { + +.timeline > li > .timeline-item > .timeline-footer { + border-top: 1px solid #f4f4f4; +} + +.timeline > li.timeline-code-ticket_msg_private > .timeline-item > .timeline-header, .timeline > li.timeline-code-ticket_msg_private > .timeline-item > .timeline-footer { border-color: #ecebda; } @@ -195,3 +200,25 @@ a.timeline-btn:hover background-color: #0073b7 !important; color: #fff !important; } + +.timeline-documents-container{ + +} + +.timeline-documents{ + margin-right: 5px; +} + +.btn-file{ + margin-right: 5px; + border: 1px solid #ddd; + color: #333; + padding: 5px 10px; + border-radius:1em; + text-decoration: none !important; +} + +.btn-file:hover{ + background-color: #ddd; + border: 1px solid #ddd; +} From 2293048fdb5adadad0c0ba92c970917724022be5 Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 30 Oct 2019 17:48:52 +0100 Subject: [PATCH 699/980] Fix move css style --- htdocs/theme/eldy/btn.inc.php | 21 ++++++++++++++++++++- htdocs/theme/eldy/timeline.inc.php | 13 ------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/htdocs/theme/eldy/btn.inc.php b/htdocs/theme/eldy/btn.inc.php index 51fbfd6a561..91a95d7a4d3 100644 --- a/htdocs/theme/eldy/btn.inc.php +++ b/htdocs/theme/eldy/btn.inc.php @@ -260,4 +260,23 @@ div.pagination li:first-child a.btnTitle{ .butActionRefused, .butActionNewRefused, .btnTitle.refused { display: none !important; } - + + +/* + * BTN FILE doc + */ + +.btn-file{ + margin-right: 5px; + border: 1px solid #ddd; + color: #333; + padding: 5px 10px; + border-radius:1em; + text-decoration: none !important; +} + +.btn-file:hover{ + background-color: #ddd; + border: 1px solid #ddd; +} diff --git a/htdocs/theme/eldy/timeline.inc.php b/htdocs/theme/eldy/timeline.inc.php index d81ae4b8bed..76ca244e572 100644 --- a/htdocs/theme/eldy/timeline.inc.php +++ b/htdocs/theme/eldy/timeline.inc.php @@ -209,16 +209,3 @@ a.timeline-btn:hover margin-right: 5px; } -.btn-file{ - margin-right: 5px; - border: 1px solid #ddd; - color: #333; - padding: 5px 10px; - border-radius:1em; - text-decoration: none !important; -} - -.btn-file:hover{ - background-color: #ddd; - border: 1px solid #ddd; -} From bfe683d03100cc4be8c096fa69e73504381bf3fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 30 Oct 2019 18:40:07 +0100 Subject: [PATCH 700/980] css --- htdocs/product/index.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/product/index.php b/htdocs/product/index.php index a92d2cd071a..84eb3643cbd 100644 --- a/htdocs/product/index.php +++ b/htdocs/product/index.php @@ -95,6 +95,7 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele { print '
    '; print ''; + print '
    '; print ''; $i=0; foreach($listofsearchfields as $key => $value) @@ -107,6 +108,7 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele $i++; } print '
    '; + print '
    '; print '
    '; print '
    '; } From 3738fb87edb926b18a31c0a651ebd47ecaab6fb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 30 Oct 2019 18:42:33 +0100 Subject: [PATCH 701/980] css --- htdocs/product/stock/index.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/htdocs/product/stock/index.php b/htdocs/product/stock/index.php index e4786ae5a5a..496d4b4f109 100644 --- a/htdocs/product/stock/index.php +++ b/htdocs/product/stock/index.php @@ -61,12 +61,13 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele { print '
    '; print ''; + print '
    '; print ''; print ""; print ''; print "'; - print "
    '.$langs->trans("Search").'
    "; print $langs->trans("Warehouse").':

    "; + print "

    "; } @@ -85,6 +86,7 @@ if ($result) $i = 0; + print '
    '; print ''; print ''; @@ -105,6 +107,7 @@ if ($result) $db->free($result); } print "
    '.$langs->trans("Warehouses").'
    "; + print '
    '; } else { @@ -137,6 +140,7 @@ if ($resql) { $num = $db->num_rows($resql); + print '
    '; print ''; print ""; print ''; @@ -185,6 +189,7 @@ if ($resql) $db->free($resql); print "
    '.$langs->trans("LastMovements", min($num, $max)).'
    "; + print '
    '; } //print ''; From d01419bbfd0ea8c713adc622d69d74698e1a64b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 30 Oct 2019 18:44:53 +0100 Subject: [PATCH 702/980] css --- htdocs/reception/index.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/htdocs/reception/index.php b/htdocs/reception/index.php index 17b5cd03c06..5844365b56f 100644 --- a/htdocs/reception/index.php +++ b/htdocs/reception/index.php @@ -58,11 +58,12 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele { print '
    '; print ''; + print '
    '; print ''; print ''; print ''; - print "
    '.$langs->trans("Search").'
    '; print $langs->trans("Reception").':

    \n"; + print "

    \n"; } /* @@ -93,6 +94,7 @@ if ($resql) $num = $db->num_rows($resql); if ($num) { + print '
    '; print ''; print ''; print ''; @@ -116,7 +118,7 @@ if ($resql) print ''; $i++; } - print "
    '.$langs->trans("ReceptionsToValidate").'

    "; + print "

    "; } } @@ -143,6 +145,7 @@ if ($resql) $langs->load("orders"); $i = 0; + print '
    '; print ''; print ''; print ''; @@ -172,7 +175,7 @@ if ($resql) print ''; $i++; } - print "
    '.$langs->trans("SuppliersOrdersToProcess").'

    "; + print "

    "; } } @@ -203,6 +206,7 @@ if ( $resql ) if ($num) { $i = 0; + print '
    '; print ''; print ''; print ''; @@ -231,7 +235,7 @@ if ( $resql ) print ''; $i++; } - print "
    '.$langs->trans("SuppliersOrdersInProcess").'

    "; + print "

    "; } } else dol_print_error($db); @@ -263,6 +267,7 @@ if ($resql) if ($num) { $i = 0; + print '
    '; print ''; print ''; print ''; @@ -289,7 +294,7 @@ if ($resql) print ''; $i++; } - print "
    '.$langs->trans("LastReceptions", $num).'

    "; + print "

    "; } $db->free($resql); } From c3a9f7ce5839102b2a19945a4a84e2aa34c05403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 30 Oct 2019 18:49:48 +0100 Subject: [PATCH 703/980] css --- htdocs/projet/activity/index.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/htdocs/projet/activity/index.php b/htdocs/projet/activity/index.php index 7a8e3ff2591..4215b9778e3 100644 --- a/htdocs/projet/activity/index.php +++ b/htdocs/projet/activity/index.php @@ -111,6 +111,7 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele { print '
    '; print ''; + print '
    '; print ''; $i=0; foreach($listofsearchfields as $key => $value) @@ -123,6 +124,7 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele $i++; } print '
    '; + print '
    '; print '
    '; print '
    '; } @@ -130,6 +132,7 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele /* Affichage de la liste des projets d'aujourd'hui */ +print '
    '; print ''; print ''; print ''; @@ -179,12 +182,14 @@ print ''; print ''; print "\n"; print "
    '.$langs->trans('ActivityOnProjectToday').''.$langs->trans('Total').''.convertSecondToTime($total, 'allhourmin').'
    "; +print '
    '; print '
    '; /* Affichage de la liste des projets d'hier */ +print '
    '; print ''; print ''; print ''; @@ -234,6 +239,7 @@ print ''; print ''; print "\n"; print "
    '.$langs->trans('ActivityOnProjectYesterday').''.$langs->trans('Total').''.convertSecondToTime($total, 'allhourmin').'
    "; +print '
    '; @@ -243,6 +249,7 @@ if ($db->type != 'pgsql') print '
    '; // Affichage de la liste des projets de la semaine + print '
    '; print ''; print ''; print ''; @@ -291,7 +298,7 @@ if ($db->type != 'pgsql') print ''; print ''; print "\n"; - print "
    '.$langs->trans("ActivityOnProjectThisWeek").''.$langs->trans('Total').''.convertSecondToTime($total, 'allhourmin').'

    "; + print "

    "; } */ @@ -299,6 +306,7 @@ if ($db->type != 'pgsql') /* Affichage de la liste des projets du mois */ if (! empty($conf->global->PROJECT_TASK_TIME_MONTH)) { + print '
    '; print ''; print ''; print ''; @@ -343,11 +351,13 @@ if (! empty($conf->global->PROJECT_TASK_TIME_MONTH)) print ''; print "\n"; print "
    '.$langs->trans("ActivityOnProjectThisMonth").': '.dol_print_date($now, "%B %Y").''.convertSecondToTime($total, 'allhourmin').'
    "; + print '
    '; } /* Affichage de la liste des projets de l'annee */ if (! empty($conf->global->PROJECT_TASK_TIME_YEAR)) { + print '
    '; print '
    '; print ''; print ''; @@ -393,6 +403,7 @@ if (! empty($conf->global->PROJECT_TASK_TIME_YEAR)) print ''; print "\n"; print "
    '.$langs->trans("ActivityOnProjectThisYear").': '.strftime("%Y", $now).''.convertSecondToTime($total, 'allhourmin').'
    "; + print '
    '; } if (empty($conf->global->PROJECT_HIDE_TASKS) && ! empty($conf->global->PROJECT_SHOW_TASK_LIST_ON_PROJECT_AREA)) @@ -467,6 +478,7 @@ if (empty($conf->global->PROJECT_HIDE_TASKS) && ! empty($conf->global->PROJECT_S //print load_fiche_titre($langs->trans("TasksOnOpenedProject"),'','').'
    '; + print '
    '; print ''; print ''; //print ''; @@ -566,6 +578,7 @@ if (empty($conf->global->PROJECT_HIDE_TASKS) && ! empty($conf->global->PROJECT_S } print "
    '.$langs->trans('TaskRessourceLinks').'
    "; + print '
    '; $db->free($resql); From ade50b5362e18ce4948b1455db98d2d96b2bd8d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 30 Oct 2019 18:50:55 +0100 Subject: [PATCH 704/980] css --- htdocs/comm/index.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php index 43af4f8f1c0..725d60b8041 100644 --- a/htdocs/comm/index.php +++ b/htdocs/comm/index.php @@ -120,6 +120,7 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele { print '
    '; print ''; + print '
    '; print ''; $i=0; foreach($listofsearchfields as $key => $value) @@ -132,6 +133,7 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele $i++; } print '
    '; + print '
    '; print '
    '; print '
    '; } From f2024244326c478de854c7fa4217ee464ff88873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 30 Oct 2019 18:52:54 +0100 Subject: [PATCH 705/980] css --- htdocs/compta/prelevement/index.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/prelevement/index.php b/htdocs/compta/prelevement/index.php index 80d7abb4f0a..b800339031d 100644 --- a/htdocs/compta/prelevement/index.php +++ b/htdocs/compta/prelevement/index.php @@ -71,7 +71,7 @@ $thirdpartystatic=new Societe($db); $invoicestatic=new Facture($db); $bprev = new BonPrelevement($db); - +print '
    '; print ''; print ''; @@ -85,7 +85,7 @@ print ''; print ''; print '
    '.$langs->trans("Statistics").'
    '.$langs->trans("AmountToWithdraw").''; print price($bprev->SommeAPrelever(), '', '', 1, -1, -1, 'auto'); -print '

    '; +print '

    '; @@ -116,6 +116,7 @@ if ($resql) $num = $db->num_rows($resql); $i = 0; + print '
    '; print ''; print ''; print ''; @@ -162,7 +163,7 @@ if ($resql) { print ''; } - print "
    '.$langs->trans("InvoiceWaitingWithdraw").' ('.$num.')
    '.$langs->trans("NoInvoiceToWithdraw", $langs->transnoentitiesnoconv("StandingOrders")).'

    "; + print "

    "; } else { @@ -189,6 +190,7 @@ if ($result) $i = 0; print"\n\n"; + print '
    '; print ''; print ''; print ''; @@ -216,7 +218,7 @@ if ($result) print "\n"; $i++; } - print "
    '.$langs->trans("LastWithdrawalReceipt", $limit).''.$langs->trans("Date").'

    "; + print "

    "; $db->free($result); } else From a59c3ab0be8afec547d419d5c541da8a0be1fbb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 30 Oct 2019 18:55:04 +0100 Subject: [PATCH 706/980] Update index.php --- htdocs/comm/mailing/index.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/mailing/index.php b/htdocs/comm/mailing/index.php index e5d096dea26..701dd2d4716 100644 --- a/htdocs/comm/mailing/index.php +++ b/htdocs/comm/mailing/index.php @@ -60,6 +60,7 @@ print '
    '; // Recherche emails print '
    '; print ''; + print '
    '; print ''; print ''; print ''; - print "
    '.$langs->trans("SearchAMailing").'
    '; @@ -68,7 +69,7 @@ print '
    '; print '
    '; print $langs->trans("Other").':

    \n"; + print "

    \n"; //} @@ -160,6 +161,7 @@ $sql.= " ORDER BY m.date_creat DESC"; $sql.= " LIMIT ".$limit; $result=$db->query($sql); if ($result) { + print '
    '; print ''; print ''; print ''; @@ -193,7 +195,7 @@ if ($result) { { print ''; } - print "
    '.$langs->trans("LastMailings", $limit).'
    '.$langs->trans("None").'

    "; + print "

    "; $db->free($result); } else From d46f51943823e7da4b89d3eacf7448377b0a7d6a Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Wed, 30 Oct 2019 19:07:50 +0000 Subject: [PATCH 707/980] Fixing style errors. --- htdocs/contact/class/contact.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 8b16e66ed92..c6c674bd4cd 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -132,14 +132,14 @@ class Contact extends CommonObject * @var string * @deprecated */ - public $twitter; + public $twitter; /** * Facebook username * @var string * @deprecated */ - public $facebook; + public $facebook; /** * Linkedin username From dbb5729f04d92013c9e5f60d2a551c730b118276 Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Wed, 30 Oct 2019 22:34:54 +0100 Subject: [PATCH 708/980] Default customer relative discount in TakePOS --- htdocs/takepos/invoice.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 2fcb9e0a6d8..126fea907a9 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -260,6 +260,9 @@ if ($action == "addline") $prod = new Product($db); $prod->fetch($idproduct); + $customer = new Societe($db); + $customer->fetch($invoice->socid); + $price = $prod->price; $tva_tx = $prod->tva_tx; $price_ttc = $prod->price_ttc; @@ -267,16 +270,13 @@ if ($action == "addline") if (! empty($conf->global->PRODUIT_MULTIPRICES)) { - $customer = new Societe($db); - $customer->fetch($invoice->socid); - $price = $prod->multiprices[$customer->price_level]; $tva_tx = $prod->multiprices_tva_tx[$customer->price_level]; $price_ttc = $prod->multiprices_ttc[$customer->price_level]; $price_base_type = $prod->multiprices_base_type[$customer->price_level]; } - $idoflineadded = $invoice->addline($prod->description, $price, 1, $tva_tx, $prod->localtax1_tx, $prod->localtax2_tx, $idproduct, $prod->remise_percent, '', 0, 0, 0, '', $price_base_type, $price_ttc, $prod->type, -1, 0, '', 0, 0, null, 0, '', 0, 100, '', null, 0); + $idoflineadded = $invoice->addline($prod->description, $price, 1, $tva_tx, $prod->localtax1_tx, $prod->localtax2_tx, $idproduct, $customer->remise_percent, '', 0, 0, 0, '', $price_base_type, $price_ttc, $prod->type, -1, 0, '', 0, 0, null, 0, '', 0, 100, '', null, 0); $invoice->fetch($placeid); } From 645390c9904bcf668d8bfcfa01318a4f8ea3585e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 02:36:16 +0100 Subject: [PATCH 709/980] Work on BOM templates --- htdocs/admin/bom.php | 383 ++++++++---------- htdocs/bom/bom_card.php | 25 +- htdocs/core/class/html.formfile.class.php | 2 +- .../bom/doc/doc_generic_bom_odt.modules.php | 7 - htdocs/core/modules/bom/modules_bom.php | 2 +- htdocs/core/modules/modBom.class.php | 31 +- .../doctemplates/boms/template_bom.odt | Bin 0 -> 17591 bytes .../core/modules/modMyModule.class.php | 31 ++ .../modulebuilder/template/myobject_card.php | 20 +- 9 files changed, 257 insertions(+), 244 deletions(-) create mode 100644 htdocs/install/doctemplates/boms/template_bom.odt diff --git a/htdocs/admin/bom.php b/htdocs/admin/bom.php index 26ea1b12a29..43f3fe0584a 100644 --- a/htdocs/admin/bom.php +++ b/htdocs/admin/bom.php @@ -183,16 +183,6 @@ elseif ($action == 'set_BOM_FREE_TEXT') { setEventMessages($langs->trans("Error"), null, 'errors'); } -} elseif ($action=="setshippableiconinlist") { - // Activate Set Shippable Icon In List - $setshippableiconinlist = GETPOST('value', 'int'); - $res = dolibarr_set_const($db, "SHIPPABLE_BOM_ICON_IN_LIST", $setshippableiconinlist, 'yesno', 0, '', $conf->entity); - if (! $res > 0) $error++; - if (! $error) { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } else { - setEventMessages($langs->trans("Error"), null, 'errors'); - } } @@ -314,244 +304,217 @@ foreach ($dirmodels as $reldir) print "
    \n"; -if ($conf->global->MAIN_FEATURES_LEVEL >= 2) +/* + * Document templates generators + */ + +print load_fiche_titre($langs->trans("BOMsModelModule"), '', ''); + +// Load array def with activated templates +$def = array(); +$sql = "SELECT nom"; +$sql.= " FROM ".MAIN_DB_PREFIX."document_model"; +$sql.= " WHERE type = '".$type."'"; +$sql.= " AND entity = ".$conf->entity; +$resql=$db->query($sql); +if ($resql) { - /* - * Document templates generators - */ + $i = 0; + $num_rows=$db->num_rows($resql); + while ($i < $num_rows) + { + $array = $db->fetch_array($resql); + array_push($def, $array[0]); + $i++; + } +} +else +{ + dol_print_error($db); +} - print load_fiche_titre($langs->trans("BOMsModelModule"), '', ''); - // Load array def with activated templates - $def = array(); - $sql = "SELECT nom"; - $sql.= " FROM ".MAIN_DB_PREFIX."document_model"; - $sql.= " WHERE type = '".$type."'"; - $sql.= " AND entity = ".$conf->entity; - $resql=$db->query($sql); - if ($resql) +print "\n"; +print "\n"; +print ''; +print ''; +print '\n"; +print '\n"; +print ''; +print ''; +print "\n"; + +clearstatcache(); + +foreach ($dirmodels as $reldir) +{ + foreach (array('','/doc') as $valdir) { - $i = 0; - $num_rows=$db->num_rows($resql); - while ($i < $num_rows) - { - $array = $db->fetch_array($resql); - array_push($def, $array[0]); - $i++; - } - } - else - { - dol_print_error($db); - } + $dir = dol_buildpath($reldir."core/modules/bom".$valdir); - - print "
    '.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Status")."'.$langs->trans("Default")."'.$langs->trans("ShortInfo").''.$langs->trans("Preview").'
    \n"; - print "\n"; - print ''; - print ''; - print '\n"; - print '\n"; - print ''; - print ''; - print "\n"; - - clearstatcache(); - - foreach ($dirmodels as $reldir) - { - foreach (array('','/doc') as $valdir) + if (is_dir($dir)) { - $dir = dol_buildpath($reldir."core/modules/bom".$valdir); - - if (is_dir($dir)) + $handle=opendir($dir); + if (is_resource($handle)) { - $handle=opendir($dir); - if (is_resource($handle)) + while (($file = readdir($handle))!==false) { - while (($file = readdir($handle))!==false) + $filelist[]=$file; + } + closedir($handle); + arsort($filelist); + + foreach($filelist as $file) + { + if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { - $filelist[]=$file; - } - closedir($handle); - arsort($filelist); + if (file_exists($dir.'/'.$file)) + { + $name = substr($file, 4, dol_strlen($file) -16); + $classname = substr($file, 0, dol_strlen($file) -12); - foreach($filelist as $file) - { - if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) - { - if (file_exists($dir.'/'.$file)) - { - $name = substr($file, 4, dol_strlen($file) -16); - $classname = substr($file, 0, dol_strlen($file) -12); + require_once $dir.'/'.$file; + $module = new $classname($db); - require_once $dir.'/'.$file; - $module = new $classname($db); + $modulequalified=1; + if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified=0; + if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified=0; - $modulequalified=1; - if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified=0; - if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified=0; + if ($modulequalified) + { + $var = !$var; + print ''; - if ($modulequalified) - { - $var = !$var; - print ''; + // Active + if (in_array($name, $def)) + { + print ''; + } + else + { + print '"; + } - // Active - if (in_array($name, $def)) - { - print ''; - } - else - { - print '"; - } + // Default + print ''; - // Default - print ''; - - // Info - $htmltooltip = ''.$langs->trans("Name").': '.$module->name; - $htmltooltip.='
    '.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); - if ($module->type == 'pdf') - { - $htmltooltip.='
    '.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur; - } - $htmltooltip.='

    '.$langs->trans("FeaturesSupported").':'; - $htmltooltip.='
    '.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1); - $htmltooltip.='
    '.$langs->trans("PaymentMode").': '.yn($module->option_modereg, 1, 1); - $htmltooltip.='
    '.$langs->trans("PaymentConditions").': '.yn($module->option_condreg, 1, 1); - $htmltooltip.='
    '.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1); - //$htmltooltip.='
    '.$langs->trans("Discounts").': '.yn($module->option_escompte,1,1); - //$htmltooltip.='
    '.$langs->trans("CreditNote").': '.yn($module->option_credit_note,1,1); - $htmltooltip.='
    '.$langs->trans("WatermarkOnDraftBOMs").': '.yn($module->option_draft_watermark, 1, 1); + // Info + $htmltooltip = ''.$langs->trans("Name").': '.$module->name; + $htmltooltip.='
    '.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); + if ($module->type == 'pdf') + { + $htmltooltip.='
    '.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur; + } + $htmltooltip.='

    '.$langs->trans("FeaturesSupported").':'; + $htmltooltip.='
    '.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1); + $htmltooltip.='
    '.$langs->trans("WatermarkOnDraftBOMs").': '.yn($module->option_draft_watermark, 1, 1); - print ''; + print ''; - // Preview - print ''; + // Preview + print ''; - print "\n"; - } - } - } + print "\n"; + } + } } } } } } - - print '
    '.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Status")."'.$langs->trans("Default")."'.$langs->trans("ShortInfo").''.$langs->trans("Preview").'
    '; + print (empty($module->name)?$name:$module->name); + print "\n"; + if (method_exists($module, 'info')) print $module->info($langs); + else print $module->description; + print '
    '; - print (empty($module->name)?$name:$module->name); - print "\n"; - if (method_exists($module, 'info')) print $module->info($langs); - else print $module->description; - print ''."\n"; + print ''; + print img_picto($langs->trans("Enabled"), 'switch_on'); + print ''; + print ''."\n"; + print 'scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').''; + print "'."\n"; - print ''; - print img_picto($langs->trans("Enabled"), 'switch_on'); - print ''; - print ''."\n"; - print 'scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').''; - print "'; + if ($conf->global->BOM_ADDON_PDF == $name) + { + print img_picto($langs->trans("Default"), 'on'); + } + else + { + print 'scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').''; + } + print ''; - if ($conf->global->BOM_ADDON_PDF == $name) - { - print img_picto($langs->trans("Default"), 'on'); - } - else - { - print 'scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').''; - } - print ''; - print $form->textwithpicto('', $htmltooltip, 1, 0); - print ''; + print $form->textwithpicto('', $htmltooltip, 1, 0); + print ''; - if ($module->type == 'pdf') - { - print ''.img_object($langs->trans("Preview"), 'bill').''; - } - else - { - print img_object($langs->trans("PreviewNotAvailable"), 'generic'); - } - print ''; + if ($module->type == 'pdf') + { + print ''.img_object($langs->trans("Preview"), 'bill').''; + } + else + { + print img_object($langs->trans("PreviewNotAvailable"), 'generic'); + } + print '
    '; - print "
    "; - - /* - * Other options - */ - - print load_fiche_titre($langs->trans("OtherOptions"), '', ''); - print ''; - print ''; - print ''; - print ''; - print "\n"; - print "\n"; - - $substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); - $substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); - $htmltext = ''.$langs->trans("AvailableVariables").':
    '; - foreach($substitutionarray as $key => $val) $htmltext.=$key.'
    '; - $htmltext.='
    '; - - print ''; - print ''; - print ''; - print '\n"; - print ''; - - //Use draft Watermark - - print ""; - print ''; - print ""; - print '\n"; - print ''; - - print '
    '.$langs->trans("Parameter").''.$langs->trans("Value").' 
    '; - print $form->textwithpicto($langs->trans("FreeLegalTextOnBOMs"), $langs->trans("AddCRIfTooLong").'

    '.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
    '; - $variablename='BOM_FREE_TEXT'; - if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) - { - print ''; - } - else - { - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); - } - print '
    '; - print ''; - print "
    '; - print $form->textwithpicto($langs->trans("WatermarkOnDraftBOMs"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'
    '; - print '
    '; - print ''; - print ''; - print ''; - print "
    '; - print '
    '; } +print ''; +print "
    "; + /* - * Notifications + * Other options */ -/* -print load_fiche_titre($langs->trans("Notifications"), '', ''); + +print load_fiche_titre($langs->trans("OtherOptions"), '', ''); print ''; print ''; print ''; -print ''; -print ''; +print ''; +print "\n"; print "\n"; +$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); +$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); +$htmltext = ''.$langs->trans("AvailableVariables").':
    '; +foreach($substitutionarray as $key => $val) $htmltext.=$key.'
    '; +$htmltext.='
    '; + +print ''; +print ''; +print ''; print '\n"; +print ''; + +//Use draft Watermark + +print ""; +print ''; +print ""; +print '\n"; +print ''; print '
    '.$langs->trans("Parameter").' '.$langs->trans("Value").' 
    '; -print $langs->trans("YouMayFindNotificationsFeaturesIntoModuleNotification").'
    '; +print $form->textwithpicto($langs->trans("FreeLegalTextOnBOMs"), $langs->trans("AddCRIfTooLong").'

    '.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
    '; +$variablename='BOM_FREE_TEXT'; +if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) +{ + print ''; +} +else +{ + include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; + $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); + print $doleditor->Create(); +} print '
    '; +print ''; print "
    '; +print $form->textwithpicto($langs->trans("WatermarkOnDraftBOMs"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'
    '; +print '
    '; +print ''; +print ''; +print ''; +print "
    '; -*/ +print '
    '; + // End of page llxFooter(); diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 6186e809543..eea20d6721c 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -662,14 +662,13 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ''; // ancre // Documents - /*$objref = dol_sanitizeFileName($object->ref); - $relativepath = $comref . '/' . $comref . '.pdf'; + $objref = dol_sanitizeFileName($object->ref); + $relativepath = $objref . '/' . $objref . '.pdf'; $filedir = $conf->bom->dir_output . '/' . $objref; $urlsource = $_SERVER["PHP_SELF"] . "?id=" . $object->id; $genallowed = $user->rights->bom->read; // If you can read, you can build the PDF to read content - $delallowed = $user->rights->bom->create; // If you can create/edit, you can remove a file on card - print $formfile->showdocuments('bom', $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang); - */ + $delallowed = $user->rights->bom->write; // If you can create/edit, you can remove a file on card + print $formfile->showdocuments('bom', $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $mysoc->default_lang); // Show links to link elements $linktoelem = $form->showLinkToObjectBlock($object, null, array('bom')); @@ -693,17 +692,15 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } //Select mail models is same action as presend - /* - if (GETPOST('modelselected')) $action = 'presend'; + if (GETPOST('modelselected')) $action = 'presend'; - // Presend form - $modelmail='inventory'; - $defaulttopic='InformationMessage'; - $diroutput = $conf->product->dir_output.'/inventory'; - $trackid = 'stockinv'.$object->id; + // Presend form + $modelmail='bom'; + $defaulttopic='InformationMessage'; + $diroutput = $conf->bom->dir_output; + $trackid = 'bom'.$object->id; - include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php'; - */ + include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php'; } // End of page diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index d231dacab87..22acff7763d 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -688,7 +688,7 @@ class FormFile } else { - dol_print_error($this->db, 'Bad value for modulepart'); + dol_print_error($this->db, "Bad value for modulepart '".$modulepart."' in showdocuments"); return -1; } } diff --git a/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php index 8885348bb16..3c371c39491 100644 --- a/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php +++ b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php @@ -85,14 +85,7 @@ class doc_generic_bom_odt extends ModelePDFBOMs $this->marge_haute=0; $this->marge_basse=0; - $this->option_logo = 1; // Affiche logo - $this->option_tva = 0; // Gere option tva COMMANDE_TVAOPTION - $this->option_modereg = 0; // Affiche mode reglement - $this->option_condreg = 0; // Affiche conditions reglement - $this->option_codeproduitservice = 0; // Affiche code produit-service $this->option_multilang = 1; // Dispo en plusieurs langues - $this->option_escompte = 0; // Affiche si il y a eu escompte - $this->option_credit_note = 0; // Support credit notes $this->option_freetext = 1; // Support add of a personalised text $this->option_draft_watermark = 0; // Support add of a watermark on drafts diff --git a/htdocs/core/modules/bom/modules_bom.php b/htdocs/core/modules/bom/modules_bom.php index f8f29fec2e6..45bca8a38b3 100644 --- a/htdocs/core/modules/bom/modules_bom.php +++ b/htdocs/core/modules/bom/modules_bom.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // requir /** * Parent class for boms models */ -abstract class ModelePDFBoms extends CommonDocGenerator +abstract class ModelePDFBom extends CommonDocGenerator { // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps diff --git a/htdocs/core/modules/modBom.class.php b/htdocs/core/modules/modBom.class.php index 720721ac156..1700f15afd7 100644 --- a/htdocs/core/modules/modBom.class.php +++ b/htdocs/core/modules/modBom.class.php @@ -121,7 +121,7 @@ class modBom extends DolibarrModules // 1=>array('BILLOFMATERIALS_MYNEWCONST2','chaine','myvalue','This is another constant to add',0, 'current', 1) // ); $this->const = array( - 1=>array('BOM_ADDON_PDF', 'chaine', 'avalue', 'Name of PDF model of BOM', 0), + 1=>array('BOM_ADDON_PDF', 'chaine', 'alpha', 'Name of PDF model of BOM', 0), 2=>array('BOM_ADDON', 'chaine', 'mod_bom_standard', 'Name of numbering rules of BOM', 0), 3=>array('BOM_ADDON_PDF_ODT_PATH', 'chaine', 'DOL_DATA_ROOT/doctemplates/boms', '', 0) ); @@ -317,6 +317,8 @@ class modBom extends DolibarrModules */ public function init($options = '') { + global $conf, $langs; + $result=$this->_load_tables('/bom/sql/'); if ($result < 0) return -1; // Do not activate module if not allowed errors found on module SQL queries (the _load_table run sql with run_sql with error allowed parameter to 'default') @@ -330,8 +332,35 @@ class modBom extends DolibarrModules //$result4=$extrafields->addExtraField('myattr4', "New Attr 4 label", 'select', 1, 3, 'thirdparty', 0, 1, '', array('options'=>array('code1'=>'Val1','code2'=>'Val2','code3'=>'Val3')), 1,'', 0, 0, '', '', 'mrp', '$conf->bom->enabled'); //$result5=$extrafields->addExtraField('myattr5', "New Attr 5 label", 'text', 1, 10, 'user', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->bom->enabled'); + + // Permissions + $this->remove($options); + $sql = array(); + // ODT template + $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/boms/template_bom.odt'; + $dirodt=DOL_DATA_ROOT.'/doctemplates/boms'; + $dest=$dirodt.'/template_bom.odt'; + + if (file_exists($src) && ! file_exists($dest)) + { + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + dol_mkdir($dirodt); + $result=dol_copy($src, $dest, 0, 0); + if ($result < 0) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorFailToCopyFile', $src, $dest); + return 0; + } + } + + $sql = array( + "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->db->escape('alpha')."' AND type = 'bom' AND entity = ".$conf->entity, + "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->db->escape('alpha')."', 'bom', ".$conf->entity.")" + ); + return $this->_init($sql, $options); } diff --git a/htdocs/install/doctemplates/boms/template_bom.odt b/htdocs/install/doctemplates/boms/template_bom.odt new file mode 100644 index 0000000000000000000000000000000000000000..344fcfa391aefbfef2b4ae85c5436e6c707adaa2 GIT binary patch literal 17591 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'/mymodule/sql/'); if ($result < 0) return -1; // Do not activate module if error 'not allowed' returned when loading module SQL queries (the _load_table run sql with run_sql with the error allowed parameter set to 'default') @@ -394,7 +396,36 @@ class modMyModule extends DolibarrModules //$result4=$extrafields->addExtraField('myattr4', "New Attr 4 label", 'select', 1, 3, 'thirdparty', 0, 1, '', array('options'=>array('code1'=>'Val1','code2'=>'Val2','code3'=>'Val3')), 1,'', 0, 0, '', '', 'mymodule@mymodule', '$conf->mymodule->enabled'); //$result5=$extrafields->addExtraField('myattr5', "New Attr 5 label", 'text', 1, 10, 'user', 0, 0, '', '', 1, '', 0, 0, '', '', 'mymodule@mymodule', '$conf->mymodule->enabled'); + // Permissions + $this->remove($options); + $sql = array(); + + // ODT template + /* + $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/mymodule/template_myobjects.odt'; + $dirodt=DOL_DATA_ROOT.'/doctemplates/mymodule'; + $dest=$dirodt.'/template_myobjects.odt'; + + if (file_exists($src) && ! file_exists($dest)) + { + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + dol_mkdir($dirodt); + $result=dol_copy($src, $dest, 0, 0); + if ($result < 0) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorFailToCopyFile', $src, $dest); + return 0; + } + } + + $sql = array( + "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->db->escape($this->const[0][2])."' AND type = 'mymodule' AND entity = ".$conf->entity, + "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->db->escape($this->const[0][2])."','mymodule',".$conf->entity.")" + ); + */ + return $this->_init($sql, $options); } diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index fcf8b1f8a06..2a9d6388552 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -512,7 +512,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Documents /*$objref = dol_sanitizeFileName($object->ref); - $relativepath = $comref . '/' . $comref . '.pdf'; + $relativepath = $objref . '/' . $objref . '.pdf'; $filedir = $conf->mymodule->dir_output . '/' . $objref; $urlsource = $_SERVER["PHP_SELF"] . "?id=" . $object->id; $genallowed = $user->rights->mymodule->read; // If you can read, you can build the PDF to read content @@ -536,23 +536,23 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // List of actions on element include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php'; $formactions = new FormActions($db); - $somethingshown = $formactions->showactions($object, 'myobject', $socid, 1, '', $MAXEVENT, '', $morehtmlright); + $somethingshown = $formactions->showactions($object, 'myobject', (is_object($object->thirdparty)?$object->thirdparty->id:0), 1, '', $MAXEVENT, '', $morehtmlright); print '
    '; } //Select mail models is same action as presend /* - if (GETPOST('modelselected')) $action = 'presend'; + if (GETPOST('modelselected')) $action = 'presend'; - // Presend form - $modelmail='inventory'; - $defaulttopic='InformationMessage'; - $diroutput = $conf->product->dir_output.'/inventory'; - $trackid = 'stockinv'.$object->id; + // Presend form + $modelmail='myobject'; + $defaulttopic='InformationMessage'; + $diroutput = $conf->mymodule->dir_output; + $trackid = 'myobject'.$object->id; - include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php'; - */ + include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php'; + */ } // End of page From d0a5e30faade72f78847ae1fc7de53349046295e Mon Sep 17 00:00:00 2001 From: John Botella Date: Thu, 31 Oct 2019 08:44:08 +0100 Subject: [PATCH 710/980] Change btn name --- htdocs/core/lib/ticket.lib.php | 2 +- htdocs/theme/eldy/btn.inc.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index 7a2a96d074a..e89e9a79194 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -844,7 +844,7 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no $class.= ' documentpreview'; } - $footer.= ''; + $footer.= ''; $footer.= img_mime($filePath).' '.$doc->filename; $footer.= ''; diff --git a/htdocs/theme/eldy/btn.inc.php b/htdocs/theme/eldy/btn.inc.php index 91a95d7a4d3..59c015b6245 100644 --- a/htdocs/theme/eldy/btn.inc.php +++ b/htdocs/theme/eldy/btn.inc.php @@ -264,10 +264,10 @@ div.pagination li:first-child a.btnTitle{ /* - * BTN FILE doc + * BTN LINK */ -.btn-file{ +.btn-link{ margin-right: 5px; border: 1px solid #ddd; color: #333; @@ -276,7 +276,7 @@ div.pagination li:first-child a.btnTitle{ text-decoration: none !important; } -.btn-file:hover{ +.btn-link:hover{ background-color: #ddd; border: 1px solid #ddd; } From 5550a62afa9b3f790bf0774c5235498da4df279b Mon Sep 17 00:00:00 2001 From: atm-josselin Date: Thu, 31 Oct 2019 11:05:45 +0100 Subject: [PATCH 711/980] Fix misspelling on field of productlot --- htdocs/product/stock/class/productlot.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/stock/class/productlot.class.php b/htdocs/product/stock/class/productlot.class.php index dd811a66cf6..bd1a14329a6 100644 --- a/htdocs/product/stock/class/productlot.class.php +++ b/htdocs/product/stock/class/productlot.class.php @@ -62,7 +62,7 @@ class Productlot extends CommonObject 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20), 'datec' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500), 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), - 'fk_user_author'=>array('type'=>'integer', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>510, 'foreignkey'=>'llx_user.rowid'), + 'fk_user_creat'=>array('type'=>'integer', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>510, 'foreignkey'=>'llx_user.rowid'), 'fk_user_modif' =>array('type'=>'integer', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>511) ); From 360b3a9550b522b8f557a0634afdcb697d6b9fd7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 14:06:26 +0100 Subject: [PATCH 712/980] NEW Ask the new label and new dates in confirm popup when cloning tax --- htdocs/compta/paiement_charge.php | 2 +- htdocs/compta/sociales/card.php | 35 ++++++++--- .../sociales/class/chargesociales.class.php | 28 +++++---- htdocs/core/class/html.form.class.php | 62 +++++++++++-------- htdocs/theme/eldy/global.inc.php | 3 + htdocs/theme/md/style.css.php | 4 +- 6 files changed, 86 insertions(+), 48 deletions(-) diff --git a/htdocs/compta/paiement_charge.php b/htdocs/compta/paiement_charge.php index def454f2ca5..6cc91072a34 100644 --- a/htdocs/compta/paiement_charge.php +++ b/htdocs/compta/paiement_charge.php @@ -204,7 +204,7 @@ if ($action == 'create') print ''.$langs->trans("Ref").''.$chid.''; print ''.$langs->trans("Type")."".$charge->type_libelle."\n"; print ''.$langs->trans("Period")."".dol_print_date($charge->periode, 'day')."\n"; - print ''.$langs->trans("Label").''.$charge->lib."\n"; + print ''.$langs->trans("Label").''.$charge->label."\n"; /*print ''.$langs->trans("DateDue")."".dol_print_date($charge->date_ech,'day')."\n"; print ''.$langs->trans("Amount")."".price($charge->amount,0,$outputlangs,1,-1,-1,$conf->currency).'';*/ diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index 7399a7098c6..389c91e316e 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -242,12 +242,23 @@ if ($action == 'confirm_clone' && $confirm == 'yes' && ($user->rights->tax->char { $object->paye = 0; $object->id = $object->ref = null; - $object->lib = $langs->trans("CopyOf").' '.$object->lib; - if (GETPOST('clone_for_next_month') != '') - { - $object->date_ech = dol_time_plus_duree($object->date_ech, 1, 'm'); + if (GETPOST('clone_label', 'alphanohtml')) { + $object->label = GETPOST('clone_label', 'alphanohtml'); + } + else { + $object->label = $langs->trans("CopyOf").' '.$object->label; + } + + if (GETPOST('clone_for_next_month', 'int')) { $object->periode = dol_time_plus_duree($object->periode, 1, 'm'); + $object->date_ech = dol_time_plus_duree($object->date_ech, 1, 'm'); + } + else { + $newdateperiod = dol_mktime(0, 0, 0, GETPOST('clone_periodmonth', 'int'), GETPOST('clone_periodday', 'int'), GETPOST('clone_periodyear', 'int')); + $newdateech = dol_mktime(0, 0, 0, GETPOST('clone_date_echmonth', 'int'), GETPOST('clone_date_echday', 'int'), GETPOST('clone_date_echyear', 'int')); + if ($newdateperiod) $object->periode = $newdateperiod; + if ($newdateech) $object->date_ech = $newdateech; } if ($object->check()) @@ -414,12 +425,20 @@ if ($id > 0) // Clone confirmation if ($action === 'clone') { - $formclone=array( - array('type' => 'checkbox', 'name' => 'clone_for_next_month','label' => $langs->trans("CloneTaxForNextMonth"), 'value' => 1), - + $formquestion=array( + array('type' => 'text', 'name' => 'clone_label', 'label' => $langs->trans("Label"), 'value' => $langs->trans("CopyOf").' '.$object->label), ); + if (! empty($conf->global->TAX_ADD_CLON_FOR_NEXT_MONTH_CHECKBOX)) + { + $formquestion[]=array('type' => 'checkbox', 'name' => 'clone_for_next_month', 'label' => $langs->trans("CloneTaxForNextMonth"), 'value' => 1); + } + else + { + $formquestion[]=array('type' => 'date', 'name' => 'clone_period', 'label' => $langs->trans("PeriodEndDate"), 'value' => -1); + $formquestion[]=array('type' => 'date', 'name' => 'clone_date_ech', 'label' => $langs->trans("DateDue"), 'value' => -1); + } - print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneTax', $object->ref), 'confirm_clone', $formclone, 'yes'); + print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneTax', $object->ref), 'confirm_clone', $formquestion, 'yes', 2); } // Confirmation de la suppression de la charge diff --git a/htdocs/compta/sociales/class/chargesociales.class.php b/htdocs/compta/sociales/class/chargesociales.class.php index c5a882283c7..bbffbebe0c9 100644 --- a/htdocs/compta/sociales/class/chargesociales.class.php +++ b/htdocs/compta/sociales/class/chargesociales.class.php @@ -55,7 +55,7 @@ class ChargeSociales extends CommonObject protected $table_ref_field = 'ref'; public $date_ech; - public $lib; + public $label; public $type; public $type_libelle; public $amount; @@ -65,6 +65,11 @@ class ChargeSociales extends CommonObject public $date_modification; public $date_validation; + /** + * @deprecated Use label instead + */ + public $lib; + /** * @var int account ID */ @@ -106,7 +111,7 @@ class ChargeSociales extends CommonObject public function fetch($id, $ref = '') { $sql = "SELECT cs.rowid, cs.date_ech"; - $sql.= ", cs.libelle as lib, cs.fk_type, cs.amount, cs.fk_projet as fk_project, cs.paye, cs.periode, cs.import_key"; + $sql.= ", cs.libelle as label, cs.fk_type, cs.amount, cs.fk_projet as fk_project, cs.paye, cs.periode, cs.import_key"; $sql.= ", cs.fk_account, cs.fk_mode_reglement"; $sql.= ", c.libelle"; $sql.= ', p.code as mode_reglement_code, p.libelle as mode_reglement_libelle'; @@ -128,7 +133,8 @@ class ChargeSociales extends CommonObject $this->id = $obj->rowid; $this->ref = $obj->rowid; $this->date_ech = $this->db->jdate($obj->date_ech); - $this->lib = $obj->lib; + $this->lib = $obj->label; + $this->label = $obj->label; $this->type = $obj->fk_type; $this->type_libelle = $obj->libelle; $this->fk_account = $obj->fk_account; @@ -203,7 +209,7 @@ class ChargeSociales extends CommonObject $sql.= " VALUES (".$this->type; $sql.= ", ".($this->fk_account>0 ? $this->fk_account:'NULL'); $sql.= ", ".($this->mode_reglement_id>0 ? $this->mode_reglement_id:"NULL"); - $sql.= ", '".$this->db->escape($this->lib)."'"; + $sql.= ", '".$this->db->escape($this->label?$this->label:$this->lib)."'"; $sql.= ", '".$this->db->idate($this->date_ech)."'"; $sql.= ", '".$this->db->idate($this->periode)."'"; $sql.= ", '".price2num($newamount)."'"; @@ -323,7 +329,7 @@ class ChargeSociales extends CommonObject $this->db->begin(); $sql = "UPDATE ".MAIN_DB_PREFIX."chargesociales"; - $sql.= " SET libelle='".$this->db->escape($this->lib)."'"; + $sql.= " SET libelle='".$this->db->escape($this->label?$this->label:$this->lib)."'"; $sql.= ", date_ech='".$this->db->idate($this->date_ech)."'"; $sql.= ", periode='".$this->db->idate($this->periode)."'"; $sql.= ", amount='".price2num($this->amount, 'MT')."'"; @@ -543,13 +549,13 @@ class ChargeSociales extends CommonObject } - if (empty($this->ref)) $this->ref=$this->lib; + if (empty($this->ref)) $this->ref=$this->label; $label = ''.$langs->trans("ShowSocialContribution").''; if (! empty($this->ref)) $label .= '
    '.$langs->trans('Ref') . ': ' . $this->ref; - if (! empty($this->lib)) - $label .= '
    '.$langs->trans('Label') . ': ' . $this->lib; + if (! empty($this->label)) + $label .= '
    '.$langs->trans('Label') . ': ' . $this->label; if (! empty($this->type_libelle)) $label .= '
    '.$langs->trans('Type') . ': ' . $this->type_libelle; @@ -677,12 +683,12 @@ class ChargeSociales extends CommonObject $this->ref = 'SPECIMEN'; $this->specimen=1; $this->paye = 0; - $this->date = time(); + $this->date = dol_now(); $this->date_ech=$this->date+3600*24*30; $this->periode=$this->date+3600*24*30; $this->amount=100; - $this->lib = 0; + $this->label = 'Social contribution label'; $this->type = 1; - $this->type_libelle = 'Social contribution label'; + $this->type_libelle = 'Type of social contribution'; } } diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 7f1c2cbee50..72c1e589233 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -4070,13 +4070,13 @@ class Form * @param array $formquestion An array with complementary inputs to add into forms: array(array('label'=> ,'type'=> , )) * type can be 'hidden', 'text', 'password', 'checkbox', 'radio', 'date', 'morecss', ... * @param string $selectedchoice '' or 'no', or 'yes' or '1' or '0' - * @param int $useajax 0=No, 1=Yes, 2=Yes but submit page with &confirm=no if choice is No, 'xxx'=Yes and preoutput confirm box with div id=dialog-confirm-xxx - * @param int $height Force height of box + * @param int|string $useajax 0=No, 1=Yes, 2=Yes but submit page with &confirm=no if choice is No, 'xxx'=Yes and preoutput confirm box with div id=dialog-confirm-xxx + * @param int $height Force height of box (0 = auto) * @param int $width Force width of box ('999' or '90%'). Ignored and forced to 90% on smartphones. * @param int $disableformtag 1=Disable form tag. Can be used if we are already inside a
    section. * @return string HTML ajax code if a confirm ajax popup is required, Pure HTML code if it's an html form */ - public function formconfirm($page, $title, $question, $action, $formquestion = '', $selectedchoice = '', $useajax = 0, $height = 210, $width = 500, $disableformtag = 0) + public function formconfirm($page, $title, $question, $action, $formquestion = '', $selectedchoice = '', $useajax = 0, $height = 0, $width = 500, $disableformtag = 0) { global $langs,$conf; global $useglobalvars; @@ -4090,6 +4090,14 @@ class Form $newselectedchoice=empty($selectedchoice)?"no":$selectedchoice; if ($conf->browser->layout == 'phone') $width='95%'; + // Set height automatically if not defined + if (empty($height)) { + $height = 210; + if (is_array($formquestion) && count($formquestion) > 2) { + $height += ((count($formquestion) - 2) * 24); + } + } + if (is_array($formquestion) && ! empty($formquestion)) { // First add hidden fields and value @@ -4105,7 +4113,7 @@ class Form } // Now add questions - $more.=''."\n"; + $more.='
    '."\n"; if (! empty($formquestion['text'])) $more.='
    '."\n"; foreach ($formquestion as $key => $input) { @@ -4117,52 +4125,52 @@ class Form if ($input['type'] == 'text') { - $more.=''.$input['label'].''."\n"; + $more.='
    '.$input['label'].'
    '."\n"; } elseif ($input['type'] == 'password') { - $more.=''.$input['label'].''."\n"; + $more.='
    '.$input['label'].'
    '."\n"; } elseif ($input['type'] == 'select') { - $more.=''; - if (! empty($input['label'])) $more.=$input['label'].''."\n"; + $more.=''."\n"; } elseif ($input['type'] == 'checkbox') { - $more.=''; - $more.=''.$input['label'].' '; - if ($i==0) $more.=''.$input['label'].''; - else $more.=' '; - $more.=''; - $more.=''."\n"; + $more.=''."\n"; $formquestion[] = array('name'=>$input['name'].'day'); $formquestion[] = array('name'=>$input['name'].'month'); $formquestion[] = array('name'=>$input['name'].'year'); @@ -4171,21 +4179,21 @@ class Form } elseif ($input['type'] == 'other') { - $more.=''; - if (! empty($input['label'])) $more.=$input['label'].''."\n"; + $more.=''."\n"; } elseif ($input['type'] == 'onecolumn') { - $more.=''."\n"; + $more.=''."\n"; } } } - $more.='
    '.$formquestion['text'].'
    '; + $more.='
    '; + if (! empty($input['label'])) $more.=$input['label'].'
    '; $more.=$this->selectarray($input['name'], $input['values'], $input['default'], 1, 0, 0, $moreattr, 0, 0, 0, '', $morecss); - $more.='
    '; + $more.='
    '; + $more.='
    '.$input['label'].'
    '; $more.=' $selval) { - $more.='
    '.$input['label'].''; + else $more.='
     
    '; + $more.='
    '.$input['label'].'
    '; + $more.='
    '.$input['label'].'
    '; + $more.='
    '; $more.=$this->selectDate($input['value'], $input['name'], 0, 0, 0, '', 1, 0); - $more.='
    '; + $more.='
    '; + if (! empty($input['label'])) $more.=$input['label'].'
    '; $more.=$input['value']; - $more.='
    '; + $more.='
    '; $more.=$input['value']; - $more.='
    '."\n"; + $more.='
    '."\n"; } // JQUI method dialog is broken with jmobile, we use standard HTML. diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 28029def9ff..ad0f68bee43 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -2529,6 +2529,9 @@ span.tabspan { margin: 0px !important; padding: 0px !important; } +.noborderspacing { + border-spacing: 0; +} tr.nocellnopadd td.nobordernopadding, tr.nocellnopadd td.nocellnopadd { border: 0px; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 04ae5d298c4..df88a655280 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2620,7 +2620,6 @@ span.tabspan { margin-top: px; } - .paddingrightonly { border-collapse: collapse; border: 0px; @@ -2633,6 +2632,9 @@ span.tabspan { margin: 0px !important; padding: 0px !important; } +.noborderspacing { + border-spacing: 0; +} tr.nocellnopadd td.nobordernopadding, tr.nocellnopadd td.nocellnopadd { border: 0px; From 607c38775d808efcf9562d838f6a17273e6eeff0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 14:57:05 +0100 Subject: [PATCH 713/980] Use popup --- htdocs/compta/sociales/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index 389c91e316e..e2bf729a396 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -438,7 +438,7 @@ if ($id > 0) $formquestion[]=array('type' => 'date', 'name' => 'clone_date_ech', 'label' => $langs->trans("DateDue"), 'value' => -1); } - print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneTax', $object->ref), 'confirm_clone', $formquestion, 'yes', 2); + print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneTax', $object->ref), 'confirm_clone', $formquestion, 'yes', 1); } // Confirmation de la suppression de la charge From bc2a949bab5aae13a21eb915772c23f17017dbc3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 16:47:27 +0100 Subject: [PATCH 714/980] New Add option to disable idempotency when using Stripe payments. --- htdocs/public/payment/newpayment.php | 8 ++++++-- htdocs/stripe/class/stripe.class.php | 25 ++++++++++++++----------- htdocs/stripe/config.php | 2 +- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 067c371bf67..4a3d08f6602 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1725,6 +1725,7 @@ if ($action != 'dopayment') { // If STRIPE_PICTO_FOR_PAYMENT is 'cb' we show a picto of a crdit card instead of stripe print '
    '; + print ''; print '
    '; print ''.$langs->trans("CreditOrDebitCard").''; print '
    '; @@ -1858,12 +1859,12 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment $service = 'StripeLive'; $servicestatus = 1; - if (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox', 'alpha')) { $service = 'StripeTest'; $servicestatus = 0; } + $stripe = new Stripe($db); $stripeacc = $stripe->getStripeAccount($service); $stripecu = null; @@ -1871,7 +1872,10 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) { - $paymentintent=$stripe->getPaymentIntent($amount, $currency, $tag, 'Stripe payment: '.$fulltag.(is_object($object)?' ref='.$object->ref:''), $object, $stripecu, $stripeacc, $servicestatus); + $noidempotency_key = (GETPOSTISSET('noidempotency') ? GETPOST('noidempotency', 'int') : 0); // By default noidempotency is unset, so we must use a different tag/ref for each payment. If set, we can pay several times the same tag/ref. + $paymentintent=$stripe->getPaymentIntent($amount, $currency, $tag, 'Stripe payment: '.$fulltag.(is_object($object)?' ref='.$object->ref:''), $object, $stripecu, $stripeacc, $servicestatus, 0, 'automatic', false, null, 0, $noidempotency_key); + // The paymentintnent has status 'requires_payment_method' (even if paymentintent was already payed) + //var_dump($paymentintent); if ($stripe->error) setEventMessages($stripe->error, null, 'errors'); } } diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 021a9fac1f9..c30e3169ee5 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -318,9 +318,10 @@ class Stripe extends CommonObject * @param boolean $confirmnow false=default, true=try to confirm immediatly after create (if conditions are ok) * @param string $payment_method 'pm_....' (if known) * @param string $off_session If we use an already known payment method to pay off line. + * @param string $noidempotency_key Do not use the idempotency_key when creating the PaymentIntent * @return \Stripe\PaymentIntent|null Stripe PaymentIntent or null if not found and failed to create */ - public function getPaymentIntent($amount, $currency_code, $tag, $description = '', $object = null, $customer = null, $key = null, $status = 0, $usethirdpartyemailforreceiptemail = 0, $mode = 'automatic', $confirmnow = false, $payment_method = null, $off_session = 0) + public function getPaymentIntent($amount, $currency_code, $tag, $description = '', $object = null, $customer = null, $key = null, $status = 0, $usethirdpartyemailforreceiptemail = 0, $mode = 'automatic', $confirmnow = false, $payment_method = null, $off_session = 0, $noidempotency_key = 0) { global $conf; @@ -352,9 +353,10 @@ class Stripe extends CommonObject if (is_object($object)) { // Warning. If a payment was tried and failed, a payment intent was created. - // But if we change someting on object to pay (amount or other), reusing same payment intent is not allowed. - // Recommanded solution is to recreate a new payment intent each time we need one (old one will be automatically closed after a delay), - // that's why i comment the part of code to retreive a payment intent with object id (never mind if we cumulate payment intent with old that will not be used) + // But if we change someting on object to pay (amount or other that does not change the idempotency key), reusing same payment intent is not allowed. + // Recommanded solution is to recreate a new payment intent each time we need one (old one will be automatically closed after a delay), Stripe will + // automatically return the existing payment intent if idempotency is provided when we try to create the new one. + // That's why we can comment the part of code to retreive a payment intent with object id (never mind if we cumulate payment intent with old ones that will not be used) /* $sql = "SELECT pi.ext_payment_id, pi.entity, pi.fk_facture, pi.sourcetype, pi.ext_payment_site"; $sql.= " FROM " . MAIN_DB_PREFIX . "prelevement_facture_demande as pi"; @@ -445,14 +447,15 @@ class Stripe extends CommonObject global $stripearrayofkeysbyenv; \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$status]['secret_key']); - // Note: If all data for payment intent are same than a previous on, even if we use 'create', Stripe will return ID of the old existing payment intent. - if (empty($key)) { // If the Stripe connect account not set, we use common API usage - $paymentintent = \Stripe\PaymentIntent::create($dataforintent, array("idempotency_key" => "$description")); - //$paymentintent = \Stripe\PaymentIntent::create($dataforintent, array()); - } else { - $paymentintent = \Stripe\PaymentIntent::create($dataforintent, array("idempotency_key" => "$description", "stripe_account" => $key)); - //$paymentintent = \Stripe\PaymentIntent::create($dataforintent, array("stripe_account" => $key)); + $arrayofoptions = array(); + if (empty($noidempotency_key)) { + $arrayofoptions["idempotency_key"] = $description; } + // Note: If all data for payment intent are same than a previous on, even if we use 'create', Stripe will return ID of the old existing payment intent. + if (! empty($key)) { // If the Stripe connect account not set, we use common API usage + $arrayofoptions["stripe_account"] = $key; + } + $paymentintent = \Stripe\PaymentIntent::create($dataforintent, $arrayofoptions); // Store the payment intent if (is_object($object)) diff --git a/htdocs/stripe/config.php b/htdocs/stripe/config.php index 0030bdb5535..1070f605eb8 100644 --- a/htdocs/stripe/config.php +++ b/htdocs/stripe/config.php @@ -28,7 +28,7 @@ require_once DOL_DOCUMENT_ROOT.'/includes/stripe/init.php'; require_once DOL_DOCUMENT_ROOT.'/includes/stripe/lib/Stripe.php'; -global $stripe; +//global $stripe; global $conf; global $stripearrayofkeysbyenv; From 349175580a9a33c724c16ee1576cf64c0a0d591b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 16:53:55 +0100 Subject: [PATCH 715/980] Can force Stripe API version from setup --- htdocs/stripe/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/stripe/config.php b/htdocs/stripe/config.php index 1070f605eb8..84766f8e206 100644 --- a/htdocs/stripe/config.php +++ b/htdocs/stripe/config.php @@ -55,4 +55,4 @@ else \Stripe\Stripe::setApiKey($stripearrayofkeys['secret_key']); \Stripe\Stripe::setAppInfo("Dolibarr Stripe", DOL_VERSION, "https://www.dolibarr.org"); // add dolibarr version -\Stripe\Stripe::setApiVersion("2019-05-16"); // force version API +\Stripe\Stripe::setApiVersion(empty($conf->global->STRIPE_FORCE_VERSION)?"2019-05-16":$conf->global->STRIPE_FORCE_VERSION); // force version API From 628018ca2b8948e0d5398f806a0c98931cf6b351 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 17:31:45 +0100 Subject: [PATCH 716/980] css --- htdocs/theme/eldy/global.inc.php | 1 + htdocs/theme/md/style.css.php | 2 ++ 2 files changed, 3 insertions(+) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index ad0f68bee43..aeb1cbf70c9 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -2756,6 +2756,7 @@ table.listwithfilterbefore { .tagtable, .table-border { display: table; } .tagtr, .table-border-row { display: table-row; } .tagtd, .table-border-col, .table-key-border-col, .table-val-border-col { display: table-cell; } +.confirmquestions .tagtr .tagtd:not(:first-child) { padding-left: 10px; } /* Pagination */ diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index df88a655280..d1a1c2025c0 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2840,6 +2840,8 @@ table.listwithfilterbefore { .tagtable, .table-border { display: table; } .tagtr, .table-border-row { display: table-row; } .tagtd, .table-border-col, .table-key-border-col, .table-val-border-col { display: table-cell; } +.confirmquestions .tagtr .tagtd:not(:first-child) { padding-left: 10px; } + /* Pagination */ div.refidpadding { From e93aaa2a75049a446bf2433fb781ab148fc7c114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 31 Oct 2019 20:46:31 +0100 Subject: [PATCH 717/980] replace deprecated user->societe_id by user->socid --- dev/initdemo/mysqldump_dolibarr_10.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_3.8.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_3.9.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_4.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_5.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_6.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_7.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_8.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_9.0.0.sql | 2 +- htdocs/accountancy/admin/account.php | 2 +- htdocs/accountancy/admin/accountmodel.php | 2 +- htdocs/accountancy/admin/fiscalyear.php | 2 +- htdocs/accountancy/admin/fiscalyear_card.php | 2 +- htdocs/accountancy/admin/fiscalyear_info.php | 2 +- htdocs/accountancy/bookkeeping/card.php | 2 +- .../thirdparty_lettering_customer.php | 4 +-- .../thirdparty_lettering_supplier.php | 4 +-- htdocs/accountancy/closure/index.php | 2 +- htdocs/accountancy/closure/validate.php | 2 +- htdocs/accountancy/customer/card.php | 2 +- htdocs/accountancy/customer/index.php | 2 +- htdocs/accountancy/customer/lines.php | 2 +- htdocs/accountancy/customer/list.php | 2 +- htdocs/accountancy/expensereport/card.php | 2 +- htdocs/accountancy/expensereport/index.php | 2 +- htdocs/accountancy/expensereport/lines.php | 2 +- htdocs/accountancy/expensereport/list.php | 2 +- htdocs/accountancy/index.php | 2 +- htdocs/accountancy/journal/bankjournal.php | 2 +- .../journal/expensereportsjournal.php | 2 +- .../accountancy/journal/purchasesjournal.php | 2 +- htdocs/accountancy/journal/sellsjournal.php | 2 +- htdocs/accountancy/supplier/card.php | 2 +- htdocs/accountancy/supplier/index.php | 2 +- htdocs/accountancy/supplier/lines.php | 2 +- htdocs/accountancy/supplier/list.php | 2 +- .../default/tpl/adherentcard_view.tpl.php | 2 +- htdocs/adherents/card.php | 2 +- .../adherents/class/adherentstats.class.php | 8 ++--- htdocs/adherents/ldap.php | 4 +-- htdocs/adherents/stats/byproperties.php | 4 +-- htdocs/adherents/stats/geo.php | 4 +-- htdocs/adherents/stats/index.php | 4 +-- htdocs/adherents/type_translation.php | 2 +- htdocs/admin/emailcollector_card.php | 4 +-- htdocs/admin/emailcollector_list.php | 4 +-- htdocs/admin/mails_senderprofile_list.php | 4 +-- htdocs/admin/tools/listevents.php | 4 +-- htdocs/admin/tools/listsessions.php | 4 +-- htdocs/asset/card.php | 4 +-- htdocs/asset/document.php | 4 +-- htdocs/asset/info.php | 2 +- htdocs/asset/list.php | 4 +-- htdocs/asset/note.php | 4 +-- htdocs/bom/bom_agenda.php | 4 +-- htdocs/bom/bom_card.php | 4 +-- htdocs/bom/bom_document.php | 4 +-- htdocs/bom/bom_list.php | 4 +-- htdocs/bom/bom_note.php | 4 +-- htdocs/categories/class/categorie.class.php | 4 +-- htdocs/categories/photos.php | 2 +- htdocs/categories/traduction.php | 2 +- htdocs/categories/viewcat.php | 2 +- htdocs/comm/action/card.php | 10 +++--- htdocs/comm/action/class/actioncomm.class.php | 6 ++-- htdocs/comm/action/document.php | 6 ++-- htdocs/comm/action/index.php | 4 +-- htdocs/comm/action/info.php | 6 ++-- htdocs/comm/action/list.php | 2 +- htdocs/comm/action/pertype.php | 2 +- htdocs/comm/action/peruser.php | 2 +- htdocs/comm/action/rapport/index.php | 2 +- htdocs/comm/card.php | 10 +++--- htdocs/comm/contact.php | 2 +- htdocs/comm/index.php | 8 ++--- htdocs/comm/mailing/advtargetemailing.php | 2 +- htdocs/comm/mailing/card.php | 2 +- htdocs/comm/mailing/cibles.php | 2 +- htdocs/comm/mailing/info.php | 2 +- htdocs/comm/multiprix.php | 4 +-- htdocs/comm/propal/card.php | 4 +-- htdocs/comm/propal/class/propal.class.php | 6 ++-- .../comm/propal/class/propalestats.class.php | 2 +- htdocs/comm/propal/contact.php | 2 +- htdocs/comm/propal/document.php | 4 +-- htdocs/comm/propal/index.php | 6 ++-- htdocs/comm/propal/info.php | 2 +- htdocs/comm/propal/list.php | 2 +- htdocs/comm/propal/note.php | 2 +- htdocs/comm/propal/stats/index.php | 10 +++--- htdocs/comm/prospect/index.php | 4 +-- htdocs/comm/prospect/recap-prospect.php | 4 +-- htdocs/comm/recap-client.php | 4 +-- htdocs/comm/remise.php | 6 ++-- htdocs/comm/remx.php | 6 ++-- htdocs/commande/card.php | 6 ++-- htdocs/commande/class/commande.class.php | 6 ++-- htdocs/commande/class/commandestats.class.php | 2 +- htdocs/commande/contact.php | 2 +- htdocs/commande/customer.php | 4 +-- htdocs/commande/document.php | 4 +-- htdocs/commande/index.php | 6 ++-- htdocs/commande/info.php | 2 +- htdocs/commande/list.php | 2 +- htdocs/commande/note.php | 2 +- htdocs/commande/orderstoinvoice.php | 4 +-- htdocs/commande/stats/index.php | 10 +++--- htdocs/compta/accounting-files.php | 2 +- htdocs/compta/bank/annuel.php | 2 +- htdocs/compta/bank/bankentries_list.php | 4 +-- htdocs/compta/bank/budget.php | 2 +- htdocs/compta/bank/class/account.class.php | 6 ++-- htdocs/compta/bank/document.php | 8 ++--- htdocs/compta/bank/graph.php | 2 +- htdocs/compta/bank/line.php | 2 +- htdocs/compta/bank/list.php | 2 +- htdocs/compta/bank/releve.php | 2 +- htdocs/compta/bank/treso.php | 2 +- htdocs/compta/bank/various_payment/card.php | 2 +- .../compta/bank/various_payment/document.php | 2 +- htdocs/compta/bank/various_payment/info.php | 2 +- htdocs/compta/bank/various_payment/list.php | 2 +- .../compta/cashcontrol/cashcontrol_list.php | 4 +-- htdocs/compta/charges/index.php | 2 +- htdocs/compta/clients.php | 4 +-- htdocs/compta/deplacement/card.php | 6 ++-- htdocs/compta/deplacement/document.php | 2 +- htdocs/compta/deplacement/index.php | 6 ++-- htdocs/compta/deplacement/info.php | 2 +- htdocs/compta/deplacement/list.php | 2 +- htdocs/compta/deplacement/stats/index.php | 8 ++--- htdocs/compta/facture/card.php | 8 ++--- htdocs/compta/facture/class/facture.class.php | 6 ++-- htdocs/compta/facture/contact.php | 2 +- htdocs/compta/facture/document.php | 4 +-- htdocs/compta/facture/fiche-rec.php | 4 +-- .../compta/facture/invoicetemplate_list.php | 2 +- htdocs/compta/facture/list.php | 2 +- htdocs/compta/facture/note.php | 2 +- htdocs/compta/facture/prelevement.php | 2 +- htdocs/compta/facture/stats/index.php | 6 ++-- htdocs/compta/index.php | 4 +-- htdocs/compta/journal/purchasesjournal.php | 2 +- htdocs/compta/journal/sellsjournal.php | 2 +- htdocs/compta/localtax/card.php | 2 +- htdocs/compta/localtax/clients.php | 2 +- htdocs/compta/localtax/index.php | 2 +- htdocs/compta/localtax/list.php | 2 +- htdocs/compta/localtax/quadri_detail.php | 2 +- htdocs/compta/paiement.php | 4 +-- htdocs/compta/paiement/card.php | 6 ++-- htdocs/compta/paiement/cheque/card.php | 6 ++-- .../cheque/class/remisecheque.class.php | 4 +-- htdocs/compta/paiement/cheque/index.php | 2 +- htdocs/compta/paiement/cheque/list.php | 2 +- htdocs/compta/paiement/index.php | 2 +- htdocs/compta/paiement/list.php | 2 +- htdocs/compta/paiement/rapport.php | 4 +-- htdocs/compta/paiement/tovalidate.php | 4 +-- htdocs/compta/paiement_charge.php | 4 +-- htdocs/compta/payment_sc/card.php | 4 +-- htdocs/compta/prelevement/bons.php | 2 +- htdocs/compta/prelevement/card.php | 2 +- htdocs/compta/prelevement/create.php | 2 +- htdocs/compta/prelevement/demandes.php | 2 +- htdocs/compta/prelevement/factures.php | 2 +- htdocs/compta/prelevement/fiche-rejet.php | 2 +- htdocs/compta/prelevement/fiche-stat.php | 2 +- htdocs/compta/prelevement/index.php | 2 +- htdocs/compta/prelevement/line.php | 2 +- htdocs/compta/prelevement/list.php | 2 +- htdocs/compta/prelevement/rejets.php | 2 +- htdocs/compta/prelevement/stats.php | 2 +- htdocs/compta/recap-compta.php | 4 +-- htdocs/compta/resultat/clientfourn.php | 2 +- htdocs/compta/resultat/index.php | 2 +- htdocs/compta/resultat/result.php | 2 +- htdocs/compta/sociales/card.php | 2 +- htdocs/compta/sociales/document.php | 2 +- htdocs/compta/sociales/info.php | 2 +- htdocs/compta/sociales/list.php | 2 +- htdocs/compta/sociales/payments.php | 2 +- htdocs/compta/stats/byratecountry.php | 2 +- htdocs/compta/stats/cabyprodserv.php | 2 +- htdocs/compta/stats/cabyuser.php | 2 +- htdocs/compta/stats/casoc.php | 2 +- htdocs/compta/stats/index.php | 2 +- htdocs/compta/tva/card.php | 2 +- htdocs/compta/tva/clients.php | 2 +- htdocs/compta/tva/document.php | 2 +- htdocs/compta/tva/index.php | 2 +- htdocs/compta/tva/info.php | 2 +- htdocs/compta/tva/list.php | 2 +- htdocs/compta/tva/quadri_detail.php | 2 +- htdocs/contact/agenda.php | 2 +- .../default/tpl/contactcard_view.tpl.php | 2 +- htdocs/contact/card.php | 2 +- htdocs/contact/class/contact.class.php | 4 +-- htdocs/contact/consumption.php | 2 +- htdocs/contact/document.php | 2 +- htdocs/contact/info.php | 2 +- htdocs/contact/ldap.php | 2 +- htdocs/contact/list.php | 2 +- htdocs/contact/note.php | 2 +- htdocs/contact/perso.php | 4 +-- htdocs/contrat/agenda.php | 2 +- htdocs/contrat/card.php | 8 ++--- htdocs/contrat/class/contrat.class.php | 8 ++--- htdocs/contrat/contact.php | 2 +- htdocs/contrat/document.php | 4 +-- htdocs/contrat/index.php | 6 ++-- htdocs/contrat/list.php | 2 +- htdocs/contrat/note.php | 2 +- htdocs/contrat/services_list.php | 2 +- htdocs/core/ajax/ajaxdirpreview.php | 2 +- htdocs/core/ajax/objectonoff.php | 4 +-- htdocs/core/ajax/pingresult.php | 4 +-- htdocs/core/boxes/box_actions.php | 6 ++-- htdocs/core/boxes/box_activity.php | 20 +++++------ htdocs/core/boxes/box_clients.php | 6 ++-- htdocs/core/boxes/box_commandes.php | 6 ++-- htdocs/core/boxes/box_comptes.php | 2 +- htdocs/core/boxes/box_contacts.php | 6 ++-- htdocs/core/boxes/box_contracts.php | 6 ++-- htdocs/core/boxes/box_factures.php | 6 ++-- htdocs/core/boxes/box_factures_fourn.php | 6 ++-- htdocs/core/boxes/box_factures_fourn_imp.php | 6 ++-- htdocs/core/boxes/box_factures_imp.php | 6 ++-- htdocs/core/boxes/box_ficheinter.php | 4 +-- htdocs/core/boxes/box_fournisseurs.php | 6 ++-- .../boxes/box_graph_invoices_permonth.php | 2 +- .../box_graph_invoices_supplier_permonth.php | 2 +- .../core/boxes/box_graph_orders_permonth.php | 2 +- .../box_graph_orders_supplier_permonth.php | 2 +- .../boxes/box_graph_product_distribution.php | 2 +- .../boxes/box_graph_propales_permonth.php | 2 +- .../core/boxes/box_last_modified_ticket.php | 6 ++-- htdocs/core/boxes/box_last_ticket.php | 6 ++-- htdocs/core/boxes/box_members.php | 2 +- htdocs/core/boxes/box_produits.php | 2 +- .../core/boxes/box_produits_alerte_stock.php | 2 +- htdocs/core/boxes/box_project.php | 2 +- htdocs/core/boxes/box_propales.php | 6 ++-- htdocs/core/boxes/box_prospect.php | 6 ++-- htdocs/core/boxes/box_services_contracts.php | 4 +-- htdocs/core/boxes/box_services_expired.php | 6 ++-- htdocs/core/boxes/box_supplier_orders.php | 6 ++-- htdocs/core/boxes/modules_boxes.php | 2 +- htdocs/core/class/commonobject.class.php | 2 +- htdocs/core/class/html.form.class.php | 2 +- htdocs/core/class/html.formmargin.class.php | 2 +- htdocs/core/get_menudiv.php | 4 +-- htdocs/core/lib/company.lib.php | 2 +- htdocs/core/lib/security.lib.php | 2 +- htdocs/core/lib/usergroups.lib.php | 4 +-- htdocs/core/menus/standard/auguria.lib.php | 2 +- htdocs/core/menus/standard/eldy.lib.php | 2 +- htdocs/core/modules/modMargin.class.php | 2 +- .../modules/rapport/pdf_paiement.class.php | 2 +- htdocs/core/tools.php | 2 +- htdocs/core/tpl/notes.tpl.php | 2 +- htdocs/core/tpl/objectline_title.tpl.php | 2 +- htdocs/core/tpl/objectline_view.tpl.php | 2 +- htdocs/document.php | 6 ++-- htdocs/don/card.php | 2 +- htdocs/don/document.php | 2 +- htdocs/don/info.php | 2 +- htdocs/don/note.php | 2 +- htdocs/don/payment/card.php | 4 +-- htdocs/don/payment/payment.php | 6 ++-- htdocs/don/stats/index.php | 10 +++--- htdocs/ecm/dir_add_card.php | 4 +-- htdocs/ecm/file_card.php | 4 +-- htdocs/ecm/index.php | 2 +- htdocs/ecm/index_auto.php | 2 +- htdocs/ecm/search.php | 2 +- htdocs/expedition/card.php | 6 ++-- htdocs/expedition/contact.php | 2 +- htdocs/expedition/document.php | 4 +-- htdocs/expedition/list.php | 2 +- htdocs/expedition/note.php | 2 +- htdocs/expedition/shipment.php | 4 +-- htdocs/expedition/stats/index.php | 10 +++--- htdocs/expensereport/card.php | 4 +-- .../class/expensereport.class.php | 2 +- htdocs/expensereport/document.php | 2 +- htdocs/expensereport/index.php | 6 ++-- htdocs/expensereport/info.php | 2 +- htdocs/expensereport/list.php | 2 +- htdocs/expensereport/note.php | 2 +- htdocs/expensereport/payment/card.php | 2 +- htdocs/expensereport/payment/payment.php | 4 +-- htdocs/expensereport/stats/index.php | 8 ++--- htdocs/fichinter/card-rec.php | 2 +- htdocs/fichinter/card.php | 6 ++-- htdocs/fichinter/class/fichinter.class.php | 2 +- .../fichinter/class/fichinterstats.class.php | 2 +- htdocs/fichinter/contact.php | 2 +- htdocs/fichinter/document.php | 2 +- htdocs/fichinter/index.php | 6 ++-- htdocs/fichinter/info.php | 2 +- htdocs/fichinter/list.php | 2 +- htdocs/fichinter/note.php | 2 +- htdocs/fichinter/stats/index.php | 10 +++--- htdocs/fourn/card.php | 8 ++--- htdocs/fourn/class/fournisseur.class.php | 6 ++-- .../class/fournisseur.commande.class.php | 6 ++-- .../fourn/class/fournisseur.facture.class.php | 8 ++--- htdocs/fourn/commande/card.php | 4 +-- htdocs/fourn/commande/contact.php | 2 +- htdocs/fourn/commande/dispatch.php | 4 +-- htdocs/fourn/commande/document.php | 2 +- htdocs/fourn/commande/index.php | 6 ++-- htdocs/fourn/commande/info.php | 2 +- htdocs/fourn/commande/list.php | 2 +- htdocs/fourn/commande/note.php | 2 +- htdocs/fourn/commande/orderstoinvoice.php | 6 ++-- htdocs/fourn/contact.php | 4 +-- htdocs/fourn/facture/card.php | 8 ++--- htdocs/fourn/facture/contact.php | 2 +- htdocs/fourn/facture/document.php | 2 +- htdocs/fourn/facture/impayees.php | 4 +-- htdocs/fourn/facture/info.php | 2 +- htdocs/fourn/facture/list.php | 4 +-- htdocs/fourn/facture/note.php | 2 +- htdocs/fourn/facture/paiement.php | 4 +-- htdocs/fourn/facture/rapport.php | 6 ++-- htdocs/fourn/index.php | 2 +- htdocs/fourn/paiement/card.php | 4 +-- htdocs/fourn/product/list.php | 2 +- htdocs/fourn/recap-fourn.php | 6 ++-- htdocs/ftp/index.php | 2 +- htdocs/holiday/card.php | 2 +- htdocs/holiday/class/holiday.class.php | 2 +- htdocs/holiday/define_holiday.php | 2 +- htdocs/holiday/document.php | 2 +- htdocs/holiday/list.php | 6 ++-- htdocs/holiday/month_report.php | 4 +-- htdocs/holiday/view_log.php | 2 +- htdocs/hrm/index.php | 12 +++---- htdocs/imports/index.php | 2 +- htdocs/index.php | 10 +++--- htdocs/livraison/card.php | 4 +-- htdocs/loan/card.php | 2 +- htdocs/loan/document.php | 2 +- htdocs/loan/info.php | 2 +- htdocs/loan/list.php | 2 +- htdocs/loan/payment/card.php | 4 +-- htdocs/loan/payment/payment.php | 4 +-- htdocs/main.inc.php | 4 +-- htdocs/margin/customerMargins.php | 2 +- htdocs/margin/productMargins.php | 2 +- htdocs/margin/tabs/productMargins.php | 4 +-- htdocs/margin/tabs/thirdpartyMargins.php | 4 +-- .../modulebuilder/template/mymoduleindex.php | 4 +-- .../template/myobject_agenda.php | 4 +-- .../modulebuilder/template/myobject_card.php | 4 +-- .../template/myobject_document.php | 4 +-- .../modulebuilder/template/myobject_list.php | 4 +-- .../modulebuilder/template/myobject_note.php | 4 +-- htdocs/mrp/mo_agenda.php | 4 +-- htdocs/mrp/mo_card.php | 4 +-- htdocs/mrp/mo_document.php | 4 +-- htdocs/mrp/mo_list.php | 4 +-- htdocs/mrp/mo_note.php | 4 +-- htdocs/mrp/mo_production.php | 4 +-- htdocs/product/agenda.php | 4 +-- .../canvas/product/tpl/card_view.tpl.php | 2 +- .../canvas/service/tpl/card_view.tpl.php | 2 +- htdocs/product/card.php | 4 +-- htdocs/product/class/api_products.class.php | 2 +- htdocs/product/composition/card.php | 4 +-- htdocs/product/document.php | 4 +-- htdocs/product/fournisseurs.php | 4 +-- htdocs/product/inventory/card.php | 4 +-- htdocs/product/inventory/inventory.php | 4 +-- htdocs/product/inventory/list.php | 4 +-- htdocs/product/note.php | 4 +-- htdocs/product/popuprop.php | 2 +- htdocs/product/price.php | 4 +-- htdocs/product/reassort.php | 2 +- htdocs/product/reassortlot.php | 2 +- htdocs/product/stats/card.php | 4 +-- htdocs/product/stats/commande.php | 4 +-- htdocs/product/stats/commande_fournisseur.php | 6 ++-- htdocs/product/stats/contrat.php | 4 +-- htdocs/product/stats/facture.php | 4 +-- htdocs/product/stats/facture_fournisseur.php | 4 +-- htdocs/product/stats/propal.php | 4 +-- htdocs/product/stats/supplier_proposal.php | 4 +-- htdocs/product/stock/card.php | 2 +- htdocs/product/stock/info.php | 2 +- htdocs/product/stock/massstockmove.php | 4 +-- htdocs/product/stock/movement_card.php | 2 +- htdocs/product/stock/movement_list.php | 2 +- htdocs/product/stock/product.php | 4 +-- htdocs/product/stock/productlot_card.php | 4 +-- htdocs/product/stock/productlot_document.php | 4 +-- htdocs/product/stock/productlot_list.php | 4 +-- htdocs/product/stock/replenish.php | 4 +-- htdocs/product/stock/replenishorders.php | 2 +- htdocs/product/traduction.php | 4 +-- htdocs/projet/activity/index.php | 2 +- htdocs/projet/activity/perday.php | 2 +- htdocs/projet/activity/perweek.php | 2 +- htdocs/projet/card.php | 2 +- htdocs/projet/class/project.class.php | 6 ++-- htdocs/projet/class/task.class.php | 4 +-- htdocs/projet/comment.php | 2 +- htdocs/projet/contact.php | 2 +- htdocs/projet/document.php | 2 +- htdocs/projet/element.php | 2 +- htdocs/projet/ganttview.php | 2 +- htdocs/projet/index.php | 2 +- htdocs/projet/info.php | 2 +- htdocs/projet/list.php | 2 +- htdocs/projet/note.php | 2 +- htdocs/projet/stats/index.php | 4 +-- htdocs/projet/tasks.php | 2 +- htdocs/projet/tasks/comment.php | 2 +- htdocs/projet/tasks/contact.php | 2 +- htdocs/projet/tasks/document.php | 2 +- htdocs/projet/tasks/list.php | 2 +- htdocs/projet/tasks/note.php | 2 +- htdocs/projet/tasks/stats/index.php | 4 +-- htdocs/projet/tasks/task.php | 2 +- htdocs/projet/tasks/time.php | 2 +- htdocs/public/ticket/create_ticket.php | 2 +- htdocs/reception/card.php | 6 ++-- htdocs/reception/contact.php | 2 +- htdocs/reception/list.php | 2 +- htdocs/reception/note.php | 2 +- htdocs/reception/stats/index.php | 10 +++--- htdocs/resource/agenda.php | 4 +-- htdocs/resource/contact.php | 2 +- htdocs/resource/document.php | 2 +- htdocs/resource/element_resource.php | 6 ++-- htdocs/resource/note.php | 2 +- htdocs/salaries/card.php | 2 +- htdocs/salaries/document.php | 2 +- htdocs/salaries/info.php | 2 +- htdocs/salaries/list.php | 2 +- htdocs/salaries/stats/index.php | 2 +- htdocs/societe/agenda.php | 4 +-- .../canvas/actions_card_common.class.php | 2 +- htdocs/societe/card.php | 4 +-- htdocs/societe/class/client.class.php | 2 +- htdocs/societe/class/societe.class.php | 2 +- htdocs/societe/consumption.php | 4 +-- htdocs/societe/contact.php | 4 +-- htdocs/societe/document.php | 6 ++-- htdocs/societe/index.php | 2 +- htdocs/societe/list.php | 2 +- htdocs/societe/note.php | 4 +-- htdocs/societe/notify/card.php | 4 +-- htdocs/societe/paymentmodes.php | 12 +++---- htdocs/societe/price.php | 6 ++-- htdocs/societe/project.php | 4 +-- htdocs/societe/societecontact.php | 4 +-- htdocs/societe/website.php | 4 +-- htdocs/stripe/charge.php | 2 +- htdocs/stripe/payment.php | 4 +-- htdocs/stripe/payout.php | 2 +- htdocs/stripe/transaction.php | 2 +- htdocs/supplier_proposal/card.php | 2 +- htdocs/supplier_proposal/contact.php | 2 +- htdocs/supplier_proposal/document.php | 4 +-- htdocs/supplier_proposal/index.php | 6 ++-- htdocs/supplier_proposal/info.php | 2 +- htdocs/supplier_proposal/list.php | 2 +- htdocs/supplier_proposal/note.php | 2 +- htdocs/ticket/agenda.php | 18 +++++----- htdocs/ticket/card.php | 34 +++++++++---------- htdocs/ticket/contact.php | 16 ++++----- htdocs/ticket/document.php | 12 +++---- htdocs/ticket/index.php | 12 +++---- htdocs/ticket/list.php | 4 +-- htdocs/ticket/messaging.php | 8 ++--- htdocs/ticket/stats/index.php | 10 +++--- htdocs/user/agenda_extsites.php | 2 +- htdocs/user/bank.php | 2 +- htdocs/user/card.php | 2 +- htdocs/user/clicktodial.php | 2 +- htdocs/user/document.php | 2 +- htdocs/user/group/ldap.php | 2 +- htdocs/user/hierarchy.php | 4 +-- htdocs/user/home.php | 2 +- htdocs/user/info.php | 2 +- htdocs/user/ldap.php | 2 +- htdocs/user/list.php | 4 +-- htdocs/user/note.php | 2 +- htdocs/user/notify/card.php | 2 +- htdocs/user/param_ihm.php | 2 +- htdocs/user/perms.php | 4 +-- htdocs/variants/combinations.php | 2 +- htdocs/variants/generator.php | 2 +- htdocs/viewimage.php | 4 +-- htdocs/webservices/server_user.php | 2 +- htdocs/website/websiteaccount_card.php | 4 +-- htdocs/zapier/class/api_zapier.class.php | 2 +- htdocs/zapier/hook_agenda.php | 4 +-- htdocs/zapier/hook_card.php | 4 +-- htdocs/zapier/hook_document.php | 4 +-- htdocs/zapier/hook_list.php | 4 +-- htdocs/zapier/hook_note.php | 4 +-- htdocs/zapier/zapierindex.php | 4 +-- 506 files changed, 887 insertions(+), 887 deletions(-) diff --git a/dev/initdemo/mysqldump_dolibarr_10.0.0.sql b/dev/initdemo/mysqldump_dolibarr_10.0.0.sql index fccb966c1a5..f8d57734ca6 100644 --- a/dev/initdemo/mysqldump_dolibarr_10.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_10.0.0.sql @@ -3910,7 +3910,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2012-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2012-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2012-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2012-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2012-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2012-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2012-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2012-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2012-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2012-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2012-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2012-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2012-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2012-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2012-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2012-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2012-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2012-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2012-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2012-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2012-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2012-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2012-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2012-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2012-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2012-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2012-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2012-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2012-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2012-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2012-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2012-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2012-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2012-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2012-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2012-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2012-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2012-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2012-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2012-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2012-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2012-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2012-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2012-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2012-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2012-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2015-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2012-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2012-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2012-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2012-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2012-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2012-07-08 11:29:33'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2012-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2012-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2012-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2012-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2012-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2012-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2012-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2012-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2012-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2012-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2012-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2012-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2012-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2012-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2012-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2012-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2012-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2012-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2012-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2012-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2012-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2012-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2012-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2012-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2012-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2012-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2012-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2013-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2013-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2013-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2013-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2013-07-29 20:50:02'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2013-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2013-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2013-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2014-12-08 13:11:02'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2014-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2014-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2014-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2015-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2014-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2015-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2014-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2014-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2014-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2014-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2014-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2014-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2014-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2014-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2014-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2014-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2014-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2014-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2014-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2014-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2014-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2014-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2014-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2015-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2015-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2015-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2015-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2015-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2015-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2015-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2015-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2015-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2015-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2015-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2015-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2015-01-19 17:01:53'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2015-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2015-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2015-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2015-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2015-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2015-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2015-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2015-02-12 16:22:55'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2015-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2015-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2015-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2015-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2015-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2015-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2015-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2015-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2015-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2015-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2015-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2015-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2015-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2015-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2015-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2015-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2015-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2015-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2015-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2015-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2015-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2015-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2015-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2015-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2015-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2015-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2015-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2015-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2015-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2015-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2015-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2015-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2015-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2015-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2015-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2015-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2015-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2015-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2015-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2015-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2015-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2015-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2015-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2015-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2015-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2015-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2015-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2015-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2015-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2015-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2015-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2015-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2015-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2015-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2015-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2015-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2015-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2015-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2015-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2015-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2016-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2016-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2016-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2016-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2016-12-21 12:51:28'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2017-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2017-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2017-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2017-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2017-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2017-11-15 22:38:28'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2017-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2017-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2017-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2017-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2017-11-15 22:39:05'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2017-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2017-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2017-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2017-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2017-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2018-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2018-01-16 15:49:46'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2018-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2018-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2018-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2018-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2018-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2018-01-22 17:33:49'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2018-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2018-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2018-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2018-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2018-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2018-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2018-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2018-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2018-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2018-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2018-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2018-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2018-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2018-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2018-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2018-07-30 16:32:20'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2018-07-31 21:14:32'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6632,'MAIN_MODULE_TICKET',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:15:29'),(6633,'MAIN_MODULE_TICKET_TABS_0',1,'thirdparty:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?socid=__ID__','chaine',0,NULL,'2019-06-05 09:15:29'),(6634,'MAIN_MODULE_TICKET_TABS_1',1,'project:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?projectid=__ID__','chaine',0,NULL,'2019-06-05 09:15:29'),(6635,'MAIN_MODULE_TICKET_TRIGGERS',1,'1','chaine',0,NULL,'2019-06-05 09:15:29'),(6636,'MAIN_MODULE_TICKET_MODELS',1,'1','chaine',0,NULL,'2019-06-05 09:15:29'),(6638,'MAIN_MODULE_TAKEPOS',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:15:58'),(6639,'MAIN_MODULE_TAKEPOS_TRIGGERS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6640,'MAIN_MODULE_TAKEPOS_LOGIN',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6641,'MAIN_MODULE_TAKEPOS_SUBSTITUTIONS',1,'1','chaine',0,NULL,'2019-06-05 09:15:58'),(6642,'MAIN_MODULE_TAKEPOS_MENUS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6643,'MAIN_MODULE_TAKEPOS_THEME',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6644,'MAIN_MODULE_TAKEPOS_TPL',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6645,'MAIN_MODULE_TAKEPOS_BARCODE',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6646,'MAIN_MODULE_TAKEPOS_MODELS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6647,'MAIN_MODULE_SOCIALNETWORKS',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:16:49'),(6648,'MAIN_MODULE_CASHDESK',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:17:21'),(6649,'MAIN_MODULE_ACCOUNTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6650,'MAIN_MODULE_AGENDA',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6651,'MAIN_MODULE_BARCODE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6652,'MAIN_MODULE_CRON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6653,'MAIN_MODULE_COMMANDE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6654,'MAIN_MODULE_DON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6655,'MAIN_MODULE_ECM',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6656,'MAIN_MODULE_FACTURE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6657,'MAIN_MODULE_FOURNISSEUR',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6658,'MAIN_MODULE_HOLIDAY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6659,'MAIN_MODULE_OPENSURVEY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6660,'MAIN_MODULE_PRINTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6661,'MAIN_MODULE_SALARIES',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6662,'MAIN_MODULE_SYSLOG',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6663,'MAIN_MODULE_SOCIETE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6664,'MAIN_MODULE_SERVICE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6665,'MAIN_MODULE_USER',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6666,'MAIN_MODULE_VARIANTS',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6667,'MAIN_VERSION_LAST_UPGRADE',0,'10.0.2','chaine',0,'Dolibarr version for last upgrade','2019-09-26 11:33:26'),(6755,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6756,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6757,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6758,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6762,'MAIN_INFO_ACCOUNTANT_NAME',1,'Bob Bookeeper','chaine',0,'','2019-09-26 12:01:37'),(6763,'MAIN_INFO_ACCOUNTANT_TOWN',1,'Berlin','chaine',0,'','2019-09-26 12:01:37'),(6764,'MAIN_INFO_ACCOUNTANT_STATE',1,'0','chaine',0,'','2019-09-26 12:01:37'),(6765,'MAIN_INFO_ACCOUNTANT_COUNTRY',1,'5','chaine',0,'','2019-09-26 12:01:37'),(6795,'TICKET_ADDON',1,'mod_ticket_simple','chaine',0,'','2019-09-26 12:07:59'),(6796,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_elephant','chaine',0,'','2019-09-26 12:59:00'),(6800,'CASHDESK_ID_THIRDPARTY1',1,'7','chaine',0,'','2019-09-26 15:30:09'),(6801,'CASHDESK_ID_BANKACCOUNT_CASH1',1,'3','chaine',0,'','2019-09-26 15:30:09'),(6802,'CASHDESK_ID_BANKACCOUNT_CHEQUE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6803,'CASHDESK_ID_BANKACCOUNT_CB1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6804,'CASHDESK_ID_BANKACCOUNT_PRE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6805,'CASHDESK_ID_BANKACCOUNT_VIR1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6806,'CASHDESK_NO_DECREASE_STOCK1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6807,'MAIN_MODULE_FORCEPROJECT',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-09-27 14:52:52'),(6808,'MAIN_MODULE_FORCEPROJECT_TRIGGERS',1,'1','chaine',0,NULL,'2019-09-27 14:52:52'),(6809,'MAIN_MODULE_FORCEPROJECT_SUBSTITUTIONS',1,'0','chaine',0,NULL,'2019-09-27 14:52:52'),(6810,'MAIN_MODULE_FORCEPROJECT_MODELS',1,'1','chaine',0,NULL,'2019-09-27 14:52:52'),(6811,'FORCEPROJECT_ON_PROPOSAL',1,'1','chaine',0,'','2019-09-27 14:52:57'),(6812,'MAIN_MODULE_WEBSITE',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-09-30 15:49:22'),(6813,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2019-10-01 11:48:09'),(6814,'PACKTHEMEACTIVATEDTHEME',0,'modOwnTheme','chaine',0,'','2019-10-02 11:41:58'),(6815,'OWNTHEME_COL1',0,'#6a89cc','chaine',0,'','2019-10-02 11:41:58'),(6816,'OWNTHEME_COL2',0,'#60a3bc','chaine',0,'','2019-10-02 11:41:58'),(6817,'DOL_VERSION',0,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:41:58'),(6823,'OWNTHEME_COL_BODY_BCKGRD',0,'#E9E9E9','chaine',0,'','2019-10-02 11:41:58'),(6824,'OWNTHEME_COL_LOGO_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6825,'OWNTHEME_COL_TXT_MENU',0,'#b8c6e5','chaine',0,'','2019-10-02 11:41:58'),(6826,'OWNTHEME_COL_HEADER_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6827,'OWNTHEME_CUSTOM_CSS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6828,'OWNTHEME_CUSTOM_JS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6829,'OWNTHEME_FIXED_MENU',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6830,'OWNTHEME_D_HEADER_FONT_SIZE',0,'1.7rem','chaine',0,'','2019-10-02 11:41:58'),(6831,'OWNTHEME_S_HEADER_FONT_SIZE',0,'1.6rem','chaine',0,'','2019-10-02 11:41:58'),(6832,'OWNTHEME_D_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6833,'OWNTHEME_S_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6844,'MAIN_THEME',0,'eldy','chaine',0,'','2019-10-02 11:46:02'),(6845,'MAIN_MENU_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6846,'MAIN_MENUFRONT_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6847,'MAIN_MENU_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6848,'MAIN_MENUFRONT_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6849,'MAIN_UPLOAD_DOC',1,'20000','chaine',0,'','2019-10-02 11:46:54'),(6850,'MAIN_UMASK',1,'0664','chaine',0,'','2019-10-02 11:46:54'),(6851,'BECREATIVE_COL1',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6852,'BECREATIVE_COL2',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6853,'DOL_VERSION',1,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:47:10'),(6859,'BECREATIVE_COL_BODY_BCKGRD',1,'#e6eaef','chaine',0,'','2019-10-02 11:47:10'),(6860,'BECREATIVE_COL_LOGO_BCKGRD',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6861,'BECREATIVE_COL_TXT_MENU',1,'#b8c6e5','chaine',0,'','2019-10-02 11:47:10'),(6862,'BECREATIVE_COL_HEADER_BCKGRD',1,'#26a69a','chaine',0,'','2019-10-02 11:47:10'),(6863,'BECREATIVE_CUSTOM_CSS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6864,'BECREATIVE_CUSTOM_JS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6865,'BECREATIVE_FIXED_MENU',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6866,'BECREATIVE_D_HEADER_FONT_SIZE',1,'1.7rem','chaine',0,'','2019-10-02 11:47:10'),(6867,'BECREATIVE_S_HEADER_FONT_SIZE',1,'1.6rem','chaine',0,'','2019-10-02 11:47:10'),(6868,'BECREATIVE_D_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6869,'BECREATIVE_S_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6880,'MAIN_THEME',1,'eldy','chaine',0,'','2019-10-02 11:48:49'),(6881,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6882,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6883,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6884,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6885,'ACCOUNTING_ACCOUNT_CUSTOMER',1,'411','chaine',0,'','2019-10-04 08:15:44'),(6886,'ACCOUNTING_ACCOUNT_SUPPLIER',1,'401','chaine',0,'','2019-10-04 08:15:44'),(6887,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,'','2019-10-04 08:15:44'),(6888,'ACCOUNTING_PRODUCT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6889,'ACCOUNTING_PRODUCT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6890,'ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6891,'ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6892,'ACCOUNTING_SERVICE_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6893,'ACCOUNTING_SERVICE_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6894,'ACCOUNTING_VAT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6895,'ACCOUNTING_VAT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6896,'ACCOUNTING_VAT_PAY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6897,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,'','2019-10-04 08:15:44'),(6898,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,'','2019-10-04 08:15:44'),(6899,'DONATION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6900,'ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6901,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,'','2019-10-04 08:15:44'),(6902,'LOAN_ACCOUNTING_ACCOUNT_INTEREST',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6903,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6912,'TICKET_ENABLE_PUBLIC_INTERFACE',1,'1','chaine',0,'','2019-10-04 11:44:33'),(6934,'TICKET_NOTIFICATION_EMAIL_FROM',1,'fff','chaine',0,'','2019-10-04 12:03:51'),(6935,'TICKET_NOTIFICATION_EMAIL_TO',1,'ff','chaine',0,'','2019-10-04 12:03:51'),(6936,'TICKET_MESSAGE_MAIL_INTRO',1,'Hello,
    \r\nA new response was sent on a ticket that you contact. Here is the message:\"\"','chaine',0,'','2019-10-04 12:03:51'),(6937,'TICKET_MESSAGE_MAIL_SIGNATURE',1,'

    Sincerely,

    \r\n\r\n

    --\"\"

    \r\n','chaine',0,'','2019-10-04 12:03:51'),(6943,'TICKET_PUBLIC_INTERFACE_TOPIC',1,'ddd','chaine',0,'','2019-10-04 14:57:20'),(6944,'TICKET_PUBLIC_TEXT_HOME',1,'You can create a support ticket or view existing from its identifier tracking ticket.','chaine',0,'','2019-10-04 14:57:20'),(6945,'TICKET_PUBLIC_TEXT_HELP_MESSAGE',1,'Please accurately describe the problem. Provide the most information possible to allow us to correctly identify your request.','chaine',0,'','2019-10-04 14:57:20'),(6946,'TICKET_MESSAGE_MAIL_NEW',1,'TicketMessageMailNewText','chaine',0,'','2019-10-04 14:57:20'),(6947,'TICKET_URL_PUBLIC_INTERFACE',1,'aa','chaine',0,'','2019-10-04 14:57:20'),(7000,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2019-10-07 10:11:55'),(7001,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2019-10-07 10:11:55'),(7002,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2019-10-07 10:11:55'),(7003,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2019-10-07 10:11:55'),(7004,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2019-10-07 10:11:55'),(7005,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2019-10-07 10:11:55'),(7006,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2019-10-07 10:11:55'),(7007,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2019-10-07 10:11:55'),(7008,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2019-10-07 10:11:55'),(7009,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2019-10-07 10:11:55'),(7010,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2019-10-07 10:11:55'),(7011,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2019-10-07 10:11:55'),(7012,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2019-10-07 10:11:55'),(7013,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2019-10-07 10:11:55'),(7014,'MAIN_INFO_GDPR',1,'Zack Zeceo','chaine',0,'','2019-10-07 10:11:55'),(7015,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2019-10-07 10:11:55'),(7016,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2019-10-07 10:11:55'),(7017,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2019-10-07 10:11:55'),(7018,'MAIN_INFO_SIRET',1,'ABC-DEF','chaine',0,'','2019-10-07 10:11:55'),(7019,'MAIN_INFO_APE',1,'15E-45-8D','chaine',0,'','2019-10-07 10:11:55'),(7020,'MAIN_INFO_TVAINTRA',1,'FR12345678','chaine',0,'','2019-10-07 10:11:55'),(7021,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2019-10-07 10:11:55'),(7022,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2019-10-07 10:11:55'),(7023,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2019-10-07 10:11:55'),(7027,'USER_PASSWORD_GENERATED',1,'Perso','chaine',0,'','2019-10-07 10:52:46'),(7028,'USER_PASSWORD_PATTERN',1,'8;1;0;1;0;1','chaine',0,'','2019-10-07 10:57:03'),(7030,'MAIN_FEATURES_LEVEL',0,'1','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2019-10-08 13:29:42'),(7031,'MAIN_USE_NEW_TITLE_BUTTON',1,'0','chaine',1,'','2019-10-08 18:45:05'),(7032,'MAIN_MODULE_BOM',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:49:41'),(7033,'BOM_ADDON_PDF',1,'avalue','chaine',0,'Name of PDF model of BOM','2019-10-08 18:49:41'),(7034,'BOM_ADDON',1,'mod_bom_standard','chaine',0,'Name of numbering rules of BOM','2019-10-08 18:49:41'),(7035,'BOM_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/boms','chaine',0,NULL,'2019-10-08 18:49:41'),(7036,'MAIN_MODULE_GEOIPMAXMIND',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:51:54'),(7037,'MAIN_MODULE_DAV',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:54:07'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2012-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2012-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2012-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2012-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2012-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2012-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2012-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2012-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2012-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2012-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2012-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2012-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2012-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2012-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2012-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2012-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2012-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2012-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2012-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2012-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2012-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2012-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2012-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2012-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2012-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2012-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2012-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2012-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2012-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2012-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2012-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2012-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2012-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2012-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2012-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2012-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2012-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2012-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2012-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2012-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2012-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2012-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2012-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2012-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2012-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2012-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2015-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2012-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2012-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2012-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2012-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2012-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2012-07-08 11:29:33'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2012-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2012-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2012-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2012-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2012-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2012-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2012-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2012-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2012-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2012-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2012-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2012-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2012-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2012-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2012-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2012-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2012-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2012-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2012-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2012-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2012-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2012-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2012-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2012-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2012-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2012-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2012-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2013-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2013-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2013-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2013-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2013-07-29 20:50:02'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2013-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2013-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2013-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2014-12-08 13:11:02'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2014-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2014-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2014-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2015-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2014-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2015-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2014-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2014-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2014-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2014-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2014-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2014-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2014-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2014-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2014-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2014-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2014-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2014-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2014-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2014-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2014-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2014-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2014-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2015-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2015-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2015-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2015-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2015-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2015-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2015-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2015-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2015-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2015-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2015-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2015-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2015-01-19 17:01:53'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2015-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2015-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2015-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2015-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2015-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2015-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2015-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2015-02-12 16:22:55'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2015-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2015-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2015-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2015-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2015-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2015-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2015-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2015-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2015-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2015-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2015-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2015-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2015-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2015-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2015-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2015-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2015-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2015-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2015-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2015-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2015-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2015-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2015-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2015-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2015-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2015-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2015-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2015-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2015-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2015-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2015-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2015-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2015-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2015-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2015-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2015-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2015-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2015-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2015-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2015-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2015-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2015-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2015-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2015-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2015-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2015-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2015-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2015-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2015-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2015-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2015-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2015-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2015-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2015-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2015-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2015-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2015-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2015-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2015-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2015-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2016-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2016-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2016-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2016-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2016-12-21 12:51:28'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2017-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2017-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2017-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2017-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2017-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2017-11-15 22:38:28'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2017-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2017-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2017-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2017-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2017-11-15 22:39:05'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2017-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2017-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2017-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2017-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2017-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2018-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2018-01-16 15:49:46'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2018-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2018-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2018-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2018-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2018-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2018-01-22 17:33:49'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2018-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2018-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2018-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2018-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2018-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2018-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2018-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2018-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2018-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2018-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2018-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2018-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2018-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2018-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2018-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2018-07-30 16:32:20'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2018-07-31 21:14:32'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6632,'MAIN_MODULE_TICKET',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:15:29'),(6633,'MAIN_MODULE_TICKET_TABS_0',1,'thirdparty:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?socid=__ID__','chaine',0,NULL,'2019-06-05 09:15:29'),(6634,'MAIN_MODULE_TICKET_TABS_1',1,'project:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?projectid=__ID__','chaine',0,NULL,'2019-06-05 09:15:29'),(6635,'MAIN_MODULE_TICKET_TRIGGERS',1,'1','chaine',0,NULL,'2019-06-05 09:15:29'),(6636,'MAIN_MODULE_TICKET_MODELS',1,'1','chaine',0,NULL,'2019-06-05 09:15:29'),(6638,'MAIN_MODULE_TAKEPOS',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:15:58'),(6639,'MAIN_MODULE_TAKEPOS_TRIGGERS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6640,'MAIN_MODULE_TAKEPOS_LOGIN',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6641,'MAIN_MODULE_TAKEPOS_SUBSTITUTIONS',1,'1','chaine',0,NULL,'2019-06-05 09:15:58'),(6642,'MAIN_MODULE_TAKEPOS_MENUS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6643,'MAIN_MODULE_TAKEPOS_THEME',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6644,'MAIN_MODULE_TAKEPOS_TPL',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6645,'MAIN_MODULE_TAKEPOS_BARCODE',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6646,'MAIN_MODULE_TAKEPOS_MODELS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6647,'MAIN_MODULE_SOCIALNETWORKS',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:16:49'),(6648,'MAIN_MODULE_CASHDESK',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:17:21'),(6649,'MAIN_MODULE_ACCOUNTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6650,'MAIN_MODULE_AGENDA',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6651,'MAIN_MODULE_BARCODE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6652,'MAIN_MODULE_CRON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6653,'MAIN_MODULE_COMMANDE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6654,'MAIN_MODULE_DON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6655,'MAIN_MODULE_ECM',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6656,'MAIN_MODULE_FACTURE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6657,'MAIN_MODULE_FOURNISSEUR',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6658,'MAIN_MODULE_HOLIDAY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6659,'MAIN_MODULE_OPENSURVEY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6660,'MAIN_MODULE_PRINTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6661,'MAIN_MODULE_SALARIES',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6662,'MAIN_MODULE_SYSLOG',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6663,'MAIN_MODULE_SOCIETE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6664,'MAIN_MODULE_SERVICE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6665,'MAIN_MODULE_USER',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6666,'MAIN_MODULE_VARIANTS',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6667,'MAIN_VERSION_LAST_UPGRADE',0,'10.0.2','chaine',0,'Dolibarr version for last upgrade','2019-09-26 11:33:26'),(6755,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6756,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6757,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6758,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6762,'MAIN_INFO_ACCOUNTANT_NAME',1,'Bob Bookeeper','chaine',0,'','2019-09-26 12:01:37'),(6763,'MAIN_INFO_ACCOUNTANT_TOWN',1,'Berlin','chaine',0,'','2019-09-26 12:01:37'),(6764,'MAIN_INFO_ACCOUNTANT_STATE',1,'0','chaine',0,'','2019-09-26 12:01:37'),(6765,'MAIN_INFO_ACCOUNTANT_COUNTRY',1,'5','chaine',0,'','2019-09-26 12:01:37'),(6795,'TICKET_ADDON',1,'mod_ticket_simple','chaine',0,'','2019-09-26 12:07:59'),(6796,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_elephant','chaine',0,'','2019-09-26 12:59:00'),(6800,'CASHDESK_ID_THIRDPARTY1',1,'7','chaine',0,'','2019-09-26 15:30:09'),(6801,'CASHDESK_ID_BANKACCOUNT_CASH1',1,'3','chaine',0,'','2019-09-26 15:30:09'),(6802,'CASHDESK_ID_BANKACCOUNT_CHEQUE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6803,'CASHDESK_ID_BANKACCOUNT_CB1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6804,'CASHDESK_ID_BANKACCOUNT_PRE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6805,'CASHDESK_ID_BANKACCOUNT_VIR1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6806,'CASHDESK_NO_DECREASE_STOCK1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6807,'MAIN_MODULE_FORCEPROJECT',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-09-27 14:52:52'),(6808,'MAIN_MODULE_FORCEPROJECT_TRIGGERS',1,'1','chaine',0,NULL,'2019-09-27 14:52:52'),(6809,'MAIN_MODULE_FORCEPROJECT_SUBSTITUTIONS',1,'0','chaine',0,NULL,'2019-09-27 14:52:52'),(6810,'MAIN_MODULE_FORCEPROJECT_MODELS',1,'1','chaine',0,NULL,'2019-09-27 14:52:52'),(6811,'FORCEPROJECT_ON_PROPOSAL',1,'1','chaine',0,'','2019-09-27 14:52:57'),(6812,'MAIN_MODULE_WEBSITE',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-09-30 15:49:22'),(6813,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2019-10-01 11:48:09'),(6814,'PACKTHEMEACTIVATEDTHEME',0,'modOwnTheme','chaine',0,'','2019-10-02 11:41:58'),(6815,'OWNTHEME_COL1',0,'#6a89cc','chaine',0,'','2019-10-02 11:41:58'),(6816,'OWNTHEME_COL2',0,'#60a3bc','chaine',0,'','2019-10-02 11:41:58'),(6817,'DOL_VERSION',0,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:41:58'),(6823,'OWNTHEME_COL_BODY_BCKGRD',0,'#E9E9E9','chaine',0,'','2019-10-02 11:41:58'),(6824,'OWNTHEME_COL_LOGO_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6825,'OWNTHEME_COL_TXT_MENU',0,'#b8c6e5','chaine',0,'','2019-10-02 11:41:58'),(6826,'OWNTHEME_COL_HEADER_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6827,'OWNTHEME_CUSTOM_CSS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6828,'OWNTHEME_CUSTOM_JS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6829,'OWNTHEME_FIXED_MENU',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6830,'OWNTHEME_D_HEADER_FONT_SIZE',0,'1.7rem','chaine',0,'','2019-10-02 11:41:58'),(6831,'OWNTHEME_S_HEADER_FONT_SIZE',0,'1.6rem','chaine',0,'','2019-10-02 11:41:58'),(6832,'OWNTHEME_D_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6833,'OWNTHEME_S_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6844,'MAIN_THEME',0,'eldy','chaine',0,'','2019-10-02 11:46:02'),(6845,'MAIN_MENU_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6846,'MAIN_MENUFRONT_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6847,'MAIN_MENU_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6848,'MAIN_MENUFRONT_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6849,'MAIN_UPLOAD_DOC',1,'20000','chaine',0,'','2019-10-02 11:46:54'),(6850,'MAIN_UMASK',1,'0664','chaine',0,'','2019-10-02 11:46:54'),(6851,'BECREATIVE_COL1',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6852,'BECREATIVE_COL2',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6853,'DOL_VERSION',1,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:47:10'),(6859,'BECREATIVE_COL_BODY_BCKGRD',1,'#e6eaef','chaine',0,'','2019-10-02 11:47:10'),(6860,'BECREATIVE_COL_LOGO_BCKGRD',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6861,'BECREATIVE_COL_TXT_MENU',1,'#b8c6e5','chaine',0,'','2019-10-02 11:47:10'),(6862,'BECREATIVE_COL_HEADER_BCKGRD',1,'#26a69a','chaine',0,'','2019-10-02 11:47:10'),(6863,'BECREATIVE_CUSTOM_CSS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6864,'BECREATIVE_CUSTOM_JS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6865,'BECREATIVE_FIXED_MENU',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6866,'BECREATIVE_D_HEADER_FONT_SIZE',1,'1.7rem','chaine',0,'','2019-10-02 11:47:10'),(6867,'BECREATIVE_S_HEADER_FONT_SIZE',1,'1.6rem','chaine',0,'','2019-10-02 11:47:10'),(6868,'BECREATIVE_D_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6869,'BECREATIVE_S_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6880,'MAIN_THEME',1,'eldy','chaine',0,'','2019-10-02 11:48:49'),(6881,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6882,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6883,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6884,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6885,'ACCOUNTING_ACCOUNT_CUSTOMER',1,'411','chaine',0,'','2019-10-04 08:15:44'),(6886,'ACCOUNTING_ACCOUNT_SUPPLIER',1,'401','chaine',0,'','2019-10-04 08:15:44'),(6887,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,'','2019-10-04 08:15:44'),(6888,'ACCOUNTING_PRODUCT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6889,'ACCOUNTING_PRODUCT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6890,'ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6891,'ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6892,'ACCOUNTING_SERVICE_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6893,'ACCOUNTING_SERVICE_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6894,'ACCOUNTING_VAT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6895,'ACCOUNTING_VAT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6896,'ACCOUNTING_VAT_PAY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6897,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,'','2019-10-04 08:15:44'),(6898,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,'','2019-10-04 08:15:44'),(6899,'DONATION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6900,'ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6901,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,'','2019-10-04 08:15:44'),(6902,'LOAN_ACCOUNTING_ACCOUNT_INTEREST',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6903,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6912,'TICKET_ENABLE_PUBLIC_INTERFACE',1,'1','chaine',0,'','2019-10-04 11:44:33'),(6934,'TICKET_NOTIFICATION_EMAIL_FROM',1,'fff','chaine',0,'','2019-10-04 12:03:51'),(6935,'TICKET_NOTIFICATION_EMAIL_TO',1,'ff','chaine',0,'','2019-10-04 12:03:51'),(6936,'TICKET_MESSAGE_MAIL_INTRO',1,'Hello,
    \r\nA new response was sent on a ticket that you contact. Here is the message:\"\"','chaine',0,'','2019-10-04 12:03:51'),(6937,'TICKET_MESSAGE_MAIL_SIGNATURE',1,'

    Sincerely,

    \r\n\r\n

    --\"\"

    \r\n','chaine',0,'','2019-10-04 12:03:51'),(6943,'TICKET_PUBLIC_INTERFACE_TOPIC',1,'ddd','chaine',0,'','2019-10-04 14:57:20'),(6944,'TICKET_PUBLIC_TEXT_HOME',1,'You can create a support ticket or view existing from its identifier tracking ticket.','chaine',0,'','2019-10-04 14:57:20'),(6945,'TICKET_PUBLIC_TEXT_HELP_MESSAGE',1,'Please accurately describe the problem. Provide the most information possible to allow us to correctly identify your request.','chaine',0,'','2019-10-04 14:57:20'),(6946,'TICKET_MESSAGE_MAIL_NEW',1,'TicketMessageMailNewText','chaine',0,'','2019-10-04 14:57:20'),(6947,'TICKET_URL_PUBLIC_INTERFACE',1,'aa','chaine',0,'','2019-10-04 14:57:20'),(7000,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2019-10-07 10:11:55'),(7001,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2019-10-07 10:11:55'),(7002,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2019-10-07 10:11:55'),(7003,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2019-10-07 10:11:55'),(7004,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2019-10-07 10:11:55'),(7005,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2019-10-07 10:11:55'),(7006,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2019-10-07 10:11:55'),(7007,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2019-10-07 10:11:55'),(7008,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2019-10-07 10:11:55'),(7009,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2019-10-07 10:11:55'),(7010,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2019-10-07 10:11:55'),(7011,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2019-10-07 10:11:55'),(7012,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2019-10-07 10:11:55'),(7013,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2019-10-07 10:11:55'),(7014,'MAIN_INFO_GDPR',1,'Zack Zeceo','chaine',0,'','2019-10-07 10:11:55'),(7015,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2019-10-07 10:11:55'),(7016,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2019-10-07 10:11:55'),(7017,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2019-10-07 10:11:55'),(7018,'MAIN_INFO_SIRET',1,'ABC-DEF','chaine',0,'','2019-10-07 10:11:55'),(7019,'MAIN_INFO_APE',1,'15E-45-8D','chaine',0,'','2019-10-07 10:11:55'),(7020,'MAIN_INFO_TVAINTRA',1,'FR12345678','chaine',0,'','2019-10-07 10:11:55'),(7021,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2019-10-07 10:11:55'),(7022,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2019-10-07 10:11:55'),(7023,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2019-10-07 10:11:55'),(7027,'USER_PASSWORD_GENERATED',1,'Perso','chaine',0,'','2019-10-07 10:52:46'),(7028,'USER_PASSWORD_PATTERN',1,'8;1;0;1;0;1','chaine',0,'','2019-10-07 10:57:03'),(7030,'MAIN_FEATURES_LEVEL',0,'1','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2019-10-08 13:29:42'),(7031,'MAIN_USE_NEW_TITLE_BUTTON',1,'0','chaine',1,'','2019-10-08 18:45:05'),(7032,'MAIN_MODULE_BOM',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:49:41'),(7033,'BOM_ADDON_PDF',1,'avalue','chaine',0,'Name of PDF model of BOM','2019-10-08 18:49:41'),(7034,'BOM_ADDON',1,'mod_bom_standard','chaine',0,'Name of numbering rules of BOM','2019-10-08 18:49:41'),(7035,'BOM_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/boms','chaine',0,NULL,'2019-10-08 18:49:41'),(7036,'MAIN_MODULE_GEOIPMAXMIND',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:51:54'),(7037,'MAIN_MODULE_DAV',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:54:07'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_3.8.0.sql b/dev/initdemo/mysqldump_dolibarr_3.8.0.sql index f3177d5d3ed..2f5bfb16060 100644 --- a/dev/initdemo/mysqldump_dolibarr_3.8.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_3.8.0.sql @@ -3036,7 +3036,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(35,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_panicum','yesno',0,'Module to control third parties codes','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(523,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(524,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(525,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(526,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(527,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(528,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(529,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(530,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2010-07-10 12:48:49'),(531,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(532,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(533,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(534,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(807,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(808,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4555,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2013-03-13 10:19:31'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5137,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2013-09-08 23:06:08'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5164,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2013-11-06 23:35:12'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5235,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2014-03-02 15:22:27'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5282,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2015-07-19 13:41:20'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5410,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5412,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5414,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5433,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2015-11-15 22:39:05'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5465,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5479,'MAIN_VERSION_LAST_UPGRADE',0,'3.8.3','chaine',0,'Dolibarr version for last upgrade','2016-01-10 16:45:35'),(5481,'DISPLAY_MARK_RATES',1,'1','chaine',0,'','2016-01-10 16:46:26'),(5482,'MARGIN_TYPE',1,'1','chaine',0,'','2016-01-10 16:46:30'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5544,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5545,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5546,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5547,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5549,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5550,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5553,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5554,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5592,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2016-01-22 17:33:49'),(5593,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-01-22 17:33:49'),(5594,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-01-22 17:33:49'),(5595,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-01-22 17:33:49'),(5596,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-01-22 17:33:49'),(5597,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5598,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-01-22 17:33:49'),(5599,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-01-22 17:33:49'),(5600,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-01-22 17:33:49'),(5601,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-01-22 17:33:49'),(5602,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-01-22 17:33:49'),(5603,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-01-22 17:33:49'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5607,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-01-22 17:33:49'),(5608,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5609,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-01-22 17:33:49'),(5610,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5611,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-01-22 17:33:49'); +INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(35,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_panicum','yesno',0,'Module to control third parties codes','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(523,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(524,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(525,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(526,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(527,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(528,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(529,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(530,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2010-07-10 12:48:49'),(531,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(532,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(533,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(534,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(807,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(808,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4555,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2013-03-13 10:19:31'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5137,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2013-09-08 23:06:08'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5164,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2013-11-06 23:35:12'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5235,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2014-03-02 15:22:27'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5282,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2015-07-19 13:41:20'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5410,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5412,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5414,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5433,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2015-11-15 22:39:05'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5465,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5479,'MAIN_VERSION_LAST_UPGRADE',0,'3.8.3','chaine',0,'Dolibarr version for last upgrade','2016-01-10 16:45:35'),(5481,'DISPLAY_MARK_RATES',1,'1','chaine',0,'','2016-01-10 16:46:26'),(5482,'MARGIN_TYPE',1,'1','chaine',0,'','2016-01-10 16:46:30'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5544,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5545,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5546,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5547,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5549,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5550,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5553,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5554,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5592,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2016-01-22 17:33:49'),(5593,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-01-22 17:33:49'),(5594,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-01-22 17:33:49'),(5595,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-01-22 17:33:49'),(5596,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-01-22 17:33:49'),(5597,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5598,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-01-22 17:33:49'),(5599,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-01-22 17:33:49'),(5600,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-01-22 17:33:49'),(5601,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-01-22 17:33:49'),(5602,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-01-22 17:33:49'),(5603,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-01-22 17:33:49'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5607,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-01-22 17:33:49'),(5608,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5609,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-01-22 17:33:49'),(5610,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5611,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-01-22 17:33:49'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_3.9.0.sql b/dev/initdemo/mysqldump_dolibarr_3.9.0.sql index 7fbe9673f21..592bf3ca213 100644 --- a/dev/initdemo/mysqldump_dolibarr_3.9.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_3.9.0.sql @@ -2902,7 +2902,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(35,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_panicum','yesno',0,'Module to control third parties codes','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(523,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(524,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(525,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(526,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(527,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(528,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(529,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(530,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2010-07-10 12:48:49'),(531,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(532,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(533,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(534,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(807,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(808,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4555,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2013-03-13 10:19:31'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5137,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2013-09-08 23:06:08'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5164,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2013-11-06 23:35:12'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5235,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2014-03-02 15:22:27'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5282,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2015-07-19 13:41:20'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5410,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5412,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5414,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5433,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2015-11-15 22:39:05'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5465,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5481,'DISPLAY_MARK_RATES',1,'1','chaine',0,'','2016-01-10 16:46:26'),(5482,'MARGIN_TYPE',1,'1','chaine',0,'','2016-01-10 16:46:30'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5544,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5545,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5546,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5547,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5549,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5550,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5553,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5554,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5592,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2016-01-22 17:33:49'),(5593,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-01-22 17:33:49'),(5594,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-01-22 17:33:49'),(5595,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-01-22 17:33:49'),(5596,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-01-22 17:33:49'),(5597,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5598,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-01-22 17:33:49'),(5599,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-01-22 17:33:49'),(5600,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-01-22 17:33:49'),(5601,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-01-22 17:33:49'),(5602,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-01-22 17:33:49'),(5603,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-01-22 17:33:49'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5607,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-01-22 17:33:49'),(5608,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5609,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-01-22 17:33:49'),(5610,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5611,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5615,'MAIN_VERSION_LAST_UPGRADE',0,'3.9.0-rc2','chaine',0,'Dolibarr version for last upgrade','2016-03-13 10:54:56'); +INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(35,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_panicum','yesno',0,'Module to control third parties codes','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(523,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(524,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(525,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(526,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(527,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(528,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(529,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(530,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2010-07-10 12:48:49'),(531,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(532,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(533,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(534,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(807,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(808,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4555,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2013-03-13 10:19:31'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5137,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2013-09-08 23:06:08'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5164,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2013-11-06 23:35:12'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5235,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2014-03-02 15:22:27'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5282,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2015-07-19 13:41:20'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5410,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5412,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5414,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5433,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2015-11-15 22:39:05'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5465,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5481,'DISPLAY_MARK_RATES',1,'1','chaine',0,'','2016-01-10 16:46:26'),(5482,'MARGIN_TYPE',1,'1','chaine',0,'','2016-01-10 16:46:30'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5544,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5545,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5546,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5547,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5549,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5550,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5553,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5554,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5592,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2016-01-22 17:33:49'),(5593,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-01-22 17:33:49'),(5594,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-01-22 17:33:49'),(5595,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-01-22 17:33:49'),(5596,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-01-22 17:33:49'),(5597,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5598,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-01-22 17:33:49'),(5599,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-01-22 17:33:49'),(5600,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-01-22 17:33:49'),(5601,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-01-22 17:33:49'),(5602,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-01-22 17:33:49'),(5603,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-01-22 17:33:49'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5607,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-01-22 17:33:49'),(5608,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5609,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-01-22 17:33:49'),(5610,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5611,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5615,'MAIN_VERSION_LAST_UPGRADE',0,'3.9.0-rc2','chaine',0,'Dolibarr version for last upgrade','2016-03-13 10:54:56'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_4.0.0.sql b/dev/initdemo/mysqldump_dolibarr_4.0.0.sql index 6363873d7c0..0caa0b9794b 100644 --- a/dev/initdemo/mysqldump_dolibarr_4.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_4.0.0.sql @@ -3058,7 +3058,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5622,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-07-30 11:12:59'),(5623,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-07-30 11:12:59'),(5624,'MAIN_VERSION_LAST_UPGRADE',0,'4.0.0-rc2','chaine',0,'Dolibarr version for last upgrade','2016-07-30 11:13:02'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5636,'MAIN_MODULE_CRON',1,'1',NULL,0,NULL,'2016-07-30 11:14:25'),(5637,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2016-07-30 11:14:27'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5641,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-07-30 11:16:22'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5680,'MAIN_INFO_SOCIETE_COUNTRY',1,'14:CA:Canada','chaine',0,'','2016-07-30 11:19:05'),(5681,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-07-30 11:19:05'),(5682,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-07-30 11:19:05'),(5683,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-07-30 11:19:05'),(5684,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-07-30 11:19:05'),(5685,'MAIN_INFO_SOCIETE_STATE',1,'1514','chaine',0,'','2016-07-30 11:19:05'),(5686,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-07-30 11:19:05'),(5687,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-07-30 11:19:05'),(5688,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-07-30 11:19:05'),(5689,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-07-30 11:19:05'),(5690,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-07-30 11:19:05'),(5691,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-07-30 11:19:05'),(5692,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2016-07-30 11:19:05'),(5693,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2016-07-30 11:19:05'),(5694,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-07-30 11:19:05'),(5695,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5696,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2016-07-30 11:19:05'),(5697,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-07-30 11:19:05'),(5698,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2016-07-30 11:19:05'),(5699,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-07-30 11:19:05'),(5700,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-07-30 11:19:05'),(5701,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2016-07-30 11:19:05'),(5702,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5703,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5704,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2016-07-30 11:19:17'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5713,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5715,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5716,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5765,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-07-30 15:42:32'),(5766,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5767,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5768,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5769,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5770,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5771,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5772,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5773,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5774,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5775,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5776,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5777,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5778,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5779,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5780,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5781,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5782,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5783,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5784,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5785,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5786,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5787,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5788,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5789,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5790,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5791,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5792,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5793,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5794,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5795,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5796,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5797,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5798,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5799,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5800,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5801,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5802,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5803,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5804,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5805,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5806,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5807,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5812,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-07-30 19:04:07'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'); +INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5622,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-07-30 11:12:59'),(5623,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-07-30 11:12:59'),(5624,'MAIN_VERSION_LAST_UPGRADE',0,'4.0.0-rc2','chaine',0,'Dolibarr version for last upgrade','2016-07-30 11:13:02'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5636,'MAIN_MODULE_CRON',1,'1',NULL,0,NULL,'2016-07-30 11:14:25'),(5637,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2016-07-30 11:14:27'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5641,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-07-30 11:16:22'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5680,'MAIN_INFO_SOCIETE_COUNTRY',1,'14:CA:Canada','chaine',0,'','2016-07-30 11:19:05'),(5681,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-07-30 11:19:05'),(5682,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-07-30 11:19:05'),(5683,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-07-30 11:19:05'),(5684,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-07-30 11:19:05'),(5685,'MAIN_INFO_SOCIETE_STATE',1,'1514','chaine',0,'','2016-07-30 11:19:05'),(5686,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-07-30 11:19:05'),(5687,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-07-30 11:19:05'),(5688,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-07-30 11:19:05'),(5689,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-07-30 11:19:05'),(5690,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-07-30 11:19:05'),(5691,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-07-30 11:19:05'),(5692,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2016-07-30 11:19:05'),(5693,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2016-07-30 11:19:05'),(5694,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-07-30 11:19:05'),(5695,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5696,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2016-07-30 11:19:05'),(5697,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-07-30 11:19:05'),(5698,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2016-07-30 11:19:05'),(5699,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-07-30 11:19:05'),(5700,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-07-30 11:19:05'),(5701,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2016-07-30 11:19:05'),(5702,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5703,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5704,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2016-07-30 11:19:17'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5713,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5715,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5716,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5765,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-07-30 15:42:32'),(5766,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5767,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5768,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5769,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5770,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5771,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5772,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5773,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5774,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5775,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5776,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5777,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5778,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5779,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5780,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5781,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5782,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5783,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5784,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5785,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5786,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5787,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5788,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5789,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5790,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5791,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5792,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5793,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5794,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5795,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5796,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5797,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5798,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5799,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5800,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5801,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5802,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5803,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5804,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5805,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5806,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5807,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5812,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-07-30 19:04:07'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_5.0.0.sql b/dev/initdemo/mysqldump_dolibarr_5.0.0.sql index a66bd427499..9c9f86d34c1 100644 --- a/dev/initdemo/mysqldump_dolibarr_5.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_5.0.0.sql @@ -3106,7 +3106,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5641,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-07-30 11:16:22'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5713,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5715,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5765,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-07-30 15:42:32'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5812,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-07-30 19:04:07'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5817,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'Max length for small lists (tabs)','2016-12-12 10:54:09'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5835,'ACCOUNTING_SELL_JOURNAL',1,'VTE','chaine',0,NULL,'2017-01-29 15:11:56'),(5836,'ACCOUNTING_PURCHASE_JOURNAL',1,'ACH','chaine',0,NULL,'2017-01-29 15:11:56'),(5837,'ACCOUNTING_SOCIAL_JOURNAL',1,'SOC','chaine',0,NULL,'2017-01-29 15:11:56'),(5838,'ACCOUNTING_MISCELLANEOUS_JOURNAL',1,'OD','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5847,'ACCOUNTING_EXPENSEREPORT_JOURNAL',1,'ER','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5864,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-01-29 15:13:51'),(5865,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-01-29 15:13:51'),(5866,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-01-29 15:13:51'),(5867,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-01-29 15:13:51'),(5868,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2017-01-29 15:13:51'),(5869,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-01-29 15:13:51'),(5870,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-01-29 15:13:51'),(5871,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-01-29 15:13:51'),(5872,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5873,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-01-29 15:13:51'),(5874,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-01-29 15:13:51'),(5875,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-01-29 15:13:51'),(5876,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2017-01-29 15:13:51'),(5877,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-01-29 15:13:51'),(5878,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-01-29 15:13:51'),(5879,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5880,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5995,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2017-02-12 19:15:56'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6004,'MAIN_MODULE_MULTICOMPANY_CSS',1,'[\"\\/multicompany\\/css\\/multicompany.css.php\"]','chaine',0,NULL,'2017-02-15 17:17:11'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6024,'MAIN_INFO_SOCIETE_COUNTRY',1,'14:CA:Canada','chaine',0,'','2017-02-15 17:18:41'),(6025,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-02-15 17:18:41'),(6026,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2017-02-15 17:18:41'),(6027,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-02-15 17:18:41'),(6028,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-02-15 17:18:41'),(6029,'MAIN_INFO_SOCIETE_STATE',1,'1514','chaine',0,'','2017-02-15 17:18:41'),(6030,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-02-15 17:18:41'),(6031,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-02-15 17:18:41'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6094,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6095,'MAIN_MODULE_CRON',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6096,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6097,'MAIN_VERSION_LAST_UPGRADE',0,'5.0.3','chaine',0,'Dolibarr version for last upgrade','2017-05-12 09:02:43'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5641,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-07-30 11:16:22'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5713,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5715,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5765,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-07-30 15:42:32'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5812,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-07-30 19:04:07'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5817,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'Max length for small lists (tabs)','2016-12-12 10:54:09'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5835,'ACCOUNTING_SELL_JOURNAL',1,'VTE','chaine',0,NULL,'2017-01-29 15:11:56'),(5836,'ACCOUNTING_PURCHASE_JOURNAL',1,'ACH','chaine',0,NULL,'2017-01-29 15:11:56'),(5837,'ACCOUNTING_SOCIAL_JOURNAL',1,'SOC','chaine',0,NULL,'2017-01-29 15:11:56'),(5838,'ACCOUNTING_MISCELLANEOUS_JOURNAL',1,'OD','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5847,'ACCOUNTING_EXPENSEREPORT_JOURNAL',1,'ER','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5864,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-01-29 15:13:51'),(5865,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-01-29 15:13:51'),(5866,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-01-29 15:13:51'),(5867,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-01-29 15:13:51'),(5868,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2017-01-29 15:13:51'),(5869,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-01-29 15:13:51'),(5870,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-01-29 15:13:51'),(5871,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-01-29 15:13:51'),(5872,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5873,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-01-29 15:13:51'),(5874,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-01-29 15:13:51'),(5875,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-01-29 15:13:51'),(5876,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2017-01-29 15:13:51'),(5877,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-01-29 15:13:51'),(5878,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-01-29 15:13:51'),(5879,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5880,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5995,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2017-02-12 19:15:56'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6004,'MAIN_MODULE_MULTICOMPANY_CSS',1,'[\"\\/multicompany\\/css\\/multicompany.css.php\"]','chaine',0,NULL,'2017-02-15 17:17:11'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6024,'MAIN_INFO_SOCIETE_COUNTRY',1,'14:CA:Canada','chaine',0,'','2017-02-15 17:18:41'),(6025,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-02-15 17:18:41'),(6026,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2017-02-15 17:18:41'),(6027,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-02-15 17:18:41'),(6028,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-02-15 17:18:41'),(6029,'MAIN_INFO_SOCIETE_STATE',1,'1514','chaine',0,'','2017-02-15 17:18:41'),(6030,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-02-15 17:18:41'),(6031,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-02-15 17:18:41'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6094,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6095,'MAIN_MODULE_CRON',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6096,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6097,'MAIN_VERSION_LAST_UPGRADE',0,'5.0.3','chaine',0,'Dolibarr version for last upgrade','2017-05-12 09:02:43'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_6.0.0.sql b/dev/initdemo/mysqldump_dolibarr_6.0.0.sql index 19cb46d0237..7209ce9dadb 100644 --- a/dev/initdemo/mysqldump_dolibarr_6.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_6.0.0.sql @@ -3224,7 +3224,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5835,'ACCOUNTING_SELL_JOURNAL',1,'VTE','chaine',0,NULL,'2017-01-29 15:11:56'),(5836,'ACCOUNTING_PURCHASE_JOURNAL',1,'ACH','chaine',0,NULL,'2017-01-29 15:11:56'),(5837,'ACCOUNTING_SOCIAL_JOURNAL',1,'SOC','chaine',0,NULL,'2017-01-29 15:11:56'),(5838,'ACCOUNTING_MISCELLANEOUS_JOURNAL',1,'OD','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5847,'ACCOUNTING_EXPENSEREPORT_JOURNAL',1,'ER','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6004,'MAIN_MODULE_MULTICOMPANY_CSS',1,'[\"\\/multicompany\\/css\\/multicompany.css.php\"]','chaine',0,NULL,'2017-02-15 17:17:11'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6154,'MAIN_LOGIN_BACKGROUND',1,'background_dolibarr.jpg','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6376,'MAIN_VERSION_LAST_UPGRADE',0,'6.0.1','chaine',0,'Dolibarr version for last upgrade','2017-09-04 12:19:03'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6497,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6498,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6499,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6500,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6501,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6502,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6503,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6504,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6505,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6506,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2017-09-06 16:18:46'),(6507,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6508,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6509,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6510,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5835,'ACCOUNTING_SELL_JOURNAL',1,'VTE','chaine',0,NULL,'2017-01-29 15:11:56'),(5836,'ACCOUNTING_PURCHASE_JOURNAL',1,'ACH','chaine',0,NULL,'2017-01-29 15:11:56'),(5837,'ACCOUNTING_SOCIAL_JOURNAL',1,'SOC','chaine',0,NULL,'2017-01-29 15:11:56'),(5838,'ACCOUNTING_MISCELLANEOUS_JOURNAL',1,'OD','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5847,'ACCOUNTING_EXPENSEREPORT_JOURNAL',1,'ER','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6004,'MAIN_MODULE_MULTICOMPANY_CSS',1,'[\"\\/multicompany\\/css\\/multicompany.css.php\"]','chaine',0,NULL,'2017-02-15 17:17:11'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6154,'MAIN_LOGIN_BACKGROUND',1,'background_dolibarr.jpg','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6376,'MAIN_VERSION_LAST_UPGRADE',0,'6.0.1','chaine',0,'Dolibarr version for last upgrade','2017-09-04 12:19:03'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6497,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6498,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6499,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6500,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6501,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6502,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6503,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6504,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6505,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6506,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2017-09-06 16:18:46'),(6507,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6508,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6509,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6510,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_7.0.0.sql b/dev/initdemo/mysqldump_dolibarr_7.0.0.sql index 363cc32670d..4e6ee001a76 100644 --- a/dev/initdemo/mysqldump_dolibarr_7.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_7.0.0.sql @@ -3452,7 +3452,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6568,'MAIN_MODULE_VARIANTS',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:04'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6570,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6571,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6572,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6573,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6574,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6575,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6576,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6577,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6578,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6579,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2018-03-16 09:54:05'),(6580,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6581,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6582,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6583,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6584,'MAIN_MODULE_SALARIES',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6585,'MAIN_VERSION_LAST_UPGRADE',0,'7.0.1','chaine',0,'Dolibarr version for last upgrade','2018-03-16 09:54:07'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6568,'MAIN_MODULE_VARIANTS',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:04'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6570,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6571,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6572,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6573,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6574,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6575,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6576,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6577,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6578,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6579,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2018-03-16 09:54:05'),(6580,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6581,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6582,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6583,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6584,'MAIN_MODULE_SALARIES',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6585,'MAIN_VERSION_LAST_UPGRADE',0,'7.0.1','chaine',0,'Dolibarr version for last upgrade','2018-03-16 09:54:07'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_8.0.0.sql b/dev/initdemo/mysqldump_dolibarr_8.0.0.sql index b000b807930..72814343adf 100644 --- a/dev/initdemo/mysqldump_dolibarr_8.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_8.0.0.sql @@ -5503,7 +5503,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6568,'MAIN_MODULE_VARIANTS',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:04'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6570,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6571,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6572,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6573,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6574,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6575,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6576,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6577,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6578,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6579,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2018-03-16 09:54:05'),(6580,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6581,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6582,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6583,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6584,'MAIN_MODULE_SALARIES',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6588,'MAIN_VERSION_LAST_UPGRADE',0,'8.0.0','chaine',0,'Dolibarr version for last upgrade','2018-11-23 11:56:17'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6568,'MAIN_MODULE_VARIANTS',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:04'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6570,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6571,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6572,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6573,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6574,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6575,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6576,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6577,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6578,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6579,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2018-03-16 09:54:05'),(6580,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6581,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6582,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6583,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6584,'MAIN_MODULE_SALARIES',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6588,'MAIN_VERSION_LAST_UPGRADE',0,'8.0.0','chaine',0,'Dolibarr version for last upgrade','2018-11-23 11:56:17'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_9.0.0.sql b/dev/initdemo/mysqldump_dolibarr_9.0.0.sql index c3d5fcd9e73..3b7e13b70f8 100644 --- a/dev/initdemo/mysqldump_dolibarr_9.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_9.0.0.sql @@ -5418,7 +5418,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2012-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2012-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2012-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2012-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2012-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2012-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2012-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2012-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2012-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2012-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2012-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2012-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2012-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2012-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2012-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2012-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2012-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2012-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2012-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2012-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2012-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2012-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2012-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2012-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2012-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2012-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2012-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2012-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2012-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2012-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2012-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2012-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2012-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2012-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2012-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2012-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2012-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2012-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2012-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2012-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2012-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2012-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2012-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2012-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2012-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2012-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2015-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2012-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2012-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2012-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2012-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2012-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2012-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2012-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2012-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2012-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2012-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2012-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2012-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2012-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2012-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2012-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2012-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2012-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2012-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2012-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2012-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2012-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2012-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2012-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2012-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2012-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2012-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2012-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2012-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2012-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2012-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2012-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2012-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2012-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2012-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2013-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2013-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2013-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2013-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2013-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2013-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2013-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2013-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2013-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2013-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2014-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2014-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2014-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2014-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2014-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2015-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2014-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2015-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2014-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2014-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2014-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2014-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2014-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2014-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2014-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2014-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2014-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2014-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2014-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2014-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2014-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2014-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2014-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2014-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2014-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2015-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2015-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2015-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2015-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2015-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2015-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2015-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2015-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2015-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2015-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2015-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2015-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2015-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2015-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2015-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2015-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2015-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2015-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2015-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2015-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2015-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2015-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2015-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2015-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2015-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2015-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2015-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2015-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2015-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2015-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2015-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2015-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2015-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2015-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2015-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2015-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2015-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2015-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2015-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2015-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2015-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2015-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2015-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2015-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2015-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2015-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2015-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2015-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2015-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2015-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2015-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2015-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2015-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2015-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2015-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2015-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2015-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2015-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2015-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2015-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2015-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2015-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2015-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2015-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2015-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2015-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2015-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2015-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2015-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2015-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2015-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2015-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2015-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2015-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2015-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2015-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2015-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2015-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2015-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2015-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2015-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2015-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2015-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2015-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2016-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2016-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2016-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2016-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2016-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2017-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2017-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2017-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2017-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2017-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2017-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2017-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2017-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2017-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2017-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2017-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2017-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2017-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2017-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2017-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2017-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2017-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2017-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2017-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2018-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2018-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2018-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2018-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2018-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2018-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2018-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2018-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2018-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2018-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2018-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2018-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2018-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2018-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2018-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2018-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2018-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2018-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2018-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2018-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2018-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2018-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2018-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2018-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2018-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2018-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2018-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2018-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2018-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2018-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6590,'MAIN_MODULE_ACCOUNTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6591,'MAIN_MODULE_AGENDA',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6592,'MAIN_MODULE_BARCODE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6593,'MAIN_MODULE_CRON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:16'),(6594,'MAIN_MODULE_COMMANDE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:16'),(6595,'MAIN_MODULE_DON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6596,'MAIN_MODULE_ECM',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6597,'MAIN_MODULE_FACTURE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6598,'MAIN_MODULE_FOURNISSEUR',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:18'),(6599,'MAIN_MODULE_HOLIDAY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6600,'MAIN_MODULE_OPENSURVEY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6601,'MAIN_MODULE_PRINTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6602,'MAIN_MODULE_SALARIES',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6603,'MAIN_MODULE_SYSLOG',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6604,'MAIN_MODULE_SOCIETE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6605,'MAIN_MODULE_SERVICE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:20'),(6606,'MAIN_MODULE_USER',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:20'),(6607,'MAIN_MODULE_VARIANTS',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:21'),(6608,'MAIN_VERSION_LAST_UPGRADE',0,'9.0.0-beta','chaine',0,'Dolibarr version for last upgrade','2018-11-23 11:58:23'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2012-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2012-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2012-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2012-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2012-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2012-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2012-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2012-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2012-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2012-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2012-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2012-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2012-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2012-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2012-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2012-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2012-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2012-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2012-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2012-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2012-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2012-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2012-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2012-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2012-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2012-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2012-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2012-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2012-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2012-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2012-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2012-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2012-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2012-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2012-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2012-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2012-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2012-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2012-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2012-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2012-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2012-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2012-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2012-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2012-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2012-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2015-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2012-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2012-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2012-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2012-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2012-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2012-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2012-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2012-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2012-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2012-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2012-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2012-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2012-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2012-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2012-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2012-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2012-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2012-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2012-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2012-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2012-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2012-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2012-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2012-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2012-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2012-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2012-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2012-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2012-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2012-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2012-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2012-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2012-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2012-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2013-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2013-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2013-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2013-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2013-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2013-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2013-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2013-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2013-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2013-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2014-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2014-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2014-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2014-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2014-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2015-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2014-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2015-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2014-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2014-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2014-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2014-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2014-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2014-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2014-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2014-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2014-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2014-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2014-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2014-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2014-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2014-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2014-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2014-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2014-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2015-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2015-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2015-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2015-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2015-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2015-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2015-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2015-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2015-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2015-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2015-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2015-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2015-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2015-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2015-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2015-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2015-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2015-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2015-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2015-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2015-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2015-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2015-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2015-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2015-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2015-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2015-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2015-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2015-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2015-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2015-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2015-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2015-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2015-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2015-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2015-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2015-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2015-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2015-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2015-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2015-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2015-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2015-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2015-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2015-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2015-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2015-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2015-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2015-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2015-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2015-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2015-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2015-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2015-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2015-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2015-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2015-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2015-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2015-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2015-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2015-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2015-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2015-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2015-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2015-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2015-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2015-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2015-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2015-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2015-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2015-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2015-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2015-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2015-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2015-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2015-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2015-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2015-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2015-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2015-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2015-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2015-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2015-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2015-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2016-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2016-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2016-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2016-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2016-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2017-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2017-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2017-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2017-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2017-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2017-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2017-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2017-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2017-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2017-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2017-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2017-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2017-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2017-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2017-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2017-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2017-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2017-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2017-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2018-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2018-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2018-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2018-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2018-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2018-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2018-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2018-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2018-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2018-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2018-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2018-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2018-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2018-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2018-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2018-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2018-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2018-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2018-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2018-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2018-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2018-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2018-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2018-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2018-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2018-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2018-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2018-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2018-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2018-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6590,'MAIN_MODULE_ACCOUNTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6591,'MAIN_MODULE_AGENDA',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6592,'MAIN_MODULE_BARCODE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6593,'MAIN_MODULE_CRON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:16'),(6594,'MAIN_MODULE_COMMANDE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:16'),(6595,'MAIN_MODULE_DON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6596,'MAIN_MODULE_ECM',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6597,'MAIN_MODULE_FACTURE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6598,'MAIN_MODULE_FOURNISSEUR',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:18'),(6599,'MAIN_MODULE_HOLIDAY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6600,'MAIN_MODULE_OPENSURVEY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6601,'MAIN_MODULE_PRINTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6602,'MAIN_MODULE_SALARIES',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6603,'MAIN_MODULE_SYSLOG',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6604,'MAIN_MODULE_SOCIETE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6605,'MAIN_MODULE_SERVICE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:20'),(6606,'MAIN_MODULE_USER',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:20'),(6607,'MAIN_MODULE_VARIANTS',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:21'),(6608,'MAIN_VERSION_LAST_UPGRADE',0,'9.0.0-beta','chaine',0,'Dolibarr version for last upgrade','2018-11-23 11:58:23'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php index bc8fff8395c..e34cd54863b 100644 --- a/htdocs/accountancy/admin/account.php +++ b/htdocs/accountancy/admin/account.php @@ -46,7 +46,7 @@ $search_pcgtype = GETPOST('search_pcgtype', 'alpha'); $search_pcgsubtype = GETPOST('search_pcgsubtype', 'alpha'); // Security check -if ($user->societe_id > 0) accessforbidden(); +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->chartofaccount) accessforbidden(); // Load variable for pagination diff --git a/htdocs/accountancy/admin/accountmodel.php b/htdocs/accountancy/admin/accountmodel.php index 2f23cd3eae8..6f30f5ac7ec 100644 --- a/htdocs/accountancy/admin/accountmodel.php +++ b/htdocs/accountancy/admin/accountmodel.php @@ -71,7 +71,7 @@ $search_country_id = GETPOST('search_country_id', 'int'); // Security check -if ($user->societe_id > 0) accessforbidden(); +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->chartofaccount) accessforbidden(); diff --git a/htdocs/accountancy/admin/fiscalyear.php b/htdocs/accountancy/admin/fiscalyear.php index 03404bd4126..5b1fa9df4ec 100644 --- a/htdocs/accountancy/admin/fiscalyear.php +++ b/htdocs/accountancy/admin/fiscalyear.php @@ -43,7 +43,7 @@ if (! $sortorder) $sortorder="ASC"; $langs->loadLangs(array("admin","compta")); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->fiscalyear->write) // If we can read accounting records, we should be able to see fiscal year. accessforbidden(); diff --git a/htdocs/accountancy/admin/fiscalyear_card.php b/htdocs/accountancy/admin/fiscalyear_card.php index d9125a686c6..42b9d231fe3 100644 --- a/htdocs/accountancy/admin/fiscalyear_card.php +++ b/htdocs/accountancy/admin/fiscalyear_card.php @@ -31,7 +31,7 @@ require_once DOL_DOCUMENT_ROOT . '/core/class/fiscalyear.class.php'; $langs->loadLangs(array("admin","compta")); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (empty($user->rights->accounting->fiscalyear->write)) accessforbidden(); diff --git a/htdocs/accountancy/admin/fiscalyear_info.php b/htdocs/accountancy/admin/fiscalyear_info.php index dd62352e2b1..a02141f449e 100644 --- a/htdocs/accountancy/admin/fiscalyear_info.php +++ b/htdocs/accountancy/admin/fiscalyear_info.php @@ -30,7 +30,7 @@ require_once DOL_DOCUMENT_ROOT . '/core/class/fiscalyear.class.php'; $langs->loadLangs(array("admin","compta")); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->fiscalyear->write) accessforbidden(); diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index cc6307bae2c..ca6403279e1 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -45,7 +45,7 @@ $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->societe_id > 0) { +if ($user->socid > 0) { accessforbidden(); } diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php index 4bc60fc904f..2ed9eb4c2bd 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php @@ -83,7 +83,7 @@ if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x', // Security check $socid = GETPOST("socid", 'int'); -// if ($user->societe_id) $socid=$user->societe_id; +// if ($user->socid) $socid=$user->socid; $lettering = new Lettering($db); $object = new Societe($db); @@ -139,7 +139,7 @@ dol_fiche_head($head, 'lettering_customer', $langs->trans("ThirdParty"), 0, 'com $linkback = ''.$langs->trans("BackToList").''; -dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom', '', '', 0, '', '', 'arearefnobottom'); +dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom', '', '', 0, '', '', 'arearefnobottom'); dol_fiche_end(); diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php index df513f8d074..b381fc597ce 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php @@ -83,7 +83,7 @@ if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x', // Security check $socid = GETPOST("socid", 'int'); -// if ($user->societe_id) $socid=$user->societe_id; +// if ($user->socid) $socid=$user->socid; $lettering = new Lettering($db); $object = new Societe($db); @@ -138,7 +138,7 @@ dol_fiche_head($head, 'lettering_supplier', $langs->trans("ThirdParty"), 0, 'com $linkback = ''.$langs->trans("BackToList").''; -dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom', '', '', 0, '', '', 'arearefnobottom'); +dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom', '', '', 0, '', '', 'arearefnobottom'); dol_fiche_end(); diff --git a/htdocs/accountancy/closure/index.php b/htdocs/accountancy/closure/index.php index ddf3b4cf2db..599742460ae 100644 --- a/htdocs/accountancy/closure/index.php +++ b/htdocs/accountancy/closure/index.php @@ -34,7 +34,7 @@ $langs->loadLangs(array("compta","bills","other","main","accountancy")); if (empty($conf->accounting->enabled)) { accessforbidden(); } -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->fiscalyear->write) accessforbidden(); diff --git a/htdocs/accountancy/closure/validate.php b/htdocs/accountancy/closure/validate.php index 26b53009fcc..0498e5e2dec 100644 --- a/htdocs/accountancy/closure/validate.php +++ b/htdocs/accountancy/closure/validate.php @@ -34,7 +34,7 @@ $langs->loadLangs(array("compta","bills","other","main","accountancy")); if (empty($conf->accounting->enabled)) { accessforbidden(); } -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->fiscalyear->write) accessforbidden(); diff --git a/htdocs/accountancy/customer/card.php b/htdocs/accountancy/customer/card.php index 00c4a945ff9..62ae458d283 100644 --- a/htdocs/accountancy/customer/card.php +++ b/htdocs/accountancy/customer/card.php @@ -38,7 +38,7 @@ $codeventil = GETPOST('codeventil'); $id = GETPOST('id'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index c0e45916922..b3ef45c1feb 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -39,7 +39,7 @@ $langs->loadLangs(array("compta","bills","other","main","accountancy")); if (empty($conf->accounting->enabled)) { accessforbidden(); } -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->bind->write) accessforbidden(); diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index 6a5196288e2..9d32bbaebf4 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -72,7 +72,7 @@ if (! $sortorder) { } // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->bind->write) accessforbidden(); diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index d4cc5f59388..2969f2ff0a1 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -83,7 +83,7 @@ if (! $sortorder) { } // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->bind->write) accessforbidden(); diff --git a/htdocs/accountancy/expensereport/card.php b/htdocs/accountancy/expensereport/card.php index 2331111f620..8ee9f9c625d 100644 --- a/htdocs/accountancy/expensereport/card.php +++ b/htdocs/accountancy/expensereport/card.php @@ -42,7 +42,7 @@ $codeventil = GETPOST('codeventil'); $id = GETPOST('id'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); diff --git a/htdocs/accountancy/expensereport/index.php b/htdocs/accountancy/expensereport/index.php index ea855921c5a..4efc8a15ba4 100644 --- a/htdocs/accountancy/expensereport/index.php +++ b/htdocs/accountancy/expensereport/index.php @@ -36,7 +36,7 @@ $langs->loadLangs(array("compta","bills","other","main","accountancy")); if (empty($conf->accounting->enabled)) { accessforbidden(); } -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->bind->write) accessforbidden(); diff --git a/htdocs/accountancy/expensereport/lines.php b/htdocs/accountancy/expensereport/lines.php index c50031b82b2..56f7ee6ba96 100644 --- a/htdocs/accountancy/expensereport/lines.php +++ b/htdocs/accountancy/expensereport/lines.php @@ -67,7 +67,7 @@ if (! $sortorder) { } // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->bind->write) accessforbidden(); diff --git a/htdocs/accountancy/expensereport/list.php b/htdocs/accountancy/expensereport/list.php index 1ec89dfc9cc..f0e545f7853 100644 --- a/htdocs/accountancy/expensereport/list.php +++ b/htdocs/accountancy/expensereport/list.php @@ -77,7 +77,7 @@ if (! $sortorder) { } // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->bind->write) accessforbidden(); diff --git a/htdocs/accountancy/index.php b/htdocs/accountancy/index.php index 0eeccbd3395..8dde1d0df22 100644 --- a/htdocs/accountancy/index.php +++ b/htdocs/accountancy/index.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php'; $langs->loadLangs(array("compta","bills","other","accountancy","loans","banks","admin","dict")); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); // Initialize technical object to manage hooks. Note that conf->hooks_modules contains array of hooks diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 7063f7fd53e..6852d25bf19 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -80,7 +80,7 @@ $now = dol_now(); $action = GETPOST('action', 'aZ09'); // Security check -if ($user->societe_id > 0 && empty($id_journal)) +if ($user->socid > 0 && empty($id_journal)) accessforbidden(); diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php index c61cdda4d48..a80036b3b05 100644 --- a/htdocs/accountancy/journal/expensereportsjournal.php +++ b/htdocs/accountancy/journal/expensereportsjournal.php @@ -56,7 +56,7 @@ if ($in_bookkeeping == '') $in_bookkeeping = 'notyet'; $now = dol_now(); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); /* diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index a3728c7f6f9..711a54f37a6 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -56,7 +56,7 @@ if ($in_bookkeeping == '') $in_bookkeeping = 'notyet'; $now = dol_now(); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); $hookmanager->initHooks(array('purchasesjournal')); diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 367fa2eb817..7781d612575 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -58,7 +58,7 @@ if ($in_bookkeeping == '') $in_bookkeeping = 'notyet'; $now = dol_now(); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); $hookmanager->initHooks(array('sellsjournal')); diff --git a/htdocs/accountancy/supplier/card.php b/htdocs/accountancy/supplier/card.php index 7e9d7fbbd7c..63bce528ccb 100644 --- a/htdocs/accountancy/supplier/card.php +++ b/htdocs/accountancy/supplier/card.php @@ -42,7 +42,7 @@ $codeventil = GETPOST('codeventil'); $id = GETPOST('id'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index bfb6e7b02e4..a1eb1ce4a45 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -37,7 +37,7 @@ $langs->loadLangs(array("compta","bills","other","main","accountancy")); if (empty($conf->accounting->enabled)) { accessforbidden(); } -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->bind->write) accessforbidden(); diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index 730aecf9dc1..00ac4d02d73 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -74,7 +74,7 @@ if (! $sortorder) { } // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->bind->write) accessforbidden(); diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index 3c61b7a0608..27cd97dfea3 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -83,7 +83,7 @@ if (! $sortorder) { } // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->bind->write) accessforbidden(); diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php index 9c6f657d5e0..51f121ad903 100644 --- a/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php @@ -118,7 +118,7 @@ if (! empty($this->control->tpl['action_delete'])) echo $this->control->tpl['act control->tpl['showend']; -if (empty($user->societe_id)) { +if (empty($user->socid)) { echo '
    '; if ($user->rights->adherent->creer) { diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 8478288ba69..76556feb4ee 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1885,7 +1885,7 @@ else } // Create user - if (! $user->societe_id && ! $object->user_id) + if (! $user->socid && ! $object->user_id) { if ($user->rights->user->user->creer) { diff --git a/htdocs/adherents/class/adherentstats.class.php b/htdocs/adherents/class/adherentstats.class.php index 9ef8e122c9b..1357e4a3b4b 100644 --- a/htdocs/adherents/class/adherentstats.class.php +++ b/htdocs/adherents/class/adherentstats.class.php @@ -70,7 +70,7 @@ class AdherentStats extends Stats $this->where.= " m.statut != 0"; $this->where.= " AND p.fk_adherent = m.rowid AND m.entity IN (".getEntity('adherent').")"; - //if (!$user->rights->societe->client->voir && !$user->societe_id) $this->where .= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id; + //if (!$user->rights->societe->client->voir && !$user->socid) $this->where .= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id; if($this->memberid) { $this->where .= " AND m.rowid = ".$this->memberid; @@ -92,7 +92,7 @@ class AdherentStats extends Stats $sql = "SELECT date_format(p.dateadh,'%m') as dm, count(*)"; $sql.= " FROM ".$this->from; - //if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + //if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE date_format(p.dateadh,'%Y') = '".$year."'"; $sql.= " AND ".$this->where; $sql.= " GROUP BY dm"; @@ -112,7 +112,7 @@ class AdherentStats extends Stats $sql = "SELECT date_format(p.dateadh,'%Y') as dm, count(*)"; $sql.= " FROM ".$this->from; - //if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + //if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE ".$this->where; $sql.= " GROUP BY dm"; $sql.= $this->db->order('dm', 'DESC'); @@ -133,7 +133,7 @@ class AdherentStats extends Stats $sql = "SELECT date_format(p.dateadh,'%m') as dm, sum(p.".$this->field.")"; $sql.= " FROM ".$this->from; - //if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + //if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE date_format(p.dateadh,'%Y') = '".$year."'"; $sql.= " AND ".$this->where; $sql.= " GROUP BY dm"; diff --git a/htdocs/adherents/ldap.php b/htdocs/adherents/ldap.php index fafa69b8b3f..99326241485 100644 --- a/htdocs/adherents/ldap.php +++ b/htdocs/adherents/ldap.php @@ -37,9 +37,9 @@ $action = GETPOST('action', 'aZ09'); // Protection $socid=0; -if ($user->societe_id > 0) +if ($user->socid > 0) { - $socid = $user->societe_id; + $socid = $user->socid; } $object = new Adherent($db); diff --git a/htdocs/adherents/stats/byproperties.php b/htdocs/adherents/stats/byproperties.php index d954484c839..b2f302fea45 100644 --- a/htdocs/adherents/stats/byproperties.php +++ b/htdocs/adherents/stats/byproperties.php @@ -33,10 +33,10 @@ $mode=GETPOST('mode')?GETPOST('mode'):''; // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $result=restrictedArea($user, 'adherent', '', '', 'cotisation'); diff --git a/htdocs/adherents/stats/geo.php b/htdocs/adherents/stats/geo.php index afc2e2b5218..3c469e658e5 100644 --- a/htdocs/adherents/stats/geo.php +++ b/htdocs/adherents/stats/geo.php @@ -34,10 +34,10 @@ $mode=GETPOST('mode')?GETPOST('mode'):''; // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $result=restrictedArea($user, 'adherent', '', '', 'cotisation'); diff --git a/htdocs/adherents/stats/index.php b/htdocs/adherents/stats/index.php index 2f2c6f33920..d89a8a4a8c0 100644 --- a/htdocs/adherents/stats/index.php +++ b/htdocs/adherents/stats/index.php @@ -35,10 +35,10 @@ $userid=GETPOST('userid', 'int'); if ($userid < 0) $userid=0; $socid=GETPOST('socid', 'int'); if ($socid < 0) $socid=0; // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $result=restrictedArea($user, 'adherent', '', '', 'cotisation'); diff --git a/htdocs/adherents/type_translation.php b/htdocs/adherents/type_translation.php index ac9a269bf29..5a4f84868e1 100644 --- a/htdocs/adherents/type_translation.php +++ b/htdocs/adherents/type_translation.php @@ -41,7 +41,7 @@ $cancel=GETPOST('cancel', 'alpha'); // Security check $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; // Security check $result=restrictedArea($user, 'adherent', $id, 'adherent_type'); diff --git a/htdocs/admin/emailcollector_card.php b/htdocs/admin/emailcollector_card.php index daa0c896809..a0b440003d2 100644 --- a/htdocs/admin/emailcollector_card.php +++ b/htdocs/admin/emailcollector_card.php @@ -75,8 +75,8 @@ if (empty($action) && empty($id) && empty($ref)) $action='view'; include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$isdraft = (($object->statut == MyObject::STATUS_DRAFT) ? 1 : 0); //$result = restrictedArea($user, 'mymodule', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); diff --git a/htdocs/admin/emailcollector_list.php b/htdocs/admin/emailcollector_list.php index 09ba5f7224f..e8b2e280a7f 100644 --- a/htdocs/admin/emailcollector_list.php +++ b/htdocs/admin/emailcollector_list.php @@ -78,9 +78,9 @@ if (! $sortorder) $sortorder="ASC"; // Security check $socid=0; -if ($user->societe_id > 0) // Protection if external user +if ($user->socid > 0) // Protection if external user { - //$socid = $user->societe_id; + //$socid = $user->socid; accessforbidden(); } //$result = restrictedArea($user, 'emailcollector', $id, ''); diff --git a/htdocs/admin/mails_senderprofile_list.php b/htdocs/admin/mails_senderprofile_list.php index 58f107dfdf5..adb54c7434f 100644 --- a/htdocs/admin/mails_senderprofile_list.php +++ b/htdocs/admin/mails_senderprofile_list.php @@ -71,9 +71,9 @@ if (! $sortorder) $sortorder="ASC"; // Protection if external user $socid=0; -if ($user->societe_id > 0) +if ($user->socid > 0) { - //$socid = $user->societe_id; + //$socid = $user->socid; accessforbidden(); } diff --git a/htdocs/admin/tools/listevents.php b/htdocs/admin/tools/listevents.php index 9bbe81993c4..c0d08f4b505 100644 --- a/htdocs/admin/tools/listevents.php +++ b/htdocs/admin/tools/listevents.php @@ -35,10 +35,10 @@ $action=GETPOST('action', 'alpha'); $confirm=GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } // Load translation files required by the page diff --git a/htdocs/admin/tools/listsessions.php b/htdocs/admin/tools/listsessions.php index 1fedf9e40de..06bed7a3f3a 100644 --- a/htdocs/admin/tools/listsessions.php +++ b/htdocs/admin/tools/listsessions.php @@ -35,10 +35,10 @@ $action=GETPOST('action', 'alpha'); $confirm=GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $sortfield = GETPOST("sortfield", 'alpha'); diff --git a/htdocs/asset/card.php b/htdocs/asset/card.php index 7c2f1b42f32..7d49d253755 100644 --- a/htdocs/asset/card.php +++ b/htdocs/asset/card.php @@ -60,8 +60,8 @@ foreach($object->fields as $key => $val) if (empty($action) && empty($id) && empty($ref)) $action='view'; // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'asset', $id); // Load object diff --git a/htdocs/asset/document.php b/htdocs/asset/document.php index d1fa8c1e04b..976b8974f5a 100644 --- a/htdocs/asset/document.php +++ b/htdocs/asset/document.php @@ -40,8 +40,8 @@ $id=(GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); $ref = GETPOST('ref', 'alpha'); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'asset', $id); // Get parameters diff --git a/htdocs/asset/info.php b/htdocs/asset/info.php index f3758ebca8e..f3c385831a1 100644 --- a/htdocs/asset/info.php +++ b/htdocs/asset/info.php @@ -34,7 +34,7 @@ $ref=GETPOST('ref', 'alpha'); $action=GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'asset', $id, ''); $object = new Asset($db); diff --git a/htdocs/asset/list.php b/htdocs/asset/list.php index bd2d19bbc87..697f3becd9b 100644 --- a/htdocs/asset/list.php +++ b/htdocs/asset/list.php @@ -72,9 +72,9 @@ if (! $sortorder) $sortorder="ASC"; // Protection if external user $socid=0; -if ($user->societe_id > 0) +if ($user->socid > 0) { - //$socid = $user->societe_id; + //$socid = $user->socid; accessforbidden(); } //$result = restrictedArea($user, 'asset', $id,''); diff --git a/htdocs/asset/note.php b/htdocs/asset/note.php index 0c03619d31c..dce1daaa3ca 100644 --- a/htdocs/asset/note.php +++ b/htdocs/asset/note.php @@ -46,8 +46,8 @@ $hookmanager->initHooks(array('assetnote')); // Note that conf->hooks_module $extrafields->fetch_name_optionals_label($object->table_element); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'asset', $id); // Load object diff --git a/htdocs/bom/bom_agenda.php b/htdocs/bom/bom_agenda.php index 87fb55a6541..c38d0a82a69 100644 --- a/htdocs/bom/bom_agenda.php +++ b/htdocs/bom/bom_agenda.php @@ -53,8 +53,8 @@ else $search_agenda_label=GETPOST('search_agenda_label'); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'bom', $id); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index eea20d6721c..231679f7b3a 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -70,8 +70,8 @@ if (empty($action) && empty($id) && empty($ref)) $action='view'; include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$isdraft = (($object->statut == BillOfMaterials::STATUS_DRAFT) ? 1 : 0); //$result = restrictedArea($user, 'bom', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); diff --git a/htdocs/bom/bom_document.php b/htdocs/bom/bom_document.php index 826222af8b0..f0dac37a5a0 100644 --- a/htdocs/bom/bom_document.php +++ b/htdocs/bom/bom_document.php @@ -41,8 +41,8 @@ $id=(GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); $ref = GETPOST('ref', 'alpha'); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'bom', $id); // Get parameters diff --git a/htdocs/bom/bom_list.php b/htdocs/bom/bom_list.php index 6e192a06545..0775c2cc370 100644 --- a/htdocs/bom/bom_list.php +++ b/htdocs/bom/bom_list.php @@ -73,9 +73,9 @@ if (! $sortorder) $sortorder="ASC"; // Security check $socid=0; -if ($user->societe_id > 0) // Protection if external user +if ($user->socid > 0) // Protection if external user { - //$socid = $user->societe_id; + //$socid = $user->socid; accessforbidden(); } //$result = restrictedArea($user, 'bom', $id, ''); diff --git a/htdocs/bom/bom_note.php b/htdocs/bom/bom_note.php index 481d8f1d799..e733b96d12b 100644 --- a/htdocs/bom/bom_note.php +++ b/htdocs/bom/bom_note.php @@ -47,8 +47,8 @@ $hookmanager->initHooks(array('bomnote','globalcard')); // Note that conf->h $extrafields->fetch_name_optionals_label($object->table_element); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'bom', $id); // Load object diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index d60b3251f0d..c8244bc307e 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -779,9 +779,9 @@ class Categorie extends CommonObject $sql .= " AND c.fk_categorie = ".$this->id; $sql .= " AND c.fk_" . $this->MAP_CAT_FK[$type] . " = o.rowid"; // Protection for external users - if (($type == 'customer' || $type == 'supplier') && $user->societe_id > 0) + if (($type == 'customer' || $type == 'supplier') && $user->socid > 0) { - $sql.= " AND o.rowid = ".$user->societe_id; + $sql.= " AND o.rowid = ".$user->socid; } if ($limit > 0 || $offset > 0) $sql .= $this->db->plimit($limit + 1, $offset); $sql .= $this->db->order($sortfield, $sortorder); diff --git a/htdocs/categories/photos.php b/htdocs/categories/photos.php index 6def65666a0..754b846576d 100644 --- a/htdocs/categories/photos.php +++ b/htdocs/categories/photos.php @@ -136,7 +136,7 @@ if ($object->id) } $morehtmlref.='
    '; - dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref', 'ref', $morehtmlref, '', 0, '', '', 1); + dol_banner_tab($object, 'ref', $linkback, ($user->socid?0:1), 'ref', 'ref', $morehtmlref, '', 0, '', '', 1); /* * Confirmation de la suppression de photo diff --git a/htdocs/categories/traduction.php b/htdocs/categories/traduction.php index 3c9c7eb64e4..1c082dfe332 100644 --- a/htdocs/categories/traduction.php +++ b/htdocs/categories/traduction.php @@ -207,7 +207,7 @@ foreach ($ways as $way) } $morehtmlref.=''; -dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref', 'ref', $morehtmlref, '', 0, '', '', 1); +dol_banner_tab($object, 'ref', $linkback, ($user->socid?0:1), 'ref', 'ref', $morehtmlref, '', 0, '', '', 1); print '
    '; diff --git a/htdocs/categories/viewcat.php b/htdocs/categories/viewcat.php index fb246b5358b..45926847df4 100644 --- a/htdocs/categories/viewcat.php +++ b/htdocs/categories/viewcat.php @@ -226,7 +226,7 @@ foreach ($ways as $way) } $morehtmlref.=''; -dol_banner_tab($object, 'label', $linkback, ($user->societe_id?0:1), 'label', 'label', $morehtmlref, '', 0, '', '', 1); +dol_banner_tab($object, 'label', $linkback, ($user->socid?0:1), 'label', 'label', $morehtmlref, '', 0, '', '', 1); /* diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 15a6f820647..e0a29db412b 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -69,9 +69,9 @@ $datef=dol_mktime($fulldayevent?'23':$p2hour, $fulldayevent?'59':$p2min, $fullda // Security check $socid = GETPOST('socid', 'int'); $id = GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'agenda', $id, 'actioncomm&societe', 'myactions|allactions', 'fk_soc', 'id'); -if ($user->societe_id && $socid) $result = restrictedArea($user, 'societe', $socid); +if ($user->socid && $socid) $result = restrictedArea($user, 'societe', $socid); $error=GETPOST("error"); $donotclearsession=GETPOST('donotclearsession')?GETPOST('donotclearsession'):0; @@ -1024,8 +1024,8 @@ if ($action == 'create') $events=array(); $events[]=array('method' => 'getContacts', 'url' => dol_buildpath('/core/ajax/contacts.php?showempty=1', 1), 'htmlname' => 'contactid', 'params' => array('add-customer-contact' => 'disabled')); //For external user force the company to user company - if (!empty($user->societe_id)) { - print $form->select_company($user->societe_id, 'socid', '', 1, 1, 0, $events, 0, 'minwidth300'); + if (!empty($user->socid)) { + print $form->select_company($user->socid, 'socid', '', 1, 1, 0, $events, 0, 'minwidth300'); } else { print $form->select_company('', 'socid', '', 'SelectThirdParty', 1, 0, $events, 0, 'minwidth300'); } @@ -1612,7 +1612,7 @@ if ($id > 0) $morehtmlref.=''; - dol_banner_tab($object, 'id', $linkback, ($user->societe_id?0:1), 'id', 'ref', $morehtmlref); + dol_banner_tab($object, 'id', $linkback, ($user->socid?0:1), 'id', 'ref', $morehtmlref); print '
    '; diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 8432ba786a1..2b502d02738 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1067,13 +1067,13 @@ class ActionComm extends CommonObject $sql = "SELECT count(a.id) as nb"; } $sql.= " FROM ".MAIN_DB_PREFIX."actioncomm as a"; - if (! $user->rights->societe->client->voir && ! $user->societe_id) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON a.fk_soc = sc.fk_soc"; + if (! $user->rights->societe->client->voir && ! $user->socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON a.fk_soc = sc.fk_soc"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON a.fk_soc = s.rowid"; $sql.= " WHERE 1 = 1"; if(empty($load_state_board)) $sql.= " AND a.percent >= 0 AND a.percent < 100"; $sql.= " AND a.entity IN (".getEntity('agenda').")"; - if (! $user->rights->societe->client->voir && ! $user->societe_id) $sql.= " AND (a.fk_soc IS NULL OR sc.fk_user = " .$user->id . ")"; - if ($user->societe_id) $sql.=" AND a.fk_soc = ".$user->societe_id; + if (! $user->rights->societe->client->voir && ! $user->socid) $sql.= " AND (a.fk_soc IS NULL OR sc.fk_user = " .$user->id . ")"; + if ($user->socid) $sql.=" AND a.fk_soc = ".$user->socid; if (! $user->rights->agenda->allactions->read) $sql.= " AND (a.fk_user_author = ".$user->id . " OR a.fk_user_action = ".$user->id . " OR a.fk_user_done = ".$user->id . ")"; $resql=$this->db->query($sql); diff --git a/htdocs/comm/action/document.php b/htdocs/comm/action/document.php index 6f0875be879..f01f49921e7 100644 --- a/htdocs/comm/action/document.php +++ b/htdocs/comm/action/document.php @@ -45,8 +45,8 @@ $confirm = GETPOST('confirm', 'alpha'); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; -if ($user->societe_id > 0) +if ($user->socid) $socid=$user->socid; +if ($user->socid > 0) { unset($_GET["action"]); $action=''; @@ -159,7 +159,7 @@ if ($object->id > 0) } $morehtmlref.='
    '; - dol_banner_tab($object, 'id', $linkback, ($user->societe_id?0:1), 'id', 'ref', $morehtmlref); + dol_banner_tab($object, 'id', $linkback, ($user->socid?0:1), 'id', 'ref', $morehtmlref); print '
    '; diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index 9ad3ef80dde..d012f2654bb 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -67,7 +67,7 @@ if (! $sortfield) $sortfield="a.datec"; // Security check $socid = GETPOST("search_socid", "int")?GETPOST("search_socid", "int"):GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'agenda', 0, '', 'myactions'); if ($socid < 0) $socid=''; @@ -1735,7 +1735,7 @@ function sort_events_by_date($a, $b) } // If both events have the same start time, longest first - + if(! is_numeric($b->datef)) { // when event B have no end timestamp, event B should sort be before event A (All day events on top) diff --git a/htdocs/comm/action/info.php b/htdocs/comm/action/info.php index 02277fc30e8..a88ff67fd91 100644 --- a/htdocs/comm/action/info.php +++ b/htdocs/comm/action/info.php @@ -39,10 +39,10 @@ $langs->load("commercial"); $id = GETPOST('id', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $result = restrictedArea($user, 'agenda', $id, 'actioncomm&societe', 'myactions|allactions', 'fk_soc', 'id'); @@ -102,7 +102,7 @@ if (! empty($conf->projet->enabled)) } $morehtmlref.='
    '; -dol_banner_tab($object, 'id', $linkback, ($user->societe_id?0:1), 'id', 'ref', $morehtmlref); +dol_banner_tab($object, 'id', $linkback, ($user->socid?0:1), 'id', 'ref', $morehtmlref); print '
    '; diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index 1b33e5da9b8..c736dccf99c 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -110,7 +110,7 @@ if (! $sortfield) // Security check $socid = GETPOST("search_socid", 'int')?GETPOST("search_socid", 'int'):GETPOST("socid", 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'agenda', 0, '', 'myactions'); if ($socid < 0) $socid=''; diff --git a/htdocs/comm/action/pertype.php b/htdocs/comm/action/pertype.php index 286863c7dc6..b078fa99ad9 100644 --- a/htdocs/comm/action/pertype.php +++ b/htdocs/comm/action/pertype.php @@ -65,7 +65,7 @@ if (! $sortfield) $sortfield="a.datec"; // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'agenda', 0, '', 'myactions'); if ($socid < 0) $socid=''; diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index ce577de78bd..a36a23cf306 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -65,7 +65,7 @@ if (! $sortfield) $sortfield="a.datec"; // Security check $socid = GETPOST("search_socid", "int")?GETPOST("search_socid", "int"):GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'agenda', 0, '', 'myactions'); if ($socid < 0) $socid=''; diff --git a/htdocs/comm/action/rapport/index.php b/htdocs/comm/action/rapport/index.php index 8cc1774cba2..c6549c5c39a 100644 --- a/htdocs/comm/action/rapport/index.php +++ b/htdocs/comm/action/rapport/index.php @@ -49,7 +49,7 @@ if (! $sortfield) $sortfield="a.datep"; // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'agenda', $socid, '', 'myactions'); diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php index 57239c355b4..a0263065dee 100644 --- a/htdocs/comm/card.php +++ b/htdocs/comm/card.php @@ -59,7 +59,7 @@ if (! empty($conf->notification->enabled)) $langs->load("mails"); // Security check $id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); -if ($user->societe_id > 0) $id=$user->societe_id; +if ($user->socid > 0) $id=$user->socid; $result = restrictedArea($user, 'societe', $id, '&societe'); $action = GETPOST('action', 'aZ09'); @@ -240,7 +240,7 @@ if ($object->id > 0) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; @@ -387,7 +387,7 @@ if ($object->id > 0) print ''; print ''; diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index a2b89dedb11..5d972e8e172 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -3254,7 +3254,7 @@ class Propal extends CommonObject $sql = "SELECT p.rowid, p.ref, p.datec as datec, p.fin_validite as datefin, p.total_ht"; $sql.= " FROM ".MAIN_DB_PREFIX."propal as p"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON p.fk_soc = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; @@ -3263,7 +3263,7 @@ class Propal extends CommonObject $sql.= $clause." p.entity IN (".getEntity('propal').")"; if ($mode == 'opened') $sql.= " AND p.fk_statut = ".self::STATUS_VALIDATED; if ($mode == 'signed') $sql.= " AND p.fk_statut = ".self::STATUS_SIGNED; - if ($user->societe_id) $sql.= " AND p.fk_soc = ".$user->societe_id; + if ($user->socid) $sql.= " AND p.fk_soc = ".$user->socid; $resql=$this->db->query($sql); if ($resql) @@ -3433,7 +3433,7 @@ class Propal extends CommonObject $sql = "SELECT count(p.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."propal as p"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON p.fk_soc = s.rowid"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; diff --git a/htdocs/comm/propal/class/propalestats.class.php b/htdocs/comm/propal/class/propalestats.class.php index bd0f57bc801..0859bdb7974 100644 --- a/htdocs/comm/propal/class/propalestats.class.php +++ b/htdocs/comm/propal/class/propalestats.class.php @@ -112,7 +112,7 @@ class PropaleStats extends Stats $sql = "SELECT date_format(".$this->field_date.",'%m') as dm, COUNT(*) as nb"; $sql.= " FROM ".$this->from; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE ".$this->field_date." BETWEEN '".$this->db->idate(dol_get_first_day($year))."' AND '".$this->db->idate(dol_get_last_day($year))."'"; $sql.= " AND ".$this->where; $sql.= " GROUP BY dm"; diff --git a/htdocs/comm/propal/contact.php b/htdocs/comm/propal/contact.php index cb798e2fdd6..14f5913c4ce 100644 --- a/htdocs/comm/propal/contact.php +++ b/htdocs/comm/propal/contact.php @@ -41,7 +41,7 @@ $lineid=GETPOST('lineid', 'int'); $action=GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'propal', $id); $object = new Propal($db); diff --git a/htdocs/comm/propal/document.php b/htdocs/comm/propal/document.php index c1719ddbe45..55a21445be2 100644 --- a/htdocs/comm/propal/document.php +++ b/htdocs/comm/propal/document.php @@ -46,9 +46,9 @@ $ref = GETPOST('ref', 'alpha'); // Security check $socid=''; -if (! empty($user->societe_id)) +if (! empty($user->socid)) { - $socid = $user->societe_id; + $socid = $user->socid; } $result = restrictedArea($user, 'propal', $id); diff --git a/htdocs/comm/propal/index.php b/htdocs/comm/propal/index.php index a1104682904..d802548ac6b 100644 --- a/htdocs/comm/propal/index.php +++ b/htdocs/comm/propal/index.php @@ -38,10 +38,10 @@ $langs->loadLangs(array('propal', 'companies')); // Security check $socid=GETPOST('socid', 'int'); -if (isset($user->societe_id) && $user->societe_id > 0) +if (isset($user->socid) && $user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $result = restrictedArea($user, 'propal'); @@ -87,7 +87,7 @@ $sql.= ", ".MAIN_DB_PREFIX."propal as p"; if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE p.fk_soc = s.rowid"; $sql.= " AND p.entity IN (".getEntity('propal').")"; -if ($user->societe_id) $sql.=' AND p.fk_soc = '.$user->societe_id; +if ($user->socid) $sql.=' AND p.fk_soc = '.$user->socid; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " AND p.fk_statut IN (0,1,2,3,4)"; $sql.= " GROUP BY p.fk_statut"; diff --git a/htdocs/comm/propal/info.php b/htdocs/comm/propal/info.php index 848d707f22f..1e27f187488 100644 --- a/htdocs/comm/propal/info.php +++ b/htdocs/comm/propal/info.php @@ -40,7 +40,7 @@ $ref=GETPOST('ref', 'alpha'); $socid=GETPOST('socid', 'int'); // Security check -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result = restrictedArea($user, 'propal', $id); $object = new Propal($db); diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 01d4c264667..a83d7ee5161 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -112,7 +112,7 @@ if (! $sortorder) $sortorder='DESC'; $module='propal'; $dbtable=''; $objectid=''; -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; if (! empty($socid)) { $objectid=$socid; diff --git a/htdocs/comm/propal/note.php b/htdocs/comm/propal/note.php index 7c3d58f64d5..ee9d9bd9c4f 100644 --- a/htdocs/comm/propal/note.php +++ b/htdocs/comm/propal/note.php @@ -41,7 +41,7 @@ $ref=GETPOST('ref', 'alpha'); $action=GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'propale', $id, 'propal'); $object = new Propal($db); diff --git a/htdocs/comm/propal/stats/index.php b/htdocs/comm/propal/stats/index.php index 1d81b553f7a..a37006d60fb 100644 --- a/htdocs/comm/propal/stats/index.php +++ b/htdocs/comm/propal/stats/index.php @@ -42,10 +42,10 @@ $object_status=GETPOST('object_status'); $userid=GETPOST('userid', 'int'); $socid=GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $nowyear=strftime("%Y", dol_now()); @@ -94,7 +94,7 @@ $data = $stats->getNbByMonthWithPrevYear($endyear, $startyear); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenamenb = $dir.'/proposalsnbinyear-'.$user->id.'-'.$year.'.png'; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=propalstats&file=proposalsnbinyear-'.$user->id.'-'.$year.'.png'; @@ -134,7 +134,7 @@ if (! $mesg) $data = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, 0); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenameamount = $dir.'/proposalsamountinyear-'.$user->id.'-'.$year.'.png'; $fileurlamount = DOL_URL_ROOT.'/viewimage.php?modulepart=propalstats&file=proposalsamountinyear-'.$user->id.'-'.$year.'.png'; @@ -173,7 +173,7 @@ if (! $mesg) $data = $stats->getAverageByMonthWithPrevYear($endyear, $startyear); $fileurl_avg=''; -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filename_avg = $dir.'/ordersaverage-'.$user->id.'-'.$year.'.png'; if ($mode == 'customer') $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersaverage-'.$user->id.'-'.$year.'.png'; diff --git a/htdocs/comm/prospect/index.php b/htdocs/comm/prospect/index.php index cdd94c9cf6c..485771939c4 100644 --- a/htdocs/comm/prospect/index.php +++ b/htdocs/comm/prospect/index.php @@ -30,9 +30,9 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php'; $langs->load("propal"); -if ($user->societe_id > 0) +if ($user->socid > 0) { - $socid = $user->societe_id; + $socid = $user->socid; } diff --git a/htdocs/comm/prospect/recap-prospect.php b/htdocs/comm/prospect/recap-prospect.php index 192aaccbddf..07741635bcc 100644 --- a/htdocs/comm/prospect/recap-prospect.php +++ b/htdocs/comm/prospect/recap-prospect.php @@ -32,10 +32,10 @@ if (! empty($conf->facture->enabled)) $langs->load("bills"); // Security check $socid = $_GET["socid"]; -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } diff --git a/htdocs/comm/recap-client.php b/htdocs/comm/recap-client.php index 0759c47c06c..9605281d6ca 100644 --- a/htdocs/comm/recap-client.php +++ b/htdocs/comm/recap-client.php @@ -32,10 +32,10 @@ if (! empty($conf->facture->enabled)) $langs->load("bills"); // Security check $socid = $_GET["socid"]; -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } diff --git a/htdocs/comm/remise.php b/htdocs/comm/remise.php index a704a4be173..32c6869d576 100644 --- a/htdocs/comm/remise.php +++ b/htdocs/comm/remise.php @@ -33,9 +33,9 @@ $id=GETPOST("id", 'int'); $socid = GETPOST('id', 'int')?GETPOST('id', 'int'):GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { - $socid = $user->societe_id; + $socid = $user->socid; } $backtopage = GETPOST('backtopage', 'alpha'); @@ -116,7 +116,7 @@ if ($socid > 0) dol_fiche_head($head, 'relativediscount', $langs->trans("ThirdParty"), -1, 'company'); - dol_banner_tab($object, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', '', ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php index 002eb7288e2..523c6ebc7b1 100644 --- a/htdocs/comm/remx.php +++ b/htdocs/comm/remx.php @@ -40,9 +40,9 @@ $backtopage=GETPOST('backtopage', 'alpha'); // Security check $socid = GETPOST('id', 'int')?GETPOST('id', 'int'):GETPOST('socid', 'int'); -if ($user->societe_id > 0) +if ($user->socid > 0) { - $socid = $user->societe_id; + $socid = $user->socid; } @@ -252,7 +252,7 @@ if ($socid > 0) dol_fiche_head($head, 'absolutediscount', $langs->trans("ThirdParty"), 0, 'company'); - dol_banner_tab($object, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', '', ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index e645bf3cee6..7fd0d7326c4 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -82,8 +82,8 @@ $hidedesc = (GETPOST('hidedesc', 'int') ? GETPOST('hidedesc', 'int') : (! empty( $hideref = (GETPOST('hideref', 'int') ? GETPOST('hideref', 'int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0)); // Security check -if (! empty($user->societe_id)) - $socid = $user->societe_id; +if (! empty($user->socid)) + $socid = $user->socid; $result = restrictedArea($user, 'commande', $id); $object = new Commande($db); @@ -1803,7 +1803,7 @@ if ($action == 'create' && $usercancreate) print '
    '; // Note private - if (empty($user->societe_id)) { + if (empty($user->socid)) { print ''; print ''; print ''; // Private note - if (empty($user->societe_id)) + if (empty($user->socid)) { print ''; print ''; diff --git a/htdocs/commande/stats/index.php b/htdocs/commande/stats/index.php index 696823f4e41..bdf277bc375 100644 --- a/htdocs/commande/stats/index.php +++ b/htdocs/commande/stats/index.php @@ -43,10 +43,10 @@ $object_status=GETPOST('object_status'); $userid=GETPOST('userid', 'int'); $socid=GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $nowyear=strftime("%Y", dol_now()); @@ -101,7 +101,7 @@ $data = $stats->getNbByMonthWithPrevYear($endyear, $startyear); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenamenb = $dir.'/ordersnbinyear-'.$user->id.'-'.$year.'.png'; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersnbinyear-'.$user->id.'-'.$year.'.png'; @@ -144,7 +144,7 @@ $data = $stats->getAmountByMonthWithPrevYear($endyear, $startyear); //var_dump($data); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenameamount = $dir.'/ordersamountinyear-'.$user->id.'-'.$year.'.png'; if ($mode == 'customer') $fileurlamount = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersamountinyear-'.$user->id.'-'.$year.'.png'; @@ -185,7 +185,7 @@ if (! $mesg) $data = $stats->getAverageByMonthWithPrevYear($endyear, $startyear); -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filename_avg = $dir.'/ordersaverage-'.$user->id.'-'.$year.'.png'; if ($mode == 'customer') $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersaverage-'.$user->id.'-'.$year.'.png'; diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index cbecd9cbc05..f9d7e44794c 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -73,7 +73,7 @@ $arrayfields=array( if (empty($conf->comptabilite->enabled) && empty($conf->accounting->enabled)) { accessforbidden(); } -if ($user->societe_id > 0) { +if ($user->socid > 0) { accessforbidden(); } diff --git a/htdocs/compta/bank/annuel.php b/htdocs/compta/bank/annuel.php index 7f96d9e28e7..b5839db2200 100644 --- a/htdocs/compta/bank/annuel.php +++ b/htdocs/compta/bank/annuel.php @@ -41,7 +41,7 @@ $ref=GETPOST('ref'); // Security check $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref :'')); $fieldtype = (! empty($ref) ? 'ref' :'rowid'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'banque', $fieldvalue, 'bank_account&bank_account', '', '', $fieldtype); $year_start=GETPOST('year_start'); diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 457e311d01c..d2b998be2d9 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -66,12 +66,12 @@ $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref :'')); $fieldtype = (! empty($ref) ? 'ref' :'rowid'); if ($fielvalue) { - if ($user->societe_id) $socid=$user->societe_id; + if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'banque', $fieldvalue, 'bank_account&bank_account', '', '', $fieldtype); } else { - if ($user->societe_id) $socid=$user->societe_id; + if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'banque'); } diff --git a/htdocs/compta/bank/budget.php b/htdocs/compta/bank/budget.php index 41275ec2a40..c9c5a0f77fe 100644 --- a/htdocs/compta/bank/budget.php +++ b/htdocs/compta/bank/budget.php @@ -31,7 +31,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $langs->loadLangs(array('banks', 'categories')); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'banque'); diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index 53fa268b750..57cff121010 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -1188,7 +1188,7 @@ class Account extends CommonObject // phpcs:enable global $conf, $langs; - if ($user->societe_id) return -1; // protection pour eviter appel par utilisateur externe + if ($user->socid) return -1; // protection pour eviter appel par utilisateur externe $sql = "SELECT b.rowid, b.datev as datefin"; $sql.= " FROM ".MAIN_DB_PREFIX."bank as b,"; @@ -1244,7 +1244,7 @@ class Account extends CommonObject // phpcs:enable global $user; - if ($user->societe_id) return -1; // protection pour eviter appel par utilisateur externe + if ($user->socid) return -1; // protection pour eviter appel par utilisateur externe $sql = "SELECT count(b.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."bank as b,"; @@ -1283,7 +1283,7 @@ class Account extends CommonObject global $db, $conf, $user; //Protection against external users - if ($user->societe_id) { + if ($user->socid) { return 0; } diff --git a/htdocs/compta/bank/document.php b/htdocs/compta/bank/document.php index 67a38e03cc6..1a250a83b10 100644 --- a/htdocs/compta/bank/document.php +++ b/htdocs/compta/bank/document.php @@ -46,12 +46,12 @@ if (isset($_SESSION['DolMessage'])) { } // Security check -if ($user->societe_id) { +if ($user->socid) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } -if ($user->societe_id) - $socid = $user->societe_id; +if ($user->socid) + $socid = $user->socid; // Get parameters $sortfield = GETPOST("sortfield", 'alpha'); diff --git a/htdocs/compta/bank/graph.php b/htdocs/compta/bank/graph.php index 4ad0fe0e261..15f6a1236d5 100644 --- a/htdocs/compta/bank/graph.php +++ b/htdocs/compta/bank/graph.php @@ -40,7 +40,7 @@ if (isset($_GET["account"]) || isset($_GET["ref"])) $id = isset($_GET["account"])?$_GET["account"]:(isset($_GET["ref"])?$_GET["ref"]:''); } $fieldid = isset($_GET["ref"])?'ref':'rowid'; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'banque', $id, 'bank_account&bank_account', '', '', $fieldid); $account=GETPOST("account"); diff --git a/htdocs/compta/bank/line.php b/htdocs/compta/bank/line.php index 389cde747af..7e96ddf31be 100644 --- a/htdocs/compta/bank/line.php +++ b/htdocs/compta/bank/line.php @@ -53,7 +53,7 @@ $cancel=GETPOST('cancel', 'alpha'); // Security check $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref :'')); $fieldtype = (! empty($ref) ? 'ref' :'rowid'); -if ($user->societe_id) $socid=$user->societe_id; +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/list.php b/htdocs/compta/bank/list.php index 1b06a0e222b..524e3f44cbc 100644 --- a/htdocs/compta/bank/list.php +++ b/htdocs/compta/bank/list.php @@ -50,7 +50,7 @@ $search_status=GETPOST('search_status')?GETPOST('search_status', 'alpha'):'opene $optioncss = GETPOST('optioncss', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; if (! empty($user->rights->accounting->chartofaccount)) $allowed=1; // Dictionary with list of banks accounting account allowed to manager of chart account if (! $allowed) $result=restrictedArea($user, 'banque'); diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index ae01b761b1b..cb029902372 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -57,7 +57,7 @@ $newbankreceipt=GETPOST('newbankreceipt', 'alpha'); // Security check $fieldid = (! empty($ref)?$ref:$id); $fieldname = isset($ref)?'ref':'rowid'; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'banque', $fieldid, 'bank_account', '', '', $fieldname); if ($user->rights->banque->consolidate && $action == 'dvnext' && ! empty($dvid)) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index cec68cf2c3a..d2a9cfeb587 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -42,7 +42,7 @@ if (isset($_GET["account"]) || isset($_GET["ref"])) $id = isset($_GET["account"])?$_GET["account"]:(isset($_GET["ref"])?$_GET["ref"]:''); } $fieldid = isset($_GET["ref"])?'ref':'rowid'; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'banque', $id, 'bank_account&bank_account', '', '', $fieldid); diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index 5cb9d3c9558..30472729d92 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -57,7 +57,7 @@ $category_transaction = GETPOST("category_transaction", 'alpha'); // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'banque', '', '', ''); $object = new PaymentVarious($db); diff --git a/htdocs/compta/bank/various_payment/document.php b/htdocs/compta/bank/various_payment/document.php index 21598990aba..7070946e2c7 100644 --- a/htdocs/compta/bank/various_payment/document.php +++ b/htdocs/compta/bank/various_payment/document.php @@ -39,7 +39,7 @@ $confirm = GETPOST('confirm', 'alpha'); // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'banque', '', '', ''); // Get parameters diff --git a/htdocs/compta/bank/various_payment/info.php b/htdocs/compta/bank/various_payment/info.php index 7d55703802e..7498872881d 100644 --- a/htdocs/compta/bank/various_payment/info.php +++ b/htdocs/compta/bank/various_payment/info.php @@ -35,7 +35,7 @@ $action=GETPOST('action', 'aZ09'); // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'banque', '', '', ''); /* diff --git a/htdocs/compta/bank/various_payment/list.php b/htdocs/compta/bank/various_payment/list.php index 6c15c40ecaa..cad88367aa0 100644 --- a/htdocs/compta/bank/various_payment/list.php +++ b/htdocs/compta/bank/various_payment/list.php @@ -35,7 +35,7 @@ $langs->loadLangs(array("compta","banks","bills","accountancy")); // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'banque', '', '', ''); $optioncss = GETPOST('optioncss', 'alpha'); diff --git a/htdocs/compta/cashcontrol/cashcontrol_list.php b/htdocs/compta/cashcontrol/cashcontrol_list.php index 6b767bc3949..b2e5f2222e2 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_list.php +++ b/htdocs/compta/cashcontrol/cashcontrol_list.php @@ -90,9 +90,9 @@ if (! $sortorder) $sortorder="ASC"; // Security check $socid=0; -if ($user->societe_id > 0) // Protection if external user +if ($user->socid > 0) // Protection if external user { - //$socid = $user->societe_id; + //$socid = $user->socid; accessforbidden(); } //$result = restrictedArea($user, 'monmodule', $id, ''); diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php index 01cda8871b5..b4820e11ecb 100644 --- a/htdocs/compta/charges/index.php +++ b/htdocs/compta/charges/index.php @@ -45,7 +45,7 @@ $hookmanager->initHooks(array('specialexpensesindex')); $langs->loadLangs(array('compta', 'bills')); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax|salaries', '', '', 'charges|'); $mode=GETPOST("mode", 'alpha'); diff --git a/htdocs/compta/clients.php b/htdocs/compta/clients.php index b7652587826..15f3504268b 100644 --- a/htdocs/compta/clients.php +++ b/htdocs/compta/clients.php @@ -30,10 +30,10 @@ require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; $action=GETPOST('action', 'aZ09'); // Secrutiy check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } if (! $user->rights->facture->lire) diff --git a/htdocs/compta/deplacement/card.php b/htdocs/compta/deplacement/card.php index 6a320970396..dd56e611545 100644 --- a/htdocs/compta/deplacement/card.php +++ b/htdocs/compta/deplacement/card.php @@ -40,7 +40,7 @@ $langs->load("trips"); // Security check $id = GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'deplacement', $id, ''); $action = GETPOST('action', 'alpha'); @@ -287,7 +287,7 @@ if ($action == 'create') print ''; // Private note - if (empty($user->societe_id)) + if (empty($user->socid)) { print ''; print ''; @@ -385,7 +385,7 @@ elseif ($id) print ""; // Private note - if (empty($user->societe_id)) + if (empty($user->socid)) { print ''; print ''; print ''; print ''; print ''; - if (empty($user->societe_id)) + if (empty($user->socid)) { print ''; print ''; print ''; } -if ($usemargins && ! empty($conf->margin->enabled) && empty($user->societe_id)) +if ($usemargins && ! empty($conf->margin->enabled) && empty($user->socid)) { if (!empty($user->rights->margins->creer)) { diff --git a/htdocs/core/tpl/objectline_view.tpl.php b/htdocs/core/tpl/objectline_view.tpl.php index 165a4ba8a9a..ff66726b207 100644 --- a/htdocs/core/tpl/objectline_view.tpl.php +++ b/htdocs/core/tpl/objectline_view.tpl.php @@ -257,7 +257,7 @@ if ($this->situation_cycle_ref) print ''; } -if ($usemargins && ! empty($conf->margin->enabled) && empty($user->societe_id)) +if ($usemargins && ! empty($conf->margin->enabled) && empty($user->socid)) { if (!empty($user->rights->margins->creer)) { ?> diff --git a/htdocs/document.php b/htdocs/document.php index ac7d96e0b03..d31ccc47c48 100644 --- a/htdocs/document.php +++ b/htdocs/document.php @@ -88,7 +88,7 @@ if (empty($original_file) && empty($hashp)) accessforbidden('Bad link. Missing i if ($modulepart == 'fckeditor') $modulepart='medias'; // For backward compatibility $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; // For some module part, dir may be privates if (in_array($modulepart, array('facture_paiement','unpaid'))) @@ -187,7 +187,7 @@ if (! empty($hashp)) else { // Basic protection (against external users only) - if ($user->societe_id > 0) + if ($user->socid > 0) { if ($sqlprotectagainstexternals) { @@ -199,7 +199,7 @@ else while ($i < $num) { $obj = $db->fetch_object($resql); - if ($user->societe_id != $obj->fk_soc) + if ($user->socid != $obj->fk_soc) { $accessallowed=0; break; diff --git a/htdocs/don/card.php b/htdocs/don/card.php index 54d4e392f61..7227dddcecd 100644 --- a/htdocs/don/card.php +++ b/htdocs/don/card.php @@ -432,7 +432,7 @@ if ($action == 'create') print ''; // Private note - if (empty($user->societe_id)) { + if (empty($user->socid)) { print ''; print ''; print '"; // Note Private - if ($object->note_private && ! $user->societe_id) + if ($object->note_private && ! $user->socid) { print ''; print ''; // Private note - if (empty($user->societe_id)) { + if (empty($user->socid)) { print ''; print ''; print ''; // Private note - if (empty($user->societe_id)) + if (empty($user->socid)) { print ''; print ''; @@ -1608,7 +1608,7 @@ elseif ($id > 0 || ! empty($ref)) // modified by hook if (empty($reshook)) { - if ($user->societe_id == 0) + if ($user->socid == 0) { if ($action != 'editdescription' && ($action != 'presend')) { // Validate diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index 429341cb490..ac0b7609520 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -160,7 +160,7 @@ class Fichinter extends CommonObject $sql = "SELECT count(fi.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."fichinter as fi"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON fi.fk_soc = s.rowid"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; diff --git a/htdocs/fichinter/class/fichinterstats.class.php b/htdocs/fichinter/class/fichinterstats.class.php index d762657caec..98eb218e9ef 100644 --- a/htdocs/fichinter/class/fichinterstats.class.php +++ b/htdocs/fichinter/class/fichinterstats.class.php @@ -200,7 +200,7 @@ class FichinterStats extends Stats $sql = "SELECT product.ref, COUNT(product.ref) as nb, 0 as total, 0 as avg"; $sql.= " FROM ".$this->from.", ".$this->from_line.", ".MAIN_DB_PREFIX."product as product"; - //if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + //if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE ".$this->where; $sql.= " AND c.rowid = tl.fk_fichinter AND tl.fk_product = product.rowid"; $sql.= " AND c.date_valid BETWEEN '".$this->db->idate(dol_get_first_day($year, 1, false))."' AND '".$this->db->idate(dol_get_last_day($year, 12, false))."'"; diff --git a/htdocs/fichinter/contact.php b/htdocs/fichinter/contact.php index 1a43bf8e9f8..562a38f7ea8 100644 --- a/htdocs/fichinter/contact.php +++ b/htdocs/fichinter/contact.php @@ -39,7 +39,7 @@ $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'ficheinter', $id, 'fichinter'); $object = new Fichinter($db); diff --git a/htdocs/fichinter/document.php b/htdocs/fichinter/document.php index f9f67d5a05b..3b6b2bd6299 100644 --- a/htdocs/fichinter/document.php +++ b/htdocs/fichinter/document.php @@ -47,7 +47,7 @@ $action = GETPOST('action', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'ficheinter', $id, 'fichinter'); diff --git a/htdocs/fichinter/index.php b/htdocs/fichinter/index.php index 178a7597626..bf20d6b5c12 100644 --- a/htdocs/fichinter/index.php +++ b/htdocs/fichinter/index.php @@ -42,10 +42,10 @@ $langs->load("interventions"); // Security check $socid=GETPOST('socid', 'int'); -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } @@ -89,7 +89,7 @@ $sql.= ", ".MAIN_DB_PREFIX."fichinter as f"; if (! $user->rights->societe->client->voir && ! $socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE f.entity IN (".getEntity('intervention').")"; $sql.= " AND f.fk_soc = s.rowid"; -if ($user->societe_id) $sql.=' AND f.fk_soc = '.$user->societe_id; +if ($user->socid) $sql.=' AND f.fk_soc = '.$user->socid; if (! $user->rights->societe->client->voir && ! $socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " GROUP BY f.fk_statut"; $resql = $db->query($sql); diff --git a/htdocs/fichinter/info.php b/htdocs/fichinter/info.php index 30aec089ee6..3261ce84d89 100644 --- a/htdocs/fichinter/info.php +++ b/htdocs/fichinter/info.php @@ -40,7 +40,7 @@ $id = GETPOST('id', 'int'); $ref=GETPOST('ref', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'ficheinter', $id, 'fichinter'); $object = new Fichinter($db); diff --git a/htdocs/fichinter/list.php b/htdocs/fichinter/list.php index d45dadf2589..9cee1ec691c 100644 --- a/htdocs/fichinter/list.php +++ b/htdocs/fichinter/list.php @@ -59,7 +59,7 @@ $socid=GETPOST('socid', 'int'); // Security check $id = GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'ficheinter', $id, 'fichinter'); $diroutputmassaction=$conf->ficheinter->dir_output . '/temp/massgeneration/'.$user->id; diff --git a/htdocs/fichinter/note.php b/htdocs/fichinter/note.php index 954027a99da..2982a0ea8c8 100644 --- a/htdocs/fichinter/note.php +++ b/htdocs/fichinter/note.php @@ -39,7 +39,7 @@ $ref = GETPOST('ref', 'alpha'); $action=GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'ficheinter', $id, 'fichinter'); $object = new Fichinter($db); diff --git a/htdocs/fichinter/stats/index.php b/htdocs/fichinter/stats/index.php index 326901728da..02bec47ed86 100644 --- a/htdocs/fichinter/stats/index.php +++ b/htdocs/fichinter/stats/index.php @@ -35,10 +35,10 @@ if (! $user->rights->ficheinter->lire) accessforbidden(); $userid=GETPOST('userid', 'int'); $socid=GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $nowyear=strftime("%Y", dol_now()); @@ -77,7 +77,7 @@ $data = $stats->getNbByMonthWithPrevYear($endyear, $startyear); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenamenb = $dir.'/interventionsnbinyear-'.$user->id.'-'.$year.'.png'; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=interventionstats&file=interventionsnbinyear-'.$user->id.'-'.$year.'.png'; @@ -117,7 +117,7 @@ if (! $mesg) $data = $stats->getAmountByMonthWithPrevYear($endyear, $startyear); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenameamount = $dir.'/interventionsamountinyear-'.$user->id.'-'.$year.'.png'; $fileurlamount = DOL_URL_ROOT.'/viewimage.php?modulepart=interventionstats&file=interventionsamountinyear-'.$user->id.'-'.$year.'.png'; @@ -156,7 +156,7 @@ if (! $mesg) $data = $stats->getAverageByMonthWithPrevYear($endyear, $startyear); -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filename_avg = $dir.'/interventionsaverage-'.$user->id.'-'.$year.'.png'; $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=interventionstats&file=interventionsaverage-'.$user->id.'-'.$year.'.png'; diff --git a/htdocs/fourn/card.php b/htdocs/fourn/card.php index de31ae1b624..6ccd95e6420 100644 --- a/htdocs/fourn/card.php +++ b/htdocs/fourn/card.php @@ -52,7 +52,7 @@ $cancelbutton = GETPOST('cancel', 'alpha'); // Security check $id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); -if ($user->societe_id) $id=$user->societe_id; +if ($user->socid) $id=$user->socid; $result = restrictedArea($user, 'societe&fournisseur', $id, '&societe', '', 'rowid'); $object = new Fournisseur($db); @@ -162,7 +162,7 @@ if ($object->id > 0) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; @@ -266,7 +266,7 @@ if ($object->id > 0) print '
    '; print $langs->trans("CustomerRelativeDiscountShort"); print ''; - if ($user->rights->societe->creer && !$user->societe_id > 0) + if ($user->rights->societe->creer && !$user->socid > 0) { print ''.img_edit($langs->trans("Modify")).''; } @@ -401,7 +401,7 @@ if ($object->id > 0) print '
    '; print $langs->trans("CustomerAbsoluteDiscountShort"); print ''; - if ($user->rights->societe->creer && !$user->societe_id > 0) + if ($user->rights->societe->creer && !$user->socid > 0) { print ''.img_edit($langs->trans("Modify")).''; } @@ -1274,7 +1274,7 @@ if ($object->id > 0) } // Add invoice - if ($user->societe_id == 0) + if ($user->socid == 0) { if (! empty($conf->deplacement->enabled) && $object->status==1) { diff --git a/htdocs/comm/contact.php b/htdocs/comm/contact.php index 10314b597e7..6c0aea2f935 100644 --- a/htdocs/comm/contact.php +++ b/htdocs/comm/contact.php @@ -47,7 +47,7 @@ $begin=GETPOST('begin', 'alpha'); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'societe', $socid, ''); diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php index 43af4f8f1c0..e8b5bc3805f 100644 --- a/htdocs/comm/index.php +++ b/htdocs/comm/index.php @@ -51,10 +51,10 @@ $bid=GETPOST('bid', 'int'); // Securite acces client $socid=GETPOST('socid', 'int'); -if (isset($user->societe_id) && $user->societe_id > 0) +if (isset($user->socid) && $user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $max=3; @@ -559,10 +559,10 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->societe->lire) $sql = "SELECT s.nom as name, s.rowid, s.datec as dc, s.canvas, s.tms as dm"; $sql.= ", s.code_fournisseur"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; - if (! $user->rights->societe->client->voir && ! $user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (! $user->rights->societe->client->voir && ! $user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE s.fournisseur = 1"; $sql.= " AND s.entity IN (".getEntity($companystatic->element).")"; - if (! $user->rights->societe->client->voir && ! $user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if (! $user->rights->societe->client->voir && ! $user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if ($socid) $sql.= " AND s.rowid = ".$socid; $sql.= " ORDER BY s.datec DESC"; $sql.= $db->plimit($max, 0); diff --git a/htdocs/comm/mailing/advtargetemailing.php b/htdocs/comm/mailing/advtargetemailing.php index 1049431b7f2..d9fbd9a37b2 100644 --- a/htdocs/comm/mailing/advtargetemailing.php +++ b/htdocs/comm/mailing/advtargetemailing.php @@ -41,7 +41,7 @@ if (! empty($conf->categorie->enabled)) { } // Security check -if (! $user->rights->mailing->lire || $user->societe_id > 0) +if (! $user->rights->mailing->lire || $user->socid > 0) accessforbidden(); // Load variable for pagination diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index c16d7237439..714a84fe95a 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -38,7 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; // Load translation files required by the page $langs->load("mails"); -if (! $user->rights->mailing->lire || (empty($conf->global->EXTERNAL_USERS_ARE_AUTHORIZED) && $user->societe_id > 0)) accessforbidden(); +if (! $user->rights->mailing->lire || (empty($conf->global->EXTERNAL_USERS_ARE_AUTHORIZED) && $user->socid > 0)) accessforbidden(); $id=(GETPOST('mailid', 'int') ? GETPOST('mailid', 'int') : GETPOST('id', 'int')); $action=GETPOST('action', 'alpha'); diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index 998f4a6c202..48e7b525bee 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; $langs->load("mails"); // Security check -if (! $user->rights->mailing->lire || $user->societe_id > 0) accessforbidden(); +if (! $user->rights->mailing->lire || $user->socid > 0) accessforbidden(); // Load variable for pagination diff --git a/htdocs/comm/mailing/info.php b/htdocs/comm/mailing/info.php index 7b270e460c8..cd0014aeefa 100644 --- a/htdocs/comm/mailing/info.php +++ b/htdocs/comm/mailing/info.php @@ -33,7 +33,7 @@ $id=GETPOST('id'); $langs->load("mails"); // Security check -if (! $user->rights->mailing->lire || $user->societe_id > 0) +if (! $user->rights->mailing->lire || $user->socid > 0) accessforbidden(); diff --git a/htdocs/comm/multiprix.php b/htdocs/comm/multiprix.php index 429e7f3dacf..c99048a8955 100644 --- a/htdocs/comm/multiprix.php +++ b/htdocs/comm/multiprix.php @@ -33,9 +33,9 @@ $langs->loadLangs(array('orders', 'companies')); $id = GETPOST('id', 'int'); $_socid = GETPOST("id", 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { - $_socid = $user->societe_id; + $_socid = $user->socid; } diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 113d3baf503..17a4c485b3e 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -86,7 +86,7 @@ $hideref = (GETPOST('hideref', 'int') ? GETPOST('hideref', 'int') : (! empty($co $NBLINES = 4; // Security check -if (! empty($user->societe_id)) $socid = $user->societe_id; +if (! empty($user->socid)) $socid = $user->socid; $result = restrictedArea($user, 'propal', $id); $object = new Propal($db); @@ -1717,7 +1717,7 @@ if ($action == 'create') print $doleditor->Create(1); // Private note - if (empty($user->societe_id)) + if (empty($user->socid)) { print '
    ' . $langs->trans('NotePrivate') . '
    ' . $langs->trans('NotePrivate') . ''; diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 4cc922a8cbf..4aeb275321f 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3393,7 +3393,7 @@ class Commande extends CommonOrder $sql = "SELECT c.rowid, c.date_creation as datec, c.date_commande, c.date_livraison as delivery_date, c.fk_statut, c.total_ht"; $sql.= " FROM ".MAIN_DB_PREFIX."commande as c"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON c.fk_soc = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; @@ -3402,7 +3402,7 @@ class Commande extends CommonOrder $sql.= $clause." c.entity IN (".getEntity('commande').")"; //$sql.= " AND c.fk_statut IN (1,2,3) AND c.facture = 0"; $sql.= " AND ((c.fk_statut IN (".self::STATUS_VALIDATED.",".self::STATUS_SHIPMENTONPROCESS.")) OR (c.fk_statut = ".self::STATUS_CLOSED." AND c.facture = 0))"; // If status is 2 and facture=1, it must be selected - if ($user->societe_id) $sql.=" AND c.fk_soc = ".$user->societe_id; + if ($user->socid) $sql.=" AND c.fk_soc = ".$user->socid; $resql=$this->db->query($sql); if ($resql) @@ -3774,7 +3774,7 @@ class Commande extends CommonOrder $sql = "SELECT count(co.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."commande as co"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON co.fk_soc = s.rowid"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; diff --git a/htdocs/commande/class/commandestats.class.php b/htdocs/commande/class/commandestats.class.php index 10276e34c0e..0311f4c49ed 100644 --- a/htdocs/commande/class/commandestats.class.php +++ b/htdocs/commande/class/commandestats.class.php @@ -212,7 +212,7 @@ class CommandeStats extends Stats $sql = "SELECT product.ref, COUNT(product.ref) as nb, SUM(tl.".$this->field_line.") as total, AVG(tl.".$this->field_line.") as avg"; $sql.= " FROM ".$this->from.", ".$this->from_line.", ".MAIN_DB_PREFIX."product as product"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE ".$this->where; $sql.= " AND c.rowid = tl.fk_commande AND tl.fk_product = product.rowid"; $sql.= " AND c.date_commande BETWEEN '".$this->db->idate(dol_get_first_day($year, 1, false))."' AND '".$this->db->idate(dol_get_last_day($year, 12, false))."'"; diff --git a/htdocs/commande/contact.php b/htdocs/commande/contact.php index 57e37f9f903..97890c9d2ef 100644 --- a/htdocs/commande/contact.php +++ b/htdocs/commande/contact.php @@ -40,7 +40,7 @@ $ref=GETPOST('ref', 'alpha'); $action=GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'commande', $id, ''); $object = new Commande($db); diff --git a/htdocs/commande/customer.php b/htdocs/commande/customer.php index 2f275adadb9..bcb445c546c 100644 --- a/htdocs/commande/customer.php +++ b/htdocs/commande/customer.php @@ -33,10 +33,10 @@ require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; $action=GETPOST('action', 'aZ09'); // Secrutiy check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } if (! $user->rights->facture->creer) diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php index fa825086c4a..565583e1fae 100644 --- a/htdocs/commande/document.php +++ b/htdocs/commande/document.php @@ -45,9 +45,9 @@ $id = GETPOST('id', 'int'); $ref = GETPOST('ref'); // Security check -if ($user->societe_id) +if ($user->socid) { - $socid = $user->societe_id; + $socid = $user->socid; } $result=restrictedArea($user, 'commande', $id, ''); diff --git a/htdocs/commande/index.php b/htdocs/commande/index.php index 2149c48121b..da1a4fc55df 100644 --- a/htdocs/commande/index.php +++ b/htdocs/commande/index.php @@ -42,10 +42,10 @@ $langs->loadLangs(array('orders', 'bills')); // Security check $socid=GETPOST('socid', 'int'); -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } @@ -92,7 +92,7 @@ $sql.= ", ".MAIN_DB_PREFIX."commande as c"; if (! $user->rights->societe->client->voir && ! $socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE c.fk_soc = s.rowid"; $sql.= " AND c.entity IN (".getEntity('societe').")"; -if ($user->societe_id) $sql.=' AND c.fk_soc = '.$user->societe_id; +if ($user->socid) $sql.=' AND c.fk_soc = '.$user->socid; if (! $user->rights->societe->client->voir && ! $socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " GROUP BY c.fk_statut"; diff --git a/htdocs/commande/info.php b/htdocs/commande/info.php index 7d8e319c5ae..4ca81f77771 100644 --- a/htdocs/commande/info.php +++ b/htdocs/commande/info.php @@ -42,7 +42,7 @@ $id = GETPOST("id", 'int'); $ref=GETPOST('ref', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'commande', $comid, ''); $object = new Commande($db); diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 37dd5a8d570..fffb58429be 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -88,7 +88,7 @@ $search_project=GETPOST('search_project', 'alpha'); // Security check $id = (GETPOST('orderid')?GETPOST('orderid', 'int'):GETPOST('id', 'int')); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'commande', $id, ''); $diroutputmassaction=$conf->commande->multidir_output[$conf->entity] . '/temp/massgeneration/'.$user->id; diff --git a/htdocs/commande/note.php b/htdocs/commande/note.php index 2cb69bd698b..5b8fe052b06 100644 --- a/htdocs/commande/note.php +++ b/htdocs/commande/note.php @@ -42,7 +42,7 @@ $action=GETPOST('action', 'alpha'); // Security check $socid=0; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'commande', $id, ''); diff --git a/htdocs/commande/orderstoinvoice.php b/htdocs/commande/orderstoinvoice.php index fae23fa8bcd..35756a56487 100644 --- a/htdocs/commande/orderstoinvoice.php +++ b/htdocs/commande/orderstoinvoice.php @@ -139,7 +139,7 @@ if (($action == 'create' || $action == 'add') && !$error) // Security check $fieldid = GETPOST('ref', 'alpha')?'ref':'rowid'; - if ($user->societe_id) $socid=$user->societe_id; + if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'facture', $id, '', '', 'fk_soc', $fieldid); $usehm=$conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE; @@ -503,7 +503,7 @@ if ($action == 'create' && !$error) print '
    '.$langs->trans('NotePrivate').'
    '.$langs->trans('NotePrivate').'
    '.$langs->trans("NotePrivate").''; diff --git a/htdocs/compta/deplacement/document.php b/htdocs/compta/deplacement/document.php index 3f2faa267ea..96c8013c18c 100644 --- a/htdocs/compta/deplacement/document.php +++ b/htdocs/compta/deplacement/document.php @@ -43,7 +43,7 @@ $action = GETPOST('action', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'deplacement', $id, ''); diff --git a/htdocs/compta/deplacement/index.php b/htdocs/compta/deplacement/index.php index 0208f9da89f..659744a2ba0 100644 --- a/htdocs/compta/deplacement/index.php +++ b/htdocs/compta/deplacement/index.php @@ -32,7 +32,7 @@ $langs->loadLangs(array('companies', 'users', 'trips')); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'deplacement', '', ''); $sortfield = GETPOST("sortfield", 'alpha'); @@ -143,11 +143,11 @@ $langs->load("boxes"); $sql = "SELECT u.rowid as uid, u.lastname, u.firstname, d.rowid, d.dated as date, d.tms as dm, d.km, d.fk_statut"; $sql.= " FROM ".MAIN_DB_PREFIX."deplacement as d, ".MAIN_DB_PREFIX."user as u"; -if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; +if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE u.rowid = d.fk_user"; $sql.= " AND d.entity = ".$conf->entity; if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous)) $sql.=' AND d.fk_user IN ('.join(',', $childids).')'; -if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND d.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; +if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND d.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if ($socid) $sql.= " AND d.fk_soc = ".$socid; $sql.= $db->order("d.tms", "DESC"); $sql.= $db->plimit($max, 0); diff --git a/htdocs/compta/deplacement/info.php b/htdocs/compta/deplacement/info.php index 510675265a0..28d1d8e68da 100644 --- a/htdocs/compta/deplacement/info.php +++ b/htdocs/compta/deplacement/info.php @@ -32,7 +32,7 @@ $langs->load("trips"); // Security check $id = GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'deplacement', $id, ''); diff --git a/htdocs/compta/deplacement/list.php b/htdocs/compta/deplacement/list.php index 9b5b2b7d9c9..6d5d952d104 100644 --- a/htdocs/compta/deplacement/list.php +++ b/htdocs/compta/deplacement/list.php @@ -36,7 +36,7 @@ $langs->loadLangs(array('companies', 'users', 'trips')); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'deplacement', '', ''); $search_ref=GETPOST('search_ref', 'int'); diff --git a/htdocs/compta/deplacement/stats/index.php b/htdocs/compta/deplacement/stats/index.php index 54e1cd1524e..ccb2ecb60fe 100644 --- a/htdocs/compta/deplacement/stats/index.php +++ b/htdocs/compta/deplacement/stats/index.php @@ -38,12 +38,12 @@ $socid=GETPOST('socid', 'int'); if ($socid < 0) $socid=0; $id = GETPOST('id', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'deplacement', $id, ''); // Other security check @@ -162,7 +162,7 @@ if (! $mesg) $data = $stats->getAverageByMonthWithPrevYear($endyear, $startyear); -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filename_avg = $dir.'/ordersaverage-'.$user->id.'-'.$year.'.png'; if ($mode == 'customer') $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersaverage-'.$user->id.'-'.$year.'.png'; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 08fbb019fd2..7296bc524e2 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -130,7 +130,7 @@ $permissiontoadd = $usercancreate; // Used by the include of actions_addupdatede // Security check $fieldid = (! empty($ref) ? 'ref' : 'rowid'); -if ($user->societe_id) $socid = $user->societe_id; +if ($user->socid) $socid = $user->socid; $isdraft = (($object->statut == Facture::STATUS_DRAFT) ? 1 : 0); $result = restrictedArea($user, 'facture', $id, '', '', 'fk_soc', $fieldid, $isdraft); @@ -3334,7 +3334,7 @@ if ($action == 'create') print $doleditor->Create(1); // Private note - if (empty($user->societe_id)) + if (empty($user->socid)) { print '
    '; @@ -3460,7 +3460,7 @@ elseif ($id > 0 || ! empty($ref)) // fetch optionals attributes and labels $extrafields->fetch_name_optionals_label($object->table_element); - if ($user->societe_id > 0 && $user->societe_id != $object->socid) + if ($user->socid > 0 && $user->socid != $object->socid) { accessforbidden('', 0, 1); } @@ -4547,7 +4547,7 @@ elseif ($id > 0 || ! empty($ref)) } print '' . price($sign * $objp->amount) . ''; - if ($object->statut == Facture::STATUS_VALIDATED && $object->paye == 0 && $user->societe_id == 0) + if ($object->statut == Facture::STATUS_VALIDATED && $object->paye == 0 && $user->socid == 0) { print 'rowid.'">'; print img_delete(); diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 8859578e94b..382f336dbab 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3961,7 +3961,7 @@ class Facture extends CommonInvoice $sql = "SELECT f.rowid, f.date_lim_reglement as datefin,f.fk_statut, f.total"; $sql.= " FROM ".MAIN_DB_PREFIX."facture as f"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON f.fk_soc = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; @@ -3970,7 +3970,7 @@ class Facture extends CommonInvoice $sql.= $clause." f.paye=0"; $sql.= " AND f.entity IN (".getEntity('invoice').")"; $sql.= " AND f.fk_statut = ".self::STATUS_VALIDATED; - if ($user->societe_id) $sql.= " AND f.fk_soc = ".$user->societe_id; + if ($user->socid) $sql.= " AND f.fk_soc = ".$user->socid; $resql=$this->db->query($sql); if ($resql) @@ -4211,7 +4211,7 @@ class Facture extends CommonInvoice $sql = "SELECT count(f.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."facture as f"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; diff --git a/htdocs/compta/facture/contact.php b/htdocs/compta/facture/contact.php index 62960b71346..72bb79545e5 100644 --- a/htdocs/compta/facture/contact.php +++ b/htdocs/compta/facture/contact.php @@ -45,7 +45,7 @@ $socid = GETPOST('socid', 'int'); $action = GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'facture', $id); $object = new Facture($db); diff --git a/htdocs/compta/facture/document.php b/htdocs/compta/facture/document.php index 9527f66b79e..36f768991f8 100644 --- a/htdocs/compta/facture/document.php +++ b/htdocs/compta/facture/document.php @@ -49,9 +49,9 @@ $action=GETPOST('action', 'alpha'); $confirm=GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id) +if ($user->socid) { - $socid = $user->societe_id; + $socid = $user->socid; } $result=restrictedArea($user, 'facture', $id, ''); diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index 79780402108..2c5cd1a87c7 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -58,7 +58,7 @@ $contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'invoice $id=(GETPOST('facid', 'int')?GETPOST('facid', 'int'):GETPOST('id', 'int')); $lineid=GETPOST('lineid', 'int'); $ref=GETPOST('ref', 'alpha'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $objecttype = 'facture_rec'; if ($action == "create" || $action == "add") $objecttype = ''; $result = restrictedArea($user, 'facture', $id, $objecttype); @@ -1039,7 +1039,7 @@ if ($action == 'create') print $doleditor->Create(1); // Private note - if (empty($user->societe_id)) + if (empty($user->socid)) { print '
    '; diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php index f714d51cf6e..09873f5ee61 100644 --- a/htdocs/compta/facture/invoicetemplate_list.php +++ b/htdocs/compta/facture/invoicetemplate_list.php @@ -58,7 +58,7 @@ $contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'invoice $id=(GETPOST('facid', 'int')?GETPOST('facid', 'int'):GETPOST('id', 'int')); $lineid=GETPOST('lineid', 'int'); $ref=GETPOST('ref', 'alpha'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $objecttype = 'facture_rec'; if ($action == "create" || $action == "add") $objecttype = ''; $result = restrictedArea($user, 'facture', $id, $objecttype); diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 5f1ce9e44c3..ae24277a896 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -128,7 +128,7 @@ $pagenext = $page + 1; // Security check $fieldid = (! empty($ref)?'ref':'rowid'); -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result = restrictedArea($user, 'facture', $id, '', '', 'fk_soc', $fieldid); $diroutputmassaction=$conf->facture->dir_output . '/temp/massgeneration/'.$user->id; diff --git a/htdocs/compta/facture/note.php b/htdocs/compta/facture/note.php index beeb5f730ab..ff71b1ff9af 100644 --- a/htdocs/compta/facture/note.php +++ b/htdocs/compta/facture/note.php @@ -43,7 +43,7 @@ $action=GETPOST('action', 'alpha'); // Security check $socid=0; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'facture', $id, ''); $object = new Facture($db); diff --git a/htdocs/compta/facture/prelevement.php b/htdocs/compta/facture/prelevement.php index cf59af89cf6..485401d340e 100644 --- a/htdocs/compta/facture/prelevement.php +++ b/htdocs/compta/facture/prelevement.php @@ -47,7 +47,7 @@ $socid=GETPOST('socid', 'int'); $action=GETPOST('action', 'alpha'); $fieldid = (! empty($ref)?'ref':'rowid'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'facture', $id, '', '', 'fk_soc', $fieldid); $object = new Facture($db); diff --git a/htdocs/compta/facture/stats/index.php b/htdocs/compta/facture/stats/index.php index dadbb27b30d..5f81d34a092 100644 --- a/htdocs/compta/facture/stats/index.php +++ b/htdocs/compta/facture/stats/index.php @@ -41,10 +41,10 @@ $object_status=GETPOST('object_status'); $userid=GETPOST('userid', 'int'); $socid=GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $nowyear=strftime("%Y", dol_now()); @@ -159,7 +159,7 @@ if (! $mesg) $data = $stats->getAverageByMonthWithPrevYear($endyear, $startyear); -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filename_avg = $dir.'/ordersaverage-'.$user->id.'-'.$year.'.png'; if ($mode == 'customer') $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersaverage-'.$user->id.'-'.$year.'.png'; diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index 1453491fd11..ae2a0fcb7b0 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -56,10 +56,10 @@ $bid=GETPOST('bid', 'int'); // Security check $socid=''; -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $max=3; diff --git a/htdocs/compta/journal/purchasesjournal.php b/htdocs/compta/journal/purchasesjournal.php index 55f5c82a72a..07818b3e694 100644 --- a/htdocs/compta/journal/purchasesjournal.php +++ b/htdocs/compta/journal/purchasesjournal.php @@ -45,7 +45,7 @@ $date_endday=GETPOST('date_endday'); $date_endyear=GETPOST('date_endyear'); // Security check -if ($user->societe_id > 0) $socid = $user->societe_id; +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/journal/sellsjournal.php b/htdocs/compta/journal/sellsjournal.php index 74032e34d18..f6cc0ec03b6 100644 --- a/htdocs/compta/journal/sellsjournal.php +++ b/htdocs/compta/journal/sellsjournal.php @@ -47,7 +47,7 @@ $date_endday=GETPOST('date_endday'); $date_endyear=GETPOST('date_endyear'); // Security check -if ($user->societe_id > 0) $socid = $user->societe_id; +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/localtax/card.php b/htdocs/compta/localtax/card.php index e7762b834e4..4acb3f108a3 100644 --- a/htdocs/compta/localtax/card.php +++ b/htdocs/compta/localtax/card.php @@ -40,7 +40,7 @@ $lttype=GETPOST('localTaxType', 'int'); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); $object = new Localtax($db); diff --git a/htdocs/compta/localtax/clients.php b/htdocs/compta/localtax/clients.php index 97f97bbc735..c31a02b5b33 100644 --- a/htdocs/compta/localtax/clients.php +++ b/htdocs/compta/localtax/clients.php @@ -82,7 +82,7 @@ if (empty($modetax)) $modetax=0; // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); if (empty($local)) diff --git a/htdocs/compta/localtax/index.php b/htdocs/compta/localtax/index.php index c02de96035d..6fa963ad25e 100644 --- a/htdocs/compta/localtax/index.php +++ b/htdocs/compta/localtax/index.php @@ -76,7 +76,7 @@ if (empty($modetax)) $modetax=0; // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); diff --git a/htdocs/compta/localtax/list.php b/htdocs/compta/localtax/list.php index 0b0716b53a9..cfa1d492a60 100644 --- a/htdocs/compta/localtax/list.php +++ b/htdocs/compta/localtax/list.php @@ -29,7 +29,7 @@ $langs->load("compta"); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); $ltt=GETPOST("localTaxType"); diff --git a/htdocs/compta/localtax/quadri_detail.php b/htdocs/compta/localtax/quadri_detail.php index 0251173a863..0c49f23dc3d 100644 --- a/htdocs/compta/localtax/quadri_detail.php +++ b/htdocs/compta/localtax/quadri_detail.php @@ -94,7 +94,7 @@ if (empty($modetax)) $modetax=0; // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); if (empty($local)) diff --git a/htdocs/compta/paiement.php b/htdocs/compta/paiement.php index d0377ad9ff1..5590a45f97f 100644 --- a/htdocs/compta/paiement.php +++ b/htdocs/compta/paiement.php @@ -59,9 +59,9 @@ $multicurrency_amounts=array(); $multicurrency_amountsresttopay=array(); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { - $socid = $user->societe_id; + $socid = $user->socid; } $object=new Facture($db); diff --git a/htdocs/compta/paiement/card.php b/htdocs/compta/paiement/card.php index e11da654bdd..74416e649df 100644 --- a/htdocs/compta/paiement/card.php +++ b/htdocs/compta/paiement/card.php @@ -44,7 +44,7 @@ $confirm=GETPOST('confirm', 'alpha'); $backtopage=GETPOST('backtopage', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; // TODO ajouter regle pour restreindre acces paiement //$result = restrictedArea($user, 'facture', $id,''); @@ -429,7 +429,7 @@ print '
    '; if (! empty($conf->global->BILL_ADD_PAYMENT_VALIDATION)) { - if ($user->societe_id == 0 && $object->statut == 0 && $_GET['action'] == '') + if ($user->socid == 0 && $object->statut == 0 && $_GET['action'] == '') { if ($user->rights->facture->paiement) { @@ -438,7 +438,7 @@ if (! empty($conf->global->BILL_ADD_PAYMENT_VALIDATION)) } } -if ($user->societe_id == 0 && $action == '') +if ($user->socid == 0 && $action == '') { if ($user->rights->facture->paiement) { diff --git a/htdocs/compta/paiement/cheque/card.php b/htdocs/compta/paiement/cheque/card.php index 3afce69e94b..f91ac35f678 100644 --- a/htdocs/compta/paiement/cheque/card.php +++ b/htdocs/compta/paiement/cheque/card.php @@ -43,7 +43,7 @@ $confirm=GETPOST('confirm', 'alpha'); // Security check $fieldname = (! empty($ref)?'ref':'rowid'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'cheque', $id, 'bordereau_cheque', '', 'fk_user_author', $fieldname); $sortfield=GETPOST('sortfield', 'alpha'); @@ -770,12 +770,12 @@ else print '
    '; -if ($user->societe_id == 0 && ! empty($object->id) && $object->statut == 0 && $user->rights->banque->cheque) +if ($user->socid == 0 && ! empty($object->id) && $object->statut == 0 && $user->rights->banque->cheque) { print ''.$langs->trans('Validate').''; } -if ($user->societe_id == 0 && ! empty($object->id) && $user->rights->banque->cheque) +if ($user->socid == 0 && ! empty($object->id) && $user->rights->banque->cheque) { print ''.$langs->trans('Delete').''; } diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php index 940013df44e..6f0438644a6 100644 --- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php +++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php @@ -506,7 +506,7 @@ class RemiseCheque extends CommonObject // phpcs:enable global $conf, $langs; - if ($user->societe_id) return -1; // protection pour eviter appel par utilisateur externe + if ($user->socid) return -1; // protection pour eviter appel par utilisateur externe $sql = "SELECT b.rowid, b.datev as datefin"; $sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; @@ -561,7 +561,7 @@ class RemiseCheque extends CommonObject // phpcs:enable global $user; - if ($user->societe_id) return -1; // protection pour eviter appel par utilisateur externe + if ($user->socid) return -1; // protection pour eviter appel par utilisateur externe $sql = "SELECT count(b.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; diff --git a/htdocs/compta/paiement/cheque/index.php b/htdocs/compta/paiement/cheque/index.php index cdbc56896cb..bbec9e1fba7 100644 --- a/htdocs/compta/paiement/cheque/index.php +++ b/htdocs/compta/paiement/cheque/index.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $langs->loadLangs(array('banks', 'categories', 'compta', 'bills')); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'banque', '', ''); diff --git a/htdocs/compta/paiement/cheque/list.php b/htdocs/compta/paiement/cheque/list.php index 396432545d9..2201412f3f8 100644 --- a/htdocs/compta/paiement/cheque/list.php +++ b/htdocs/compta/paiement/cheque/list.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; $langs->loadLangs(array('banks', 'categories', 'bills')); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'banque', '', ''); $search_ref = GETPOST('search_ref', 'alpha'); diff --git a/htdocs/compta/paiement/index.php b/htdocs/compta/paiement/index.php index fa47915f216..89136ec5712 100644 --- a/htdocs/compta/paiement/index.php +++ b/htdocs/compta/paiement/index.php @@ -19,7 +19,7 @@ require '../../main.inc.php'; // Security check -if (!$user->admin && $user->societe_id > 0) +if (!$user->admin && $user->socid > 0) accessforbidden(); diff --git a/htdocs/compta/paiement/list.php b/htdocs/compta/paiement/list.php index 090cc7c83fb..7913d1f8dea 100644 --- a/htdocs/compta/paiement/list.php +++ b/htdocs/compta/paiement/list.php @@ -51,7 +51,7 @@ $month = GETPOST('month', 'int'); $year = GETPOST('year', 'int'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'facture', $facid, ''); $paymentstatic=new Paiement($db); diff --git a/htdocs/compta/paiement/rapport.php b/htdocs/compta/paiement/rapport.php index 35325dce4cb..0140031431f 100644 --- a/htdocs/compta/paiement/rapport.php +++ b/htdocs/compta/paiement/rapport.php @@ -34,10 +34,10 @@ if (! $user->rights->facture->lire) accessforbidden(); $action=GETPOST('action', 'aZ09'); $socid=0; -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $dir = $conf->facture->dir_output.'/payments'; diff --git a/htdocs/compta/paiement/tovalidate.php b/htdocs/compta/paiement/tovalidate.php index 120e326d6a2..e3c23041ec8 100644 --- a/htdocs/compta/paiement/tovalidate.php +++ b/htdocs/compta/paiement/tovalidate.php @@ -32,10 +32,10 @@ if (! $user->rights->facture->lire) accessforbidden(); $socid=0; -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } diff --git a/htdocs/compta/paiement_charge.php b/htdocs/compta/paiement_charge.php index 6cc91072a34..09851d878cc 100644 --- a/htdocs/compta/paiement_charge.php +++ b/htdocs/compta/paiement_charge.php @@ -36,9 +36,9 @@ $amounts = array(); // Security check $socid=0; -if ($user->societe_id > 0) +if ($user->socid > 0) { - $socid = $user->societe_id; + $socid = $user->socid; } diff --git a/htdocs/compta/payment_sc/card.php b/htdocs/compta/payment_sc/card.php index 605f5cec3bc..1371357bb58 100644 --- a/htdocs/compta/payment_sc/card.php +++ b/htdocs/compta/payment_sc/card.php @@ -39,7 +39,7 @@ $langs->loadLangs(array('bills', 'banks', 'companies')); $id=GETPOST("id", 'int'); $action=GETPOST('action', 'aZ09'); $confirm=GETPOST('confirm'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; // TODO ajouter regle pour restreindre acces paiement //$result = restrictedArea($user, 'facture', $id,''); @@ -299,7 +299,7 @@ print '
    '; /* if (! empty($conf->global->BILL_ADD_PAYMENT_VALIDATION)) { - if ($user->societe_id == 0 && $object->statut == 0 && $_GET['action'] == '') + if ($user->socid == 0 && $object->statut == 0 && $_GET['action'] == '') { if ($user->rights->facture->paiement) { diff --git a/htdocs/compta/prelevement/bons.php b/htdocs/compta/prelevement/bons.php index ecea96b7a09..eb18618ab62 100644 --- a/htdocs/compta/prelevement/bons.php +++ b/htdocs/compta/prelevement/bons.php @@ -33,7 +33,7 @@ $langs->loadLangs(array('banks', 'categories', 'widthdrawals')); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'prelevement', '', '', 'bons'); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index 1282226623c..6c60cdaa059 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -37,7 +37,7 @@ if (!$user->rights->prelevement->bons->lire) accessforbidden(); // Security check -if ($user->societe_id > 0) accessforbidden(); +if ($user->socid > 0) accessforbidden(); // Get supervariables $action = GETPOST('action', 'alpha'); diff --git a/htdocs/compta/prelevement/create.php b/htdocs/compta/prelevement/create.php index 3aaad5662a3..c4cad05d1f6 100644 --- a/htdocs/compta/prelevement/create.php +++ b/htdocs/compta/prelevement/create.php @@ -40,7 +40,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $langs->loadLangs(array('banks', 'categories', 'withdrawals', 'companies', 'bills')); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'prelevement', '', '', 'bons'); // Get supervariables diff --git a/htdocs/compta/prelevement/demandes.php b/htdocs/compta/prelevement/demandes.php index 4ea74e83b4f..52b312e6b4c 100644 --- a/htdocs/compta/prelevement/demandes.php +++ b/htdocs/compta/prelevement/demandes.php @@ -36,7 +36,7 @@ $langs->loadLangs(array('banks', 'categories', 'withdrawals', 'companies')); // Security check $socid = GETPOST('socid', 'int'); $status = GETPOST('status', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'prelevement', '', '', 'bons'); $contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'myobjectlist'; // To manage different context of search diff --git a/htdocs/compta/prelevement/factures.php b/htdocs/compta/prelevement/factures.php index fbc36418222..334e36c5a68 100644 --- a/htdocs/compta/prelevement/factures.php +++ b/htdocs/compta/prelevement/factures.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $langs->loadLangs(array('banks', 'categories', 'companies', 'withdrawals', 'bills')); // Securite acces client -if ($user->societe_id > 0) accessforbidden(); +if ($user->socid > 0) accessforbidden(); // Get supervariables $prev_id = GETPOST('id', 'int'); diff --git a/htdocs/compta/prelevement/fiche-rejet.php b/htdocs/compta/prelevement/fiche-rejet.php index 3dbfec69461..17e8dcebe98 100644 --- a/htdocs/compta/prelevement/fiche-rejet.php +++ b/htdocs/compta/prelevement/fiche-rejet.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $langs->loadLangs(array("banks","categories",'withdrawals','bills')); // Securite acces client -if ($user->societe_id > 0) accessforbidden(); +if ($user->socid > 0) accessforbidden(); // Get supervariables $prev_id = GETPOST('id', 'int'); diff --git a/htdocs/compta/prelevement/fiche-stat.php b/htdocs/compta/prelevement/fiche-stat.php index c8914b41f26..01fde1b2450 100644 --- a/htdocs/compta/prelevement/fiche-stat.php +++ b/htdocs/compta/prelevement/fiche-stat.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $langs->loadLangs(array("banks","categories",'withdrawals','bills')); // Security check -if ($user->societe_id > 0) accessforbidden(); +if ($user->socid > 0) accessforbidden(); // Get supervariables $prev_id = GETPOST('id', 'int'); diff --git a/htdocs/compta/prelevement/index.php b/htdocs/compta/prelevement/index.php index 80d7abb4f0a..f2600a76f3a 100644 --- a/htdocs/compta/prelevement/index.php +++ b/htdocs/compta/prelevement/index.php @@ -38,7 +38,7 @@ $langs->loadLangs(array('banks', 'categories', 'withdrawals')); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'prelevement', '', ''); diff --git a/htdocs/compta/prelevement/line.php b/htdocs/compta/prelevement/line.php index 41ac08b0fb2..454861dea73 100644 --- a/htdocs/compta/prelevement/line.php +++ b/htdocs/compta/prelevement/line.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $langs->loadlangs(array('banks', 'categories', 'bills', 'withdrawals')); // Security check -if ($user->societe_id > 0) accessforbidden(); +if ($user->socid > 0) accessforbidden(); // Get supervariables $action = GETPOST('action', 'alpha'); diff --git a/htdocs/compta/prelevement/list.php b/htdocs/compta/prelevement/list.php index 2ffb8def303..c016f1e6c02 100644 --- a/htdocs/compta/prelevement/list.php +++ b/htdocs/compta/prelevement/list.php @@ -34,7 +34,7 @@ $langs->loadLangs(array('banks', 'withdrawals', 'companies', 'categories')); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'prelevement', '', '', 'bons'); diff --git a/htdocs/compta/prelevement/rejets.php b/htdocs/compta/prelevement/rejets.php index 6cde242ae93..4235f5d7fc3 100644 --- a/htdocs/compta/prelevement/rejets.php +++ b/htdocs/compta/prelevement/rejets.php @@ -35,7 +35,7 @@ $langs->loadLangs(array('banks', 'categories', 'withdrawals', 'companies')); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'prelevement', '', '', 'bons'); // Get supervariables diff --git a/htdocs/compta/prelevement/stats.php b/htdocs/compta/prelevement/stats.php index 0dd5087869c..1b9396a411a 100644 --- a/htdocs/compta/prelevement/stats.php +++ b/htdocs/compta/prelevement/stats.php @@ -33,7 +33,7 @@ $langs->loadLangs(array('banks', 'categories', 'withdrawals', 'companies')); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'prelevement', '', '', 'bons'); diff --git a/htdocs/compta/recap-compta.php b/htdocs/compta/recap-compta.php index 6fc1a3b16b2..88a72344f52 100644 --- a/htdocs/compta/recap-compta.php +++ b/htdocs/compta/recap-compta.php @@ -35,7 +35,7 @@ if (! empty($conf->facture->enabled)) $langs->load("bills"); $id = GETPOST('id')?GETPOST('id', 'int'):GETPOST('socid', 'int'); // Security check -if ($user->societe_id) $id=$user->societe_id; +if ($user->socid) $id=$user->socid; $result = restrictedArea($user, 'societe', $id, '&societe'); $object = new Societe($db); @@ -96,7 +96,7 @@ if ($id > 0) $head = societe_prepare_head($object); dol_fiche_head($head, 'customer', $langs->trans("ThirdParty"), 0, 'company'); - dol_banner_tab($object, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom', '', '', 0, '', '', 1); + dol_banner_tab($object, 'socid', '', ($user->socid?0:1), 'rowid', 'nom', '', '', 0, '', '', 1); dol_fiche_end(); if (! empty($conf->facture->enabled) && $user->rights->facture->lire) diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php index 928776aa06e..eb385a681e1 100644 --- a/htdocs/compta/resultat/clientfourn.php +++ b/htdocs/compta/resultat/clientfourn.php @@ -50,7 +50,7 @@ $showaccountdetail = GETPOST('showaccountdetail', 'aZ09')?GETPOST('showaccountde // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id > 0) $socid = $user->societe_id; +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 0503f31d6fb..7dd492e9862 100644 --- a/htdocs/compta/resultat/index.php +++ b/htdocs/compta/resultat/index.php @@ -98,7 +98,7 @@ $nbofyear = ($year_end - $year_start) + 1; // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id > 0) $socid = $user->societe_id; +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/result.php b/htdocs/compta/resultat/result.php index 8b8f7126568..9af5a559f5e 100644 --- a/htdocs/compta/resultat/result.php +++ b/htdocs/compta/resultat/result.php @@ -130,7 +130,7 @@ if (! empty($conf->accounting->enabled)) $modecompta='BOOKKEEPING'; if (GETPOST("modecompta")) $modecompta=GETPOST("modecompta", 'alpha'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) accessforbidden(); if (! $user->rights->accounting->comptarapport->lire) accessforbidden(); diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index e2bf729a396..963489b5c1b 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -49,7 +49,7 @@ $projectid = (GETPOST('projectid') ? GETPOST('projectid', 'int') : 0); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', $id, 'chargesociales', 'charges'); $object = new ChargeSociales($db); diff --git a/htdocs/compta/sociales/document.php b/htdocs/compta/sociales/document.php index b3fb1cf697b..4be9270dc81 100644 --- a/htdocs/compta/sociales/document.php +++ b/htdocs/compta/sociales/document.php @@ -47,7 +47,7 @@ $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', $id, 'chargesociales', 'charges'); diff --git a/htdocs/compta/sociales/info.php b/htdocs/compta/sociales/info.php index 3d59e2b229c..964ba0d5102 100644 --- a/htdocs/compta/sociales/info.php +++ b/htdocs/compta/sociales/info.php @@ -39,7 +39,7 @@ $action=GETPOST('action', 'aZ09'); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', $id, 'chargesociales', 'charges'); $object = new ChargeSociales($db); diff --git a/htdocs/compta/sociales/list.php b/htdocs/compta/sociales/list.php index 56493f3bf7c..cdfb636e608 100644 --- a/htdocs/compta/sociales/list.php +++ b/htdocs/compta/sociales/list.php @@ -42,7 +42,7 @@ $contextpage=GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'sclist'; // Security check $socid = isset($_GET["socid"])?$_GET["socid"]:''; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); $search_ref = GETPOST('search_ref', 'int'); diff --git a/htdocs/compta/sociales/payments.php b/htdocs/compta/sociales/payments.php index caf11a6ea3b..d396b97c403 100644 --- a/htdocs/compta/sociales/payments.php +++ b/htdocs/compta/sociales/payments.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; $langs->loadLangs(array('compta', 'bills')); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax|salaries', '', '', 'charges|'); $mode=GETPOST("mode", 'alpha'); diff --git a/htdocs/compta/stats/byratecountry.php b/htdocs/compta/stats/byratecountry.php index 590269b332c..08ddd9a576e 100644 --- a/htdocs/compta/stats/byratecountry.php +++ b/htdocs/compta/stats/byratecountry.php @@ -107,7 +107,7 @@ if (empty($modetax)) $modetax=0; // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); diff --git a/htdocs/compta/stats/cabyprodserv.php b/htdocs/compta/stats/cabyprodserv.php index 5570b08435b..138bff4a525 100644 --- a/htdocs/compta/stats/cabyprodserv.php +++ b/htdocs/compta/stats/cabyprodserv.php @@ -36,7 +36,7 @@ $langs->loadLangs(array("products","categories","errors",'accountancy')); // Security pack (data & check) $socid = GETPOST('socid', 'int'); -if ($user->societe_id > 0) $socid = $user->societe_id; +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/stats/cabyuser.php b/htdocs/compta/stats/cabyuser.php index 8973c92f68f..286e6aeb29a 100644 --- a/htdocs/compta/stats/cabyuser.php +++ b/htdocs/compta/stats/cabyuser.php @@ -35,7 +35,7 @@ $langs->load("accountancy"); $socid = GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) $socid = $user->societe_id; +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/stats/casoc.php b/htdocs/compta/stats/casoc.php index 139e9f22160..68f9e0d9f99 100644 --- a/htdocs/compta/stats/casoc.php +++ b/htdocs/compta/stats/casoc.php @@ -57,7 +57,7 @@ if (GETPOST('subcat', 'alpha') === 'yes') { } // Security check -if ($user->societe_id > 0) $socid = $user->societe_id; +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/stats/index.php b/htdocs/compta/stats/index.php index cf28a4cd5d6..ac3e800e6e4 100644 --- a/htdocs/compta/stats/index.php +++ b/htdocs/compta/stats/index.php @@ -98,7 +98,7 @@ if (! empty($conf->accounting->enabled)) $modecompta='BOOKKEEPING'; if (GETPOST("modecompta")) $modecompta=GETPOST("modecompta", 'alpha'); // Security check -if ($user->societe_id > 0) $socid = $user->societe_id; +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/tva/card.php b/htdocs/compta/tva/card.php index e58fa66acaf..dbbaa8d56fc 100644 --- a/htdocs/compta/tva/card.php +++ b/htdocs/compta/tva/card.php @@ -40,7 +40,7 @@ if (empty($refund)) $refund=0; // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); $object = new Tva($db); diff --git a/htdocs/compta/tva/clients.php b/htdocs/compta/tva/clients.php index 576ea819fda..e97e4554b41 100644 --- a/htdocs/compta/tva/clients.php +++ b/htdocs/compta/tva/clients.php @@ -90,7 +90,7 @@ if (empty($modetax)) $modetax=0; // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); diff --git a/htdocs/compta/tva/document.php b/htdocs/compta/tva/document.php index d26d8954cc4..d3a5b60d7ba 100644 --- a/htdocs/compta/tva/document.php +++ b/htdocs/compta/tva/document.php @@ -48,7 +48,7 @@ $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', $id, 'vat', 'charges'); diff --git a/htdocs/compta/tva/index.php b/htdocs/compta/tva/index.php index d6019c1eef5..1ed3658b37a 100644 --- a/htdocs/compta/tva/index.php +++ b/htdocs/compta/tva/index.php @@ -76,7 +76,7 @@ if (empty($modetax)) $modetax=0; // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); diff --git a/htdocs/compta/tva/info.php b/htdocs/compta/tva/info.php index 667cffd065b..6190a30f316 100644 --- a/htdocs/compta/tva/info.php +++ b/htdocs/compta/tva/info.php @@ -34,7 +34,7 @@ $action=GETPOST('action', 'aZ09'); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); $object = new Tva($db); diff --git a/htdocs/compta/tva/list.php b/htdocs/compta/tva/list.php index cffa9152a92..e27093ff89f 100644 --- a/htdocs/compta/tva/list.php +++ b/htdocs/compta/tva/list.php @@ -36,7 +36,7 @@ $langs->loadLangs(array('compta', 'bills')); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); $search_ref = GETPOST('search_ref', 'int'); diff --git a/htdocs/compta/tva/quadri_detail.php b/htdocs/compta/tva/quadri_detail.php index bb9067d5a04..791c360ff67 100644 --- a/htdocs/compta/tva/quadri_detail.php +++ b/htdocs/compta/tva/quadri_detail.php @@ -91,7 +91,7 @@ if (empty($modetax)) $modetax=0; // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'tax', '', '', 'charges'); diff --git a/htdocs/contact/agenda.php b/htdocs/contact/agenda.php index 30efcd28632..8ffc88d1a14 100644 --- a/htdocs/contact/agenda.php +++ b/htdocs/contact/agenda.php @@ -84,7 +84,7 @@ else $search_agenda_label=GETPOST('search_agenda_label'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'contact', $id, 'socpeople&societe', '', '', 'rowid', $objcanvas); // If we create a contact with no company (shared contacts), no check on write permission $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php b/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php index d7cfe53b0bc..8ab92047daa 100644 --- a/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php +++ b/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php @@ -133,7 +133,7 @@ if (! empty($this->control->tpl['action_delete'])) echo $this->control->tpl['act control->tpl['showend']; -if (empty($user->societe_id)) { +if (empty($user->socid)) { print '
    '; if ($user->rights->societe->contact->creer) { print ''.$langs->trans('Modify').''; diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index c7278e65171..ed7cb8ca43f 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -74,7 +74,7 @@ if (! empty($canvas)) } // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'contact', $id, 'socpeople&societe', '', '', 'rowid', $objcanvas); // If we create a contact with no company (shared contacts), no check on write permission // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 895293efaf7..3125aa5e34c 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -155,7 +155,7 @@ class Contact extends CommonObject $sql = "SELECT count(sp.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."socpeople as sp"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= ", ".MAIN_DB_PREFIX."societe as s"; $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; @@ -164,7 +164,7 @@ class Contact extends CommonObject } $sql.= ' '.$clause.' sp.entity IN ('.getEntity($this->element).')'; $sql.= " AND (sp.priv='0' OR (sp.priv='1' AND sp.fk_user_creat=".$user->id."))"; - if ($user->societe_id > 0) $sql.=" AND sp.fk_soc = ".$user->societe_id; + if ($user->socid > 0) $sql.=" AND sp.fk_soc = ".$user->socid; $resql=$this->db->query($sql); if ($resql) diff --git a/htdocs/contact/consumption.php b/htdocs/contact/consumption.php index 00817ee5799..fe29b0862bd 100644 --- a/htdocs/contact/consumption.php +++ b/htdocs/contact/consumption.php @@ -121,7 +121,7 @@ if (empty($conf->global->SOCIETE_DISABLE_CONTACTS)) } $morehtmlref.='
    '; -dol_banner_tab($object, 'id', $linkback, ($user->societe_id?0:1), 'rowid', 'nom', $morehtmlref); +dol_banner_tab($object, 'id', $linkback, ($user->socid?0:1), 'rowid', 'nom', $morehtmlref); print '
    '; diff --git a/htdocs/contact/document.php b/htdocs/contact/document.php index 1dbc22d1a51..8533cb13feb 100644 --- a/htdocs/contact/document.php +++ b/htdocs/contact/document.php @@ -51,7 +51,7 @@ if (! empty($canvas)) } // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'contact', $id, 'socpeople&societe', '', '', 'rowid', $objcanvas); // If we create a contact with no company (shared contacts), no check on write permission // Get parameters diff --git a/htdocs/contact/info.php b/htdocs/contact/info.php index 3cb46276d43..2546f5d19e4 100644 --- a/htdocs/contact/info.php +++ b/htdocs/contact/info.php @@ -34,7 +34,7 @@ $langs->load("companies"); // Security check $id = GETPOST("id", 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'contact', $id, 'socpeople&societe'); $object = new Contact($db); diff --git a/htdocs/contact/ldap.php b/htdocs/contact/ldap.php index 826b5d3db39..cf2bf91bf99 100644 --- a/htdocs/contact/ldap.php +++ b/htdocs/contact/ldap.php @@ -36,7 +36,7 @@ $action=GETPOST('action', 'aZ09'); // Security check $id = GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'contact', $id, 'socpeople&societe'); $object = new Contact($db); diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 8eae77faa56..f8d92d19b34 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -52,7 +52,7 @@ $contextpage=GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'contactl $id = GETPOST('id', 'int'); $contactid = GETPOST('id', 'int'); $ref = ''; // There is no ref for contacts -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'contact', $contactid, ''); $sall=trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml')); diff --git a/htdocs/contact/note.php b/htdocs/contact/note.php index 72ee557c085..230211cca5e 100644 --- a/htdocs/contact/note.php +++ b/htdocs/contact/note.php @@ -36,7 +36,7 @@ $langs->load("companies"); // Security check $id = GETPOST('id', 'int'); -if ($user->societe_id) $id=$user->societe_id; +if ($user->socid) $id=$user->socid; $result = restrictedArea($user, 'contact', $id, 'socpeople&societe'); $object = new Contact($db); diff --git a/htdocs/contact/perso.php b/htdocs/contact/perso.php index 3a09f294849..093245025cd 100644 --- a/htdocs/contact/perso.php +++ b/htdocs/contact/perso.php @@ -35,7 +35,7 @@ $id = GETPOST('id', 'int'); $action = GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'contact', $id, 'socpeople&societe'); $object = new Contact($db); @@ -319,7 +319,7 @@ else if ($action != 'edit') { // Barre d'actions - if ($user->societe_id == 0) + if ($user->socid == 0) { print '
    '; diff --git a/htdocs/contrat/agenda.php b/htdocs/contrat/agenda.php index df1629b46a6..4eb794a3054 100644 --- a/htdocs/contrat/agenda.php +++ b/htdocs/contrat/agenda.php @@ -52,7 +52,7 @@ $id = GETPOST('id', 'int'); $ref = GETPOST('ref', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'contrat', $id, ''); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 3a8e4f99a65..4e0226d4cae 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -62,7 +62,7 @@ $datecontrat=''; $usehm=(! empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?$conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE:0); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'contrat', $id); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -1256,7 +1256,7 @@ if ($action == 'create') print $doleditor->Create(1); print '
    '.$langs->trans("NotePrivate").''; $doleditor=new DolEditor('note_private', $note_private, '', '100', 'dolibarr_notes', 'In', 1, true, true, ROWS_3, '90%'); @@ -1890,7 +1890,7 @@ else print '
    '.$langs->trans("ServiceStatus").': '.$object->lines[$cursorline-1]->getLibStatut(4).''; - if ($user->societe_id == 0) + if ($user->socid == 0) { if ($object->statut > 0 && $action != 'activateline' && $action != 'unactivateline') { @@ -2098,7 +2098,7 @@ else * Buttons */ - if ($user->societe_id == 0) + if ($user->socid == 0) { print '
    '; diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index a6ccd9f7cf1..42f5f3c0e71 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -2162,7 +2162,7 @@ class Contrat extends CommonObject $this->from = " FROM ".MAIN_DB_PREFIX."contrat as c"; $this->from.= ", ".MAIN_DB_PREFIX."contratdet as cd"; $this->from.= ", ".MAIN_DB_PREFIX."societe as s"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $this->from.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $this->from.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; if ($mode == 'inactive') { @@ -2193,8 +2193,8 @@ class Contrat extends CommonObject } $sql.= " AND c.fk_soc = s.rowid"; $sql.= " AND c.entity = ".$conf->entity; - if ($user->societe_id) $sql.=" AND c.fk_soc = ".$user->societe_id; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($user->socid) $sql.=" AND c.fk_soc = ".$user->socid; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id; $resql=$this->db->query($sql); if ($resql) @@ -2265,7 +2265,7 @@ class Contrat extends CommonObject $sql = "SELECT count(c.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."contrat as c"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON c.fk_soc = s.rowid"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; diff --git a/htdocs/contrat/contact.php b/htdocs/contrat/contact.php index 85247327dda..56a0c198db3 100644 --- a/htdocs/contrat/contact.php +++ b/htdocs/contrat/contact.php @@ -43,7 +43,7 @@ $id = GETPOST('id', 'int'); $ref=GETPOST('ref', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'contrat', $id); $object = new Contrat($db); diff --git a/htdocs/contrat/document.php b/htdocs/contrat/document.php index 7fbc291839d..fceba285f47 100644 --- a/htdocs/contrat/document.php +++ b/htdocs/contrat/document.php @@ -46,11 +46,11 @@ $id = GETPOST('id', 'int'); $ref = GETPOST('ref', 'alpha'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { unset($_GET["action"]); $action=''; - $socid = $user->societe_id; + $socid = $user->socid; } $result = restrictedArea($user, 'contrat', $id); diff --git a/htdocs/contrat/index.php b/htdocs/contrat/index.php index 8fd54a4f8e4..9d96ca7be5e 100644 --- a/htdocs/contrat/index.php +++ b/htdocs/contrat/index.php @@ -46,7 +46,7 @@ $statut=GETPOST('statut')?GETPOST('statut'):1; // Security check $socid=0; $id = GETPOST('id', 'int'); -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result = restrictedArea($user, 'contrat', $id); $staticcompany=new Societe($db); @@ -114,7 +114,7 @@ if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX $sql.= " WHERE cd.fk_contrat = c.rowid AND c.fk_soc = s.rowid"; $sql.= " AND (cd.statut != 4 OR (cd.statut = 4 AND (cd.date_fin_validite is null or cd.date_fin_validite >= '".$db->idate($now)."')))"; $sql.= " AND c.entity IN (".getEntity('contract', 0).")"; -if ($user->societe_id) $sql.=' AND c.fk_soc = '.$user->societe_id; +if ($user->socid) $sql.=' AND c.fk_soc = '.$user->socid; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " GROUP BY cd.statut"; $resql = $db->query($sql); @@ -151,7 +151,7 @@ if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX $sql.= " WHERE cd.fk_contrat = c.rowid AND c.fk_soc = s.rowid"; $sql.= " AND (cd.statut = 4 AND cd.date_fin_validite < '".$db->idate($now)."')"; $sql.= " AND c.entity IN (".getEntity('contract', 0).")"; -if ($user->societe_id) $sql.=' AND c.fk_soc = '.$user->societe_id; +if ($user->socid) $sql.=' AND c.fk_soc = '.$user->socid; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " GROUP BY cd.statut"; $resql = $db->query($sql); diff --git a/htdocs/contrat/list.php b/htdocs/contrat/list.php index 0fd27d29826..3df193d53d2 100644 --- a/htdocs/contrat/list.php +++ b/htdocs/contrat/list.php @@ -84,7 +84,7 @@ if (! $sortorder) $sortorder='DESC'; // Security check $id=GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'contrat', $id); $diroutputmassaction=$conf->contrat->dir_output . '/temp/massgeneration/'.$user->id; diff --git a/htdocs/contrat/note.php b/htdocs/contrat/note.php index 25772c08193..e4cceff10e0 100644 --- a/htdocs/contrat/note.php +++ b/htdocs/contrat/note.php @@ -41,7 +41,7 @@ $id=GETPOST('id', 'int'); $ref=GETPOST('ref', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'contrat', $id); $object = new Contrat($db); diff --git a/htdocs/contrat/services_list.php b/htdocs/contrat/services_list.php index 81c0b13449b..a7656289fdd 100644 --- a/htdocs/contrat/services_list.php +++ b/htdocs/contrat/services_list.php @@ -90,7 +90,7 @@ $search_array_options=$extrafields->getOptionalsFromPost($object->table_element, // Security check $contratid = GETPOST('id', 'int'); -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result = restrictedArea($user, 'contrat', $contratid); if ($search_status != '') diff --git a/htdocs/core/ajax/ajaxdirpreview.php b/htdocs/core/ajax/ajaxdirpreview.php index d6a2ba77f05..b369550dda2 100644 --- a/htdocs/core/ajax/ajaxdirpreview.php +++ b/htdocs/core/ajax/ajaxdirpreview.php @@ -104,7 +104,7 @@ if (empty($url)) $langs->loadLangs(array("ecm","companies","other")); // Security check -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; //print 'xxx'.$upload_dir; diff --git a/htdocs/core/ajax/objectonoff.php b/htdocs/core/ajax/objectonoff.php index e812e8b9a3c..0d662b6a0bd 100644 --- a/htdocs/core/ajax/objectonoff.php +++ b/htdocs/core/ajax/objectonoff.php @@ -39,8 +39,8 @@ $element=GETPOST('element', 'alpha'); $object = new GenericObject($db); // Security check -if (! empty($user->societe_id)) - $socid = $user->societe_id; +if (! empty($user->socid)) + $socid = $user->socid; diff --git a/htdocs/core/ajax/pingresult.php b/htdocs/core/ajax/pingresult.php index 9de6e53a0f5..eec1c9f0aca 100644 --- a/htdocs/core/ajax/pingresult.php +++ b/htdocs/core/ajax/pingresult.php @@ -36,8 +36,8 @@ $hash_algo=GETPOST('hash_algo', 'alpha'); // Security check -if (! empty($user->societe_id)) - $socid = $user->societe_id; +if (! empty($user->socid)) + $socid = $user->socid; $now = dol_now(); diff --git a/htdocs/core/boxes/box_actions.php b/htdocs/core/boxes/box_actions.php index af86e73ce2c..c104384434d 100644 --- a/htdocs/core/boxes/box_actions.php +++ b/htdocs/core/boxes/box_actions.php @@ -90,13 +90,13 @@ class box_actions extends ModeleBoxes $sql.= ", s.rowid as socid"; $sql.= ", s.code_client"; $sql.= " FROM ".MAIN_DB_PREFIX."c_actioncomm AS ta, ".MAIN_DB_PREFIX."actioncomm AS a"; - if (! $user->rights->societe->client->voir && ! $user->societe_id) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON a.fk_soc = sc.fk_soc"; + if (! $user->rights->societe->client->voir && ! $user->socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON a.fk_soc = sc.fk_soc"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON a.fk_soc = s.rowid"; $sql.= " WHERE a.fk_action = ta.id"; $sql.= " AND a.entity = ".$conf->entity; $sql.= " AND a.percent >= 0 AND a.percent < 100"; - if (! $user->rights->societe->client->voir && ! $user->societe_id) $sql.= " AND (a.fk_soc IS NULL OR sc.fk_user = " .$user->id . ")"; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (! $user->rights->societe->client->voir && ! $user->socid) $sql.= " AND (a.fk_soc IS NULL OR sc.fk_user = " .$user->id . ")"; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; if (! $user->rights->agenda->allactions->read) $sql.= " AND (a.fk_user_author = ".$user->id . " OR a.fk_user_action = ".$user->id . " OR a.fk_user_done = ".$user->id . ")"; $sql.= " ORDER BY a.datec DESC"; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_activity.php b/htdocs/core/boxes/box_activity.php index c18bf2f3bf3..9609f596618 100644 --- a/htdocs/core/boxes/box_activity.php +++ b/htdocs/core/boxes/box_activity.php @@ -84,7 +84,7 @@ class box_activity extends ModeleBoxes $totalnb = 0; $line = 0; $cachetime = 3600; - $fileid = '-e'.$conf->entity.'-u'.$user->id.'-s'.$user->societe_id.'-r'.($user->rights->societe->client->voir?'1':'0').'.cache'; + $fileid = '-e'.$conf->entity.'-u'.$user->id.'-s'.$user->socid.'-r'.($user->rights->societe->client->voir?'1':'0').'.cache'; $now = dol_now(); $nbofperiod=3; @@ -113,12 +113,12 @@ class box_activity extends ModeleBoxes { $sql = "SELECT p.fk_statut, SUM(p.total) as Mnttot, COUNT(*) as nb"; $sql.= " FROM (".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."propal as p"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= ")"; $sql.= " WHERE p.entity IN (".getEntity('propal').")"; $sql.= " AND p.fk_soc = s.rowid"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; $sql.= " AND p.datep >= '".$this->db->idate($tmpdate)."'"; $sql.= " AND p.date_cloture IS NULL"; // just unclosed $sql.= " GROUP BY p.fk_statut"; @@ -202,12 +202,12 @@ class box_activity extends ModeleBoxes if ($refresh) { $sql = "SELECT c.fk_statut, sum(c.total_ttc) as Mnttot, count(*) as nb"; $sql.= " FROM (".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."commande as c"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= ")"; $sql.= " WHERE c.entity = ".$conf->entity; $sql.= " AND c.fk_soc = s.rowid"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; $sql.= " AND c.date_commande >= '".$this->db->idate($tmpdate)."'"; $sql.= " GROUP BY c.fk_statut"; $sql.= " ORDER BY c.fk_statut DESC"; @@ -286,11 +286,11 @@ class box_activity extends ModeleBoxes { $sql = "SELECT f.fk_statut, SUM(f.total_ttc) as Mnttot, COUNT(*) as nb"; $sql.= " FROM (".MAIN_DB_PREFIX."societe as s,".MAIN_DB_PREFIX."facture as f"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= ")"; $sql.= " WHERE f.entity IN (".getEntity('invoice').')'; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; $sql.= " AND f.fk_soc = s.rowid"; $sql.= " AND f.datef >= '".$this->db->idate($tmpdate)."' AND f.paye=1"; $sql.= " GROUP BY f.fk_statut"; diff --git a/htdocs/core/boxes/box_clients.php b/htdocs/core/boxes/box_clients.php index 185f581b5c5..feb7564cdaf 100644 --- a/htdocs/core/boxes/box_clients.php +++ b/htdocs/core/boxes/box_clients.php @@ -97,11 +97,11 @@ class box_clients extends ModeleBoxes $sql.= ", s.email"; $sql.= ", s.datec, s.tms, s.status"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE s.client IN (1, 3)"; $sql.= " AND s.entity IN (".getEntity('societe').")"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if ($user->societe_id) $sql.= " AND s.rowid = $user->societe_id"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($user->socid) $sql.= " AND s.rowid = $user->socid"; $sql.= " ORDER BY s.tms DESC"; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_commandes.php b/htdocs/core/boxes/box_commandes.php index 327f06fc0c9..40d809fd6e7 100644 --- a/htdocs/core/boxes/box_commandes.php +++ b/htdocs/core/boxes/box_commandes.php @@ -102,12 +102,12 @@ class box_commandes extends ModeleBoxes $sql.= ", c.total_ttc"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql.= ", ".MAIN_DB_PREFIX."commande as c"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE c.fk_soc = s.rowid"; $sql.= " AND c.entity = ".$conf->entity; if (! empty($conf->global->ORDER_BOX_LAST_ORDERS_VALIDATED_ONLY)) $sql.=" AND c.fk_statut = 1"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if ($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($user->socid) $sql.= " AND s.rowid = ".$user->socid; if ($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) $sql.= " ORDER BY c.date_commande DESC, c.ref DESC "; else $sql.= " ORDER BY c.tms DESC, c.ref DESC "; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_comptes.php b/htdocs/core/boxes/box_comptes.php index 02ed249d3b6..c4259b6252a 100644 --- a/htdocs/core/boxes/box_comptes.php +++ b/htdocs/core/boxes/box_comptes.php @@ -64,7 +64,7 @@ class box_comptes extends ModeleBoxes // disable module for such cases $listofmodulesforexternal=explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL); - if (! in_array('banque', $listofmodulesforexternal) && ! empty($user->societe_id)) $this->enabled=0; // disabled for external users + if (! in_array('banque', $listofmodulesforexternal) && ! empty($user->socid)) $this->enabled=0; // disabled for external users $this->hidden = ! ($user->rights->banque->lire); } diff --git a/htdocs/core/boxes/box_contacts.php b/htdocs/core/boxes/box_contacts.php index 09e33c5f6a8..5bdb17ba0b9 100644 --- a/htdocs/core/boxes/box_contacts.php +++ b/htdocs/core/boxes/box_contacts.php @@ -90,10 +90,10 @@ class box_contacts extends ModeleBoxes $sql.= " FROM ".MAIN_DB_PREFIX."socpeople as sp"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as co ON sp.fk_pays = co.rowid"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON sp.fk_soc = s.rowid"; - if (! $user->rights->societe->client->voir && ! $user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (! $user->rights->societe->client->voir && ! $user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE sp.entity IN (".getEntity('socpeople').")"; - if (! $user->rights->societe->client->voir && ! $user->societe_id) $sql.= " AND sp.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if ($user->societe_id) $sql.= " AND sp.fk_soc = ".$user->societe_id; + if (! $user->rights->societe->client->voir && ! $user->socid) $sql.= " AND sp.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($user->socid) $sql.= " AND sp.fk_soc = ".$user->socid; $sql.= " ORDER BY sp.tms DESC"; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_contracts.php b/htdocs/core/boxes/box_contracts.php index 0d155f158e9..37fdf45f118 100644 --- a/htdocs/core/boxes/box_contracts.php +++ b/htdocs/core/boxes/box_contracts.php @@ -87,11 +87,11 @@ class box_contracts extends ModeleBoxes $sql.= " c.rowid, c.ref, c.statut as fk_statut, c.date_contrat, c.datec, c.fin_validite, c.date_cloture"; $sql.= ", c.ref_customer, c.ref_supplier"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."contrat as c"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE c.fk_soc = s.rowid"; $sql.= " AND c.entity = ".$conf->entity; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; if ($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) $sql.= " ORDER BY c.date_contrat DESC, c.ref DESC "; else $sql.= " ORDER BY c.tms DESC, c.ref DESC "; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_factures.php b/htdocs/core/boxes/box_factures.php index 09841f4a4a8..65724f5fa4b 100644 --- a/htdocs/core/boxes/box_factures.php +++ b/htdocs/core/boxes/box_factures.php @@ -97,12 +97,12 @@ class box_factures extends ModeleBoxes $sql.= ", s.rowid as socid, s.nom as name, s.code_client, s.email, s.tva_intra, s.code_compta, s.siren as idprof1, s.siret as idprof2, s.ape as idprof3, s.idprof4, s.idprof5, s.idprof6"; $sql.= ", f.date_lim_reglement as datelimite"; $sql.= " FROM (".MAIN_DB_PREFIX."societe as s,".MAIN_DB_PREFIX."facture as f"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= ")"; $sql.= " WHERE f.fk_soc = s.rowid"; $sql.= " AND f.entity IN (".getEntity('invoice').")"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; if ($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) $sql.= " ORDER BY f.datef DESC, f.ref DESC "; else $sql.= " ORDER BY f.tms DESC, f.ref DESC "; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_factures_fourn.php b/htdocs/core/boxes/box_factures_fourn.php index 46e2da3ab62..9eb836fe1e2 100644 --- a/htdocs/core/boxes/box_factures_fourn.php +++ b/htdocs/core/boxes/box_factures_fourn.php @@ -99,11 +99,11 @@ class box_factures_fourn extends ModeleBoxes $sql.= ' f.date_lim_reglement as datelimite, f.tms, f.type'; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql.= ", ".MAIN_DB_PREFIX."facture_fourn as f"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE f.fk_soc = s.rowid"; $sql.= " AND f.entity = ".$conf->entity; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; if ($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) $sql.= " ORDER BY f.datef DESC, f.ref DESC "; else $sql.= " ORDER BY f.tms DESC, f.ref DESC "; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_factures_fourn_imp.php b/htdocs/core/boxes/box_factures_fourn_imp.php index 0a6c7e904a3..3c0fc6444a2 100644 --- a/htdocs/core/boxes/box_factures_fourn_imp.php +++ b/htdocs/core/boxes/box_factures_fourn_imp.php @@ -91,13 +91,13 @@ class box_factures_fourn_imp extends ModeleBoxes $sql.= " f.paye, f.fk_statut, f.type"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql.= ",".MAIN_DB_PREFIX."facture_fourn as f"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE f.fk_soc = s.rowid"; $sql.= " AND f.entity = ".$conf->entity; $sql.= " AND f.paye=0"; $sql.= " AND fk_statut = 1"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; $sql.= " ORDER BY datelimite DESC, f.ref_supplier DESC "; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_factures_imp.php b/htdocs/core/boxes/box_factures_imp.php index 3c4ba1c9736..992e1333390 100644 --- a/htdocs/core/boxes/box_factures_imp.php +++ b/htdocs/core/boxes/box_factures_imp.php @@ -100,15 +100,15 @@ class box_factures_imp extends ModeleBoxes $sql.= " f.paye, f.fk_statut, f.rowid as facid"; $sql.= ", sum(pf.amount) as am"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= ", ".MAIN_DB_PREFIX."facture as f"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid=pf.fk_facture "; $sql.= " WHERE f.fk_soc = s.rowid"; $sql.= " AND f.entity IN (".getEntity('invoice').")"; $sql.= " AND f.paye = 0"; $sql.= " AND fk_statut = 1"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; $sql.= " GROUP BY s.nom, s.rowid, s.code_client, s.logo, f.ref, f.date_lim_reglement,"; $sql.= " f.type, f.amount, f.datef, f.total, f.tva, f.total_ttc, f.paye, f.fk_statut, f.rowid"; //$sql.= " ORDER BY f.datef DESC, f.ref DESC "; diff --git a/htdocs/core/boxes/box_ficheinter.php b/htdocs/core/boxes/box_ficheinter.php index a646d6556ba..7d2fdd2f8cc 100644 --- a/htdocs/core/boxes/box_ficheinter.php +++ b/htdocs/core/boxes/box_ficheinter.php @@ -92,8 +92,8 @@ class box_ficheinter extends ModeleBoxes $sql.= ", ".MAIN_DB_PREFIX."fichinter as f"; $sql.= " WHERE f.fk_soc = s.rowid "; $sql.= " AND f.entity = ".$conf->entity; - if (! $user->rights->societe->client->voir && !$user->societe_id) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (! $user->rights->societe->client->voir && !$user->socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; $sql.= " ORDER BY f.tms DESC"; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_fournisseurs.php b/htdocs/core/boxes/box_fournisseurs.php index 6369b25987a..5f26351affe 100644 --- a/htdocs/core/boxes/box_fournisseurs.php +++ b/htdocs/core/boxes/box_fournisseurs.php @@ -88,11 +88,11 @@ class box_fournisseurs extends ModeleBoxes $sql.= " s.code_fournisseur, s.email as semail,"; $sql.= " s.logo"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE s.fournisseur = 1"; $sql.= " AND s.entity IN (".getEntity('societe').")"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if ($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($user->socid) $sql.= " AND s.rowid = ".$user->socid; $sql.= " ORDER BY s.tms DESC "; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_graph_invoices_permonth.php b/htdocs/core/boxes/box_graph_invoices_permonth.php index ba0e24ddaab..6369fd2b7a9 100644 --- a/htdocs/core/boxes/box_graph_invoices_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_permonth.php @@ -92,7 +92,7 @@ class box_graph_invoices_permonth extends ModeleBoxes $dir=''; // We don't need a path because image file will not be saved into disk $prefix=''; $socid=0; - if ($user->societe_id) $socid=$user->societe_id; + if ($user->socid) $socid=$user->socid; if (! $user->rights->societe->client->voir || $socid) $prefix.='private-'.$user->id.'-'; // If user has no permission to see all, output dir is specific to user if ($user->rights->facture->lire) diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php index 4393e9db790..7c793131dfc 100644 --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php @@ -91,7 +91,7 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $dir=''; // We don't need a path because image file will not be saved into disk $prefix=''; $socid=0; - if ($user->societe_id) $socid=$user->societe_id; + if ($user->socid) $socid=$user->socid; if (! $user->rights->societe->client->voir || $socid) $prefix.='private-'.$user->id.'-'; // If user has no permission to see all, output dir is specific to user if ($user->rights->fournisseur->facture->lire) diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php index 6e5bf253832..cf4b0b02aa6 100644 --- a/htdocs/core/boxes/box_graph_orders_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_permonth.php @@ -92,7 +92,7 @@ class box_graph_orders_permonth extends ModeleBoxes $dir=''; // We don't need a path because image file will not be saved into disk $prefix=''; $socid=0; - if ($user->societe_id) $socid=$user->societe_id; + if ($user->socid) $socid=$user->socid; if (! $user->rights->societe->client->voir || $socid) $prefix.='private-'.$user->id.'-'; // If user has no permission to see all, output dir is specific to user if ($user->rights->commande->lire) diff --git a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php index 443f374346d..a687411cca5 100644 --- a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php @@ -91,7 +91,7 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes $dir=''; // We don't need a path because image file will not be saved into disk $prefix=''; $socid=0; - if ($user->societe_id) $socid=$user->societe_id; + if ($user->socid) $socid=$user->socid; if (! $user->rights->societe->client->voir || $socid) $prefix.='private-'.$user->id.'-'; // If user has no permission to see all, output dir is specific to user if ($user->rights->fournisseur->commande->lire) diff --git a/htdocs/core/boxes/box_graph_product_distribution.php b/htdocs/core/boxes/box_graph_product_distribution.php index 332f92b7ace..7bcc85aa47f 100644 --- a/htdocs/core/boxes/box_graph_product_distribution.php +++ b/htdocs/core/boxes/box_graph_product_distribution.php @@ -128,7 +128,7 @@ class box_graph_product_distribution extends ModeleBoxes ); - $socid=empty($user->societe_id)?0:$user->societe_id; + $socid=empty($user->socid)?0:$user->socid; $userid=0; // No filter on user creation $WIDTH=($nbofgraph >= 2 || ! empty($conf->dol_optimize_smallscreen))?'160':'320'; diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index a06c5d8ff83..150e9517c8a 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -94,7 +94,7 @@ class box_graph_propales_permonth extends ModeleBoxes $dir=''; // We don't need a path because image file will not be saved into disk $prefix=''; $socid=0; - if ($user->societe_id) $socid=$user->societe_id; + if ($user->socid) $socid=$user->socid; if (! $user->rights->societe->client->voir || $socid) $prefix.='private-'.$user->id.'-'; // If user has no permission to see all, output dir is specific to user if ($user->rights->propale->lire) diff --git a/htdocs/core/boxes/box_last_modified_ticket.php b/htdocs/core/boxes/box_last_modified_ticket.php index 56299c60429..de2bbd79181 100644 --- a/htdocs/core/boxes/box_last_modified_ticket.php +++ b/htdocs/core/boxes/box_last_modified_ticket.php @@ -96,9 +96,9 @@ class box_last_modified_ticket extends ModeleBoxes $sql.= " WHERE t.entity = ".$conf->entity; // $sql.= " AND e.rowid = er.fk_event"; - //if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " WHERE s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if ($user->societe_id) { - $sql.= " AND t.fk_soc= ".$user->societe_id; + //if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " WHERE s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($user->socid) { + $sql.= " AND t.fk_soc= ".$user->socid; } $sql.= " ORDER BY t.tms DESC, t.rowid DESC "; diff --git a/htdocs/core/boxes/box_last_ticket.php b/htdocs/core/boxes/box_last_ticket.php index cf4b7f305f7..4c66c647477 100644 --- a/htdocs/core/boxes/box_last_ticket.php +++ b/htdocs/core/boxes/box_last_ticket.php @@ -96,9 +96,9 @@ class box_last_ticket extends ModeleBoxes $sql .= " WHERE t.entity = " . $conf->entity; // $sql.= " AND e.rowid = er.fk_event"; - //if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " WHERE s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if ($user->societe_id) { - $sql .= " AND t.fk_soc= " . $user->societe_id; + //if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " WHERE s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($user->socid) { + $sql .= " AND t.fk_soc= " . $user->socid; } //$sql.= " AND t.fk_statut > 9"; diff --git a/htdocs/core/boxes/box_members.php b/htdocs/core/boxes/box_members.php index 1e4588f05cf..29f37751ce9 100644 --- a/htdocs/core/boxes/box_members.php +++ b/htdocs/core/boxes/box_members.php @@ -63,7 +63,7 @@ class box_members extends ModeleBoxes // disable module for such cases $listofmodulesforexternal=explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL); - if (! in_array('adherent', $listofmodulesforexternal) && ! empty($user->societe_id)) $this->enabled=0; // disabled for external users + if (! in_array('adherent', $listofmodulesforexternal) && ! empty($user->socid)) $this->enabled=0; // disabled for external users $this->hidden = ! ($user->rights->adherent->lire); } diff --git a/htdocs/core/boxes/box_produits.php b/htdocs/core/boxes/box_produits.php index 23c4cc368cf..5cccd24ad6a 100644 --- a/htdocs/core/boxes/box_produits.php +++ b/htdocs/core/boxes/box_produits.php @@ -63,7 +63,7 @@ class box_produits extends ModeleBoxes $listofmodulesforexternal=explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL); $tmpentry=array('enabled'=>(! empty($conf->product->enabled) || ! empty($conf->service->enabled)), 'perms'=>(! empty($user->rights->produit->lire) || ! empty($user->rights->service->lire)), 'module'=>'product|service'); - $showmode=isVisibleToUserType(($user->societe_id > 0 ? 1 : 0), $tmpentry, $listofmodulesforexternal); + $showmode=isVisibleToUserType(($user->socid > 0 ? 1 : 0), $tmpentry, $listofmodulesforexternal); $this->hidden = ($showmode != 1); } diff --git a/htdocs/core/boxes/box_produits_alerte_stock.php b/htdocs/core/boxes/box_produits_alerte_stock.php index 22509a6c9a2..3c674cd32c0 100644 --- a/htdocs/core/boxes/box_produits_alerte_stock.php +++ b/htdocs/core/boxes/box_produits_alerte_stock.php @@ -65,7 +65,7 @@ class box_produits_alerte_stock extends ModeleBoxes $listofmodulesforexternal=explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL); $tmpentry=array('enabled'=>((! empty($conf->product->enabled) || ! empty($conf->service->enabled)) && ! empty($conf->stock->enabled)), 'perms'=>($user->rights->stock->lire), 'module'=>'product|service|stock'); - $showmode=isVisibleToUserType(($user->societe_id > 0 ? 1 : 0), $tmpentry, $listofmodulesforexternal); + $showmode=isVisibleToUserType(($user->socid > 0 ? 1 : 0), $tmpentry, $listofmodulesforexternal); $this->hidden = ($showmode != 1); } diff --git a/htdocs/core/boxes/box_project.php b/htdocs/core/boxes/box_project.php index 9053e5f2ab3..48a6d260e2c 100644 --- a/htdocs/core/boxes/box_project.php +++ b/htdocs/core/boxes/box_project.php @@ -89,7 +89,7 @@ class box_project extends ModeleBoxes $projectstatic = new Project($this->db); $socid=0; - //if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. + //if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. // Get list of project id allowed to user (in a string list separated by coma) $projectsListId=''; diff --git a/htdocs/core/boxes/box_propales.php b/htdocs/core/boxes/box_propales.php index 0ba1b1565f8..1fe8c2a0ed8 100644 --- a/htdocs/core/boxes/box_propales.php +++ b/htdocs/core/boxes/box_propales.php @@ -88,11 +88,11 @@ class box_propales extends ModeleBoxes $sql.= " p.rowid, p.ref, p.fk_statut, p.datep as dp, p.datec, p.fin_validite, p.date_cloture, p.total_ht, p.tva as total_tva, p.total as total_ttc, p.tms"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql.= ", ".MAIN_DB_PREFIX."propal as p"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE p.fk_soc = s.rowid"; $sql.= " AND p.entity = ".$conf->entity; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; if ($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) $sql.= " ORDER BY p.datep DESC, p.ref DESC "; else $sql.= " ORDER BY p.tms DESC, p.ref DESC "; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_prospect.php b/htdocs/core/boxes/box_prospect.php index b489247e0b1..9d6a10b6225 100644 --- a/htdocs/core/boxes/box_prospect.php +++ b/htdocs/core/boxes/box_prospect.php @@ -94,11 +94,11 @@ class box_prospect extends ModeleBoxes $sql.= ", s.logo"; $sql.= ", s.fk_stcomm, s.datec, s.tms, s.status"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE s.client IN (2, 3)"; $sql.= " AND s.entity IN (".getEntity('societe').")"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if ($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($user->socid) $sql.= " AND s.rowid = ".$user->socid; $sql.= " ORDER BY s.tms DESC"; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_services_contracts.php b/htdocs/core/boxes/box_services_contracts.php index f080403aba3..dbb26408b6f 100644 --- a/htdocs/core/boxes/box_services_contracts.php +++ b/htdocs/core/boxes/box_services_contracts.php @@ -96,10 +96,10 @@ class box_services_contracts extends ModeleBoxes $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"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON cd.fk_product = p.rowid"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " INNER JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " INNER JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= ")"; $sql.= " WHERE c.entity = ".$conf->entity; - if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if($user->socid) $sql.= " AND s.rowid = ".$user->socid; $sql.= $this->db->order("c.tms", "DESC"); $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_services_expired.php b/htdocs/core/boxes/box_services_expired.php index b56674adaa0..9ddfa229e55 100644 --- a/htdocs/core/boxes/box_services_expired.php +++ b/htdocs/core/boxes/box_services_expired.php @@ -87,12 +87,12 @@ class box_services_expired extends ModeleBoxes $sql.= " 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.= " MIN(cd.date_fin_validite) as date_line, COUNT(cd.rowid) as nb_services"; $sql.= " FROM ".MAIN_DB_PREFIX."contrat as c, ".MAIN_DB_PREFIX."societe s, ".MAIN_DB_PREFIX."contratdet as cd"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE cd.statut = 4 AND cd.date_fin_validite <= '".$this->db->idate($now)."'"; $sql.= " AND c.entity = ".$conf->entity; $sql.= " AND c.fk_soc=s.rowid AND cd.fk_contrat=c.rowid AND c.statut > 0"; - if ($user->societe_id) $sql.=' AND c.fk_soc = '.$user->societe_id; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($user->socid) $sql.=' AND c.fk_soc = '.$user->socid; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " GROUP BY c.rowid, c.ref, c.statut, c.date_contrat, c.ref_customer, c.ref_supplier, s.nom, s.rowid"; $sql.= " ORDER BY date_line ASC"; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/box_supplier_orders.php b/htdocs/core/boxes/box_supplier_orders.php index 42c1b7464b9..a95c008688b 100644 --- a/htdocs/core/boxes/box_supplier_orders.php +++ b/htdocs/core/boxes/box_supplier_orders.php @@ -93,11 +93,11 @@ class box_supplier_orders extends ModeleBoxes $sql.= " c.fk_statut"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as c"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE c.fk_soc = s.rowid"; $sql.= " AND c.entity = ".$conf->entity; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if ($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($user->socid) $sql.= " AND s.rowid = ".$user->socid; if ($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) $sql.= " ORDER BY c.date_commande DESC, c.ref DESC "; else $sql.= " ORDER BY c.tms DESC, c.ref DESC "; $sql.= $this->db->plimit($max, 0); diff --git a/htdocs/core/boxes/modules_boxes.php b/htdocs/core/boxes/modules_boxes.php index 8cc8de94295..f5399cd9eea 100644 --- a/htdocs/core/boxes/modules_boxes.php +++ b/htdocs/core/boxes/modules_boxes.php @@ -216,7 +216,7 @@ class ModeleBoxes // Can't be abtract as it is instantiated to build "empty" box $cachetime = 900; // 900 : 15mn $cachedir = DOL_DATA_ROOT.'/boxes/temp'; - $fileid = get_class($this).'id-'.$this->box_id.'-e'.$conf->entity.'-u'.$user->id.'-s'.$user->societe_id.'.cache'; + $fileid = get_class($this).'id-'.$this->box_id.'-e'.$conf->entity.'-u'.$user->id.'-s'.$user->socid.'.cache'; $filename = '/box-'.$fileid; $refresh = dol_cache_refresh($cachedir, $filename, $cachetime); $out = ''; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 7707be211f3..a5c35d93768 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1741,7 +1741,7 @@ abstract class CommonObject // Security on socid $socid = 0; - if ($user->societe_id > 0) $socid = $user->societe_id; + if ($user->socid > 0) $socid = $user->socid; // this->ismultientitymanaged contains // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 72c1e589233..4c779a35d1b 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -1651,7 +1651,7 @@ class Form $sql.= " WHERE u.entity IN (0,".$conf->entity.")"; } } - if (! empty($user->societe_id)) $sql.= " AND u.fk_soc = ".$user->societe_id; + if (! empty($user->socid)) $sql.= " AND u.fk_soc = ".$user->socid; if (is_array($exclude) && $excludeUsers) $sql.= " AND u.rowid NOT IN (".$excludeUsers.")"; if ($includeUsers) $sql.= " AND u.rowid IN (".$includeUsers.")"; if (! empty($conf->global->USER_HIDE_INACTIVE_IN_COMBOBOX) || $noactive) $sql.= " AND u.statut <> 0"; diff --git a/htdocs/core/class/html.formmargin.class.php b/htdocs/core/class/html.formmargin.class.php index 25a46090b1d..613992bdd2a 100644 --- a/htdocs/core/class/html.formmargin.class.php +++ b/htdocs/core/class/html.formmargin.class.php @@ -195,7 +195,7 @@ class FormMargin { global $langs, $conf, $user; - if (! empty($user->societe_id)) return; + if (! empty($user->socid)) return; if (! $user->rights->margins->liretous) return; diff --git a/htdocs/core/get_menudiv.php b/htdocs/core/get_menudiv.php index 1fe50a963b4..edebf8a31b4 100644 --- a/htdocs/core/get_menudiv.php +++ b/htdocs/core/get_menudiv.php @@ -174,7 +174,7 @@ $(document).ready(function(){ '; -if (empty($user->societe_id)) // If internal user or not defined +if (empty($user->socid)) // If internal user or not defined { $conf->standard_menu=(empty($conf->global->MAIN_MENU_STANDARD_FORCED)?(empty($conf->global->MAIN_MENU_STANDARD)?'eldy_menu.php':$conf->global->MAIN_MENU_STANDARD):$conf->global->MAIN_MENU_STANDARD_FORCED); } @@ -202,7 +202,7 @@ if (! class_exists('MenuManager')) include_once DOL_DOCUMENT_ROOT."/core/menus/standard/".$file_menu; } } -$menumanager = new MenuManager($db, empty($user->societe_id)?0:1); +$menumanager = new MenuManager($db, empty($user->socid)?0:1); $menumanager->loadMenu('all', 'all'); // Load this->tabMenu with sql menu entries //var_dump($menumanager);exit; $menumanager->showmenu('jmobile'); diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index ced8c37c6d7..9f4f1021b4c 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -268,7 +268,7 @@ function societe_prepare_head(Societe $object) // $this->tabs = array('entity:-tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to remove a tab complete_head_from_modules($conf, $langs, $object, $head, $h, 'thirdparty'); - if ($user->societe_id == 0) + if ($user->socid == 0) { // Notifications if (! empty($conf->notification->enabled)) diff --git a/htdocs/core/lib/security.lib.php b/htdocs/core/lib/security.lib.php index a4b96a6b650..d5226bb7e3d 100644 --- a/htdocs/core/lib/security.lib.php +++ b/htdocs/core/lib/security.lib.php @@ -217,7 +217,7 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f { $featureforlistofmodule=$feature; if ($featureforlistofmodule == 'produit') $featureforlistofmodule='product'; - if (! empty($user->societe_id) && ! empty($conf->global->MAIN_MODULES_FOR_EXTERNAL) && ! in_array($featureforlistofmodule, $listofmodules)) // If limits on modules for external users, module must be into list of modules for external users + if (! empty($user->socid) && ! empty($conf->global->MAIN_MODULES_FOR_EXTERNAL) && ! in_array($featureforlistofmodule, $listofmodules)) // If limits on modules for external users, module must be into list of modules for external users { $readok=0; $nbko++; continue; diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index 7beadc9496b..a65d51d5f04 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -108,7 +108,7 @@ function user_prepare_head($object) } // Notifications - if ($user->societe_id == 0 && ! empty($conf->notification->enabled)) + if ($user->socid == 0 && ! empty($conf->notification->enabled)) { $nbNote = 0; $sql = "SELECT COUNT(n.rowid) as nb"; @@ -157,7 +157,7 @@ function user_prepare_head($object) } // Such info on users is visible only by internal user - if (empty($user->societe_id)) + if (empty($user->socid)) { // Notes $nbNote = 0; diff --git a/htdocs/core/menus/standard/auguria.lib.php b/htdocs/core/menus/standard/auguria.lib.php index 5f27a68d63a..6819ab864b3 100644 --- a/htdocs/core/menus/standard/auguria.lib.php +++ b/htdocs/core/menus/standard/auguria.lib.php @@ -316,7 +316,7 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t // We update newmenu with entries found into database $menuArbo = new Menubase($db, 'auguria'); - $newmenu = $menuArbo->menuLeftCharger($newmenu, $mainmenu, $leftmenu, ($user->societe_id?1:0), 'auguria', $tabMenu); + $newmenu = $menuArbo->menuLeftCharger($newmenu, $mainmenu, $leftmenu, ($user->socid?1:0), 'auguria', $tabMenu); // We update newmenu for special dynamic menus if ($conf->banque->enabled && $user->rights->banque->lire && $mainmenu == 'bank') // Entry for each bank account diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 380b6a22355..d9f0d663754 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1852,7 +1852,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM // Add personalized menus and modules menus //var_dump($newmenu->liste); // $menuArbo = new Menubase($db, 'eldy'); - $newmenu = $menuArbo->menuLeftCharger($newmenu, $mainmenu, $leftmenu, (empty($user->societe_id)?0:1), 'eldy', $tabMenu); + $newmenu = $menuArbo->menuLeftCharger($newmenu, $mainmenu, $leftmenu, (empty($user->socid)?0:1), 'eldy', $tabMenu); //var_dump($newmenu->liste); // // We update newmenu for special dynamic menus diff --git a/htdocs/core/modules/modMargin.class.php b/htdocs/core/modules/modMargin.class.php index 5ad2ba0d03a..aca3f4686e5 100644 --- a/htdocs/core/modules/modMargin.class.php +++ b/htdocs/core/modules/modMargin.class.php @@ -86,7 +86,7 @@ class modMargin extends DolibarrModules // New pages on tabs $this->tabs = array( 'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__', - 'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__' + 'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__' ); diff --git a/htdocs/core/modules/rapport/pdf_paiement.class.php b/htdocs/core/modules/rapport/pdf_paiement.class.php index 2eaaef08447..7393f0e198d 100644 --- a/htdocs/core/modules/rapport/pdf_paiement.class.php +++ b/htdocs/core/modules/rapport/pdf_paiement.class.php @@ -101,7 +101,7 @@ class pdf_paiement global $conf, $hookmanager, $langs, $user; $socid=0; - if ($user->societe_id) $socid=$user->societe_id; + if ($user->socid) $socid=$user->socid; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO diff --git a/htdocs/core/tools.php b/htdocs/core/tools.php index 4f517603d63..f598bd31d83 100644 --- a/htdocs/core/tools.php +++ b/htdocs/core/tools.php @@ -29,7 +29,7 @@ $langs->loadLangs(array("companies","other")); // Security check $socid=0; -if ($user->societe_id > 0) $socid=$user->societe_id; +if ($user->socid > 0) $socid=$user->socid; diff --git a/htdocs/core/tpl/notes.tpl.php b/htdocs/core/tpl/notes.tpl.php index 14c65c9cbf1..c2be08aa5da 100644 --- a/htdocs/core/tpl/notes.tpl.php +++ b/htdocs/core/tpl/notes.tpl.php @@ -86,7 +86,7 @@ if ($module != 'product') { print '
    '."\n"; print ''."\n"; } -if (empty($user->societe_id)) { +if (empty($user->socid)) { print '
    '."\n"; print '
    '."\n"; print $form->editfieldkey("NotePrivate", $note_private, $value_private, $object, $permission, $typeofdata, $moreparam, '', 0); diff --git a/htdocs/core/tpl/objectline_title.tpl.php b/htdocs/core/tpl/objectline_title.tpl.php index 82362e9d113..157e24f64b9 100644 --- a/htdocs/core/tpl/objectline_title.tpl.php +++ b/htdocs/core/tpl/objectline_title.tpl.php @@ -86,7 +86,7 @@ if ($this->situation_cycle_ref) { print '
    ' . $langs->trans('TotalHT100Short') . '' . price($tmp[0]) . 'pa_ht); ?>
    ' . $langs->trans('NotePrivate') . ''; diff --git a/htdocs/don/document.php b/htdocs/don/document.php index 93004163b2e..982de549969 100644 --- a/htdocs/don/document.php +++ b/htdocs/don/document.php @@ -50,7 +50,7 @@ $confirm = GETPOST('confirm', 'alpha'); $projectid = (GETPOST('projectid') ? GETPOST('projectid', 'int') : 0); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'don', $id, ''); diff --git a/htdocs/don/info.php b/htdocs/don/info.php index 12444938fdf..c16cfce10bb 100644 --- a/htdocs/don/info.php +++ b/htdocs/don/info.php @@ -39,7 +39,7 @@ $action=GETPOST('action', 'alpha'); $projectid = (GETPOST('projectid') ? GETPOST('projectid', 'int') : 0); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'don', $id, ''); $object = new Don($db); diff --git a/htdocs/don/note.php b/htdocs/don/note.php index b076ce60350..e1db83bdb7a 100644 --- a/htdocs/don/note.php +++ b/htdocs/don/note.php @@ -45,7 +45,7 @@ $projectid = (GETPOST('projectid') ? GETPOST('projectid', 'int') : 0); // Security check $socid=0; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'don', $id, ''); $object = new Don($db); diff --git a/htdocs/don/payment/card.php b/htdocs/don/payment/card.php index 4d3299b6699..74d1d8b3f03 100644 --- a/htdocs/don/payment/card.php +++ b/htdocs/don/payment/card.php @@ -36,7 +36,7 @@ $langs->loadLangs(array("bills","banks","companies")); $id=GETPOST('rowid')?GETPOST('rowid', 'int'):GETPOST('id', 'int'); $action=GETPOST('action', 'aZ09'); $confirm=GETPOST('confirm'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; // TODO Add rule to restrict access payment //$result = restrictedArea($user, 'facture', $id,''); @@ -272,7 +272,7 @@ print '
    '; /* if (! empty($conf->global->BILL_ADD_PAYMENT_VALIDATION)) { - if ($user->societe_id == 0 && $object->statut == 0 && $_GET['action'] == '') + if ($user->socid == 0 && $object->statut == 0 && $_GET['action'] == '') { if ($user->rights->facture->paiement) { diff --git a/htdocs/don/payment/payment.php b/htdocs/don/payment/payment.php index 71895a7d2c3..2b813f73b1b 100644 --- a/htdocs/don/payment/payment.php +++ b/htdocs/don/payment/payment.php @@ -35,8 +35,8 @@ $amounts = array(); // Security check $socid=0; -if ($user->societe_id > 0) { - $socid = $user->societe_id; +if ($user->socid > 0) { + $socid = $user->socid; } @@ -240,7 +240,7 @@ if (GETPOST('action', 'aZ09') == 'create') /* * List of payments on donation */ - + $num = 1; $i = 0; diff --git a/htdocs/don/stats/index.php b/htdocs/don/stats/index.php index 8a740ff6941..1604ceb3870 100644 --- a/htdocs/don/stats/index.php +++ b/htdocs/don/stats/index.php @@ -35,10 +35,10 @@ $HEIGHT=DolGraph::getDefaultGraphSizeForStats('height'); $userid=GETPOST('userid', 'int'); $socid=GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $nowyear=strftime("%Y", dol_now()); @@ -72,7 +72,7 @@ $data = $stats->getNbByMonthWithPrevYear($endyear, $startyear); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenamenb = $dir.'/shipmentsnbinyear-'.$user->id.'-'.$year.'.png'; } @@ -112,7 +112,7 @@ $data = $stats->getAmountByMonthWithPrevYear($endyear,$startyear); //var_dump($data); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenameamount = $dir.'/shipmentsamountinyear-'.$user->id.'-'.$year.'.png'; } @@ -150,7 +150,7 @@ if (! $mesg) /* $data = $stats->getAverageByMonthWithPrevYear($endyear, $startyear); -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filename_avg = $dir.'/shipmentsaverage-'.$user->id.'-'.$year.'.png'; } diff --git a/htdocs/ecm/dir_add_card.php b/htdocs/ecm/dir_add_card.php index 4c28e4c159d..56120d206b4 100644 --- a/htdocs/ecm/dir_add_card.php +++ b/htdocs/ecm/dir_add_card.php @@ -44,10 +44,10 @@ $pageid = GETPOST('pageid', 'int'); if (empty($module)) $module='ecm'; // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $section=$urlsection=GETPOST('section', 'alpha'); diff --git a/htdocs/ecm/file_card.php b/htdocs/ecm/file_card.php index 4e8585508c6..fcfa5b71205 100644 --- a/htdocs/ecm/file_card.php +++ b/htdocs/ecm/file_card.php @@ -40,10 +40,10 @@ if (!$user->rights->ecm->setup) accessforbidden(); $socid = GETPOST("socid", "int"); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $sortfield = GETPOST("sortfield", 'alpha'); diff --git a/htdocs/ecm/index.php b/htdocs/ecm/index.php index 9d78ad5fd32..e51efb01aaa 100644 --- a/htdocs/ecm/index.php +++ b/htdocs/ecm/index.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmdirectory.class.php'; $langs->loadLangs(array("ecm","companies","other","users","orders","propal","bills","contracts")); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'ecm', 0); // Get parameters diff --git a/htdocs/ecm/index_auto.php b/htdocs/ecm/index_auto.php index 86d34080789..2fb4e88368a 100644 --- a/htdocs/ecm/index_auto.php +++ b/htdocs/ecm/index_auto.php @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmdirectory.class.php'; $langs->loadLangs(array("ecm","companies","other","users","orders","propal","bills","contracts")); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'ecm', 0); // Get parameters diff --git a/htdocs/ecm/search.php b/htdocs/ecm/search.php index 37f6e22798b..a801b6fca3b 100644 --- a/htdocs/ecm/search.php +++ b/htdocs/ecm/search.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmdirectory.class.php'; $langs->loadLangs(array("ecm","companies","other","users","orders","propal","bills","contracts")); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'ecm', ''); // Load permissions diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index 536efaf885b..226b62aab30 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -69,7 +69,7 @@ $line_id = GETPOST('lineid', 'int')?GETPOST('lineid', 'int'):''; // Security check $socid=''; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; if ($origin == 'expedition') $result=restrictedArea($user, $origin, $id); else { @@ -981,7 +981,7 @@ if ($action == 'create') print "
    '.$langs->trans("NotePrivate").''; @@ -2498,7 +2498,7 @@ elseif ($id || $ref) * Boutons actions */ - if (($user->societe_id == 0) && ($action!='presend')) + if (($user->socid == 0) && ($action!='presend')) { print '
    '; diff --git a/htdocs/expedition/contact.php b/htdocs/expedition/contact.php index b8e6af1db85..1cd050cb89e 100644 --- a/htdocs/expedition/contact.php +++ b/htdocs/expedition/contact.php @@ -42,7 +42,7 @@ $ref=GETPOST('ref', 'alpha'); $action=GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'expedition', $id, ''); $object = new Expedition($db); diff --git a/htdocs/expedition/document.php b/htdocs/expedition/document.php index 9faaaf1f88e..0018ba3cd06 100644 --- a/htdocs/expedition/document.php +++ b/htdocs/expedition/document.php @@ -46,9 +46,9 @@ $id = GETPOST('id', 'int'); $ref = GETPOST('ref'); // Security check -if ($user->societe_id) +if ($user->socid) { - $socid = $user->societe_id; + $socid = $user->socid; } $result=restrictedArea($user, 'expedition', $id, ''); diff --git a/htdocs/expedition/list.php b/htdocs/expedition/list.php index 1840569fd0e..888f7037efb 100644 --- a/htdocs/expedition/list.php +++ b/htdocs/expedition/list.php @@ -46,7 +46,7 @@ $toselect = GETPOST('toselect', 'array'); // Security check $expeditionid = GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'expedition', $expeditionid, ''); $search_ref_exp = GETPOST("search_ref_exp", 'alpha'); diff --git a/htdocs/expedition/note.php b/htdocs/expedition/note.php index 25ccf938963..1ae26471eb8 100644 --- a/htdocs/expedition/note.php +++ b/htdocs/expedition/note.php @@ -41,7 +41,7 @@ $action=GETPOST('action', 'alpha'); // Security check $socid=''; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, $origin, $origin_id); $object = new Expedition($db); diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php index a5c9125d844..2bc1e9a23ef 100644 --- a/htdocs/expedition/shipment.php +++ b/htdocs/expedition/shipment.php @@ -53,7 +53,7 @@ $hookmanager->initHooks(array('ordershipmentcard')); // Security check $socid=0; -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result=restrictedArea($user, 'commande', $id); $object = new Commande($db); @@ -856,7 +856,7 @@ if ($id > 0 || ! empty($ref)) * Boutons Actions */ - if (empty($user->societe_id)) + if (empty($user->socid)) { print '
    '; diff --git a/htdocs/expedition/stats/index.php b/htdocs/expedition/stats/index.php index b6c3f7355a9..b2aea807b5f 100644 --- a/htdocs/expedition/stats/index.php +++ b/htdocs/expedition/stats/index.php @@ -34,10 +34,10 @@ $HEIGHT=DolGraph::getDefaultGraphSizeForStats('height'); $userid=GETPOST('userid', 'int'); $socid=GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $nowyear=strftime("%Y", dol_now()); @@ -71,7 +71,7 @@ $data = $stats->getNbByMonthWithPrevYear($endyear, $startyear); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenamenb = $dir.'/shipmentsnbinyear-'.$user->id.'-'.$year.'.png'; } @@ -111,7 +111,7 @@ $data = $stats->getAmountByMonthWithPrevYear($endyear,$startyear); //var_dump($data); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenameamount = $dir.'/shipmentsamountinyear-'.$user->id.'-'.$year.'.png'; } @@ -149,7 +149,7 @@ if (! $mesg) /* $data = $stats->getAverageByMonthWithPrevYear($endyear, $startyear); -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filename_avg = $dir.'/shipmentsaverage-'.$user->id.'-'.$year.'.png'; } diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 7a62903dfe6..c427c3d75a7 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -68,7 +68,7 @@ $childids = $user->getAllChildIds(1); // Security check $id=GETPOST("id", 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'expensereport', $id, 'expensereport'); @@ -1521,7 +1521,7 @@ if ($action == 'create') print '
    ' . $langs->trans('NotePrivate') . ''; diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 485373c5840..f56bfcdeca1 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2351,7 +2351,7 @@ class ExpenseReport extends CommonObject // phpcs:enable global $conf, $langs; - if ($user->societe_id) return -1; // protection pour eviter appel par utilisateur externe + if ($user->socid) return -1; // protection pour eviter appel par utilisateur externe $now=dol_now(); diff --git a/htdocs/expensereport/document.php b/htdocs/expensereport/document.php index 6a8bd90f95f..1bf2c0db8da 100644 --- a/htdocs/expensereport/document.php +++ b/htdocs/expensereport/document.php @@ -43,7 +43,7 @@ $action = GETPOST('action', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'expensereport', $id, 'expensereport'); diff --git a/htdocs/expensereport/index.php b/htdocs/expensereport/index.php index aaffc878046..97a1e991fb8 100644 --- a/htdocs/expensereport/index.php +++ b/htdocs/expensereport/index.php @@ -42,7 +42,7 @@ $langs->loadLangs(array('companies', 'users', 'trips')); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'expensereport', '', ''); $sortfield = GETPOST("sortfield", 'alpha'); @@ -165,7 +165,7 @@ $langs->load("boxes"); $sql = "SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.statut, u.photo, d.rowid, d.ref, d.date_debut as dated, d.date_fin as datef, d.date_create as dm, d.total_ht, d.total_ttc, d.fk_statut as fk_status"; $sql.= " FROM ".MAIN_DB_PREFIX."expensereport as d, ".MAIN_DB_PREFIX."user as u"; -if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; +if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE u.rowid = d.fk_user_author"; // RESTRICT RIGHTS if (empty($user->rights->expensereport->readall) && empty($user->rights->expensereport->lire_tous) @@ -176,7 +176,7 @@ if (empty($user->rights->expensereport->readall) && empty($user->rights->expense $sql.= " AND d.fk_user_author IN (".join(',', $childids).")\n"; } $sql.= ' AND d.entity IN ('.getEntity('expensereport').')'; -if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND d.fk_user_author = s.rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; +if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND d.fk_user_author = s.rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if ($socid) $sql.= " AND d.fk_user_author = ".$socid; $sql.= $db->order($sortfield, $sortorder); $sql.= $db->plimit($max, 0); diff --git a/htdocs/expensereport/info.php b/htdocs/expensereport/info.php index b9605a92eec..715530e9199 100644 --- a/htdocs/expensereport/info.php +++ b/htdocs/expensereport/info.php @@ -33,7 +33,7 @@ $langs->load("trips"); // Security check $id = GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'expensereport', $id, 'expensereport'); diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index 5a0bb291596..6f837fb866c 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -53,7 +53,7 @@ $childids = $user->getAllChildIds(1); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'expensereport', '', ''); $id = GETPOST('id', 'int'); // If we are on the view of a specific user diff --git a/htdocs/expensereport/note.php b/htdocs/expensereport/note.php index b29e24d4374..a5038b32b0e 100644 --- a/htdocs/expensereport/note.php +++ b/htdocs/expensereport/note.php @@ -39,7 +39,7 @@ $action=GETPOST('action', 'alpha'); // Security check $socid=0; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'expensereport', $id, 'expensereport'); diff --git a/htdocs/expensereport/payment/card.php b/htdocs/expensereport/payment/card.php index e168c1aa5b8..78f1c81ce6e 100644 --- a/htdocs/expensereport/payment/card.php +++ b/htdocs/expensereport/payment/card.php @@ -36,7 +36,7 @@ $action=GETPOST('action', 'aZ09'); $confirm=GETPOST('confirm'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; // TODO Add rule to restrict access payment //$result = restrictedArea($user, 'facture', $id,''); diff --git a/htdocs/expensereport/payment/payment.php b/htdocs/expensereport/payment/payment.php index 8d1c568332d..0e1722da874 100644 --- a/htdocs/expensereport/payment/payment.php +++ b/htdocs/expensereport/payment/payment.php @@ -39,9 +39,9 @@ $accountid=GETPOST('accountid', 'int'); // Security check $socid=0; -if ($user->societe_id > 0) +if ($user->socid > 0) { - $socid = $user->societe_id; + $socid = $user->socid; } diff --git a/htdocs/expensereport/stats/index.php b/htdocs/expensereport/stats/index.php index 670142836cd..5d6301353db 100644 --- a/htdocs/expensereport/stats/index.php +++ b/htdocs/expensereport/stats/index.php @@ -42,12 +42,12 @@ $socid=GETPOST('socid', 'int'); if ($socid < 0) $socid=0; $id = GETPOST('id', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'expensereport', $id, ''); $nowyear=strftime("%Y", dol_now()); @@ -146,7 +146,7 @@ if (! $mesg) $data = $stats->getAverageByMonthWithPrevYear($endyear, $startyear); -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filename_avg = $dir.'/ordersaverage-'.$user->id.'-'.$year.'.png'; if ($mode == 'customer') $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersaverage-'.$user->id.'-'.$year.'.png'; diff --git a/htdocs/fichinter/card-rec.php b/htdocs/fichinter/card-rec.php index caead930491..aaf2aec0490 100644 --- a/htdocs/fichinter/card-rec.php +++ b/htdocs/fichinter/card-rec.php @@ -52,7 +52,7 @@ $langs->loadLangs(array("interventions","admin","compta","bills")); // Security check $id=(GETPOST('fichinterid', 'int')?GETPOST('fichinterid', 'int'):GETPOST('id', 'int')); $action=GETPOST('action', 'alpha'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $objecttype = 'fichinter_rec'; if ($action == "create" || $action == "add") $objecttype = ''; $result = restrictedArea($user, 'ficheinter', $id, $objecttype); diff --git a/htdocs/fichinter/card.php b/htdocs/fichinter/card.php index 1ed9432ffb0..8bb064ca803 100644 --- a/htdocs/fichinter/card.php +++ b/htdocs/fichinter/card.php @@ -74,7 +74,7 @@ $hidedesc = (GETPOST('hidedesc', 'int') ? GETPOST('hidedesc', 'int') : (! empt $hideref = (GETPOST('hideref', 'int') ? GETPOST('hideref', 'int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0)); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'ficheinter', $id, 'fichinter'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -978,7 +978,7 @@ if ($action == 'create') print '
    '.$langs->trans('NotePrivate').'
    '; // Private note - if (empty($user->societe_id)) { + if (empty($user->socid)) { print ''; print ''; print ''; print '"; // Note Private - if ($object->note_private && ! $user->societe_id) + if ($object->note_private && ! $user->socid) { print ''; print ''; // Creation date @@ -889,7 +889,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd } // Show user list to assignate one if status is "read" - if (GETPOST('set', 'alpha') == "assign_ticket" && $object->fk_statut < 8 && !$user->societe_id && $user->rights->ticket->write) { + if (GETPOST('set', 'alpha') == "assign_ticket" && $object->fk_statut < 8 && !$user->socid && $user->rights->ticket->write) { print ''; print ''; print ''; @@ -906,7 +906,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd print '
    '; print $langs->trans("CustomerRelativeDiscountShort"); print ''; - if ($user->rights->societe->creer && !$user->societe_id > 0) + if ($user->rights->societe->creer && !$user->socid > 0) { print ''.img_edit($langs->trans("Modify")).''; } @@ -280,7 +280,7 @@ if ($object->id > 0) print '
    '; print $langs->trans("CustomerAbsoluteDiscountShort"); print ''; - if ($user->rights->societe->creer && !$user->societe_id > 0) + if ($user->rights->societe->creer && !$user->socid > 0) { print ''.img_edit($langs->trans("Modify")).''; } diff --git a/htdocs/fourn/class/fournisseur.class.php b/htdocs/fourn/class/fournisseur.class.php index c0473759a6d..711261a161b 100644 --- a/htdocs/fourn/class/fournisseur.class.php +++ b/htdocs/fourn/class/fournisseur.class.php @@ -118,7 +118,7 @@ class Fournisseur extends Societe $sql = "SELECT count(s.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; @@ -191,10 +191,10 @@ class Fournisseur extends Societe $sql = "SELECT s.rowid, s.nom as name"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE s.fournisseur = 1"; $sql.= " AND s.entity IN (".getEntity('societe').")"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $resql=$this->db->query($sql); diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index a6d4751169e..8865171d2aa 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -2749,7 +2749,7 @@ class CommandeFournisseur extends CommonOrder $sql = "SELECT count(co.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as co"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON co.fk_soc = s.rowid"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; @@ -2792,7 +2792,7 @@ class CommandeFournisseur extends CommonOrder $sql = "SELECT c.rowid, c.date_creation as datec, c.date_commande, c.fk_statut, c.date_livraison as delivery_date"; $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as c"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON c.fk_soc = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; @@ -2805,7 +2805,7 @@ class CommandeFournisseur extends CommonOrder else{ $sql.= " AND c.fk_statut IN (".self::STATUS_VALIDATED.", ".self::STATUS_ACCEPTED.")"; } - if ($user->societe_id) $sql.=" AND c.fk_soc = ".$user->societe_id; + if ($user->socid) $sql.=" AND c.fk_soc = ".$user->socid; $resql=$this->db->query($sql); if ($resql) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 0e28c5302ce..48e90c70ed7 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -2187,12 +2187,12 @@ class FactureFournisseur extends CommonInvoice $sql = 'SELECT ff.rowid, ff.date_lim_reglement as datefin, ff.fk_statut'; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn as ff'; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= ' WHERE ff.paye=0'; $sql.= ' AND ff.fk_statut > 0'; $sql.= " AND ff.entity = ".$conf->entity; - if ($user->societe_id) $sql.=' AND ff.fk_soc = '.$user->societe_id; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND ff.fk_soc = sc.fk_soc AND sc.fk_user = ".$user->id; + if ($user->socid) $sql.=' AND ff.fk_soc = '.$user->socid; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND ff.fk_soc = sc.fk_soc AND sc.fk_user = ".$user->id; $resql=$this->db->query($sql); if ($resql) @@ -2490,7 +2490,7 @@ class FactureFournisseur extends CommonInvoice $sql = "SELECT count(f.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as f"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 97ce70a8a28..2475b251f56 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -81,7 +81,7 @@ $datelivraison=dol_mktime(GETPOST('liv_hour', 'int'), GETPOST('liv_min', 'int'), // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'fournisseur', $id, 'commande_fournisseur', 'commande'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -2329,7 +2329,7 @@ elseif (! empty($object->id)) * Boutons actions */ - if ($user->societe_id == 0 && $action != 'editline' && $action != 'delete') + if ($user->socid == 0 && $action != 'editline' && $action != 'delete') { print '
    '; diff --git a/htdocs/fourn/commande/contact.php b/htdocs/fourn/commande/contact.php index 4db112bcb0f..63a2935212e 100644 --- a/htdocs/fourn/commande/contact.php +++ b/htdocs/fourn/commande/contact.php @@ -41,7 +41,7 @@ $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'fournisseur', $id, 'commande_fournisseur', 'commande'); $object = new CommandeFournisseur($db); diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 0884a416d65..0d9782b3683 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -51,8 +51,8 @@ $id = GETPOST("id", 'int'); $ref = GETPOST('ref'); $lineid = GETPOST('lineid', 'int'); $action = GETPOST('action', 'aZ09'); -if ($user->societe_id) - $socid = $user->societe_id; +if ($user->socid) + $socid = $user->socid; $result = restrictedArea($user, 'fournisseur', $id, 'commande_fournisseur', 'commande'); if (empty($conf->stock->enabled)) { diff --git a/htdocs/fourn/commande/document.php b/htdocs/fourn/commande/document.php index 6ebb83a25dc..8fbe54e8580 100644 --- a/htdocs/fourn/commande/document.php +++ b/htdocs/fourn/commande/document.php @@ -47,7 +47,7 @@ $action = GETPOST('action', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'fournisseur', $id, 'commande_fournisseur', 'commande'); // Get parameters diff --git a/htdocs/fourn/commande/index.php b/htdocs/fourn/commande/index.php index ec71820ebbb..01294dba3c6 100644 --- a/htdocs/fourn/commande/index.php +++ b/htdocs/fourn/commande/index.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; // Security check $orderid = GETPOST('orderid'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'fournisseur', $orderid, '', 'commande'); $hookmanager = new HookManager($db); @@ -81,7 +81,7 @@ $sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as cf"; if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE cf.fk_soc = s.rowid"; $sql.= " AND cf.entity = ".$conf->entity; -if ($user->societe_id) $sql.=' AND cf.fk_soc = '.$user->societe_id; +if ($user->socid) $sql.=' AND cf.fk_soc = '.$user->socid; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " GROUP BY cf.fk_statut"; @@ -168,7 +168,7 @@ $sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as cf"; if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE cf.fk_soc = s.rowid"; $sql.= " AND s.entity = ".$conf->entity; -if ($user->societe_id) $sql.=' AND cf.fk_soc = '.$user->societe_id; +if ($user->socid) $sql.=' AND cf.fk_soc = '.$user->socid; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " GROUP BY cf.fk_statut"; diff --git a/htdocs/fourn/commande/info.php b/htdocs/fourn/commande/info.php index 8b0b17c066b..4f73b373589 100644 --- a/htdocs/fourn/commande/info.php +++ b/htdocs/fourn/commande/info.php @@ -53,7 +53,7 @@ $search_agenda_label=GETPOST('search_agenda_label'); // Security check $socid=0; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'fournisseur', $id, 'commande_fournisseur', 'commande'); if (!$user->rights->fournisseur->commande->lire) accessforbidden(); diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 4201321913f..f8325ce8b0f 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -91,7 +91,7 @@ $viewstatut=GETPOST('viewstatut'); // Security check $orderid = GETPOST('orderid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'fournisseur', $orderid, '', 'commande'); $diroutputmassaction=$conf->fournisseur->commande->dir_output . '/temp/massgeneration/'.$user->id; diff --git a/htdocs/fourn/commande/note.php b/htdocs/fourn/commande/note.php index 61e4029f795..63629af25bb 100644 --- a/htdocs/fourn/commande/note.php +++ b/htdocs/fourn/commande/note.php @@ -40,7 +40,7 @@ $ref = GETPOST('ref'); $action = GETPOST('action', 'aZ09'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'fournisseur', $id, 'commande_fournisseur', 'commande'); $object = new CommandeFournisseur($db); diff --git a/htdocs/fourn/commande/orderstoinvoice.php b/htdocs/fourn/commande/orderstoinvoice.php index f1b0d3995eb..0b01dbeb1d4 100644 --- a/htdocs/fourn/commande/orderstoinvoice.php +++ b/htdocs/fourn/commande/orderstoinvoice.php @@ -139,8 +139,8 @@ if (($action == 'create' || $action == 'add') && ! $error) { $search_ref = GETPOST('sf_ref') ? GETPOST('sf_ref') : GETPOST('search_ref'); // Security check - if ($user->societe_id) - $socid = $user->societe_id; + if ($user->socid) + $socid = $user->socid; $result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture'); $usehm = $conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE; @@ -397,7 +397,7 @@ if ($action == 'create' && !$error) { print '
    ' . $langs->trans('NotePrivate') . ''; diff --git a/htdocs/fourn/contact.php b/htdocs/fourn/contact.php index 99a1c85902a..649c24408a1 100644 --- a/htdocs/fourn/contact.php +++ b/htdocs/fourn/contact.php @@ -35,10 +35,10 @@ $langs->load("companies"); llxHeader(); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $sortfield = GETPOST("sortfield", 'alpha'); diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 0949b85bd7d..dd9a53060dc 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -95,7 +95,7 @@ if ($id > 0 || ! empty($ref)) // Security check $socid=''; -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $isdraft = (($object->statut == FactureFournisseur::STATUS_DRAFT) ? 1 : 0); $result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture', 'fk_soc', 'rowid', $isdraft); @@ -2785,7 +2785,7 @@ else } print '' . price($sign * $objp->amount) . ''; - if ($object->statut == FactureFournisseur::STATUS_VALIDATED && $object->paye == 0 && $user->societe_id == 0) + if ($object->statut == FactureFournisseur::STATUS_VALIDATED && $object->paye == 0 && $user->socid == 0) { print 'rowid.'">'; print img_delete(); @@ -3088,13 +3088,13 @@ else } // Make payments - if ($object->type != FactureFournisseur::TYPE_CREDIT_NOTE && $action != 'confirm_edit' && $object->statut == FactureFournisseur::STATUS_VALIDATED && $object->paye == 0 && $user->societe_id == 0) + if ($object->type != FactureFournisseur::TYPE_CREDIT_NOTE && $action != 'confirm_edit' && $object->statut == FactureFournisseur::STATUS_VALIDATED && $object->paye == 0 && $user->socid == 0) { print ''; // must use facid because id is for payment id not invoice } // Classify paid - if ($action != 'confirm_edit' && $object->statut == FactureFournisseur::STATUS_VALIDATED && $object->paye == 0 && $user->societe_id == 0) + if ($action != 'confirm_edit' && $object->statut == FactureFournisseur::STATUS_VALIDATED && $object->paye == 0 && $user->socid == 0) { print ''; diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php index 2d2f9006632..18f64d15734 100644 --- a/htdocs/fourn/facture/contact.php +++ b/htdocs/fourn/facture/contact.php @@ -41,7 +41,7 @@ $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture'); $object = new FactureFournisseur($db); diff --git a/htdocs/fourn/facture/document.php b/htdocs/fourn/facture/document.php index d8cf1ecda27..087325e3de0 100644 --- a/htdocs/fourn/facture/document.php +++ b/htdocs/fourn/facture/document.php @@ -46,7 +46,7 @@ $confirm=GETPOST('confirm', 'alpha'); $ref = GETPOST('ref', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture'); // Get parameters diff --git a/htdocs/fourn/facture/impayees.php b/htdocs/fourn/facture/impayees.php index 78abccdc250..0a10d58764a 100644 --- a/htdocs/fourn/facture/impayees.php +++ b/htdocs/fourn/facture/impayees.php @@ -39,10 +39,10 @@ $socid=GETPOST('socid', 'int'); $option = GETPOST('option'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $sortfield = GETPOST("sortfield", 'alpha'); diff --git a/htdocs/fourn/facture/info.php b/htdocs/fourn/facture/info.php index 6b4af5dd290..8f10fd94dc4 100644 --- a/htdocs/fourn/facture/info.php +++ b/htdocs/fourn/facture/info.php @@ -40,7 +40,7 @@ $id = GETPOST("facid", 'int')?GETPOST("facid", 'int'):GETPOST("id", 'int'); $ref = GETPOST("ref", 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture'); $object = new FactureFournisseur($db); diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index 7c8a78cf8ce..b13e283ea65 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -60,11 +60,11 @@ $contextpage=GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'supplier $socid = GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action=''; $_GET["action"] = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $mode=GETPOST("mode"); diff --git a/htdocs/fourn/facture/note.php b/htdocs/fourn/facture/note.php index 03a4dda960e..a7200495e96 100644 --- a/htdocs/fourn/facture/note.php +++ b/htdocs/fourn/facture/note.php @@ -40,7 +40,7 @@ $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture'); $object = new FactureFournisseur($db); diff --git a/htdocs/fourn/facture/paiement.php b/htdocs/fourn/facture/paiement.php index 38136aa3b64..1dc10406a24 100644 --- a/htdocs/fourn/facture/paiement.php +++ b/htdocs/fourn/facture/paiement.php @@ -78,9 +78,9 @@ $multicurrency_amounts=array(); $multicurrency_amountsresttopay=array(); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { - $socid = $user->societe_id; + $socid = $user->socid; } $object = new PaiementFourn($db); diff --git a/htdocs/fourn/facture/rapport.php b/htdocs/fourn/facture/rapport.php index 94ef53f2372..59ad242fa05 100644 --- a/htdocs/fourn/facture/rapport.php +++ b/htdocs/fourn/facture/rapport.php @@ -30,16 +30,16 @@ $langs->loadLangs(array('bills')); // Security check $socid=''; -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture'); $action=GETPOST('action', 'aZ09'); $socid=0; -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $dir = $conf->fournisseur->facture->dir_output.'/payments'; diff --git a/htdocs/fourn/index.php b/htdocs/fourn/index.php index a7107f0a5c8..3615051fa2f 100644 --- a/htdocs/fourn/index.php +++ b/htdocs/fourn/index.php @@ -32,7 +32,7 @@ $langs->loadLangs(array("suppliers", "orders", "companies")); // Security check $socid = GETPOST("socid", 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'societe', $socid, ''); diff --git a/htdocs/fourn/paiement/card.php b/htdocs/fourn/paiement/card.php index 8b65d8be7c0..bb704c8f882 100644 --- a/htdocs/fourn/paiement/card.php +++ b/htdocs/fourn/paiement/card.php @@ -342,7 +342,7 @@ if ($result > 0) print '
    '; if (! empty($conf->global->BILL_ADD_PAYMENT_VALIDATION)) { - if ($user->societe_id == 0 && $object->statut == 0 && $action == '') + if ($user->socid == 0 && $object->statut == 0 && $action == '') { if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->fournisseur->facture->creer)) || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->fournisseur->supplier_invoice_advance->validate))) @@ -351,7 +351,7 @@ if ($result > 0) } } } - if ($user->societe_id == 0 && $action == '') + if ($user->socid == 0 && $action == '') { if ($user->rights->fournisseur->facture->supprimer) { diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php index b7119e3ae67..860cbde73ba 100644 --- a/htdocs/fourn/product/list.php +++ b/htdocs/fourn/product/list.php @@ -54,7 +54,7 @@ if (! $sortfield) $sortfield="p.ref"; // Set here default search field if (! $sortorder) $sortorder="ASC"; $fourn_id = GETPOST('fourn_id', 'intcomma'); -if ($user->societe_id) $fourn_id=$user->societe_id; +if ($user->socid) $fourn_id=$user->socid; $catid = GETPOST('catid', 'intcomma'); diff --git a/htdocs/fourn/recap-fourn.php b/htdocs/fourn/recap-fourn.php index deee321187b..7f9a7fb11ab 100644 --- a/htdocs/fourn/recap-fourn.php +++ b/htdocs/fourn/recap-fourn.php @@ -32,10 +32,10 @@ $langs->loadLangs(array('bills', 'companies')); // Security check $socid = GETPOST("socid", 'int'); -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } @@ -62,7 +62,7 @@ if ($socid > 0) $head = societe_prepare_head($societe); dol_fiche_head($head, 'supplier', $langs->trans("ThirdParty"), 0, 'company'); - dol_banner_tab($societe, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($societe, 'socid', '', ($user->socid?0:1), 'rowid', 'nom'); dol_fiche_end(); if (! empty($conf->fournisseur->enabled) && $user->rights->facture->lire) diff --git a/htdocs/ftp/index.php b/htdocs/ftp/index.php index 32d8ed44bb4..354fa5c0921 100644 --- a/htdocs/ftp/index.php +++ b/htdocs/ftp/index.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/treeview.lib.php'; $langs->loadLangs(array('ftp', 'companies', 'other')); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'ftp', ''); // Get parameters diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index 605a101ad54..ff7d4ba07c5 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -49,7 +49,7 @@ $ref=GETPOST('ref', 'alpha'); $fuserid = (GETPOST('fuserid', 'int')?GETPOST('fuserid', 'int'):$user->id); // Protection if external user -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'holiday', $id, 'holiday'); // Load translation files required by the page diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 0eb02e006e5..a7d488cf98b 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -2197,7 +2197,7 @@ class Holiday extends CommonObject // phpcs:enable global $conf, $langs; - if ($user->societe_id) return -1; // protection pour eviter appel par utilisateur externe + if ($user->socid) return -1; // protection pour eviter appel par utilisateur externe $now=dol_now(); diff --git a/htdocs/holiday/define_holiday.php b/htdocs/holiday/define_holiday.php index 9add71da395..0eb842ae61c 100644 --- a/htdocs/holiday/define_holiday.php +++ b/htdocs/holiday/define_holiday.php @@ -53,7 +53,7 @@ if (! $sortorder) $sortorder="ASC"; // Protection if external user -if ($user->societe_id > 0) accessforbidden(); +if ($user->socid > 0) accessforbidden(); // If the user does not have perm to read the page if (!$user->rights->holiday->read) accessforbidden(); diff --git a/htdocs/holiday/document.php b/htdocs/holiday/document.php index 02e29774e93..bbf6cac4c87 100644 --- a/htdocs/holiday/document.php +++ b/htdocs/holiday/document.php @@ -45,7 +45,7 @@ $action = GETPOST('action', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'holiday', $id, 'holiday'); // Get parameters diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index b86dd2864b5..bae28dcb993 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -40,7 +40,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php'; $langs->loadLangs(array('users', 'holiday', 'hrm')); // Protection if external user -if ($user->societe_id > 0) accessforbidden(); +if ($user->socid > 0) accessforbidden(); $action = GETPOST('action', 'aZ09'); // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) @@ -59,9 +59,9 @@ $childids = $user->getAllChildIds(1); // Security check $socid=0; -if ($user->societe_id > 0) // Protection if external user +if ($user->socid > 0) // Protection if external user { - //$socid = $user->societe_id; + //$socid = $user->socid; accessforbidden(); } $result = restrictedArea($user, 'holiday', '', ''); diff --git a/htdocs/holiday/month_report.php b/htdocs/holiday/month_report.php index 1d490cc8da3..c09771e47a3 100644 --- a/htdocs/holiday/month_report.php +++ b/htdocs/holiday/month_report.php @@ -35,9 +35,9 @@ $langs->loadLangs(array("holiday")); // Security check $socid=0; -if ($user->societe_id > 0) // Protection if external user +if ($user->socid > 0) // Protection if external user { - //$socid = $user->societe_id; + //$socid = $user->socid; accessforbidden(); } $result = restrictedArea($user, 'holiday', $id, ''); diff --git a/htdocs/holiday/view_log.php b/htdocs/holiday/view_log.php index 13d4cb7d23a..9e5f0ad0cba 100644 --- a/htdocs/holiday/view_log.php +++ b/htdocs/holiday/view_log.php @@ -60,7 +60,7 @@ $pagenext = $page + 1; // Protection if external user -if ($user->societe_id > 0) accessforbidden(); +if ($user->socid > 0) accessforbidden(); // Si l'utilisateur n'a pas le droit de lire cette page if(!$user->rights->holiday->read_all) accessforbidden(); diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php index 9d9d2fcd632..141d3d066a9 100644 --- a/htdocs/hrm/index.php +++ b/htdocs/hrm/index.php @@ -46,7 +46,7 @@ $langs->loadLangs(array('users', 'holidays', 'trips', 'boxes')); $socid=GETPOST("socid", "int"); // Protection if external user -if ($user->societe_id > 0) accessforbidden(); +if ($user->socid > 0) accessforbidden(); if (empty($conf->global->MAIN_INFO_SOCIETE_NOM) || empty($conf->global->MAIN_INFO_SOCIETE_COUNTRY)) $setupcompanynotcomplete=1; @@ -180,7 +180,7 @@ if (! empty($conf->holiday->enabled) && $user->rights->holiday->read) $sql.= " WHERE u.rowid = x.fk_user"; $sql.= " AND x.entity = ".$conf->entity; if (empty($user->rights->holiday->read_all)) $sql.=' AND x.fk_user IN ('.join(',', $childids).')'; - //if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND x.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + //if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND x.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; //if (!empty($socid)) $sql.= " AND x.fk_soc = ".$socid; $sql.= $db->order("x.tms", "DESC"); $sql.= $db->plimit($max, 0); @@ -258,11 +258,11 @@ if (! empty($conf->deplacement->enabled) && $user->rights->deplacement->lire) { $sql = "SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.email, u.statut, u.photo, d.rowid, d.dated as date, d.tms as dm, d.km, d.fk_statut"; $sql.= " FROM ".MAIN_DB_PREFIX."deplacement as d, ".MAIN_DB_PREFIX."user as u"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE u.rowid = d.fk_user"; $sql.= " AND d.entity = ".$conf->entity; if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous)) $sql.=' AND d.fk_user IN ('.join(',', $childids).')'; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND d.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND d.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if (!empty($socid)) $sql.= " AND d.fk_soc = ".$socid; $sql.= $db->order("d.tms", "DESC"); $sql.= $db->plimit($max, 0); @@ -330,11 +330,11 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire { $sql = "SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.email, u.statut, u.photo, x.rowid, x.ref, x.date_debut as date, x.tms as dm, x.total_ttc, x.fk_statut as status"; $sql.= " FROM ".MAIN_DB_PREFIX."expensereport as x, ".MAIN_DB_PREFIX."user as u"; - //if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + //if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE u.rowid = x.fk_user_author"; $sql.= " AND x.entity = ".$conf->entity; if (empty($user->rights->expensereport->readall) && empty($user->rights->expensereport->lire_tous)) $sql.=' AND x.fk_user_author IN ('.join(',', $childids).')'; - //if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND x.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + //if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND x.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; //if (!empty($socid)) $sql.= " AND x.fk_soc = ".$socid; $sql.= $db->order("x.tms", "DESC"); $sql.= $db->plimit($max, 0); diff --git a/htdocs/imports/index.php b/htdocs/imports/index.php index f674daddddc..2ce0139f517 100644 --- a/htdocs/imports/index.php +++ b/htdocs/imports/index.php @@ -27,7 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/imports/class/import.class.php'; // Load translation files required by the page $langs->load("exports"); -if (! $user->societe_id == 0) +if (! $user->socid == 0) accessforbidden(); $import=new Import($db); diff --git a/htdocs/index.php b/htdocs/index.php index 504f77d113e..37ea818817a 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -115,7 +115,7 @@ $boxstatFromHook = ''; // Load translation files required by page $langs->loadLangs(array('commercial', 'bills', 'orders', 'contracts')); -if (empty($user->societe_id) && empty($conf->global->MAIN_DISABLE_GLOBAL_BOXSTATS)) +if (empty($user->socid) && empty($conf->global->MAIN_DISABLE_GLOBAL_BOXSTATS)) { $object=new stdClass(); $parameters=array(); @@ -437,7 +437,7 @@ if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) { } // Number of transactions to conciliate - if (!empty($conf->banque->enabled) && $user->rights->banque->lire && !$user->societe_id) { + if (!empty($conf->banque->enabled) && $user->rights->banque->lire && !$user->socid) { include_once DOL_DOCUMENT_ROOT . '/compta/bank/class/account.class.php'; $board = new Account($db); $nb = $board::countAccountToReconcile(); // Get nb of account to reconciliate @@ -447,14 +447,14 @@ if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) { } // Number of cheque to send - if (!empty($conf->banque->enabled) && $user->rights->banque->lire && !$user->societe_id && empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT)) { + if (!empty($conf->banque->enabled) && $user->rights->banque->lire && !$user->socid && empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT)) { include_once DOL_DOCUMENT_ROOT . '/compta/paiement/cheque/class/remisecheque.class.php'; $board = new RemiseCheque($db); $dashboardlines['RemiseCheque'] = $board->load_board($user); } // Number of foundation members - if (!empty($conf->adherent->enabled) && $user->rights->adherent->lire && !$user->societe_id) { + if (!empty($conf->adherent->enabled) && $user->rights->adherent->lire && !$user->socid) { include_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php'; $board = new Adherent($db); $dashboardlines['Adherent'] = $board->load_board($user); @@ -887,7 +887,7 @@ $boxlist.=$resultboxes['boxlista']; $boxlist.= '
    '; -if (empty($user->societe_id) && empty($conf->global->MAIN_DISABLE_GLOBAL_BOXSTATS)) +if (empty($user->socid) && empty($conf->global->MAIN_DISABLE_GLOBAL_BOXSTATS)) { // Remove allready present info in new dash board if(!empty($conf->global->MAIN_INCLUDE_GLOBAL_STATS_IN_OPENED_DASHBOARD) && is_array($boxstatItems) && count($boxstatItems) > 0){ diff --git a/htdocs/livraison/card.php b/htdocs/livraison/card.php index bf407b8fc90..6686cfe9f7b 100644 --- a/htdocs/livraison/card.php +++ b/htdocs/livraison/card.php @@ -56,7 +56,7 @@ $backtopage=GETPOST('backtopage', 'alpha'); // Security check $id = GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'expedition', $id, 'livraison', 'livraison'); $object = new Livraison($db); @@ -706,7 +706,7 @@ else * Boutons actions */ - if ($user->societe_id == 0) + if ($user->socid == 0) { print '
    '; diff --git a/htdocs/loan/card.php b/htdocs/loan/card.php index 066399320d8..7cf592a354c 100644 --- a/htdocs/loan/card.php +++ b/htdocs/loan/card.php @@ -44,7 +44,7 @@ $projectid = GETPOST('projectid', 'int'); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'loan', $id, '', ''); $object = new Loan($db); diff --git a/htdocs/loan/document.php b/htdocs/loan/document.php index 0cbcec2f209..a4bed07949e 100644 --- a/htdocs/loan/document.php +++ b/htdocs/loan/document.php @@ -40,7 +40,7 @@ $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'loan', $id, '', ''); // Get parameters diff --git a/htdocs/loan/info.php b/htdocs/loan/info.php index b4fb8851ad0..618345518ed 100644 --- a/htdocs/loan/info.php +++ b/htdocs/loan/info.php @@ -38,7 +38,7 @@ $action=GETPOST('action', 'aZ09'); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'loan', $id, '', ''); diff --git a/htdocs/loan/list.php b/htdocs/loan/list.php index 7af7d55fb43..c77d6b1c855 100644 --- a/htdocs/loan/list.php +++ b/htdocs/loan/list.php @@ -32,7 +32,7 @@ $langs->loadLangs(array("loan","compta","banks","bills")); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'loan', '', '', ''); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/loan/payment/card.php b/htdocs/loan/payment/card.php index 29b9df4bf70..1f937e6fe77 100644 --- a/htdocs/loan/payment/card.php +++ b/htdocs/loan/payment/card.php @@ -33,7 +33,7 @@ $langs->loadLangs(array("bills","banks","companies","loan")); $id=GETPOST("id", 'int'); $action=GETPOST('action', 'aZ09'); $confirm=GETPOST('confirm'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; // TODO ajouter regle pour restreindre acces paiement //$result = restrictedArea($user, 'facture', $id,''); @@ -271,7 +271,7 @@ print '
    '; /* if (! empty($conf->global->BILL_ADD_PAYMENT_VALIDATION)) { - if ($user->societe_id == 0 && $payment->statut == 0 && $_GET['action'] == '') + if ($user->socid == 0 && $payment->statut == 0 && $_GET['action'] == '') { if ($user->rights->facture->paiement) { diff --git a/htdocs/loan/payment/payment.php b/htdocs/loan/payment/payment.php index 6742b0b1c04..742cf5ea5cf 100644 --- a/htdocs/loan/payment/payment.php +++ b/htdocs/loan/payment/payment.php @@ -38,9 +38,9 @@ $last=GETPOST('last'); // Security check $socid=0; -if ($user->societe_id > 0) +if ($user->socid > 0) { - $socid = $user->societe_id; + $socid = $user->socid; } $loan = new Loan($db); diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 0a225bb3aaf..afb7fbc0ec2 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1020,7 +1020,7 @@ $heightforframes=50; // Init menu manager if (! defined('NOREQUIREMENU')) { - if (empty($user->societe_id)) // If internal user or not defined + if (empty($user->socid)) // If internal user or not defined { $conf->standard_menu=(empty($conf->global->MAIN_MENU_STANDARD_FORCED)?(empty($conf->global->MAIN_MENU_STANDARD)?'eldy_menu.php':$conf->global->MAIN_MENU_STANDARD):$conf->global->MAIN_MENU_STANDARD_FORCED); } @@ -1048,7 +1048,7 @@ if (! defined('NOREQUIREMENU')) include_once DOL_DOCUMENT_ROOT."/core/menus/standard/".$file_menu; } } - $menumanager = new MenuManager($db, empty($user->societe_id)?0:1); + $menumanager = new MenuManager($db, empty($user->socid)?0:1); $menumanager->loadMenu(); } diff --git a/htdocs/margin/customerMargins.php b/htdocs/margin/customerMargins.php index b8f530660f1..a25528f58fb 100644 --- a/htdocs/margin/customerMargins.php +++ b/htdocs/margin/customerMargins.php @@ -36,7 +36,7 @@ $socid = GETPOST('socid', 'int'); $TSelectedProducts = GETPOST('products', 'array'); $TSelectedCats = GETPOST('categories', 'array'); -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result = restrictedArea($user, 'societe', '', ''); $result = restrictedArea($user, 'margins'); diff --git a/htdocs/margin/productMargins.php b/htdocs/margin/productMargins.php index a4aed7f668a..cbc134c0b66 100644 --- a/htdocs/margin/productMargins.php +++ b/htdocs/margin/productMargins.php @@ -40,7 +40,7 @@ $TSelectedCats=GETPOST('categories', 'array'); // Security check $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result=restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); $result=restrictedArea($user, 'margins'); diff --git a/htdocs/margin/tabs/productMargins.php b/htdocs/margin/tabs/productMargins.php index 0ad3f2f645b..d9677ffa4da 100644 --- a/htdocs/margin/tabs/productMargins.php +++ b/htdocs/margin/tabs/productMargins.php @@ -36,7 +36,7 @@ $confirm=GETPOST('confirm', 'alpha'); // Security check $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result=restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); $object = new Product($db); @@ -94,7 +94,7 @@ if ($id > 0 || ! empty($ref)) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); + dol_banner_tab($object, 'ref', $linkback, ($user->socid?0:1), 'ref'); print '
    '; diff --git a/htdocs/margin/tabs/thirdpartyMargins.php b/htdocs/margin/tabs/thirdpartyMargins.php index c5d1f0d1e0b..1edd5349467 100644 --- a/htdocs/margin/tabs/thirdpartyMargins.php +++ b/htdocs/margin/tabs/thirdpartyMargins.php @@ -30,7 +30,7 @@ $langs->loadLangs(array("companies", "bills", "products", "margins")); // Security check $socid = GETPOST('socid', 'int'); -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result = restrictedArea($user, 'societe', '', ''); @@ -90,7 +90,7 @@ if ($socid > 0) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/modulebuilder/template/mymoduleindex.php b/htdocs/modulebuilder/template/mymoduleindex.php index 2b681e817f8..d97af3cc99e 100644 --- a/htdocs/modulebuilder/template/mymoduleindex.php +++ b/htdocs/modulebuilder/template/mymoduleindex.php @@ -50,10 +50,10 @@ $action=GETPOST('action', 'alpha'); // Securite acces client if (! $user->rights->mymodule->read) accessforbidden(); $socid=GETPOST('socid', 'int'); -if (isset($user->societe_id) && $user->societe_id > 0) +if (isset($user->socid) && $user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $max=5; diff --git a/htdocs/modulebuilder/template/myobject_agenda.php b/htdocs/modulebuilder/template/myobject_agenda.php index 8abb3623909..a9dcb964d21 100644 --- a/htdocs/modulebuilder/template/myobject_agenda.php +++ b/htdocs/modulebuilder/template/myobject_agenda.php @@ -66,8 +66,8 @@ else $search_agenda_label=GETPOST('search_agenda_label'); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mymodule', $id); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 2a9d6388552..ec70df73583 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -100,8 +100,8 @@ if (empty($action) && empty($id) && empty($ref)) $action='view'; include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$isdraft = (($object->statut == MyObject::STATUS_DRAFT) ? 1 : 0); //$result = restrictedArea($user, 'mymodule', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); diff --git a/htdocs/modulebuilder/template/myobject_document.php b/htdocs/modulebuilder/template/myobject_document.php index 8deb44b9009..f4b918692ca 100644 --- a/htdocs/modulebuilder/template/myobject_document.php +++ b/htdocs/modulebuilder/template/myobject_document.php @@ -80,8 +80,8 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be inclu if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mymodule->multidir_output[$object->entity?$object->entity:$conf->entity] . "/myobject/" . dol_sanitizeFileName($object->ref); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mymodule', $object->id); diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 525fa879562..04ce7a21b16 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -112,9 +112,9 @@ if (! $sortorder) $sortorder="ASC"; // Security check if (empty($conf->mymodule->enabled)) accessforbidden('Module not enabled'); $socid=0; -if ($user->societe_id > 0) // Protection if external user +if ($user->socid > 0) // Protection if external user { - //$socid = $user->societe_id; + //$socid = $user->socid; accessforbidden(); } //$result = restrictedArea($user, 'mymodule', $id, ''); diff --git a/htdocs/modulebuilder/template/myobject_note.php b/htdocs/modulebuilder/template/myobject_note.php index c8dbc5d3140..7cf5f418ff1 100644 --- a/htdocs/modulebuilder/template/myobject_note.php +++ b/htdocs/modulebuilder/template/myobject_note.php @@ -59,8 +59,8 @@ $hookmanager->initHooks(array('myobjectnote','globalcard')); // Note that co $extrafields->fetch_name_optionals_label($object->table_element); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mymodule', $id); // Load object diff --git a/htdocs/mrp/mo_agenda.php b/htdocs/mrp/mo_agenda.php index a86d062c5e4..884bc234cbf 100644 --- a/htdocs/mrp/mo_agenda.php +++ b/htdocs/mrp/mo_agenda.php @@ -54,8 +54,8 @@ else $search_agenda_label=GETPOST('search_agenda_label'); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mrp', $id); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php index 0ecbefc32a7..07b6be426f3 100644 --- a/htdocs/mrp/mo_card.php +++ b/htdocs/mrp/mo_card.php @@ -88,8 +88,8 @@ if (empty($action) && empty($id) && empty($ref)) $action='view'; include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$isdraft = (($object->statut == Mo::STATUS_DRAFT) ? 1 : 0); //$result = restrictedArea($user, 'mrp', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); diff --git a/htdocs/mrp/mo_document.php b/htdocs/mrp/mo_document.php index 3732754a62f..2c4d1b36c99 100644 --- a/htdocs/mrp/mo_document.php +++ b/htdocs/mrp/mo_document.php @@ -41,8 +41,8 @@ $id=(GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); $ref = GETPOST('ref', 'alpha'); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mrp', $id); // Get parameters diff --git a/htdocs/mrp/mo_list.php b/htdocs/mrp/mo_list.php index 96f19540a95..b91affe403f 100644 --- a/htdocs/mrp/mo_list.php +++ b/htdocs/mrp/mo_list.php @@ -98,9 +98,9 @@ if (! $sortorder) $sortorder="ASC"; // Security check if (empty($conf->mrp->enabled)) accessforbidden('Module not enabled'); $socid=0; -if ($user->societe_id > 0) // Protection if external user +if ($user->socid > 0) // Protection if external user { - //$socid = $user->societe_id; + //$socid = $user->socid; accessforbidden(); } //$result = restrictedArea($user, 'mrp', $id, ''); diff --git a/htdocs/mrp/mo_note.php b/htdocs/mrp/mo_note.php index f815dfbaef6..aeb4630168d 100644 --- a/htdocs/mrp/mo_note.php +++ b/htdocs/mrp/mo_note.php @@ -47,8 +47,8 @@ $hookmanager->initHooks(array('monote','globalcard')); // Note that conf->ho $extrafields->fetch_name_optionals_label($object->table_element); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mrp', $id); // Load object diff --git a/htdocs/mrp/mo_production.php b/htdocs/mrp/mo_production.php index 70de7155f39..345bfe3f8dd 100644 --- a/htdocs/mrp/mo_production.php +++ b/htdocs/mrp/mo_production.php @@ -88,8 +88,8 @@ if (empty($action) && empty($id) && empty($ref)) $action='view'; include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$isdraft = (($object->statut == Mo::STATUS_DRAFT) ? 1 : 0); //$result = restrictedArea($user, 'mrp', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); diff --git a/htdocs/product/agenda.php b/htdocs/product/agenda.php index a264171f529..c6585f5e590 100644 --- a/htdocs/product/agenda.php +++ b/htdocs/product/agenda.php @@ -50,7 +50,7 @@ $search_agenda_label=GETPOST('search_agenda_label'); // Security check $id = GETPOST('id', 'int'); $ref = GETPOST('ref', 'alpha'); -if ($user->societe_id) $id=$user->societe_id; +if ($user->socid) $id=$user->socid; $result=restrictedArea($user, 'produit|service', $id, 'product&product'); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; @@ -132,7 +132,7 @@ if ($id > 0 || $ref) $object->next_prev_filter=" fk_product_type = ".$object->type; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/canvas/product/tpl/card_view.tpl.php b/htdocs/product/canvas/product/tpl/card_view.tpl.php index 594fd6c1b9b..dc7fea3fc0e 100644 --- a/htdocs/product/canvas/product/tpl/card_view.tpl.php +++ b/htdocs/product/canvas/product/tpl/card_view.tpl.php @@ -37,7 +37,7 @@ $linkback = 'next_prev_filter=" fk_product_type = ".$object->type; $shownav = 1; -if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; +if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); ?> diff --git a/htdocs/product/card.php b/htdocs/product/card.php index fa131e1df6e..79511df9640 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -78,7 +78,7 @@ $confirm=GETPOST('confirm', 'alpha'); $socid=GETPOST('socid', 'int'); $duration_value = GETPOST('duration_value', 'int'); $duration_unit = GETPOST('duration_unit', 'alpha'); -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $object = new Product($db); $object->type = $type; // so test later to fill $usercancxxx is correct @@ -1650,7 +1650,7 @@ else $object->next_prev_filter=" fk_product_type = ".$object->type; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php index d6066b1a03a..cbe06ea4e41 100644 --- a/htdocs/product/class/api_products.class.php +++ b/htdocs/product/class/api_products.class.php @@ -573,7 +573,7 @@ class Products extends DolibarrApi { global $db, $conf; $obj_ret = array(); - $socid = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : ''; + $socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : ''; $sql = "SELECT t.rowid, t.ref, t.ref_ext"; $sql.= " FROM ".MAIN_DB_PREFIX."product as t"; if ($category > 0) { diff --git a/htdocs/product/composition/card.php b/htdocs/product/composition/card.php index a3517c593f1..8fb3420df49 100644 --- a/htdocs/product/composition/card.php +++ b/htdocs/product/composition/card.php @@ -45,7 +45,7 @@ $key=GETPOST('key'); $parent=GETPOST('parent'); // Security check -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); $result=restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); @@ -205,7 +205,7 @@ if ($id > 0 || ! empty($ref)) $linkback = ''.$langs->trans("BackToList").''; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref', '', '', '', 0, '', '', 0); diff --git a/htdocs/product/document.php b/htdocs/product/document.php index f62ea66fd48..ef508c9a200 100644 --- a/htdocs/product/document.php +++ b/htdocs/product/document.php @@ -48,7 +48,7 @@ $confirm= GETPOST('confirm', 'alpha'); // Security check $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -215,7 +215,7 @@ if ($object->id) $object->next_prev_filter=" fk_product_type = ".$object->type; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index ef0d1bc1c85..402d27c8578 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -64,7 +64,7 @@ if (! empty($_REQUEST['search_fourn_id'])) // Security check $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); if (empty($user->rights->fournisseur->lire)) accessforbidden(); @@ -362,7 +362,7 @@ if ($id > 0 || $ref) $object->next_prev_filter=" fk_product_type = ".$object->type; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php index 639b04cdbcc..2659d325676 100644 --- a/htdocs/product/inventory/card.php +++ b/htdocs/product/inventory/card.php @@ -72,8 +72,8 @@ if (empty($action) && empty($id) && empty($ref)) $action='view'; include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mymodule', $id); if (empty($conf->global->MAIN_USE_ADVANCED_PERMS)) diff --git a/htdocs/product/inventory/inventory.php b/htdocs/product/inventory/inventory.php index df67fbd0940..4ee108595e6 100644 --- a/htdocs/product/inventory/inventory.php +++ b/htdocs/product/inventory/inventory.php @@ -72,8 +72,8 @@ if (empty($action) && empty($id) && empty($ref)) $action='view'; include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mymodule', $id); if (empty($conf->global->MAIN_USE_ADVANCED_PERMS)) diff --git a/htdocs/product/inventory/list.php b/htdocs/product/inventory/list.php index 0362a3767c3..9a20f00341b 100644 --- a/htdocs/product/inventory/list.php +++ b/htdocs/product/inventory/list.php @@ -68,9 +68,9 @@ if (! $sortorder) $sortorder="ASC"; // Security check $socid=0; -if ($user->societe_id > 0) // Protection if external user +if ($user->socid > 0) // Protection if external user { - //$socid = $user->societe_id; + //$socid = $user->socid; accessforbidden(); } if (empty($conf->global->MAIN_USE_ADVANCED_PERMS)) diff --git a/htdocs/product/note.php b/htdocs/product/note.php index c9a8bc6b1f9..d5593acfb78 100644 --- a/htdocs/product/note.php +++ b/htdocs/product/note.php @@ -40,7 +40,7 @@ $action = GETPOST('action', 'aZ09'); // Security check $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); $object = new Product($db); @@ -98,7 +98,7 @@ if ($id > 0 || ! empty($ref)) $object->next_prev_filter=" fk_product_type = ".$object->type; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/popuprop.php b/htdocs/product/popuprop.php index a25ba2808d5..c50ca3538aa 100644 --- a/htdocs/product/popuprop.php +++ b/htdocs/product/popuprop.php @@ -36,7 +36,7 @@ $langs->load('propal'); $type=GETPOST("type", "int"); // Security check -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result=restrictedArea($user, 'produit|service'); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/product/price.php b/htdocs/product/price.php index e8e332d95b5..f6820bc37bc 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -62,7 +62,7 @@ $search_soc = GETPOST('search_soc'); // Security check $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); -if ($user->societe_id) $socid = $user->societe_id; +if ($user->socid) $socid = $user->socid; $result = restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); if ($id > 0 || ! empty($ref)) @@ -706,7 +706,7 @@ $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref', '', '', '', 0, '', '', 1); + dol_banner_tab($object, 'ref', $linkback, ($user->socid?0:1), 'ref', '', '', '', 0, '', '', 1); dol_fiche_end(); } diff --git a/htdocs/product/stats/commande.php b/htdocs/product/stats/commande.php index 58d65810772..e819110c344 100644 --- a/htdocs/product/stats/commande.php +++ b/htdocs/product/stats/commande.php @@ -40,7 +40,7 @@ $ref = GETPOST('ref', 'alpha'); $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); $socid=''; -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result=restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -104,7 +104,7 @@ if ($id > 0 || ! empty($ref)) $linkback = ''.$langs->trans("BackToList").''; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/stats/commande_fournisseur.php b/htdocs/product/stats/commande_fournisseur.php index 56746cb33bc..ae3b642355a 100644 --- a/htdocs/product/stats/commande_fournisseur.php +++ b/htdocs/product/stats/commande_fournisseur.php @@ -39,8 +39,8 @@ $ref = GETPOST('ref', 'alpha'); $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); $socid = ''; -if (! empty($user->societe_id)) - $socid = $user->societe_id; +if (! empty($user->socid)) + $socid = $user->socid; $result = restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -109,7 +109,7 @@ if ($id > 0 || ! empty($ref)) { $linkback = ''.$langs->trans("BackToList").''; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/stats/contrat.php b/htdocs/product/stats/contrat.php index f779ced92ee..8a14c3f19a4 100644 --- a/htdocs/product/stats/contrat.php +++ b/htdocs/product/stats/contrat.php @@ -37,7 +37,7 @@ $ref = GETPOST('ref', 'alpha'); // Security check $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -94,7 +94,7 @@ if ($id > 0 || ! empty($ref)) $linkback = ''.$langs->trans("BackToList").''; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/stats/facture.php b/htdocs/product/stats/facture.php index d14eba99fae..6c5379d1ddb 100644 --- a/htdocs/product/stats/facture.php +++ b/htdocs/product/stats/facture.php @@ -41,7 +41,7 @@ $ref = GETPOST('ref', 'alpha'); $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); $socid=''; -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result=restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -122,7 +122,7 @@ if ($id > 0 || ! empty($ref)) $linkback = ''.$langs->trans("BackToList").''; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/stats/facture_fournisseur.php b/htdocs/product/stats/facture_fournisseur.php index 78ee704293d..16cfc612d81 100644 --- a/htdocs/product/stats/facture_fournisseur.php +++ b/htdocs/product/stats/facture_fournisseur.php @@ -41,7 +41,7 @@ $ref = GETPOST('ref', 'alpha'); $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); $socid = ''; -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result = restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -105,7 +105,7 @@ if ($id > 0 || ! empty($ref)) $linkback = ''.$langs->trans("BackToList").''; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/stats/propal.php b/htdocs/product/stats/propal.php index 0b8ae599809..4c58a6fb982 100644 --- a/htdocs/product/stats/propal.php +++ b/htdocs/product/stats/propal.php @@ -40,7 +40,7 @@ $ref = GETPOST('ref', 'alpha'); $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); $socid=''; -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result = restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -105,7 +105,7 @@ if ($id > 0 || ! empty($ref)) $linkback = ''.$langs->trans("BackToList").''; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/stats/supplier_proposal.php b/htdocs/product/stats/supplier_proposal.php index fbab22a0d2f..0dc19a47691 100644 --- a/htdocs/product/stats/supplier_proposal.php +++ b/htdocs/product/stats/supplier_proposal.php @@ -40,7 +40,7 @@ $ref = GETPOST('ref', 'alpha'); $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); $socid=''; -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result = restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -105,7 +105,7 @@ if ($id > 0 || ! empty($ref)) $linkback = ''.$langs->trans("BackToList").''; $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 94012c1b9cf..22f7cc03b63 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -378,7 +378,7 @@ else $morehtmlref.='
    '; $shownav = 1; - if ($user->societe_id && ! in_array('stock', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('stock', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref', 'ref', $morehtmlref); diff --git a/htdocs/product/stock/info.php b/htdocs/product/stock/info.php index 3314fcf642c..692fe17a83d 100644 --- a/htdocs/product/stock/info.php +++ b/htdocs/product/stock/info.php @@ -60,7 +60,7 @@ $morehtmlref.=$langs->trans("LocationSummary").' : '.$object->lieu; $morehtmlref.='
    '; $shownav = 1; -if ($user->societe_id && ! in_array('stock', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; +if ($user->socid && ! in_array('stock', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref', 'ref', $morehtmlref); diff --git a/htdocs/product/stock/massstockmove.php b/htdocs/product/stock/massstockmove.php index 5324ef80243..0f4e5476fd2 100644 --- a/htdocs/product/stock/massstockmove.php +++ b/htdocs/product/stock/massstockmove.php @@ -35,8 +35,8 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; $langs->loadLangs(array('products', 'stocks', 'orders', 'productbatch')); // Security check -if ($user->societe_id) { - $socid = $user->societe_id; +if ($user->socid) { + $socid = $user->socid; } $result=restrictedArea($user, 'produit|service'); diff --git a/htdocs/product/stock/movement_card.php b/htdocs/product/stock/movement_card.php index b04b8b8a220..d49781f4837 100644 --- a/htdocs/product/stock/movement_card.php +++ b/htdocs/product/stock/movement_card.php @@ -567,7 +567,7 @@ if ($resql) $morehtmlref.='
    '; $shownav = 1; - if ($user->societe_id && ! in_array('stock', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('stock', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref', 'ref', $morehtmlref); diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index 5303fa78a6c..9302556fc9a 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -549,7 +549,7 @@ if ($resql) $morehtmlref.='
    '; $shownav = 1; - if ($user->societe_id && ! in_array('stock', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('stock', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref', 'ref', $morehtmlref); diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index 060bcc57960..3428b75f395 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -76,7 +76,7 @@ if (!empty($batchnumber)) { } // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'produit&stock', $id, 'product&product', '', '', $fieldid); @@ -548,7 +548,7 @@ if ($id > 0 || $ref) $linkback = ''.$langs->trans("BackToList").''; $shownav = 1; - if ($user->societe_id && ! in_array('stock', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('stock', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); diff --git a/htdocs/product/stock/productlot_card.php b/htdocs/product/stock/productlot_card.php index 00299c94459..c7f9a5ae8fa 100644 --- a/htdocs/product/stock/productlot_card.php +++ b/htdocs/product/stock/productlot_card.php @@ -53,7 +53,7 @@ if (empty($action) && empty($id) && empty($ref)) $action='list'; // Protection if external user -if ($user->societe_id > 0) +if ($user->socid > 0) { //accessforbidden(); } @@ -318,7 +318,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $linkback = '' . $langs->trans("BackToList") . ''; $shownav = 1; - if ($user->societe_id && ! in_array('batch', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('batch', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'id', $linkback, $shownav, 'rowid', 'batch'); diff --git a/htdocs/product/stock/productlot_document.php b/htdocs/product/stock/productlot_document.php index ed4aea8c010..5fb9cc23bca 100644 --- a/htdocs/product/stock/productlot_document.php +++ b/htdocs/product/stock/productlot_document.php @@ -48,7 +48,7 @@ $confirm= GETPOST('confirm', 'alpha'); // Security check $fieldvalue = (! empty($id) ? $id : ''); $fieldtype = 'rowid'; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'produit|service'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -132,7 +132,7 @@ if ($object->id) $linkback = '' . $langs->trans("BackToList") . ''; $shownav = 1; - if ($user->societe_id && ! in_array('batch', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('batch', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'id', $linkback, $shownav, 'rowid', 'batch'); diff --git a/htdocs/product/stock/productlot_list.php b/htdocs/product/stock/productlot_list.php index fbbec95f2df..fd2a7c70c13 100644 --- a/htdocs/product/stock/productlot_list.php +++ b/htdocs/product/stock/productlot_list.php @@ -67,9 +67,9 @@ if (! $sortorder) $sortorder="ASC"; // Protection if external user $socid=0; -if ($user->societe_id > 0) +if ($user->socid > 0) { - $socid = $user->societe_id; + $socid = $user->socid; //accessforbidden(); } diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php index 3536088cab5..168ed5e54f9 100644 --- a/htdocs/product/stock/replenish.php +++ b/htdocs/product/stock/replenish.php @@ -38,8 +38,8 @@ require_once './lib/replenishment.lib.php'; $langs->loadLangs(array('products', 'stocks', 'orders')); // Security check -if ($user->societe_id) { - $socid = $user->societe_id; +if ($user->socid) { + $socid = $user->socid; } $result=restrictedArea($user, 'produit|service'); diff --git a/htdocs/product/stock/replenishorders.php b/htdocs/product/stock/replenishorders.php index 2f0714737ee..27834923a0e 100644 --- a/htdocs/product/stock/replenishorders.php +++ b/htdocs/product/stock/replenishorders.php @@ -38,7 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; $langs->loadLangs(array('products', 'stocks', 'orders')); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'produit|service'); $sall = GETPOST('search_all', 'alphanohtml'); diff --git a/htdocs/product/traduction.php b/htdocs/product/traduction.php index 054947183ab..19a23e1e9d2 100644 --- a/htdocs/product/traduction.php +++ b/htdocs/product/traduction.php @@ -42,7 +42,7 @@ $cancel=GETPOST('cancel', 'alpha'); // Security check $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype); @@ -203,7 +203,7 @@ dol_fiche_head($head, 'translation', $titre, 0, $picto); $linkback = ''.$langs->trans("BackToList").''; $shownav = 1; -if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; +if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref', '', '', '', 0, '', '', 1); diff --git a/htdocs/projet/activity/index.php b/htdocs/projet/activity/index.php index 7a8e3ff2591..43f5a283057 100644 --- a/htdocs/projet/activity/index.php +++ b/htdocs/projet/activity/index.php @@ -36,7 +36,7 @@ if ($search_project_user == $user->id) $mine = 1; // Security check $socid=0; -if ($user->societe_id > 0) $socid=$user->societe_id; +if ($user->socid > 0) $socid=$user->socid; //$result = restrictedArea($user, 'projet', $projectid); if (!$user->rights->projet->lire) accessforbidden(); diff --git a/htdocs/projet/activity/perday.php b/htdocs/projet/activity/perday.php index b07b41c1b88..77dcaa641d2 100644 --- a/htdocs/projet/activity/perday.php +++ b/htdocs/projet/activity/perday.php @@ -56,7 +56,7 @@ $hookmanager->initHooks(array('timesheetperdaycard')); // Security check $socid=0; // For external user, no check is done on company because readability is managed by public status of project and assignement. -//if ($user->societe_id > 0) $socid=$user->societe_id; +//if ($user->socid > 0) $socid=$user->socid; $result = restrictedArea($user, 'projet', $projectid); $now=dol_now(); diff --git a/htdocs/projet/activity/perweek.php b/htdocs/projet/activity/perweek.php index e51b2e4b404..8af733394bf 100644 --- a/htdocs/projet/activity/perweek.php +++ b/htdocs/projet/activity/perweek.php @@ -56,7 +56,7 @@ $hookmanager->initHooks(array('timesheetperweekcard')); // Security check $socid=0; // For external user, no check is done on company because readability is managed by public status of project and assignement. -// if ($user->societe_id > 0) $socid=$user->societe_id; +// if ($user->socid > 0) $socid=$user->socid; $result = restrictedArea($user, 'projet', $projectid); $now=dol_now(); diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index f15499d4682..07299af79de 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -71,7 +71,7 @@ if ($id > 0 || ! empty($ref)) // Security check $socid=GETPOST('socid', 'int'); -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. $result = restrictedArea($user, 'projet', $object->id, 'projet&project'); // fetch optionals attributes and labels diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index a873b53dbc0..b67b625312f 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -1453,7 +1453,7 @@ class Project extends CommonObject // Security check $socid=0; - if ($user->societe_id > 0) $socid = $user->societe_id; + if ($user->socid > 0) $socid = $user->socid; $tasksarray=$taskstatic->getTasksArray(0, 0, $fromid, $socid, 0); @@ -1533,7 +1533,7 @@ class Project extends CommonObject // Security check $socid=0; - if ($user->societe_id > 0) $socid = $user->societe_id; + if ($user->socid > 0) $socid = $user->socid; $tasksarray=$taskstatic->getTasksArray(0, 0, $this->id, $socid, 0); @@ -1764,7 +1764,7 @@ class Project extends CommonObject global $conf, $langs; // For external user, no check is done on company because readability is managed by public status of project and assignement. - //$socid=$user->societe_id; + //$socid=$user->socid; $projectsListId = null; if (! $user->rights->projet->all->lire) $projectsListId = $this->getProjectsAuthorizedForUser($user, 0, 1); diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php index 1bd044bc985..ab344e6897d 100644 --- a/htdocs/projet/class/task.class.php +++ b/htdocs/projet/class/task.class.php @@ -1966,7 +1966,7 @@ class Task extends CommonObject global $conf, $langs; // For external user, no check is done on company because readability is managed by public status of project and assignement. - //$socid=$user->societe_id; + //$socid=$user->socid; $projectstatic = new Project($this->db); $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1, $socid); @@ -2039,7 +2039,7 @@ class Task extends CommonObject // phpcs:enable global $user; - $mine=0; $socid=$user->societe_id; + $mine=0; $socid=$user->socid; $projectstatic = new Project($this->db); $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user, $mine, 1, $socid); diff --git a/htdocs/projet/comment.php b/htdocs/projet/comment.php index b535b0f6ada..064f4a12729 100644 --- a/htdocs/projet/comment.php +++ b/htdocs/projet/comment.php @@ -49,7 +49,7 @@ $planned_workload=((GETPOST('planned_workloadhour', 'int')!='' || GETPOST('plann // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. if (! $user->rights->projet->lire) accessforbidden(); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context diff --git a/htdocs/projet/contact.php b/htdocs/projet/contact.php index a1735e20ad6..82eb598190b 100644 --- a/htdocs/projet/contact.php +++ b/htdocs/projet/contact.php @@ -47,7 +47,7 @@ if(! empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($ob // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. $result = restrictedArea($user, 'projet', $id, 'projet&project'); $hookmanager->initHooks(array('projectcontactcard','globalcard')); diff --git a/htdocs/projet/document.php b/htdocs/projet/document.php index 10c7a140df7..f77419f2e75 100644 --- a/htdocs/projet/document.php +++ b/htdocs/projet/document.php @@ -42,7 +42,7 @@ $mine = (GETPOST('mode', 'alpha') == 'mine' ? 1 : 0); // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. $result=restrictedArea($user, 'projet', $id, 'projet&project'); $object = new Project($db); diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index 5f74a971f87..14dccfedb8d 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -100,7 +100,7 @@ if(! empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($ob // Security check $socid=$object->socid; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. $result = restrictedArea($user, 'projet', $object->id, 'projet&project'); $hookmanager->initHooks(array('projectOverview')); diff --git a/htdocs/projet/ganttview.php b/htdocs/projet/ganttview.php index 57be29b1bb2..725d99fb673 100644 --- a/htdocs/projet/ganttview.php +++ b/htdocs/projet/ganttview.php @@ -46,7 +46,7 @@ if(! empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($ob // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. $result = restrictedArea($user, 'projet', $id, 'projet&project'); // Load translation files required by the page diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php index c16d42ae97c..0e499136de2 100644 --- a/htdocs/projet/index.php +++ b/htdocs/projet/index.php @@ -45,7 +45,7 @@ if ($search_project_user == $user->id) $mine = 1; // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. if (!$user->rights->projet->lire) accessforbidden(); $sortfield = GETPOST("sortfield", 'alpha'); diff --git a/htdocs/projet/info.php b/htdocs/projet/info.php index 207bd245d08..ff361e75d3d 100644 --- a/htdocs/projet/info.php +++ b/htdocs/projet/info.php @@ -62,7 +62,7 @@ $search_agenda_label=GETPOST('search_agenda_label'); // Security check $id = GETPOST("id", 'int'); $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. $result=restrictedArea($user, 'projet', $id, ''); if (!$user->rights->projet->lire) accessforbidden(); diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index 2c311de7792..6cbe9d68127 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -48,7 +48,7 @@ $title = $langs->trans("Projects"); // Security check $socid = (is_numeric($_GET["socid"]) ? $_GET["socid"] : 0 ); -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. if ($socid > 0) { $soc = new Societe($db); diff --git a/htdocs/projet/note.php b/htdocs/projet/note.php index ef324bb63bb..73c9d39d64d 100644 --- a/htdocs/projet/note.php +++ b/htdocs/projet/note.php @@ -43,7 +43,7 @@ if(! empty($conf->global->PROJECT_ALLOW_COMMENT_ON_PROJECT) && method_exists($ob // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. $result = restrictedArea($user, 'projet', $id, 'projet&project'); $permissionnote=$user->rights->projet->creer; // Used by the include of actions_setnotes.inc.php diff --git a/htdocs/projet/stats/index.php b/htdocs/projet/stats/index.php index f8480f8f322..a7e6bf510b3 100644 --- a/htdocs/projet/stats/index.php +++ b/htdocs/projet/stats/index.php @@ -38,10 +38,10 @@ $HEIGHT=DolGraph::getDefaultGraphSizeForStats('height'); $userid=GETPOST('userid', 'int'); $socid=GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $nowyear=strftime("%Y", dol_now()); $year = GETPOST('year')>0?GETPOST('year'):$nowyear; diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index 2395f5f0bd1..0bffd50ce62 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -80,7 +80,7 @@ $extrafields->fetch_name_optionals_label($taskstatic->table_element); // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. $result = restrictedArea($user, 'projet', $id, 'projet&project'); $diroutputmassaction=$conf->projet->dir_output . '/tasks/temp/massgeneration/'.$user->id; diff --git a/htdocs/projet/tasks/comment.php b/htdocs/projet/tasks/comment.php index d9a251b3c53..31211e59dbf 100644 --- a/htdocs/projet/tasks/comment.php +++ b/htdocs/projet/tasks/comment.php @@ -49,7 +49,7 @@ $planned_workload=((GETPOST('planned_workloadhour', 'int')!='' || GETPOST('plann // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. if (! $user->rights->projet->lire) accessforbidden(); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context diff --git a/htdocs/projet/tasks/contact.php b/htdocs/projet/tasks/contact.php index b09d8345177..aa94d413fc9 100644 --- a/htdocs/projet/tasks/contact.php +++ b/htdocs/projet/tasks/contact.php @@ -42,7 +42,7 @@ $project_ref=GETPOST('project_ref', 'alpha'); // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. //$result = restrictedArea($user, 'projet', $id, 'projet_task'); if (! $user->rights->projet->lire) accessforbidden(); diff --git a/htdocs/projet/tasks/document.php b/htdocs/projet/tasks/document.php index 52795f7a249..1944de13f61 100644 --- a/htdocs/projet/tasks/document.php +++ b/htdocs/projet/tasks/document.php @@ -46,7 +46,7 @@ $project_ref = GETPOST('project_ref', 'alpha'); // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. //$result=restrictedArea($user,'projet',$id,''); if (!$user->rights->projet->lire) accessforbidden(); diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php index e13b7092b26..8718806004b 100644 --- a/htdocs/projet/tasks/list.php +++ b/htdocs/projet/tasks/list.php @@ -83,7 +83,7 @@ $search_array_options=$extrafields->getOptionalsFromPost($object->table_element, // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. if (!$user->rights->projet->lire) accessforbidden(); $diroutputmassaction=$conf->projet->dir_output . '/tasks/temp/massgeneration/'.$user->id; diff --git a/htdocs/projet/tasks/note.php b/htdocs/projet/tasks/note.php index de2707bf734..42dbaa48cc2 100644 --- a/htdocs/projet/tasks/note.php +++ b/htdocs/projet/tasks/note.php @@ -40,7 +40,7 @@ $project_ref = GETPOST('project_ref', 'alpha'); // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. if (!$user->rights->projet->lire) accessforbidden(); //$result = restrictedArea($user, 'projet', $id, '', 'task'); // TODO ameliorer la verification diff --git a/htdocs/projet/tasks/stats/index.php b/htdocs/projet/tasks/stats/index.php index c94a412be9c..c9e8bc335e7 100644 --- a/htdocs/projet/tasks/stats/index.php +++ b/htdocs/projet/tasks/stats/index.php @@ -38,10 +38,10 @@ $HEIGHT=DolGraph::getDefaultGraphSizeForStats('height'); $userid=GETPOST('userid', 'int'); $socid=GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $nowyear=strftime("%Y", dol_now()); $year = GETPOST('year')>0?GETPOST('year'):$nowyear; diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index 78431f983a4..0bc07537ccf 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -48,7 +48,7 @@ $planned_workload=((GETPOST('planned_workloadhour', 'int')!='' || GETPOST('plann // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. if (! $user->rights->projet->lire) accessforbidden(); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 3dc54cc2223..24e5d067186 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -68,7 +68,7 @@ $search_valuebilled=GETPOST('search_valuebilled', 'int'); // Security check $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. if (!$user->rights->projet->lire) accessforbidden(); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/public/ticket/create_ticket.php b/htdocs/public/ticket/create_ticket.php index ce93ec020c3..0bde25460e3 100644 --- a/htdocs/public/ticket/create_ticket.php +++ b/htdocs/public/ticket/create_ticket.php @@ -348,7 +348,7 @@ llxHeaderTicket($langs->trans("CreateTicket"), "", 0, 0, $arrayofjs, $arrayofcss print '
    '; if ($action != "infos_success") { - $formticket->withfromsocid = isset($socid) ? $socid : $user->societe_id; + $formticket->withfromsocid = isset($socid) ? $socid : $user->socid; $formticket->withtitletopic = 1; $formticket->withcompany = 0; $formticket->withusercreate = 1; diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index 832fd4fc70d..2e9dbe5f57b 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -72,7 +72,7 @@ $line_id = GETPOST('lineid', 'int')?GETPOST('lineid', 'int'):''; // Security check $socid=''; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; if ($origin == 'reception') $result=restrictedArea($user, $origin, $id); else { @@ -820,7 +820,7 @@ if ($action == 'create') print "
    '.$langs->trans("NotePrivate").''; @@ -2019,7 +2019,7 @@ elseif ($id || $ref) * Boutons actions */ - if (($user->societe_id == 0) && ($action!='presend')) + if (($user->socid == 0) && ($action!='presend')) { print '
    '; diff --git a/htdocs/reception/contact.php b/htdocs/reception/contact.php index c49eec5c82d..da074c420b5 100644 --- a/htdocs/reception/contact.php +++ b/htdocs/reception/contact.php @@ -44,7 +44,7 @@ $ref=GETPOST('ref', 'alpha'); $action=GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'reception', $id, ''); $object = new Reception($db); diff --git a/htdocs/reception/list.php b/htdocs/reception/list.php index 1a201a4bfd0..a7d7c51b7b1 100644 --- a/htdocs/reception/list.php +++ b/htdocs/reception/list.php @@ -42,7 +42,7 @@ $toselect = GETPOST('toselect', 'array'); // Security check $receptionid = GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'reception', $receptionid, ''); $diroutputmassaction=$conf->reception->dir_output . '/temp/massgeneration/'.$user->id; diff --git a/htdocs/reception/note.php b/htdocs/reception/note.php index cbc1185aaab..5a2e8745cb7 100644 --- a/htdocs/reception/note.php +++ b/htdocs/reception/note.php @@ -48,7 +48,7 @@ $action=GETPOST('action', 'alpha'); // Security check $socid=''; -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result=restrictedArea($user, $origin, $origin_id); $object = new Reception($db); diff --git a/htdocs/reception/stats/index.php b/htdocs/reception/stats/index.php index 76315ccce03..06304a2afb8 100644 --- a/htdocs/reception/stats/index.php +++ b/htdocs/reception/stats/index.php @@ -35,10 +35,10 @@ $HEIGHT=DolGraph::getDefaultGraphSizeForStats('height'); $userid=GETPOST('userid', 'int'); $socid=GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $nowyear=strftime("%Y", dol_now()); @@ -74,7 +74,7 @@ $data = $stats->getNbByMonthWithPrevYear($endyear, $startyear); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenamenb = $dir.'/receptionsnbinyear-'.$user->id.'-'.$year.'.png'; } @@ -114,7 +114,7 @@ $data = $stats->getAmountByMonthWithPrevYear($endyear,$startyear); //var_dump($data); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenameamount = $dir.'/receptionsamountinyear-'.$user->id.'-'.$year.'.png'; } @@ -152,7 +152,7 @@ if (! $mesg) /* $data = $stats->getAverageByMonthWithPrevYear($endyear, $startyear); -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filename_avg = $dir.'/receptionsaverage-'.$user->id.'-'.$year.'.png'; } diff --git a/htdocs/resource/agenda.php b/htdocs/resource/agenda.php index 0f2e79ef86f..d669aa590d9 100644 --- a/htdocs/resource/agenda.php +++ b/htdocs/resource/agenda.php @@ -51,7 +51,7 @@ $search_agenda_label=GETPOST('search_agenda_label'); // Security check $id = GETPOST('id', 'int'); $ref = GETPOST('ref', 'alpha'); -if ($user->societe_id) $id=$user->societe_id; +if ($user->socid) $id=$user->socid; // Protection if external user if ($user->socid > 0) { @@ -139,7 +139,7 @@ if ($id > 0 || $ref) $linkback = ''.$langs->trans("BackToList").''; $shownav = 1; - if ($user->societe_id && ! in_array('resource', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('resource', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($object, 'id', $linkback, $shownav, 'id'); diff --git a/htdocs/resource/contact.php b/htdocs/resource/contact.php index 872078ac51d..3e2a004e194 100644 --- a/htdocs/resource/contact.php +++ b/htdocs/resource/contact.php @@ -39,7 +39,7 @@ $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'resource', $id, 'resource'); $object = new DolResource($db); diff --git a/htdocs/resource/document.php b/htdocs/resource/document.php index fef78e8088c..ee46ebfe0ea 100644 --- a/htdocs/resource/document.php +++ b/htdocs/resource/document.php @@ -44,7 +44,7 @@ $action = GETPOST('action', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'resource', $id, 'resource'); diff --git a/htdocs/resource/element_resource.php b/htdocs/resource/element_resource.php index a0c1a724ed8..2ab64799f1d 100644 --- a/htdocs/resource/element_resource.php +++ b/htdocs/resource/element_resource.php @@ -357,7 +357,7 @@ else } $morehtmlref.='
    '; - dol_banner_tab($act, 'element_id', $linkback, ($user->societe_id?0:1), 'id', 'ref', $morehtmlref, '&element='.$element, 0, '', ''); + dol_banner_tab($act, 'element_id', $linkback, ($user->socid?0:1), 'id', 'ref', $morehtmlref, '&element='.$element, 0, '', ''); print '
    '; @@ -453,7 +453,7 @@ else dol_fiche_head($head, 'resources', $langs->trans("ThirdParty"), -1, 'company'); - dol_banner_tab($socstatic, 'socid', '', ($user->societe_id ? 0 : 1), 'rowid', 'nom', '', '&element='.$element); + dol_banner_tab($socstatic, 'socid', '', ($user->socid ? 0 : 1), 'rowid', 'nom', '', '&element='.$element); print '
    '; @@ -557,7 +557,7 @@ else dol_fiche_head($head, 'resources', $titre, -1, $picto); $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + if ($user->socid && ! in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; dol_banner_tab($product, 'ref', '', $shownav, 'ref', 'ref', '', '&element='.$element); dol_fiche_end(); diff --git a/htdocs/resource/note.php b/htdocs/resource/note.php index 8c7f106285f..322088ef317 100644 --- a/htdocs/resource/note.php +++ b/htdocs/resource/note.php @@ -37,7 +37,7 @@ $ref = GETPOST('ref', 'alpha'); $action=GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'resource', $id, 'resource'); $object = new DolResource($db); diff --git a/htdocs/salaries/card.php b/htdocs/salaries/card.php index 32edd342cb8..4e9b9dac118 100644 --- a/htdocs/salaries/card.php +++ b/htdocs/salaries/card.php @@ -48,7 +48,7 @@ $projectid = (GETPOST('projectid', 'int') ? GETPOST('projectid', 'int') : GETPOS // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'salaries', '', '', ''); $object = new PaymentSalary($db); diff --git a/htdocs/salaries/document.php b/htdocs/salaries/document.php index a7b92d63efb..7bd9a14a718 100644 --- a/htdocs/salaries/document.php +++ b/htdocs/salaries/document.php @@ -45,7 +45,7 @@ $confirm = GETPOST('confirm', 'alpha'); // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'salaries', '', '', ''); diff --git a/htdocs/salaries/info.php b/htdocs/salaries/info.php index 5ba53c45665..a96db0cbd5f 100644 --- a/htdocs/salaries/info.php +++ b/htdocs/salaries/info.php @@ -36,7 +36,7 @@ $action=GETPOST('action', 'aZ09'); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'salaries', '', '', ''); diff --git a/htdocs/salaries/list.php b/htdocs/salaries/list.php index 816b734ea23..02a729cb16c 100644 --- a/htdocs/salaries/list.php +++ b/htdocs/salaries/list.php @@ -33,7 +33,7 @@ $langs->loadLangs(array("compta","salaries","bills","hrm")); // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'salaries', '', '', ''); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/salaries/stats/index.php b/htdocs/salaries/stats/index.php index a301dc927a1..38a568d5fc0 100644 --- a/htdocs/salaries/stats/index.php +++ b/htdocs/salaries/stats/index.php @@ -38,7 +38,7 @@ $id = GETPOST('id', 'int'); // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'salaries', '', '', ''); $nowyear=strftime("%Y", dol_now()); diff --git a/htdocs/societe/agenda.php b/htdocs/societe/agenda.php index 231174a0afa..ae2622d7f93 100644 --- a/htdocs/societe/agenda.php +++ b/htdocs/societe/agenda.php @@ -47,7 +47,7 @@ $search_agenda_label=GETPOST('search_agenda_label'); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'societe', $socid, '&societe'); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; @@ -117,7 +117,7 @@ if ($socid > 0) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/societe/canvas/actions_card_common.class.php b/htdocs/societe/canvas/actions_card_common.class.php index 28f2ec7306b..aafcd8ffc69 100644 --- a/htdocs/societe/canvas/actions_card_common.class.php +++ b/htdocs/societe/canvas/actions_card_common.class.php @@ -266,7 +266,7 @@ abstract class ActionsCardCommon $this->tpl['showhead']=dol_get_fiche_head($head, 'card', '', 0, 'company'); $this->tpl['showend']=dol_get_fiche_end(); - $this->tpl['showrefnav'] = $form->showrefnav($this->object, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom'); + $this->tpl['showrefnav'] = $form->showrefnav($this->object, 'socid', '', ($user->socid?0:1), 'rowid', 'nom'); $this->tpl['checkcustomercode'] = $this->object->check_codeclient(); $this->tpl['checksuppliercode'] = $this->object->check_codefournisseur(); diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 8cf9dbd1752..edfb3767f11 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -61,7 +61,7 @@ $backtopage = GETPOST('backtopage', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); $socid = GETPOST('socid', 'int')?GETPOST('socid', 'int'):GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; if (empty($socid) && $action == 'view') $action='create'; $object = new Societe($db); @@ -2241,7 +2241,7 @@ else $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/societe/class/client.class.php b/htdocs/societe/class/client.class.php index 9c6c15e2f66..c345d195935 100644 --- a/htdocs/societe/class/client.class.php +++ b/htdocs/societe/class/client.class.php @@ -63,7 +63,7 @@ class Client extends Societe $sql = "SELECT count(s.rowid) as nb, s.client"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; - if (!$user->rights->societe->client->voir && !$user->societe_id) + if (!$user->rights->societe->client->voir && !$user->socid) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc"; $sql.= " WHERE sc.fk_user = " .$user->id; diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index b20f80f5439..acbb0bba34c 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -2234,7 +2234,7 @@ class Societe extends CommonObject $linkend=''; global $user; - if (! $user->rights->societe->client->voir && $user->societe_id > 0 && $this->id != $user->societe_id) + if (! $user->rights->societe->client->voir && $user->socid > 0 && $this->id != $user->socid) { $linkstart=''; $linkend=''; diff --git a/htdocs/societe/consumption.php b/htdocs/societe/consumption.php index 85df9b4f069..0039504e950 100644 --- a/htdocs/societe/consumption.php +++ b/htdocs/societe/consumption.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php'; // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'societe', $socid, '&societe'); $object = new Societe($db); if ($socid > 0) $object->fetch($socid); @@ -109,7 +109,7 @@ dol_fiche_head($head, 'consumption', $langs->trans("ThirdParty"), -1, 'company') $linkback = ''.$langs->trans("BackToList").''; -dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); +dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/societe/contact.php b/htdocs/societe/contact.php index 1b119e9c89a..352c9c53c35 100644 --- a/htdocs/societe/contact.php +++ b/htdocs/societe/contact.php @@ -56,7 +56,7 @@ $cancel = GETPOST('cancel', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); $confirm = GETPOST('confirm'); $socid = GETPOST('socid', 'int')?GETPOST('socid', 'int'):GETPOST('id', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; if (empty($socid) && $action == 'view') $action='create'; $object = new Societe($db); @@ -150,7 +150,7 @@ dol_fiche_head($head, 'contact', $langs->trans("ThirdParty"), 0, 'company'); $linkback = ''.$langs->trans("BackToList").''; -dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom', '', '', 0, '', '', 'arearefnobottom'); +dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom', '', '', 0, '', '', 'arearefnobottom'); dol_fiche_end(); diff --git a/htdocs/societe/document.php b/htdocs/societe/document.php index 971944c4f30..8e0c36aa451 100644 --- a/htdocs/societe/document.php +++ b/htdocs/societe/document.php @@ -40,10 +40,10 @@ $id=(GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); $ref = GETPOST('ref', 'alpha'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { unset($action); - $socid = $user->societe_id; + $socid = $user->socid; } $result = restrictedArea($user, 'societe', $id, '&societe'); @@ -117,7 +117,7 @@ if ($object->id) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php index 5bd493fdeba..f2eb33234aa 100644 --- a/htdocs/societe/index.php +++ b/htdocs/societe/index.php @@ -38,7 +38,7 @@ $hookmanager->initHooks(array('thirdpartiesindex')); $langs->load("companies"); $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; // Security check $result=restrictedArea($user, 'societe', 0, '', '', '', ''); diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index ad793fcf63e..8f0d1895c1b 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -55,7 +55,7 @@ if ($contextpage == 'poslist') // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'societe', $socid, ''); $search_all=trim(GETPOST('search_all', 'alphanohtml')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml')); diff --git a/htdocs/societe/note.php b/htdocs/societe/note.php index 4d20f050518..0f2bc4d8002 100644 --- a/htdocs/societe/note.php +++ b/htdocs/societe/note.php @@ -35,7 +35,7 @@ $langs->load("companies"); // Security check $id = GETPOST('id')?GETPOST('id', 'int'):GETPOST('socid', 'int'); -if ($user->societe_id) $id=$user->societe_id; +if ($user->socid) $id=$user->socid; $result = restrictedArea($user, 'societe', $id, '&societe'); $object = new Societe($db); @@ -78,7 +78,7 @@ if ($object->id > 0) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); $cssclass='titlefield'; //if ($action == 'editnote_public') $cssclass='titlefieldcreate'; diff --git a/htdocs/societe/notify/card.php b/htdocs/societe/notify/card.php index 54536fa7502..d3f4c30f575 100644 --- a/htdocs/societe/notify/card.php +++ b/htdocs/societe/notify/card.php @@ -39,7 +39,7 @@ $actionid = GETPOST('actionid'); $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'societe', '', ''); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; @@ -156,7 +156,7 @@ if ($result > 0) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index df803b180ab..5ed2b9a148f 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -44,7 +44,7 @@ $langs->loadLangs(array("companies","commercial","banks","bills",'paypal','strip // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'societe', '', ''); $id=GETPOST("id", "int"); @@ -804,7 +804,7 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); if (! empty($conf->global->SOCIETE_USEPREFIX)) // Old not used prefix field @@ -1615,7 +1615,7 @@ if ($socid && $action == 'edit' && $user->rights->societe->creer) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; @@ -1721,7 +1721,7 @@ if ($socid && $action == 'editcard' && $user->rights->societe->creer) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; @@ -1769,7 +1769,7 @@ if ($socid && $action == 'create' && $user->rights->societe->creer) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; @@ -1869,7 +1869,7 @@ if ($socid && $action == 'createcard' && $user->rights->societe->creer) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/societe/price.php b/htdocs/societe/price.php index 967f91ca39d..d3c4c75fca5 100644 --- a/htdocs/societe/price.php +++ b/htdocs/societe/price.php @@ -46,8 +46,8 @@ $cancel = GETPOST('cancel', 'alpha'); // Security check $socid = GETPOST('socid', 'int')?GETPOST('socid', 'int'):GETPOST('id', 'int'); -if ($user->societe_id) - $socid = $user->societe_id; +if ($user->socid) + $socid = $user->socid; $result = restrictedArea($user, 'societe', $socid, '&societe'); $object = new Societe($db); @@ -187,7 +187,7 @@ dol_fiche_head($head, 'price', $langs->trans("ThirdParty"), -1, 'company'); $linkback = ''.$langs->trans("BackToList").''; -dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); +dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/societe/project.php b/htdocs/societe/project.php index 8f825bfc18c..1ff2c24956e 100644 --- a/htdocs/societe/project.php +++ b/htdocs/societe/project.php @@ -35,7 +35,7 @@ $langs->loadLangs(array("companies", "projects")); // Security check $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'societe', $socid, '&societe'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -82,7 +82,7 @@ if ($socid) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/societe/societecontact.php b/htdocs/societe/societecontact.php index db18a1bf6af..fe7d5929350 100644 --- a/htdocs/societe/societecontact.php +++ b/htdocs/societe/societecontact.php @@ -51,7 +51,7 @@ $pageprev = $page - 1; $pagenext = $page + 1; // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'societe', $id, ''); $object = new Societe($db); @@ -166,7 +166,7 @@ if ($id > 0 || ! empty($ref)) $linkback = ''.$langs->trans("BackToList").''; - dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom'); + dol_banner_tab($object, 'socid', $linkback, ($user->socid?0:1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/societe/website.php b/htdocs/societe/website.php index 0e0c5ac2cc8..6878ea8ed44 100644 --- a/htdocs/societe/website.php +++ b/htdocs/societe/website.php @@ -47,7 +47,7 @@ $search_status=GETPOST('search_status'); // Security check $id = GETPOST('id', 'int')?GETPOST('id', 'int'):GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'societe', $socid, '&societe'); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; @@ -195,7 +195,7 @@ dol_fiche_head($head, 'website', $langs->trans("ThirdParty"), - 1, 'company'); $linkback = '' . $langs->trans("BackToList") . ''; -dol_banner_tab($object, 'socid', $linkback, ($user->societe_id ? 0 : 1), 'rowid', 'nom'); +dol_banner_tab($object, 'socid', $linkback, ($user->socid ? 0 : 1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/stripe/charge.php b/htdocs/stripe/charge.php index a9e417aa581..f398a013fb6 100644 --- a/htdocs/stripe/charge.php +++ b/htdocs/stripe/charge.php @@ -33,7 +33,7 @@ $langs->loadLangs(array('compta', 'salaries', 'bills', 'hrm', 'stripe')); // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; //$result = restrictedArea($user, 'salaries', '', '', ''); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/stripe/payment.php b/htdocs/stripe/payment.php index 2614c8498f3..e0ed986bfd6 100644 --- a/htdocs/stripe/payment.php +++ b/htdocs/stripe/payment.php @@ -65,9 +65,9 @@ $multicurrency_amountsresttopay=array(); // Security check $socid=0; -if ($user->societe_id > 0) +if ($user->socid > 0) { - $socid = $user->societe_id; + $socid = $user->socid; } $object=new Facture($db); diff --git a/htdocs/stripe/payout.php b/htdocs/stripe/payout.php index 70988b339b5..e2f19c560be 100644 --- a/htdocs/stripe/payout.php +++ b/htdocs/stripe/payout.php @@ -33,7 +33,7 @@ $langs->loadLangs(array('compta', 'salaries', 'bills', 'hrm', 'stripe')); // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; //$result = restrictedArea($user, 'salaries', '', '', ''); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/stripe/transaction.php b/htdocs/stripe/transaction.php index 6dc0a1e0815..3bc1050f867 100644 --- a/htdocs/stripe/transaction.php +++ b/htdocs/stripe/transaction.php @@ -33,7 +33,7 @@ $langs->loadLangs(array('compta', 'salaries', 'bills', 'hrm', 'stripe')); // Security check $socid = GETPOST("socid", "int"); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; //$result = restrictedArea($user, 'salaries', '', '', ''); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index b953087b885..1a8aa755e71 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -74,7 +74,7 @@ $hideref = (GETPOST('hideref', 'int') ? GETPOST('hideref', 'int') : (! empty($co $NBLINES = 4; // Security check -if (! empty($user->societe_id)) $socid = $user->societe_id; +if (! empty($user->socid)) $socid = $user->socid; $result = restrictedArea($user, 'supplier_proposal', $id); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context diff --git a/htdocs/supplier_proposal/contact.php b/htdocs/supplier_proposal/contact.php index d60fb3c04bc..84b007c53fc 100644 --- a/htdocs/supplier_proposal/contact.php +++ b/htdocs/supplier_proposal/contact.php @@ -39,7 +39,7 @@ $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'supplier_proposal', $id, 'supplier_proposal', ''); $object = new SupplierProposal($db); diff --git a/htdocs/supplier_proposal/document.php b/htdocs/supplier_proposal/document.php index 991059b9141..da76e9ea897 100644 --- a/htdocs/supplier_proposal/document.php +++ b/htdocs/supplier_proposal/document.php @@ -45,9 +45,9 @@ $ref = GETPOST('ref', 'alpha'); // Security check $socid=''; -if (! empty($user->societe_id)) +if (! empty($user->socid)) { - $socid = $user->societe_id; + $socid = $user->socid; } $result = restrictedArea($user, 'supplier_proposal', $id); diff --git a/htdocs/supplier_proposal/index.php b/htdocs/supplier_proposal/index.php index dd2acd27311..55bde878918 100644 --- a/htdocs/supplier_proposal/index.php +++ b/htdocs/supplier_proposal/index.php @@ -38,10 +38,10 @@ $langs->loadLangs(array('supplier_proposal', 'companies')); // Security check $socid=GETPOST('socid', 'int'); -if (isset($user->societe_id) && $user->societe_id > 0) +if (isset($user->socid) && $user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $result = restrictedArea($user, 'supplier_proposal'); @@ -90,7 +90,7 @@ $sql.= ", ".MAIN_DB_PREFIX."supplier_proposal as p"; if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE p.fk_soc = s.rowid"; $sql.= " AND p.entity IN (".getEntity('supplier_proposal').")"; -if ($user->societe_id) $sql.=' AND p.fk_soc = '.$user->societe_id; +if ($user->socid) $sql.=' AND p.fk_soc = '.$user->socid; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " AND p.fk_statut IN (0,1,2,3,4)"; $sql.= " GROUP BY p.fk_statut"; diff --git a/htdocs/supplier_proposal/info.php b/htdocs/supplier_proposal/info.php index ec269354af6..7b259b166e4 100644 --- a/htdocs/supplier_proposal/info.php +++ b/htdocs/supplier_proposal/info.php @@ -39,7 +39,7 @@ $id=GETPOST('id', 'int'); $socid=GETPOST('socid', 'int'); // Security check -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; $result = restrictedArea($user, 'supplier_proposal', $id); diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index 687d98911f2..c48f3756611 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -103,7 +103,7 @@ $NBLINES=4; $module='supplier_proposal'; $dbtable=''; $objectid=''; -if (! empty($user->societe_id)) $socid=$user->societe_id; +if (! empty($user->socid)) $socid=$user->socid; if (! empty($socid)) { $objectid=$socid; diff --git a/htdocs/supplier_proposal/note.php b/htdocs/supplier_proposal/note.php index 447dc057979..0e12da2c104 100644 --- a/htdocs/supplier_proposal/note.php +++ b/htdocs/supplier_proposal/note.php @@ -40,7 +40,7 @@ $ref=GETPOST('ref', 'alpha'); $action=GETPOST('action', 'alpha'); // Security check -if ($user->societe_id) $socid=$user->societe_id; +if ($user->socid) $socid=$user->socid; $result = restrictedArea($user, 'supplier_proposal', $id, 'supplier_proposal'); $object = new SupplierProposal($db); diff --git a/htdocs/ticket/agenda.php b/htdocs/ticket/agenda.php index dee2168136c..6db51996d12 100644 --- a/htdocs/ticket/agenda.php +++ b/htdocs/ticket/agenda.php @@ -78,19 +78,19 @@ if (!$action) { // Security check $id = GETPOST("id", 'int'); $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. $result=restrictedArea($user, 'ticket', $id, ''); if (!$user->rights->ticket->read) { accessforbidden(); } // restrict access for externals users -if ($user->societe_id > 0 && ($object->fk_soc != $user->societe_id)) +if ($user->socid > 0 && ($object->fk_soc != $user->socid)) { accessforbidden(); } // or for unauthorized internals users -if (!$user->societe_id && ($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) { +if (!$user->socid && ($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) { accessforbidden(); } @@ -138,15 +138,15 @@ if ($socid > 0) { dol_fiche_head($head, 'ticket', $langs->trans("ThirdParty"), 0, 'company'); - dol_banner_tab($object->thirdparty, 'socid', '', ($user->societe_id ? 0 : 1), 'rowid', 'nom'); + dol_banner_tab($object->thirdparty, 'socid', '', ($user->socid ? 0 : 1), 'rowid', 'nom'); dol_fiche_end(); } -if (!$user->societe_id && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) { +if (!$user->socid && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) { $object->next_prev_filter = "te.fk_user_assign = '" . $user->id . "'"; -} elseif ($user->societe_id > 0) { - $object->next_prev_filter = "te.fk_soc = '" . $user->societe_id . "'"; +} elseif ($user->socid > 0) { + $object->next_prev_filter = "te.fk_soc = '" . $user->socid . "'"; } $head = ticket_prepare_head($object); @@ -172,7 +172,7 @@ if (!empty($object->origin_email)) { if (! empty($conf->societe->enabled)) { $morehtmlref.='
    '.$langs->trans('ThirdParty'); - /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->societe_id && $user->rights->ticket->write) { + /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->socid && $user->rights->ticket->write) { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 1) . ''; }*/ $morehtmlref.=' : '; @@ -220,7 +220,7 @@ $morehtmlref.='
    '; $linkback = '' . $langs->trans("BackToList") . ' '; -dol_banner_tab($object, 'ref', $linkback, ($user->societe_id ? 0 : 1), 'ref', 'ref', $morehtmlref, '', 0, '', '', 1); +dol_banner_tab($object, 'ref', $linkback, ($user->socid ? 0 : 1), 'ref', 'ref', $morehtmlref, '', 0, '', '', 1); dol_fiche_end(); diff --git a/htdocs/ticket/card.php b/htdocs/ticket/card.php index eec2c813d26..6aa6d42e590 100644 --- a/htdocs/ticket/card.php +++ b/htdocs/ticket/card.php @@ -95,8 +95,8 @@ if ($id || $track_id || $ref) { $url_page_current = DOL_URL_ROOT.'/ticket/card.php'; // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; $result = restrictedArea($user, 'ticket', $object->id); $triggermodname = 'TICKET_MODIFY'; @@ -622,7 +622,7 @@ if ($action == 'create' || $action == 'presend') print load_fiche_titre($langs->trans('NewTicket'), '', 'ticket'); - $formticket->withfromsocid = $socid ? $socid : $user->societe_id; + $formticket->withfromsocid = $socid ? $socid : $user->socid; $formticket->withfromcontactid = $contactid ? $contactid : ''; $formticket->withtitletopic = 1; $formticket->withnotifytiersatcreate = ($notifyTiers?1:0); @@ -645,7 +645,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd if ($res > 0) { // or for unauthorized internals users - if (!$user->societe_id && ($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) { + if (!$user->socid && ($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) { accessforbidden('', 0, 1); } @@ -741,14 +741,14 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd $head = societe_prepare_head($object->thirdparty); dol_fiche_head($head, 'ticket', $langs->trans("ThirdParty"), 0, 'company'); - dol_banner_tab($object->thirdparty, 'socid', '', ($user->societe_id ? 0 : 1), 'rowid', 'nom'); + dol_banner_tab($object->thirdparty, 'socid', '', ($user->socid ? 0 : 1), 'rowid', 'nom'); dol_fiche_end(); } - if (!$user->societe_id && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) { + if (!$user->socid && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) { $object->next_prev_filter = "te.fk_user_assign = '" . $user->id . "'"; - } elseif ($user->societe_id > 0) { - $object->next_prev_filter = "te.fk_soc = '" . $user->societe_id . "'"; + } elseif ($user->socid > 0) { + $object->next_prev_filter = "te.fk_soc = '" . $user->socid . "'"; } $head = ticket_prepare_head($object); @@ -775,7 +775,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd if (! empty($conf->societe->enabled)) { $morehtmlref.='
    '.$langs->trans('ThirdParty') . ' '; - if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->societe_id && $user->rights->ticket->write) { + if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->socid && $user->rights->ticket->write) { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 0) . ' : '; } if ($action == 'editcustomer') { @@ -821,7 +821,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd $linkback = '' . $langs->trans("BackToList") . ' '; - dol_banner_tab($object, 'ref', $linkback, ($user->societe_id ? 0 : 1), 'ref', 'ref', $morehtmlref); + dol_banner_tab($object, 'ref', $linkback, ($user->socid ? 0 : 1), 'ref', 'ref', $morehtmlref); print '
    '; print '
    '; @@ -845,9 +845,9 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd // Subject print '
    '; - print $form->editfieldkey("Subject", 'subject', $object->subject, $object, $user->rights->ticket->write && !$user->societe_id, 'string'); + print $form->editfieldkey("Subject", 'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid, 'string'); print ''; - print $form->editfieldval("Subject", 'subject', $object->subject, $object, $user->rights->ticket->write && !$user->societe_id, 'string'); + print $form->editfieldval("Subject", 'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid, 'string'); print '
    '; - if ($action != 'progression' && $object->fk_statut < 8 && !$user->societe_id) { + if ($action != 'progression' && $object->fk_statut < 8 && !$user->socid) { print ''; } print '
    '; print $langs->trans('Progression') . ''; print '' . img_edit($langs->trans('Modify')) . '
    '; @@ -1033,7 +1033,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd // Display navbar with links to change ticket status print ''; - if (!$user->societe_id && $user->rights->ticket->write && $object->fk_status < 8 && GETPOST('set') !== 'properties') { + if (!$user->socid && $user->rights->ticket->write && $object->fk_status < 8 && GETPOST('set') !== 'properties') { $actionobject->viewStatusActions($object); } @@ -1187,12 +1187,12 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd } // Re-open ticket - if (!$user->socid && $object->fk_statut == Ticket::STATUS_CLOSED && !$user->societe_id) { + if (!$user->socid && $object->fk_statut == Ticket::STATUS_CLOSED && !$user->socid) { print ''; } // Delete ticket - if ($user->rights->ticket->delete && ! $user->societe_id) { + if ($user->rights->ticket->delete && ! $user->socid) { print ''; } } diff --git a/htdocs/ticket/contact.php b/htdocs/ticket/contact.php index 65682fef2b3..78e78b86f7d 100644 --- a/htdocs/ticket/contact.php +++ b/htdocs/ticket/contact.php @@ -51,8 +51,8 @@ $ligne = GETPOST('ligne', 'int'); $lineid = GETPOST('lineid', 'int'); // Protection if external user -if ($user->societe_id > 0) { - $socid = $user->societe_id; +if ($user->socid > 0) { + $socid = $user->socid; accessforbidden(); } @@ -129,14 +129,14 @@ if ($id > 0 || !empty($track_id) || !empty($ref)) { $object->fetch_thirdparty(); $head = societe_prepare_head($object->thirdparty); dol_fiche_head($head, 'ticket', $langs->trans("ThirdParty"), 0, 'company'); - dol_banner_tab($object->thirdparty, 'socid', '', ($user->societe_id ? 0 : 1), 'rowid', 'nom'); + dol_banner_tab($object->thirdparty, 'socid', '', ($user->socid ? 0 : 1), 'rowid', 'nom'); dol_fiche_end(); } - if (!$user->societe_id && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) { + if (!$user->socid && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) { $object->next_prev_filter = "te.fk_user_assign = '" . $user->id . "'"; - } elseif ($user->societe_id > 0) { - $object->next_prev_filter = "te.fk_soc = '" . $user->societe_id . "'"; + } elseif ($user->socid > 0) { + $object->next_prev_filter = "te.fk_soc = '" . $user->socid . "'"; } $head = ticket_prepare_head($object); @@ -163,7 +163,7 @@ if ($id > 0 || !empty($track_id) || !empty($ref)) { if (! empty($conf->societe->enabled)) { $morehtmlref.='
    '.$langs->trans('ThirdParty'); - /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->societe_id && $user->rights->ticket->write) { + /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->socid && $user->rights->ticket->write) { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 1) . ''; }*/ $morehtmlref.=' : '; @@ -211,7 +211,7 @@ if ($id > 0 || !empty($track_id) || !empty($ref)) { $linkback = '' . $langs->trans("BackToList") . ' '; - dol_banner_tab($object, 'ref', $linkback, ($user->societe_id ? 0 : 1), 'ref', 'ref', $morehtmlref, $param, 0, '', '', 1, ''); + dol_banner_tab($object, 'ref', $linkback, ($user->socid ? 0 : 1), 'ref', 'ref', $morehtmlref, $param, 0, '', '', 1, ''); dol_fiche_end(); diff --git a/htdocs/ticket/document.php b/htdocs/ticket/document.php index a80d455e43f..5a6b2b131f1 100644 --- a/htdocs/ticket/document.php +++ b/htdocs/ticket/document.php @@ -94,14 +94,14 @@ if ($object->id) $object->fetch_thirdparty(); $head = societe_prepare_head($object->thirdparty); dol_fiche_head($head, 'ticket', $langs->trans("ThirdParty"), 0, 'company'); - dol_banner_tab($object->thirdparty, 'socid', '', ($user->societe_id ? 0 : 1), 'rowid', 'nom'); + dol_banner_tab($object->thirdparty, 'socid', '', ($user->socid ? 0 : 1), 'rowid', 'nom'); dol_fiche_end(); } - if (!$user->societe_id && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) { + if (!$user->socid && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) { $object->next_prev_filter = "te.fk_user_assign = '" . $user->id . "'"; - } elseif ($user->societe_id > 0) { - $object->next_prev_filter = "te.fk_soc = '" . $user->societe_id . "'"; + } elseif ($user->socid > 0) { + $object->next_prev_filter = "te.fk_soc = '" . $user->socid . "'"; } $head = ticket_prepare_head($object); @@ -128,7 +128,7 @@ if ($object->id) if (! empty($conf->societe->enabled)) { $morehtmlref.='
    '.$langs->trans('ThirdParty'); - /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->societe_id && $user->rights->ticket->write) { + /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->socid && $user->rights->ticket->write) { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 1) . ''; }*/ $morehtmlref.=' : '; @@ -176,7 +176,7 @@ if ($object->id) $linkback = '' . $langs->trans("BackToList") . ' '; - dol_banner_tab($object, 'ref', $linkback, ($user->societe_id ? 0 : 1), 'ref', 'ref', $morehtmlref, '', 0, '', '', 1); + dol_banner_tab($object, 'ref', $linkback, ($user->socid ? 0 : 1), 'ref', 'ref', $morehtmlref, '', 0, '', '', 1); dol_fiche_end(); diff --git a/htdocs/ticket/index.php b/htdocs/ticket/index.php index be29b1be25e..d749aa25f02 100644 --- a/htdocs/ticket/index.php +++ b/htdocs/ticket/index.php @@ -44,8 +44,8 @@ $msg_id = GETPOST('msg_id', 'int'); $action = GETPOST('action', 'aZ09'); -if ($user->societe_id) { - $socid = $user->societe_id; +if ($user->socid) { + $socid = $user->socid; } // Security check @@ -141,8 +141,8 @@ if (!$user->rights->societe->client->voir && !$socid) { } // External users restriction -if ($user->societe_id > 0) { - $sql .= " AND t.fk_soc='" . $user->societe_id . "'"; +if ($user->socid > 0) { + $sql .= " AND t.fk_soc='" . $user->socid . "'"; } else { // For internals users, if (!empty($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) && !$user->rights->ticket->manage) { @@ -288,8 +288,8 @@ if (!$user->rights->societe->client->voir && !$socid) { $sql .= " AND t.fk_soc = sc.fk_soc AND sc.fk_user = " . $user->id; } -if ($user->societe_id > 0) { - $sql .= " AND t.fk_soc='" . $user->societe_id . "'"; +if ($user->socid > 0) { + $sql .= " AND t.fk_soc='" . $user->socid . "'"; } else { // Restricted to assigned user only if ($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY && !$user->rights->ticket->manage) { diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index bfaa8ad3876..7c6f525a0c4 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -246,7 +246,7 @@ foreach($search as $key => $val) if ($search_all) $sql.= natural_search(array_keys($fieldstosearchall), $search_all); if ($search_societe) $sql .= natural_search('s.nom', $search_societe); if ($search_fk_project) $sql.= natural_search('fk_project', $search_fk_project, 2); -if (! $user->societe_id && ($mode == "mine" || (!$user->admin && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY))) { +if (! $user->socid && ($mode == "mine" || (!$user->admin && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY))) { $sql.= " AND (t.fk_user_assign = ".$user->id; if (empty($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY)) $sql.=" OR t.fk_user_create = ".$user->id; $sql.=")"; @@ -319,7 +319,7 @@ if ($socid && ! $projectid && ! $project_ref && $user->rights->societe->lire) { dol_fiche_head($head, 'ticket', $langs->trans("ThirdParty"), -1, 'company'); - dol_banner_tab($socstat, 'socid', '', ($user->societe_id ? 0 : 1), 'rowid', 'nom'); + dol_banner_tab($socstat, 'socid', '', ($user->socid ? 0 : 1), 'rowid', 'nom'); print '
    '; diff --git a/htdocs/ticket/messaging.php b/htdocs/ticket/messaging.php index 7b4341cf684..11bd501bd17 100644 --- a/htdocs/ticket/messaging.php +++ b/htdocs/ticket/messaging.php @@ -77,19 +77,19 @@ if (!$action) { // Security check $id = GETPOST("id", 'int'); $socid=0; -//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement. +//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement. $result=restrictedArea($user, 'ticket', $id, ''); if (!$user->rights->ticket->read) { accessforbidden(); } // restrict access for externals users -if ($user->societe_id > 0 && ($object->fk_soc != $user->societe_id)) +if ($user->socid > 0 && ($object->fk_soc != $user->socid)) { accessforbidden(); } // or for unauthorized internals users -if (!$user->societe_id && ($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) { +if (!$user->socid && ($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) { accessforbidden(); } @@ -171,7 +171,7 @@ if (!empty($object->origin_email)) { if (! empty($conf->societe->enabled)) { $morehtmlref.='
    '.$langs->trans('ThirdParty'); - /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->societe_id && $user->rights->ticket->write) { + /*if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->socid && $user->rights->ticket->write) { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 1) . ''; }*/ $morehtmlref.=' : '; diff --git a/htdocs/ticket/stats/index.php b/htdocs/ticket/stats/index.php index f3cb531bb09..a6baeef7c06 100644 --- a/htdocs/ticket/stats/index.php +++ b/htdocs/ticket/stats/index.php @@ -37,10 +37,10 @@ $object_status=GETPOST('object_status'); $userid=GETPOST('userid', 'int'); $socid=GETPOST('socid', 'int'); // Security check -if ($user->societe_id > 0) +if ($user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $nowyear=strftime("%Y", dol_now()); @@ -80,7 +80,7 @@ $data = $stats->getNbByMonthWithPrevYear($endyear, $startyear); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenamenb = $dir.'/ticketsnbinyear-'.$user->id.'-'.$year.'.png'; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=ticketstats&file=ticketsnbinyear-'.$user->id.'-'.$year.'.png'; @@ -121,7 +121,7 @@ $data = $stats->getAmountByMonthWithPrevYear($endyear, $startyear); //var_dump($data); // $data = array(array('Lib',val1,val2,val3),...) -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filenameamount = $dir.'/ticketsamountinyear-'.$user->id.'-'.$year.'.png'; $fileurlamount = DOL_URL_ROOT.'/viewimage.php?modulepart=ticketstats&file=ticketsamountinyear-'.$user->id.'-'.$year.'.png'; @@ -160,7 +160,7 @@ if (! $mesg) $data = $stats->getAverageByMonthWithPrevYear($endyear, $startyear); -if (!$user->rights->societe->client->voir || $user->societe_id) +if (!$user->rights->societe->client->voir || $user->socid) { $filename_avg = $dir.'/ticketsaverage-'.$user->id.'-'.$year.'.png'; $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=ticketstats&file=ticketsaverage-'.$user->id.'-'.$year.'.png'; diff --git a/htdocs/user/agenda_extsites.php b/htdocs/user/agenda_extsites.php index d6f2eedb430..245718bd171 100644 --- a/htdocs/user/agenda_extsites.php +++ b/htdocs/user/agenda_extsites.php @@ -55,7 +55,7 @@ $object->getrights(); // Security check $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; $feature2 = (($socid && $user->rights->user->self->creer)?'':'user'); $result = restrictedArea($user, 'user', $id, 'user&user', $feature2); diff --git a/htdocs/user/bank.php b/htdocs/user/bank.php index 886e931e38f..284c88a867b 100644 --- a/htdocs/user/bank.php +++ b/htdocs/user/bank.php @@ -46,7 +46,7 @@ $cancel = GETPOST('cancel', 'alpha'); // Security check $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; $feature2 = (($socid && $user->rights->user->self->creer)?'':'user'); // Ok if user->rights->salaries->read or user->rights->hrm->read //$result = restrictedArea($user, 'salaries|hrm', $id, 'user&user', $feature2); diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 7ff0fdb3d9c..c924aae08bf 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -83,7 +83,7 @@ if ($id) // Security check $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; $feature2='user'; $result = restrictedArea($user, 'user', $id, 'user&user', $feature2); diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php index 04a0f4c3883..f4c3e63f9cf 100644 --- a/htdocs/user/clicktodial.php +++ b/htdocs/user/clicktodial.php @@ -33,7 +33,7 @@ $id=GETPOST('id', 'int'); // Security check $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; $feature2 = (($socid && $user->rights->user->self->creer)?'':'user'); $result = restrictedArea($user, 'user', $id, 'user&user', $feature2); diff --git a/htdocs/user/document.php b/htdocs/user/document.php index 1ae457fb907..63b31328716 100644 --- a/htdocs/user/document.php +++ b/htdocs/user/document.php @@ -64,7 +64,7 @@ if ($id) // Security check $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; $feature2='user'; $result = restrictedArea($user, 'user', $id, 'user&user', $feature2); diff --git a/htdocs/user/group/ldap.php b/htdocs/user/group/ldap.php index 1cdf76e5ca4..448f38aea50 100644 --- a/htdocs/user/group/ldap.php +++ b/htdocs/user/group/ldap.php @@ -49,7 +49,7 @@ $id = GETPOST('id', 'int'); $action = GETPOST('action', 'alpha'); $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; $object = new Usergroup($db); $object->fetch($id); diff --git a/htdocs/user/hierarchy.php b/htdocs/user/hierarchy.php index a89fe447aa0..dc990497808 100644 --- a/htdocs/user/hierarchy.php +++ b/htdocs/user/hierarchy.php @@ -37,8 +37,8 @@ $langs->loadLangs(array('users', 'companies')); // Security check (for external users) $socid=0; -if ($user->societe_id > 0) - $socid = $user->societe_id; +if ($user->socid > 0) + $socid = $user->socid; $sall=trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml')); $search_user=GETPOST('search_user', 'alpha'); diff --git a/htdocs/user/home.php b/htdocs/user/home.php index b17eafb22e6..ec742f3e6a9 100644 --- a/htdocs/user/home.php +++ b/htdocs/user/home.php @@ -45,7 +45,7 @@ if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS)) // Security check (for external users) $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; $companystatic = new Societe($db); $fuserstatic = new User($db); diff --git a/htdocs/user/info.php b/htdocs/user/info.php index 9296f0213ae..f10328e2a99 100644 --- a/htdocs/user/info.php +++ b/htdocs/user/info.php @@ -41,7 +41,7 @@ if ($id > 0 || ! empty($ref)) // Security check $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; $feature2 = (($socid && $user->rights->user->self->creer)?'':'user'); $result = restrictedArea($user, 'user', $id, 'user&user', $feature2); diff --git a/htdocs/user/ldap.php b/htdocs/user/ldap.php index da3f3c774c6..0f11b91cd9e 100644 --- a/htdocs/user/ldap.php +++ b/htdocs/user/ldap.php @@ -35,7 +35,7 @@ $contextpage=GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'userldap // Security check $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; $feature2 = (($socid && $user->rights->user->self->creer)?'':'user'); $result = restrictedArea($user, 'user', $id, 'user&user', $feature2); diff --git a/htdocs/user/list.php b/htdocs/user/list.php index 3b334871c06..862c1cbb408 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -42,8 +42,8 @@ $contextpage=GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'userlist // Security check (for external users) $socid=0; -if ($user->societe_id > 0) { - $socid = $user->societe_id; +if ($user->socid > 0) { + $socid = $user->socid; } // Load mode employee diff --git a/htdocs/user/note.php b/htdocs/user/note.php index 0fdbdd26b81..51f6740d636 100644 --- a/htdocs/user/note.php +++ b/htdocs/user/note.php @@ -43,7 +43,7 @@ if (($object->id != $user->id) && (! $user->rights->user->user->lire)) accessfor // Security check $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; $feature2 = (($socid && $user->rights->user->self->creer)?'':'user'); $result = restrictedArea($user, 'user', $id, 'user&user', $feature2); diff --git a/htdocs/user/notify/card.php b/htdocs/user/notify/card.php index 577af6c04ba..2d6bc021355 100644 --- a/htdocs/user/notify/card.php +++ b/htdocs/user/notify/card.php @@ -39,7 +39,7 @@ $action = GETPOST('action', 'aZ09'); $actionid=GETPOST('actionid'); // Security check -if ($user->societe_id) $id=$user->societe_id; +if ($user->socid) $id=$user->socid; $result = restrictedArea($user, 'societe', '', ''); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php index 813b5ab4b7f..736db8767ec 100644 --- a/htdocs/user/param_ihm.php +++ b/htdocs/user/param_ihm.php @@ -47,7 +47,7 @@ if ($id) // Security check $socid=0; -if ($user->societe_id > 0) $socid = $user->societe_id; +if ($user->socid > 0) $socid = $user->socid; $feature2 = (($socid && $user->rights->user->self->creer)?'':'user'); $result = restrictedArea($user, 'user', $id, 'user&user', $feature2); diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php index a49c3e930b0..59a9fff2294 100644 --- a/htdocs/user/perms.php +++ b/htdocs/user/perms.php @@ -56,7 +56,7 @@ if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS)) // Security check $socid=0; -if (isset($user->societe_id) && $user->societe_id > 0) $socid = $user->societe_id; +if (isset($user->socid) && $user->socid > 0) $socid = $user->socid; $feature2 = (($socid && $user->rights->user->self->creer)?'':'user'); // A user can always read its own card if not advanced perms enabled, or if he has advanced perms, except for admin if ($user->id == $id && (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->user->self_advance->readperms) && empty($user->admin))) @@ -255,7 +255,7 @@ print '
    '; if ($user->admin) print info_admin($langs->trans("WarningOnlyPermissionOfActivatedModules")); // Show warning about external users -if (empty($user->societe_id)) print info_admin(showModulesExludedForExternal($modules))."\n"; +if (empty($user->socid)) print info_admin(showModulesExludedForExternal($modules))."\n"; $parameters=array('permsgroupbyentity'=>$permsgroupbyentity); $reshook=$hookmanager->executeHooks('insertExtraHeader', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks diff --git a/htdocs/variants/combinations.php b/htdocs/variants/combinations.php index a87959e76fb..03f424f2dcc 100644 --- a/htdocs/variants/combinations.php +++ b/htdocs/variants/combinations.php @@ -304,7 +304,7 @@ if (! empty($id) || ! empty($ref)) $linkback = ''.$langs->trans("BackToList").''; $object->next_prev_filter=" fk_product_type = ".$object->type; - dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref', '', '', '', 0, '', '', 1); + dol_banner_tab($object, 'ref', $linkback, ($user->socid?0:1), 'ref', '', '', '', 0, '', '', 1); print '
    '; diff --git a/htdocs/variants/generator.php b/htdocs/variants/generator.php index 6bec619269a..27f811fdafe 100644 --- a/htdocs/variants/generator.php +++ b/htdocs/variants/generator.php @@ -159,7 +159,7 @@ if (! empty($id) || ! empty($ref)) { $linkback = ''.$langs->trans("BackToList").''; $object->next_prev_filter=" fk_product_type = ".$object->type; - dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref', '', '', '', 0, '', '', 1); + dol_banner_tab($object, 'ref', $linkback, ($user->socid?0:1), 'ref', '', '', '', 0, '', '', 1); dol_fiche_end(); } diff --git a/htdocs/viewimage.php b/htdocs/viewimage.php index 904266e281b..123578fb5ab 100644 --- a/htdocs/viewimage.php +++ b/htdocs/viewimage.php @@ -198,7 +198,7 @@ if (! empty($hashp)) else { // Basic protection (against external users only) - if ($user->societe_id > 0) + if ($user->socid > 0) { if ($sqlprotectagainstexternals) { @@ -210,7 +210,7 @@ else while ($i < $num) { $obj = $db->fetch_object($resql); - if ($user->societe_id != $obj->fk_soc) + if ($user->socid != $obj->fk_soc) { $accessallowed=0; break; diff --git a/htdocs/webservices/server_user.php b/htdocs/webservices/server_user.php index 509115d48d6..8f06153a34e 100644 --- a/htdocs/webservices/server_user.php +++ b/htdocs/webservices/server_user.php @@ -359,7 +359,7 @@ function getUser($authentication, $id, $ref = '', $ref_ext = '') 'pass_indatabase_crypted' => $user->pass_indatabase_crypted, 'datec' => dol_print_date($user->datec, 'dayhourrfc'), 'datem' => dol_print_date($user->datem, 'dayhourrfc'), - 'fk_thirdparty' => $user->societe_id, + 'fk_thirdparty' => $user->socid, 'fk_contact' => $user->contact_id, 'fk_member' => $user->fk_member, 'datelastlogin' => dol_print_date($user->datelastlogin, 'dayhourrfc'), diff --git a/htdocs/website/websiteaccount_card.php b/htdocs/website/websiteaccount_card.php index b9a1239449e..db8c5b632f6 100644 --- a/htdocs/website/websiteaccount_card.php +++ b/htdocs/website/websiteaccount_card.php @@ -61,8 +61,8 @@ foreach($object->fields as $key => $val) if (empty($action) && empty($id) && empty($ref)) $action='view'; // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'website', $id); $permissionnote=$user->rights->websiteaccount->write; // Used by the include of actions_setnotes.inc.php diff --git a/htdocs/zapier/class/api_zapier.class.php b/htdocs/zapier/class/api_zapier.class.php index 287f1b9e3b7..c4fb81065d5 100644 --- a/htdocs/zapier/class/api_zapier.class.php +++ b/htdocs/zapier/class/api_zapier.class.php @@ -149,7 +149,7 @@ class ZapierApi extends DolibarrApi $obj_ret = array(); - $socid = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : ''; + $socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : ''; // Set to 1 if there is a field socid in table of object $restrictonsocid = 0; diff --git a/htdocs/zapier/hook_agenda.php b/htdocs/zapier/hook_agenda.php index 6a10972a30e..52909360ba0 100644 --- a/htdocs/zapier/hook_agenda.php +++ b/htdocs/zapier/hook_agenda.php @@ -66,8 +66,8 @@ else $search_agenda_label=GETPOST('search_agenda_label'); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mymodule', $id); $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; diff --git a/htdocs/zapier/hook_card.php b/htdocs/zapier/hook_card.php index 1d8a042435e..aca2e59df9b 100644 --- a/htdocs/zapier/hook_card.php +++ b/htdocs/zapier/hook_card.php @@ -99,8 +99,8 @@ if (empty($action) && empty($id) && empty($ref)) $action='view'; include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$isdraft = (($object->statut == MyObject::STATUS_DRAFT) ? 1 : 0); //$result = restrictedArea($user, 'mymodule', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); diff --git a/htdocs/zapier/hook_document.php b/htdocs/zapier/hook_document.php index e5b4d8277b9..6ad31221cc4 100644 --- a/htdocs/zapier/hook_document.php +++ b/htdocs/zapier/hook_document.php @@ -54,8 +54,8 @@ $id=(GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); $ref = GETPOST('ref', 'alpha'); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mymodule', $id); // Get parameters diff --git a/htdocs/zapier/hook_list.php b/htdocs/zapier/hook_list.php index c1437eb02f6..e622ce8bcff 100644 --- a/htdocs/zapier/hook_list.php +++ b/htdocs/zapier/hook_list.php @@ -116,9 +116,9 @@ if (! $sortorder) { // Security check $socid=0; -if ($user->societe_id > 0) { +if ($user->socid > 0) { // Protection if external user - //$socid = $user->societe_id; + //$socid = $user->socid; accessforbidden(); } //$result = restrictedArea($user, 'mymodule', $id, ''); diff --git a/htdocs/zapier/hook_note.php b/htdocs/zapier/hook_note.php index 718acc606d4..dcfba358da1 100644 --- a/htdocs/zapier/hook_note.php +++ b/htdocs/zapier/hook_note.php @@ -60,8 +60,8 @@ $hookmanager->initHooks(array('myobjectnote','globalcard')); // Note that co $extrafields->fetch_name_optionals_label($object->table_element); // Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; +//if ($user->socid > 0) access_forbidden(); +//if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mymodule', $id); // Load object diff --git a/htdocs/zapier/zapierindex.php b/htdocs/zapier/zapierindex.php index 6e9e0491946..9bec765c35e 100644 --- a/htdocs/zapier/zapierindex.php +++ b/htdocs/zapier/zapierindex.php @@ -50,10 +50,10 @@ $action=GETPOST('action', 'alpha'); // Securite acces client if (! $user->rights->zapierfordolibarr->read) accessforbidden(); $socid=GETPOST('socid', 'int'); -if (isset($user->societe_id) && $user->societe_id > 0) +if (isset($user->socid) && $user->socid > 0) { $action = ''; - $socid = $user->societe_id; + $socid = $user->socid; } $max=5; From 0c0b4765356b2e6776a1ddd0c39cf4e8f16cfb9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 31 Oct 2019 20:56:42 +0100 Subject: [PATCH 718/980] restore some files --- dev/initdemo/mysqldump_dolibarr_10.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_3.8.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_3.9.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_4.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_5.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_6.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_7.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_8.0.0.sql | 2 +- dev/initdemo/mysqldump_dolibarr_9.0.0.sql | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dev/initdemo/mysqldump_dolibarr_10.0.0.sql b/dev/initdemo/mysqldump_dolibarr_10.0.0.sql index f8d57734ca6..fccb966c1a5 100644 --- a/dev/initdemo/mysqldump_dolibarr_10.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_10.0.0.sql @@ -3910,7 +3910,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2012-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2012-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2012-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2012-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2012-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2012-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2012-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2012-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2012-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2012-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2012-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2012-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2012-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2012-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2012-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2012-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2012-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2012-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2012-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2012-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2012-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2012-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2012-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2012-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2012-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2012-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2012-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2012-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2012-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2012-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2012-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2012-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2012-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2012-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2012-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2012-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2012-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2012-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2012-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2012-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2012-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2012-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2012-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2012-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2012-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2012-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2015-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2012-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2012-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2012-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2012-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2012-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2012-07-08 11:29:33'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2012-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2012-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2012-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2012-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2012-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2012-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2012-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2012-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2012-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2012-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2012-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2012-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2012-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2012-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2012-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2012-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2012-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2012-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2012-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2012-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2012-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2012-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2012-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2012-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2012-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2012-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2012-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2013-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2013-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2013-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2013-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2013-07-29 20:50:02'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2013-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2013-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2013-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2014-12-08 13:11:02'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2014-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2014-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2014-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2015-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2014-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2015-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2014-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2014-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2014-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2014-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2014-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2014-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2014-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2014-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2014-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2014-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2014-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2014-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2014-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2014-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2014-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2014-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2014-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2015-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2015-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2015-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2015-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2015-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2015-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2015-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2015-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2015-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2015-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2015-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2015-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2015-01-19 17:01:53'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2015-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2015-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2015-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2015-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2015-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2015-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2015-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2015-02-12 16:22:55'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2015-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2015-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2015-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2015-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2015-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2015-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2015-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2015-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2015-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2015-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2015-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2015-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2015-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2015-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2015-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2015-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2015-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2015-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2015-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2015-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2015-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2015-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2015-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2015-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2015-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2015-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2015-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2015-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2015-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2015-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2015-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2015-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2015-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2015-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2015-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2015-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2015-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2015-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2015-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2015-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2015-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2015-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2015-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2015-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2015-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2015-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2015-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2015-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2015-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2015-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2015-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2015-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2015-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2015-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2015-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2015-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2015-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2015-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2015-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2015-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2016-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2016-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2016-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2016-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2016-12-21 12:51:28'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2017-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2017-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2017-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2017-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2017-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2017-11-15 22:38:28'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2017-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2017-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2017-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2017-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2017-11-15 22:39:05'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2017-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2017-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2017-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2017-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2017-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2018-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2018-01-16 15:49:46'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2018-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2018-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2018-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2018-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2018-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2018-01-22 17:33:49'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2018-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2018-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2018-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2018-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2018-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2018-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2018-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2018-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2018-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2018-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2018-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2018-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2018-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2018-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2018-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2018-07-30 16:32:20'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2018-07-31 21:14:32'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6632,'MAIN_MODULE_TICKET',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:15:29'),(6633,'MAIN_MODULE_TICKET_TABS_0',1,'thirdparty:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?socid=__ID__','chaine',0,NULL,'2019-06-05 09:15:29'),(6634,'MAIN_MODULE_TICKET_TABS_1',1,'project:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?projectid=__ID__','chaine',0,NULL,'2019-06-05 09:15:29'),(6635,'MAIN_MODULE_TICKET_TRIGGERS',1,'1','chaine',0,NULL,'2019-06-05 09:15:29'),(6636,'MAIN_MODULE_TICKET_MODELS',1,'1','chaine',0,NULL,'2019-06-05 09:15:29'),(6638,'MAIN_MODULE_TAKEPOS',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:15:58'),(6639,'MAIN_MODULE_TAKEPOS_TRIGGERS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6640,'MAIN_MODULE_TAKEPOS_LOGIN',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6641,'MAIN_MODULE_TAKEPOS_SUBSTITUTIONS',1,'1','chaine',0,NULL,'2019-06-05 09:15:58'),(6642,'MAIN_MODULE_TAKEPOS_MENUS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6643,'MAIN_MODULE_TAKEPOS_THEME',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6644,'MAIN_MODULE_TAKEPOS_TPL',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6645,'MAIN_MODULE_TAKEPOS_BARCODE',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6646,'MAIN_MODULE_TAKEPOS_MODELS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6647,'MAIN_MODULE_SOCIALNETWORKS',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:16:49'),(6648,'MAIN_MODULE_CASHDESK',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:17:21'),(6649,'MAIN_MODULE_ACCOUNTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6650,'MAIN_MODULE_AGENDA',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6651,'MAIN_MODULE_BARCODE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6652,'MAIN_MODULE_CRON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6653,'MAIN_MODULE_COMMANDE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6654,'MAIN_MODULE_DON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6655,'MAIN_MODULE_ECM',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6656,'MAIN_MODULE_FACTURE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6657,'MAIN_MODULE_FOURNISSEUR',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6658,'MAIN_MODULE_HOLIDAY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6659,'MAIN_MODULE_OPENSURVEY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6660,'MAIN_MODULE_PRINTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6661,'MAIN_MODULE_SALARIES',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6662,'MAIN_MODULE_SYSLOG',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6663,'MAIN_MODULE_SOCIETE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6664,'MAIN_MODULE_SERVICE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6665,'MAIN_MODULE_USER',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6666,'MAIN_MODULE_VARIANTS',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6667,'MAIN_VERSION_LAST_UPGRADE',0,'10.0.2','chaine',0,'Dolibarr version for last upgrade','2019-09-26 11:33:26'),(6755,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6756,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6757,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6758,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6762,'MAIN_INFO_ACCOUNTANT_NAME',1,'Bob Bookeeper','chaine',0,'','2019-09-26 12:01:37'),(6763,'MAIN_INFO_ACCOUNTANT_TOWN',1,'Berlin','chaine',0,'','2019-09-26 12:01:37'),(6764,'MAIN_INFO_ACCOUNTANT_STATE',1,'0','chaine',0,'','2019-09-26 12:01:37'),(6765,'MAIN_INFO_ACCOUNTANT_COUNTRY',1,'5','chaine',0,'','2019-09-26 12:01:37'),(6795,'TICKET_ADDON',1,'mod_ticket_simple','chaine',0,'','2019-09-26 12:07:59'),(6796,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_elephant','chaine',0,'','2019-09-26 12:59:00'),(6800,'CASHDESK_ID_THIRDPARTY1',1,'7','chaine',0,'','2019-09-26 15:30:09'),(6801,'CASHDESK_ID_BANKACCOUNT_CASH1',1,'3','chaine',0,'','2019-09-26 15:30:09'),(6802,'CASHDESK_ID_BANKACCOUNT_CHEQUE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6803,'CASHDESK_ID_BANKACCOUNT_CB1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6804,'CASHDESK_ID_BANKACCOUNT_PRE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6805,'CASHDESK_ID_BANKACCOUNT_VIR1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6806,'CASHDESK_NO_DECREASE_STOCK1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6807,'MAIN_MODULE_FORCEPROJECT',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-09-27 14:52:52'),(6808,'MAIN_MODULE_FORCEPROJECT_TRIGGERS',1,'1','chaine',0,NULL,'2019-09-27 14:52:52'),(6809,'MAIN_MODULE_FORCEPROJECT_SUBSTITUTIONS',1,'0','chaine',0,NULL,'2019-09-27 14:52:52'),(6810,'MAIN_MODULE_FORCEPROJECT_MODELS',1,'1','chaine',0,NULL,'2019-09-27 14:52:52'),(6811,'FORCEPROJECT_ON_PROPOSAL',1,'1','chaine',0,'','2019-09-27 14:52:57'),(6812,'MAIN_MODULE_WEBSITE',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-09-30 15:49:22'),(6813,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2019-10-01 11:48:09'),(6814,'PACKTHEMEACTIVATEDTHEME',0,'modOwnTheme','chaine',0,'','2019-10-02 11:41:58'),(6815,'OWNTHEME_COL1',0,'#6a89cc','chaine',0,'','2019-10-02 11:41:58'),(6816,'OWNTHEME_COL2',0,'#60a3bc','chaine',0,'','2019-10-02 11:41:58'),(6817,'DOL_VERSION',0,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:41:58'),(6823,'OWNTHEME_COL_BODY_BCKGRD',0,'#E9E9E9','chaine',0,'','2019-10-02 11:41:58'),(6824,'OWNTHEME_COL_LOGO_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6825,'OWNTHEME_COL_TXT_MENU',0,'#b8c6e5','chaine',0,'','2019-10-02 11:41:58'),(6826,'OWNTHEME_COL_HEADER_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6827,'OWNTHEME_CUSTOM_CSS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6828,'OWNTHEME_CUSTOM_JS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6829,'OWNTHEME_FIXED_MENU',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6830,'OWNTHEME_D_HEADER_FONT_SIZE',0,'1.7rem','chaine',0,'','2019-10-02 11:41:58'),(6831,'OWNTHEME_S_HEADER_FONT_SIZE',0,'1.6rem','chaine',0,'','2019-10-02 11:41:58'),(6832,'OWNTHEME_D_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6833,'OWNTHEME_S_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6844,'MAIN_THEME',0,'eldy','chaine',0,'','2019-10-02 11:46:02'),(6845,'MAIN_MENU_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6846,'MAIN_MENUFRONT_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6847,'MAIN_MENU_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6848,'MAIN_MENUFRONT_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6849,'MAIN_UPLOAD_DOC',1,'20000','chaine',0,'','2019-10-02 11:46:54'),(6850,'MAIN_UMASK',1,'0664','chaine',0,'','2019-10-02 11:46:54'),(6851,'BECREATIVE_COL1',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6852,'BECREATIVE_COL2',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6853,'DOL_VERSION',1,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:47:10'),(6859,'BECREATIVE_COL_BODY_BCKGRD',1,'#e6eaef','chaine',0,'','2019-10-02 11:47:10'),(6860,'BECREATIVE_COL_LOGO_BCKGRD',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6861,'BECREATIVE_COL_TXT_MENU',1,'#b8c6e5','chaine',0,'','2019-10-02 11:47:10'),(6862,'BECREATIVE_COL_HEADER_BCKGRD',1,'#26a69a','chaine',0,'','2019-10-02 11:47:10'),(6863,'BECREATIVE_CUSTOM_CSS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6864,'BECREATIVE_CUSTOM_JS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6865,'BECREATIVE_FIXED_MENU',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6866,'BECREATIVE_D_HEADER_FONT_SIZE',1,'1.7rem','chaine',0,'','2019-10-02 11:47:10'),(6867,'BECREATIVE_S_HEADER_FONT_SIZE',1,'1.6rem','chaine',0,'','2019-10-02 11:47:10'),(6868,'BECREATIVE_D_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6869,'BECREATIVE_S_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6880,'MAIN_THEME',1,'eldy','chaine',0,'','2019-10-02 11:48:49'),(6881,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6882,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6883,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6884,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6885,'ACCOUNTING_ACCOUNT_CUSTOMER',1,'411','chaine',0,'','2019-10-04 08:15:44'),(6886,'ACCOUNTING_ACCOUNT_SUPPLIER',1,'401','chaine',0,'','2019-10-04 08:15:44'),(6887,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,'','2019-10-04 08:15:44'),(6888,'ACCOUNTING_PRODUCT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6889,'ACCOUNTING_PRODUCT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6890,'ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6891,'ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6892,'ACCOUNTING_SERVICE_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6893,'ACCOUNTING_SERVICE_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6894,'ACCOUNTING_VAT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6895,'ACCOUNTING_VAT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6896,'ACCOUNTING_VAT_PAY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6897,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,'','2019-10-04 08:15:44'),(6898,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,'','2019-10-04 08:15:44'),(6899,'DONATION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6900,'ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6901,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,'','2019-10-04 08:15:44'),(6902,'LOAN_ACCOUNTING_ACCOUNT_INTEREST',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6903,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6912,'TICKET_ENABLE_PUBLIC_INTERFACE',1,'1','chaine',0,'','2019-10-04 11:44:33'),(6934,'TICKET_NOTIFICATION_EMAIL_FROM',1,'fff','chaine',0,'','2019-10-04 12:03:51'),(6935,'TICKET_NOTIFICATION_EMAIL_TO',1,'ff','chaine',0,'','2019-10-04 12:03:51'),(6936,'TICKET_MESSAGE_MAIL_INTRO',1,'Hello,
    \r\nA new response was sent on a ticket that you contact. Here is the message:\"\"','chaine',0,'','2019-10-04 12:03:51'),(6937,'TICKET_MESSAGE_MAIL_SIGNATURE',1,'

    Sincerely,

    \r\n\r\n

    --\"\"

    \r\n','chaine',0,'','2019-10-04 12:03:51'),(6943,'TICKET_PUBLIC_INTERFACE_TOPIC',1,'ddd','chaine',0,'','2019-10-04 14:57:20'),(6944,'TICKET_PUBLIC_TEXT_HOME',1,'You can create a support ticket or view existing from its identifier tracking ticket.','chaine',0,'','2019-10-04 14:57:20'),(6945,'TICKET_PUBLIC_TEXT_HELP_MESSAGE',1,'Please accurately describe the problem. Provide the most information possible to allow us to correctly identify your request.','chaine',0,'','2019-10-04 14:57:20'),(6946,'TICKET_MESSAGE_MAIL_NEW',1,'TicketMessageMailNewText','chaine',0,'','2019-10-04 14:57:20'),(6947,'TICKET_URL_PUBLIC_INTERFACE',1,'aa','chaine',0,'','2019-10-04 14:57:20'),(7000,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2019-10-07 10:11:55'),(7001,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2019-10-07 10:11:55'),(7002,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2019-10-07 10:11:55'),(7003,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2019-10-07 10:11:55'),(7004,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2019-10-07 10:11:55'),(7005,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2019-10-07 10:11:55'),(7006,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2019-10-07 10:11:55'),(7007,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2019-10-07 10:11:55'),(7008,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2019-10-07 10:11:55'),(7009,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2019-10-07 10:11:55'),(7010,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2019-10-07 10:11:55'),(7011,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2019-10-07 10:11:55'),(7012,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2019-10-07 10:11:55'),(7013,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2019-10-07 10:11:55'),(7014,'MAIN_INFO_GDPR',1,'Zack Zeceo','chaine',0,'','2019-10-07 10:11:55'),(7015,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2019-10-07 10:11:55'),(7016,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2019-10-07 10:11:55'),(7017,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2019-10-07 10:11:55'),(7018,'MAIN_INFO_SIRET',1,'ABC-DEF','chaine',0,'','2019-10-07 10:11:55'),(7019,'MAIN_INFO_APE',1,'15E-45-8D','chaine',0,'','2019-10-07 10:11:55'),(7020,'MAIN_INFO_TVAINTRA',1,'FR12345678','chaine',0,'','2019-10-07 10:11:55'),(7021,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2019-10-07 10:11:55'),(7022,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2019-10-07 10:11:55'),(7023,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2019-10-07 10:11:55'),(7027,'USER_PASSWORD_GENERATED',1,'Perso','chaine',0,'','2019-10-07 10:52:46'),(7028,'USER_PASSWORD_PATTERN',1,'8;1;0;1;0;1','chaine',0,'','2019-10-07 10:57:03'),(7030,'MAIN_FEATURES_LEVEL',0,'1','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2019-10-08 13:29:42'),(7031,'MAIN_USE_NEW_TITLE_BUTTON',1,'0','chaine',1,'','2019-10-08 18:45:05'),(7032,'MAIN_MODULE_BOM',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:49:41'),(7033,'BOM_ADDON_PDF',1,'avalue','chaine',0,'Name of PDF model of BOM','2019-10-08 18:49:41'),(7034,'BOM_ADDON',1,'mod_bom_standard','chaine',0,'Name of numbering rules of BOM','2019-10-08 18:49:41'),(7035,'BOM_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/boms','chaine',0,NULL,'2019-10-08 18:49:41'),(7036,'MAIN_MODULE_GEOIPMAXMIND',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:51:54'),(7037,'MAIN_MODULE_DAV',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:54:07'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2012-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2012-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2012-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2012-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2012-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2012-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2012-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2012-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2012-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2012-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2012-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2012-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2012-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2012-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2012-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2012-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2012-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2012-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2012-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2012-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2012-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2012-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2012-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2012-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2012-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2012-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2012-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2012-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2012-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2012-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2012-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2012-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2012-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2012-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2012-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2012-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2012-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2012-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2012-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2012-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2012-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2012-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2012-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2012-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2012-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2012-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2015-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2012-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2012-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2012-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2012-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2012-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2012-07-08 11:29:33'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2012-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2012-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2012-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2012-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2012-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2012-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2012-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2012-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2012-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2012-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2012-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2012-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2012-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2012-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2012-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2012-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2012-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2012-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2012-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2012-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2012-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2012-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2012-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2012-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2012-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2012-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2012-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2013-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2013-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2013-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2013-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2013-07-29 20:50:02'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2013-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2013-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2013-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2014-12-08 13:11:02'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2014-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2014-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2014-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2015-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2014-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2015-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2014-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2014-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2014-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2014-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2014-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2014-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2014-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2014-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2014-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2014-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2014-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2014-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2014-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2014-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2014-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2014-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2014-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2015-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2015-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2015-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2015-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2015-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2015-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2015-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2015-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2015-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2015-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2015-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2015-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2015-01-19 17:01:53'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2015-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2015-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2015-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2015-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2015-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2015-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2015-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2015-02-12 16:22:55'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2015-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2015-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2015-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2015-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2015-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2015-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2015-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2015-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2015-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2015-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2015-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2015-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2015-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2015-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2015-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2015-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2015-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2015-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2015-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2015-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2015-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2015-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2015-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2015-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2015-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2015-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2015-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2015-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2015-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2015-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2015-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2015-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2015-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2015-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2015-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2015-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2015-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2015-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2015-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2015-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2015-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2015-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2015-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2015-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2015-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2015-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2015-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2015-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2015-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2015-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2015-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2015-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2015-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2015-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2015-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2015-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2015-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2015-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2015-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2015-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2016-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2016-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2016-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2016-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2016-12-21 12:51:28'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2017-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2017-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2017-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2017-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2017-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2017-11-15 22:38:28'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2017-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2017-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2017-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2017-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2017-11-15 22:39:05'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2017-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2017-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2017-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2017-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2017-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2018-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2018-01-16 15:49:46'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2018-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2018-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2018-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2018-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2018-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2018-01-22 17:33:49'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2018-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2018-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2018-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2018-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2018-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2018-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2018-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2018-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2018-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2018-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2018-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2018-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2018-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2018-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2018-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2018-07-30 16:32:20'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2018-07-31 21:14:32'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6632,'MAIN_MODULE_TICKET',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:15:29'),(6633,'MAIN_MODULE_TICKET_TABS_0',1,'thirdparty:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?socid=__ID__','chaine',0,NULL,'2019-06-05 09:15:29'),(6634,'MAIN_MODULE_TICKET_TABS_1',1,'project:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?projectid=__ID__','chaine',0,NULL,'2019-06-05 09:15:29'),(6635,'MAIN_MODULE_TICKET_TRIGGERS',1,'1','chaine',0,NULL,'2019-06-05 09:15:29'),(6636,'MAIN_MODULE_TICKET_MODELS',1,'1','chaine',0,NULL,'2019-06-05 09:15:29'),(6638,'MAIN_MODULE_TAKEPOS',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:15:58'),(6639,'MAIN_MODULE_TAKEPOS_TRIGGERS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6640,'MAIN_MODULE_TAKEPOS_LOGIN',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6641,'MAIN_MODULE_TAKEPOS_SUBSTITUTIONS',1,'1','chaine',0,NULL,'2019-06-05 09:15:58'),(6642,'MAIN_MODULE_TAKEPOS_MENUS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6643,'MAIN_MODULE_TAKEPOS_THEME',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6644,'MAIN_MODULE_TAKEPOS_TPL',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6645,'MAIN_MODULE_TAKEPOS_BARCODE',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6646,'MAIN_MODULE_TAKEPOS_MODELS',1,'0','chaine',0,NULL,'2019-06-05 09:15:58'),(6647,'MAIN_MODULE_SOCIALNETWORKS',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:16:49'),(6648,'MAIN_MODULE_CASHDESK',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-06-05 09:17:21'),(6649,'MAIN_MODULE_ACCOUNTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6650,'MAIN_MODULE_AGENDA',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6651,'MAIN_MODULE_BARCODE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6652,'MAIN_MODULE_CRON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6653,'MAIN_MODULE_COMMANDE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6654,'MAIN_MODULE_DON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6655,'MAIN_MODULE_ECM',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6656,'MAIN_MODULE_FACTURE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:23'),(6657,'MAIN_MODULE_FOURNISSEUR',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6658,'MAIN_MODULE_HOLIDAY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6659,'MAIN_MODULE_OPENSURVEY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6660,'MAIN_MODULE_PRINTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6661,'MAIN_MODULE_SALARIES',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6662,'MAIN_MODULE_SYSLOG',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6663,'MAIN_MODULE_SOCIETE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:24'),(6664,'MAIN_MODULE_SERVICE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6665,'MAIN_MODULE_USER',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6666,'MAIN_MODULE_VARIANTS',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2019-09-26 11:33:25'),(6667,'MAIN_VERSION_LAST_UPGRADE',0,'10.0.2','chaine',0,'Dolibarr version for last upgrade','2019-09-26 11:33:26'),(6755,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6756,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6757,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6758,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2019-09-26 12:01:06'),(6762,'MAIN_INFO_ACCOUNTANT_NAME',1,'Bob Bookeeper','chaine',0,'','2019-09-26 12:01:37'),(6763,'MAIN_INFO_ACCOUNTANT_TOWN',1,'Berlin','chaine',0,'','2019-09-26 12:01:37'),(6764,'MAIN_INFO_ACCOUNTANT_STATE',1,'0','chaine',0,'','2019-09-26 12:01:37'),(6765,'MAIN_INFO_ACCOUNTANT_COUNTRY',1,'5','chaine',0,'','2019-09-26 12:01:37'),(6795,'TICKET_ADDON',1,'mod_ticket_simple','chaine',0,'','2019-09-26 12:07:59'),(6796,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_elephant','chaine',0,'','2019-09-26 12:59:00'),(6800,'CASHDESK_ID_THIRDPARTY1',1,'7','chaine',0,'','2019-09-26 15:30:09'),(6801,'CASHDESK_ID_BANKACCOUNT_CASH1',1,'3','chaine',0,'','2019-09-26 15:30:09'),(6802,'CASHDESK_ID_BANKACCOUNT_CHEQUE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6803,'CASHDESK_ID_BANKACCOUNT_CB1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6804,'CASHDESK_ID_BANKACCOUNT_PRE1',1,'4','chaine',0,'','2019-09-26 15:30:09'),(6805,'CASHDESK_ID_BANKACCOUNT_VIR1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6806,'CASHDESK_NO_DECREASE_STOCK1',1,'1','chaine',0,'','2019-09-26 15:30:09'),(6807,'MAIN_MODULE_FORCEPROJECT',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-09-27 14:52:52'),(6808,'MAIN_MODULE_FORCEPROJECT_TRIGGERS',1,'1','chaine',0,NULL,'2019-09-27 14:52:52'),(6809,'MAIN_MODULE_FORCEPROJECT_SUBSTITUTIONS',1,'0','chaine',0,NULL,'2019-09-27 14:52:52'),(6810,'MAIN_MODULE_FORCEPROJECT_MODELS',1,'1','chaine',0,NULL,'2019-09-27 14:52:52'),(6811,'FORCEPROJECT_ON_PROPOSAL',1,'1','chaine',0,'','2019-09-27 14:52:57'),(6812,'MAIN_MODULE_WEBSITE',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-09-30 15:49:22'),(6813,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2019-10-01 11:48:09'),(6814,'PACKTHEMEACTIVATEDTHEME',0,'modOwnTheme','chaine',0,'','2019-10-02 11:41:58'),(6815,'OWNTHEME_COL1',0,'#6a89cc','chaine',0,'','2019-10-02 11:41:58'),(6816,'OWNTHEME_COL2',0,'#60a3bc','chaine',0,'','2019-10-02 11:41:58'),(6817,'DOL_VERSION',0,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:41:58'),(6823,'OWNTHEME_COL_BODY_BCKGRD',0,'#E9E9E9','chaine',0,'','2019-10-02 11:41:58'),(6824,'OWNTHEME_COL_LOGO_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6825,'OWNTHEME_COL_TXT_MENU',0,'#b8c6e5','chaine',0,'','2019-10-02 11:41:58'),(6826,'OWNTHEME_COL_HEADER_BCKGRD',0,'#474c80','chaine',0,'','2019-10-02 11:41:58'),(6827,'OWNTHEME_CUSTOM_CSS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6828,'OWNTHEME_CUSTOM_JS',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6829,'OWNTHEME_FIXED_MENU',0,'0','yesno',0,'','2019-10-02 11:41:58'),(6830,'OWNTHEME_D_HEADER_FONT_SIZE',0,'1.7rem','chaine',0,'','2019-10-02 11:41:58'),(6831,'OWNTHEME_S_HEADER_FONT_SIZE',0,'1.6rem','chaine',0,'','2019-10-02 11:41:58'),(6832,'OWNTHEME_D_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6833,'OWNTHEME_S_VMENU_FONT_SIZE',0,'1.2rem','chaine',0,'','2019-10-02 11:41:58'),(6844,'MAIN_THEME',0,'eldy','chaine',0,'','2019-10-02 11:46:02'),(6845,'MAIN_MENU_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6846,'MAIN_MENUFRONT_STANDARD',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6847,'MAIN_MENU_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6848,'MAIN_MENUFRONT_SMARTPHONE',0,'eldy_menu.php','chaine',0,'','2019-10-02 11:46:02'),(6849,'MAIN_UPLOAD_DOC',1,'20000','chaine',0,'','2019-10-02 11:46:54'),(6850,'MAIN_UMASK',1,'0664','chaine',0,'','2019-10-02 11:46:54'),(6851,'BECREATIVE_COL1',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6852,'BECREATIVE_COL2',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6853,'DOL_VERSION',1,'10.0.2','chaine',0,'Dolibarr version','2019-10-02 11:47:10'),(6859,'BECREATIVE_COL_BODY_BCKGRD',1,'#e6eaef','chaine',0,'','2019-10-02 11:47:10'),(6860,'BECREATIVE_COL_LOGO_BCKGRD',1,'#1e88e5','chaine',0,'','2019-10-02 11:47:10'),(6861,'BECREATIVE_COL_TXT_MENU',1,'#b8c6e5','chaine',0,'','2019-10-02 11:47:10'),(6862,'BECREATIVE_COL_HEADER_BCKGRD',1,'#26a69a','chaine',0,'','2019-10-02 11:47:10'),(6863,'BECREATIVE_CUSTOM_CSS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6864,'BECREATIVE_CUSTOM_JS',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6865,'BECREATIVE_FIXED_MENU',1,'0','yesno',0,'','2019-10-02 11:47:10'),(6866,'BECREATIVE_D_HEADER_FONT_SIZE',1,'1.7rem','chaine',0,'','2019-10-02 11:47:10'),(6867,'BECREATIVE_S_HEADER_FONT_SIZE',1,'1.6rem','chaine',0,'','2019-10-02 11:47:10'),(6868,'BECREATIVE_D_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6869,'BECREATIVE_S_VMENU_FONT_SIZE',1,'1.2rem','chaine',0,'','2019-10-02 11:47:10'),(6880,'MAIN_THEME',1,'eldy','chaine',0,'','2019-10-02 11:48:49'),(6881,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6882,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6883,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6884,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2019-10-02 11:48:49'),(6885,'ACCOUNTING_ACCOUNT_CUSTOMER',1,'411','chaine',0,'','2019-10-04 08:15:44'),(6886,'ACCOUNTING_ACCOUNT_SUPPLIER',1,'401','chaine',0,'','2019-10-04 08:15:44'),(6887,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,'','2019-10-04 08:15:44'),(6888,'ACCOUNTING_PRODUCT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6889,'ACCOUNTING_PRODUCT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6890,'ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6891,'ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6892,'ACCOUNTING_SERVICE_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6893,'ACCOUNTING_SERVICE_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6894,'ACCOUNTING_VAT_BUY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6895,'ACCOUNTING_VAT_SOLD_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6896,'ACCOUNTING_VAT_PAY_ACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6897,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,'','2019-10-04 08:15:44'),(6898,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,'','2019-10-04 08:15:44'),(6899,'DONATION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6900,'ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6901,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,'','2019-10-04 08:15:44'),(6902,'LOAN_ACCOUNTING_ACCOUNT_INTEREST',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6903,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'-1','chaine',0,'','2019-10-04 08:15:44'),(6912,'TICKET_ENABLE_PUBLIC_INTERFACE',1,'1','chaine',0,'','2019-10-04 11:44:33'),(6934,'TICKET_NOTIFICATION_EMAIL_FROM',1,'fff','chaine',0,'','2019-10-04 12:03:51'),(6935,'TICKET_NOTIFICATION_EMAIL_TO',1,'ff','chaine',0,'','2019-10-04 12:03:51'),(6936,'TICKET_MESSAGE_MAIL_INTRO',1,'Hello,
    \r\nA new response was sent on a ticket that you contact. Here is the message:\"\"','chaine',0,'','2019-10-04 12:03:51'),(6937,'TICKET_MESSAGE_MAIL_SIGNATURE',1,'

    Sincerely,

    \r\n\r\n

    --\"\"

    \r\n','chaine',0,'','2019-10-04 12:03:51'),(6943,'TICKET_PUBLIC_INTERFACE_TOPIC',1,'ddd','chaine',0,'','2019-10-04 14:57:20'),(6944,'TICKET_PUBLIC_TEXT_HOME',1,'You can create a support ticket or view existing from its identifier tracking ticket.','chaine',0,'','2019-10-04 14:57:20'),(6945,'TICKET_PUBLIC_TEXT_HELP_MESSAGE',1,'Please accurately describe the problem. Provide the most information possible to allow us to correctly identify your request.','chaine',0,'','2019-10-04 14:57:20'),(6946,'TICKET_MESSAGE_MAIL_NEW',1,'TicketMessageMailNewText','chaine',0,'','2019-10-04 14:57:20'),(6947,'TICKET_URL_PUBLIC_INTERFACE',1,'aa','chaine',0,'','2019-10-04 14:57:20'),(7000,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2019-10-07 10:11:55'),(7001,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2019-10-07 10:11:55'),(7002,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2019-10-07 10:11:55'),(7003,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2019-10-07 10:11:55'),(7004,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2019-10-07 10:11:55'),(7005,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2019-10-07 10:11:55'),(7006,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2019-10-07 10:11:55'),(7007,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2019-10-07 10:11:55'),(7008,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2019-10-07 10:11:55'),(7009,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2019-10-07 10:11:55'),(7010,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2019-10-07 10:11:55'),(7011,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2019-10-07 10:11:55'),(7012,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2019-10-07 10:11:55'),(7013,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2019-10-07 10:11:55'),(7014,'MAIN_INFO_GDPR',1,'Zack Zeceo','chaine',0,'','2019-10-07 10:11:55'),(7015,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2019-10-07 10:11:55'),(7016,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2019-10-07 10:11:55'),(7017,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2019-10-07 10:11:55'),(7018,'MAIN_INFO_SIRET',1,'ABC-DEF','chaine',0,'','2019-10-07 10:11:55'),(7019,'MAIN_INFO_APE',1,'15E-45-8D','chaine',0,'','2019-10-07 10:11:55'),(7020,'MAIN_INFO_TVAINTRA',1,'FR12345678','chaine',0,'','2019-10-07 10:11:55'),(7021,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2019-10-07 10:11:55'),(7022,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2019-10-07 10:11:55'),(7023,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2019-10-07 10:11:55'),(7027,'USER_PASSWORD_GENERATED',1,'Perso','chaine',0,'','2019-10-07 10:52:46'),(7028,'USER_PASSWORD_PATTERN',1,'8;1;0;1;0;1','chaine',0,'','2019-10-07 10:57:03'),(7030,'MAIN_FEATURES_LEVEL',0,'1','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2019-10-08 13:29:42'),(7031,'MAIN_USE_NEW_TITLE_BUTTON',1,'0','chaine',1,'','2019-10-08 18:45:05'),(7032,'MAIN_MODULE_BOM',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:49:41'),(7033,'BOM_ADDON_PDF',1,'avalue','chaine',0,'Name of PDF model of BOM','2019-10-08 18:49:41'),(7034,'BOM_ADDON',1,'mod_bom_standard','chaine',0,'Name of numbering rules of BOM','2019-10-08 18:49:41'),(7035,'BOM_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/boms','chaine',0,NULL,'2019-10-08 18:49:41'),(7036,'MAIN_MODULE_GEOIPMAXMIND',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:51:54'),(7037,'MAIN_MODULE_DAV',1,'1','string',0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2019-10-08 18:54:07'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_3.8.0.sql b/dev/initdemo/mysqldump_dolibarr_3.8.0.sql index 2f5bfb16060..f3177d5d3ed 100644 --- a/dev/initdemo/mysqldump_dolibarr_3.8.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_3.8.0.sql @@ -3036,7 +3036,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(35,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_panicum','yesno',0,'Module to control third parties codes','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(523,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(524,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(525,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(526,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(527,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(528,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(529,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(530,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2010-07-10 12:48:49'),(531,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(532,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(533,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(534,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(807,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(808,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4555,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2013-03-13 10:19:31'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5137,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2013-09-08 23:06:08'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5164,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2013-11-06 23:35:12'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5235,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2014-03-02 15:22:27'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5282,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2015-07-19 13:41:20'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5410,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5412,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5414,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5433,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2015-11-15 22:39:05'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5465,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5479,'MAIN_VERSION_LAST_UPGRADE',0,'3.8.3','chaine',0,'Dolibarr version for last upgrade','2016-01-10 16:45:35'),(5481,'DISPLAY_MARK_RATES',1,'1','chaine',0,'','2016-01-10 16:46:26'),(5482,'MARGIN_TYPE',1,'1','chaine',0,'','2016-01-10 16:46:30'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5544,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5545,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5546,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5547,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5549,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5550,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5553,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5554,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5592,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2016-01-22 17:33:49'),(5593,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-01-22 17:33:49'),(5594,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-01-22 17:33:49'),(5595,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-01-22 17:33:49'),(5596,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-01-22 17:33:49'),(5597,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5598,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-01-22 17:33:49'),(5599,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-01-22 17:33:49'),(5600,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-01-22 17:33:49'),(5601,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-01-22 17:33:49'),(5602,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-01-22 17:33:49'),(5603,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-01-22 17:33:49'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5607,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-01-22 17:33:49'),(5608,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5609,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-01-22 17:33:49'),(5610,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5611,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-01-22 17:33:49'); +INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(35,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_panicum','yesno',0,'Module to control third parties codes','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(523,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(524,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(525,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(526,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(527,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(528,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(529,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(530,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2010-07-10 12:48:49'),(531,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(532,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(533,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(534,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(807,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(808,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4555,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2013-03-13 10:19:31'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5137,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2013-09-08 23:06:08'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5164,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2013-11-06 23:35:12'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5235,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2014-03-02 15:22:27'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5282,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2015-07-19 13:41:20'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5410,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5412,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5414,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5433,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2015-11-15 22:39:05'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5465,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5479,'MAIN_VERSION_LAST_UPGRADE',0,'3.8.3','chaine',0,'Dolibarr version for last upgrade','2016-01-10 16:45:35'),(5481,'DISPLAY_MARK_RATES',1,'1','chaine',0,'','2016-01-10 16:46:26'),(5482,'MARGIN_TYPE',1,'1','chaine',0,'','2016-01-10 16:46:30'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5544,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5545,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5546,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5547,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5549,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5550,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5553,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5554,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5592,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2016-01-22 17:33:49'),(5593,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-01-22 17:33:49'),(5594,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-01-22 17:33:49'),(5595,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-01-22 17:33:49'),(5596,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-01-22 17:33:49'),(5597,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5598,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-01-22 17:33:49'),(5599,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-01-22 17:33:49'),(5600,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-01-22 17:33:49'),(5601,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-01-22 17:33:49'),(5602,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-01-22 17:33:49'),(5603,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-01-22 17:33:49'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5607,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-01-22 17:33:49'),(5608,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5609,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-01-22 17:33:49'),(5610,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5611,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-01-22 17:33:49'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_3.9.0.sql b/dev/initdemo/mysqldump_dolibarr_3.9.0.sql index 592bf3ca213..7fbe9673f21 100644 --- a/dev/initdemo/mysqldump_dolibarr_3.9.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_3.9.0.sql @@ -2902,7 +2902,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(35,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_panicum','yesno',0,'Module to control third parties codes','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(523,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(524,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(525,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(526,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(527,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(528,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(529,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(530,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2010-07-10 12:48:49'),(531,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(532,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(533,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(534,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(807,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(808,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4555,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2013-03-13 10:19:31'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5137,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2013-09-08 23:06:08'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5164,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2013-11-06 23:35:12'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5235,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2014-03-02 15:22:27'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5282,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2015-07-19 13:41:20'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5410,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5412,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5414,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5433,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2015-11-15 22:39:05'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5465,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5481,'DISPLAY_MARK_RATES',1,'1','chaine',0,'','2016-01-10 16:46:26'),(5482,'MARGIN_TYPE',1,'1','chaine',0,'','2016-01-10 16:46:30'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5544,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5545,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5546,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5547,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5549,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5550,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5553,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5554,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5592,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2016-01-22 17:33:49'),(5593,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-01-22 17:33:49'),(5594,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-01-22 17:33:49'),(5595,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-01-22 17:33:49'),(5596,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-01-22 17:33:49'),(5597,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5598,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-01-22 17:33:49'),(5599,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-01-22 17:33:49'),(5600,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-01-22 17:33:49'),(5601,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-01-22 17:33:49'),(5602,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-01-22 17:33:49'),(5603,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-01-22 17:33:49'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5607,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-01-22 17:33:49'),(5608,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5609,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-01-22 17:33:49'),(5610,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5611,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5615,'MAIN_VERSION_LAST_UPGRADE',0,'3.9.0-rc2','chaine',0,'Dolibarr version for last upgrade','2016-03-13 10:54:56'); +INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(35,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_panicum','yesno',0,'Module to control third parties codes','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(523,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(524,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(525,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(526,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(527,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(528,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(529,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:49'),(530,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2010-07-10 12:48:49'),(531,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(532,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2010-07-10 12:48:49'),(533,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(534,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2010-07-10 12:48:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(807,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(808,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2011-07-18 17:27:52'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4555,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2013-03-13 10:19:31'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5137,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2013-09-08 23:06:08'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5164,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2013-11-06 23:35:12'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5235,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2014-03-02 15:22:27'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5282,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2015-07-19 13:41:20'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5410,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5412,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5414,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2015-11-15 22:38:28'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5433,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2015-11-15 22:39:05'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5465,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5481,'DISPLAY_MARK_RATES',1,'1','chaine',0,'','2016-01-10 16:46:26'),(5482,'MARGIN_TYPE',1,'1','chaine',0,'','2016-01-10 16:46:30'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5544,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5545,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5546,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-01-22 17:26:42'),(5547,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5549,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5550,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5553,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5554,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5592,'MAIN_INFO_SOCIETE_COUNTRY',1,'1:FR:France','chaine',0,'','2016-01-22 17:33:49'),(5593,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-01-22 17:33:49'),(5594,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-01-22 17:33:49'),(5595,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-01-22 17:33:49'),(5596,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-01-22 17:33:49'),(5597,'MAIN_INFO_SOCIETE_STATE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5598,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-01-22 17:33:49'),(5599,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-01-22 17:33:49'),(5600,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-01-22 17:33:49'),(5601,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-01-22 17:33:49'),(5602,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-01-22 17:33:49'),(5603,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-01-22 17:33:49'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5607,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-01-22 17:33:49'),(5608,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-01-22 17:33:49'),(5609,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-01-22 17:33:49'),(5610,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5611,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5615,'MAIN_VERSION_LAST_UPGRADE',0,'3.9.0-rc2','chaine',0,'Dolibarr version for last upgrade','2016-03-13 10:54:56'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_4.0.0.sql b/dev/initdemo/mysqldump_dolibarr_4.0.0.sql index 0caa0b9794b..6363873d7c0 100644 --- a/dev/initdemo/mysqldump_dolibarr_4.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_4.0.0.sql @@ -3058,7 +3058,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5622,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-07-30 11:12:59'),(5623,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-07-30 11:12:59'),(5624,'MAIN_VERSION_LAST_UPGRADE',0,'4.0.0-rc2','chaine',0,'Dolibarr version for last upgrade','2016-07-30 11:13:02'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5636,'MAIN_MODULE_CRON',1,'1',NULL,0,NULL,'2016-07-30 11:14:25'),(5637,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2016-07-30 11:14:27'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5641,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-07-30 11:16:22'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5680,'MAIN_INFO_SOCIETE_COUNTRY',1,'14:CA:Canada','chaine',0,'','2016-07-30 11:19:05'),(5681,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-07-30 11:19:05'),(5682,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-07-30 11:19:05'),(5683,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-07-30 11:19:05'),(5684,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-07-30 11:19:05'),(5685,'MAIN_INFO_SOCIETE_STATE',1,'1514','chaine',0,'','2016-07-30 11:19:05'),(5686,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-07-30 11:19:05'),(5687,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-07-30 11:19:05'),(5688,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-07-30 11:19:05'),(5689,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-07-30 11:19:05'),(5690,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-07-30 11:19:05'),(5691,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-07-30 11:19:05'),(5692,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2016-07-30 11:19:05'),(5693,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2016-07-30 11:19:05'),(5694,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-07-30 11:19:05'),(5695,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5696,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2016-07-30 11:19:05'),(5697,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-07-30 11:19:05'),(5698,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2016-07-30 11:19:05'),(5699,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-07-30 11:19:05'),(5700,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-07-30 11:19:05'),(5701,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2016-07-30 11:19:05'),(5702,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5703,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5704,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2016-07-30 11:19:17'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5713,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5715,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5716,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5765,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-07-30 15:42:32'),(5766,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5767,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5768,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5769,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5770,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5771,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5772,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5773,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5774,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5775,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5776,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5777,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5778,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5779,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5780,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5781,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5782,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5783,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5784,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5785,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5786,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5787,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5788,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5789,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5790,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5791,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5792,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5793,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5794,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5795,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5796,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5797,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5798,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5799,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5800,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5801,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5802,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5803,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5804,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5805,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5806,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5807,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5812,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-07-30 19:04:07'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'); +INSERT INTO `llx_const` VALUES (5,'SYSLOG_LEVEL',0,'7','chaine',0,'Level of debug info to show','2010-07-08 11:17:57'),(8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(242,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2010-07-08 11:26:34'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(370,'MAIN_SUBMODULE_LIVRAISON',1,'1','chaine',0,'','2010-07-08 23:00:29'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(384,'PRODUIT_SOUSPRODUITS',1,'1','chaine',0,'','2010-07-08 23:22:12'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(979,'PRELEVEMENT_USER',1,'1','chaine',0,'','2011-07-18 18:05:50'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(981,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1719,'ACCOUNTING_USEDICTTOEDIT',1,'1','chaine',1,'','2012-12-08 13:15:00'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1737,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1738,'MAIN_INFO_SOCIETE_NOM',2,'aaa','chaine',0,'','2012-12-08 14:08:14'),(1739,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2013-02-27 14:20:27'),(1740,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2012-12-08 14:08:14'),(1741,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2012-12-08 14:08:14'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2040,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2015-07-19 13:41:06'),(2041,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2015-07-19 13:41:06'),(2044,'MAIN_MAIL_EMAIL_TLS',1,'1','chaine',0,'','2015-07-19 13:41:06'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4698,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2013-03-13 17:22:24'),(4699,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2015-07-19 13:41:06'),(4700,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2015-07-19 13:41:06'),(4701,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2015-07-19 13:41:06'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5317,'INVOICE_CAN_ALWAYS_BE_REMOVED',1,'1','chaine',1,'','2015-10-03 09:25:30'),(5338,'MAIN_LANG_DEFAULT',1,'en_US','chaine',0,'','2015-10-03 10:11:33'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5350,'MAIN_SEARCHFORM_SOCIETE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5440,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:17'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5442,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2015-11-15 22:39:22'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5449,'MAIN_MODULE_COMPTABILITE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5452,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2015-11-15 22:39:46'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5458,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,NULL,'2015-11-15 22:40:51'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5540,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5543,'MAIN_MAIL_DEBUG',1,'1','chaine',1,'','2016-01-22 13:35:24'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5560,'MAILING_LIMIT_SENDBYWEB',0,'25','chaine',1,'Number of targets to defined packet size when sending mass email','2016-01-22 17:28:18'),(5561,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'Which logger to use','2016-01-22 17:28:18'),(5562,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'Directory where to write log file','2016-01-22 17:28:18'),(5568,'MAIN_MAIL_EMAIL_FROM',1,'robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2016-01-22 17:28:18'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5622,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2016-07-30 11:12:59'),(5623,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2016-07-30 11:12:59'),(5624,'MAIN_VERSION_LAST_UPGRADE',0,'4.0.0-rc2','chaine',0,'Dolibarr version for last upgrade','2016-07-30 11:13:02'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5636,'MAIN_MODULE_CRON',1,'1',NULL,0,NULL,'2016-07-30 11:14:25'),(5637,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2016-07-30 11:14:27'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5641,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-07-30 11:16:22'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5680,'MAIN_INFO_SOCIETE_COUNTRY',1,'14:CA:Canada','chaine',0,'','2016-07-30 11:19:05'),(5681,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2016-07-30 11:19:05'),(5682,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2016-07-30 11:19:05'),(5683,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2016-07-30 11:19:05'),(5684,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2016-07-30 11:19:05'),(5685,'MAIN_INFO_SOCIETE_STATE',1,'1514','chaine',0,'','2016-07-30 11:19:05'),(5686,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2016-07-30 11:19:05'),(5687,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2016-07-30 11:19:05'),(5688,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2016-07-30 11:19:05'),(5689,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2016-07-30 11:19:05'),(5690,'MAIN_INFO_SOCIETE_WEB',1,'http://www.dolibarr.org','chaine',0,'','2016-07-30 11:19:05'),(5691,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2016-07-30 11:19:05'),(5692,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2016-07-30 11:19:05'),(5693,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2016-07-30 11:19:05'),(5694,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2016-07-30 11:19:05'),(5695,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5696,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2016-07-30 11:19:05'),(5697,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2016-07-30 11:19:05'),(5698,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2016-07-30 11:19:05'),(5699,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2016-07-30 11:19:05'),(5700,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2016-07-30 11:19:05'),(5701,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2016-07-30 11:19:05'),(5702,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5703,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2016-07-30 11:19:05'),(5704,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2016-07-30 11:19:17'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5713,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5715,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5716,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5765,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-07-30 15:42:32'),(5766,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5767,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5768,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5769,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5770,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5771,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5772,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5773,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5774,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5775,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5776,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5777,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5778,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5779,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5780,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5781,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5782,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5783,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5784,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5785,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5786,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5787,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5788,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5789,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5790,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5791,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5792,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5793,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5794,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5795,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5796,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5797,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5798,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5799,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5800,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5801,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5802,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5803,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5804,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5805,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5806,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5807,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,NULL,'2016-07-30 15:42:32'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5812,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-07-30 19:04:07'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_5.0.0.sql b/dev/initdemo/mysqldump_dolibarr_5.0.0.sql index 9c9f86d34c1..a66bd427499 100644 --- a/dev/initdemo/mysqldump_dolibarr_5.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_5.0.0.sql @@ -3106,7 +3106,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5641,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-07-30 11:16:22'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5713,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5715,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5765,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-07-30 15:42:32'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5812,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-07-30 19:04:07'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5817,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'Max length for small lists (tabs)','2016-12-12 10:54:09'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5835,'ACCOUNTING_SELL_JOURNAL',1,'VTE','chaine',0,NULL,'2017-01-29 15:11:56'),(5836,'ACCOUNTING_PURCHASE_JOURNAL',1,'ACH','chaine',0,NULL,'2017-01-29 15:11:56'),(5837,'ACCOUNTING_SOCIAL_JOURNAL',1,'SOC','chaine',0,NULL,'2017-01-29 15:11:56'),(5838,'ACCOUNTING_MISCELLANEOUS_JOURNAL',1,'OD','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5847,'ACCOUNTING_EXPENSEREPORT_JOURNAL',1,'ER','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5864,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-01-29 15:13:51'),(5865,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-01-29 15:13:51'),(5866,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-01-29 15:13:51'),(5867,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-01-29 15:13:51'),(5868,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2017-01-29 15:13:51'),(5869,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-01-29 15:13:51'),(5870,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-01-29 15:13:51'),(5871,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-01-29 15:13:51'),(5872,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5873,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-01-29 15:13:51'),(5874,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-01-29 15:13:51'),(5875,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-01-29 15:13:51'),(5876,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2017-01-29 15:13:51'),(5877,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-01-29 15:13:51'),(5878,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-01-29 15:13:51'),(5879,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5880,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5995,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2017-02-12 19:15:56'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6004,'MAIN_MODULE_MULTICOMPANY_CSS',1,'[\"\\/multicompany\\/css\\/multicompany.css.php\"]','chaine',0,NULL,'2017-02-15 17:17:11'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6024,'MAIN_INFO_SOCIETE_COUNTRY',1,'14:CA:Canada','chaine',0,'','2017-02-15 17:18:41'),(6025,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-02-15 17:18:41'),(6026,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2017-02-15 17:18:41'),(6027,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-02-15 17:18:41'),(6028,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-02-15 17:18:41'),(6029,'MAIN_INFO_SOCIETE_STATE',1,'1514','chaine',0,'','2017-02-15 17:18:41'),(6030,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-02-15 17:18:41'),(6031,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-02-15 17:18:41'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6094,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6095,'MAIN_MODULE_CRON',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6096,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6097,'MAIN_VERSION_LAST_UPGRADE',0,'5.0.3','chaine',0,'Dolibarr version for last upgrade','2017-05-12 09:02:43'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'fsfe.fr.php','chaine',0,'Nom du gestionnaire de formulaire de dons','2010-07-08 11:29:00'),(253,'ADHERENT_BANK_USE_AUTO',1,'','yesno',0,'Insertion automatique des cotisation dans le compte banquaire','2010-07-08 11:29:05'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1990,'MAIN_SMS_SENDMODE',1,'ovh','chaine',0,'This is to enable OVH SMS engine','2012-12-17 21:19:01'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4711,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2013-03-13 19:37:38'),(4712,'GOOGLE_AGENDA_NAME1',1,'asso master','chaine',0,'','2013-03-13 19:37:38'),(4713,'GOOGLE_AGENDA_SRC1',1,'assodolibarr@mail.com','chaine',0,'','2013-03-13 19:37:38'),(4714,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2013-03-13 19:37:38'),(4715,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4716,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4717,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4718,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2013-03-13 19:37:38'),(4719,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2013-03-13 19:37:38'),(4720,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2013-03-13 19:37:38'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5075,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5076,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5077,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5078,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2013-03-24 02:51:13'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5195,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2013-11-07 00:02:34'),(5196,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5197,'GOOGLE_DUPLICATE_INTO_MEMBERS',1,'0','chaine',0,'','2013-11-07 00:02:34'),(5198,'GOOGLE_CONTACT_LOGIN',1,'eldy10@mail.com','chaine',0,'','2013-11-07 00:02:34'),(5199,'GOOGLE_CONTACT_PASSWORD',1,'bidonge','chaine',0,'','2013-11-07 00:02:34'),(5200,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2013-11-07 00:02:34'),(5201,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2013-11-07 00:02:34'),(5202,'GOOGLE_TAG_PREFIX_MEMBERS',1,'Dolibarr (Members)','chaine',0,'','2013-11-07 00:02:34'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5339,'MAIN_MULTILANGS',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5340,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2015-10-03 10:11:33'),(5341,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5342,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5343,'MAIN_START_WEEK',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5344,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2015-10-03 10:11:33'),(5345,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2015-10-03 10:11:33'),(5346,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5347,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5348,'MAIN_THEME',1,'eldy','chaine',0,'','2015-10-03 10:11:33'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5355,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2015-10-03 10:11:33'),(5356,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2015-10-03 10:11:33'),(5357,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2015-10-03 10:11:33'),(5358,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5359,'THEME_ELDY_USE_HOVER',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5548,'MAIN_MODULE_ECM',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5551,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5552,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2016-01-22 17:26:43'),(5555,'MAIN_MODULE_SERVICE',1,'1',NULL,0,NULL,'2016-01-22 17:26:43'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5589,'MAIN_MODULE_USER',0,'1',NULL,0,NULL,'2016-01-22 17:28:42'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5641,'MAIN_MODULE_DON',1,'1',NULL,0,NULL,'2016-07-30 11:16:22'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5713,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5715,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5765,'MAIN_MODULE_AGENDA',1,'1',NULL,0,NULL,'2016-07-30 15:42:32'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5812,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,NULL,'2016-07-30 19:04:07'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5817,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'Max length for small lists (tabs)','2016-12-12 10:54:09'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5835,'ACCOUNTING_SELL_JOURNAL',1,'VTE','chaine',0,NULL,'2017-01-29 15:11:56'),(5836,'ACCOUNTING_PURCHASE_JOURNAL',1,'ACH','chaine',0,NULL,'2017-01-29 15:11:56'),(5837,'ACCOUNTING_SOCIAL_JOURNAL',1,'SOC','chaine',0,NULL,'2017-01-29 15:11:56'),(5838,'ACCOUNTING_MISCELLANEOUS_JOURNAL',1,'OD','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5847,'ACCOUNTING_EXPENSEREPORT_JOURNAL',1,'ER','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5864,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-01-29 15:13:51'),(5865,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-01-29 15:13:51'),(5866,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-01-29 15:13:51'),(5867,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-01-29 15:13:51'),(5868,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company','chaine',0,'','2017-01-29 15:13:51'),(5869,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-01-29 15:13:51'),(5870,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-01-29 15:13:51'),(5871,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-01-29 15:13:51'),(5872,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5873,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-01-29 15:13:51'),(5874,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-01-29 15:13:51'),(5875,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-01-29 15:13:51'),(5876,'SOCIETE_FISCAL_MONTH_START',1,'1','chaine',0,'','2017-01-29 15:13:51'),(5877,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-01-29 15:13:51'),(5878,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-01-29 15:13:51'),(5879,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5880,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-01-29 15:13:51'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5995,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,NULL,'2017-02-12 19:15:56'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6004,'MAIN_MODULE_MULTICOMPANY_CSS',1,'[\"\\/multicompany\\/css\\/multicompany.css.php\"]','chaine',0,NULL,'2017-02-15 17:17:11'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6024,'MAIN_INFO_SOCIETE_COUNTRY',1,'14:CA:Canada','chaine',0,'','2017-02-15 17:18:41'),(6025,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-02-15 17:18:41'),(6026,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street','chaine',0,'','2017-02-15 17:18:41'),(6027,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-02-15 17:18:41'),(6028,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-02-15 17:18:41'),(6029,'MAIN_INFO_SOCIETE_STATE',1,'1514','chaine',0,'','2017-02-15 17:18:41'),(6030,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-02-15 17:18:41'),(6031,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-02-15 17:18:41'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6094,'MAIN_MODULE_BARCODE',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6095,'MAIN_MODULE_CRON',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6096,'MAIN_MODULE_FACTURE',1,'1',NULL,0,NULL,'2017-05-12 09:02:42'),(6097,'MAIN_VERSION_LAST_UPGRADE',0,'5.0.3','chaine',0,'Dolibarr version for last upgrade','2017-05-12 09:02:43'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_6.0.0.sql b/dev/initdemo/mysqldump_dolibarr_6.0.0.sql index 7209ce9dadb..19cb46d0237 100644 --- a/dev/initdemo/mysqldump_dolibarr_6.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_6.0.0.sql @@ -3224,7 +3224,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5835,'ACCOUNTING_SELL_JOURNAL',1,'VTE','chaine',0,NULL,'2017-01-29 15:11:56'),(5836,'ACCOUNTING_PURCHASE_JOURNAL',1,'ACH','chaine',0,NULL,'2017-01-29 15:11:56'),(5837,'ACCOUNTING_SOCIAL_JOURNAL',1,'SOC','chaine',0,NULL,'2017-01-29 15:11:56'),(5838,'ACCOUNTING_MISCELLANEOUS_JOURNAL',1,'OD','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5847,'ACCOUNTING_EXPENSEREPORT_JOURNAL',1,'ER','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6004,'MAIN_MODULE_MULTICOMPANY_CSS',1,'[\"\\/multicompany\\/css\\/multicompany.css.php\"]','chaine',0,NULL,'2017-02-15 17:17:11'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6154,'MAIN_LOGIN_BACKGROUND',1,'background_dolibarr.jpg','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6376,'MAIN_VERSION_LAST_UPGRADE',0,'6.0.1','chaine',0,'Dolibarr version for last upgrade','2017-09-04 12:19:03'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6497,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6498,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6499,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6500,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6501,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6502,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6503,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6504,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6505,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6506,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2017-09-06 16:18:46'),(6507,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6508,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6509,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6510,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(17,'MAIN_SHOW_WORKBOARD',0,'1','yesno',0,'Affichage tableau de bord de travail Dolibarr','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5435,'MAIN_MODULE_SALARIES',1,'1',NULL,0,NULL,'2015-11-15 22:39:08'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5835,'ACCOUNTING_SELL_JOURNAL',1,'VTE','chaine',0,NULL,'2017-01-29 15:11:56'),(5836,'ACCOUNTING_PURCHASE_JOURNAL',1,'ACH','chaine',0,NULL,'2017-01-29 15:11:56'),(5837,'ACCOUNTING_SOCIAL_JOURNAL',1,'SOC','chaine',0,NULL,'2017-01-29 15:11:56'),(5838,'ACCOUNTING_MISCELLANEOUS_JOURNAL',1,'OD','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5847,'ACCOUNTING_EXPENSEREPORT_JOURNAL',1,'ER','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6004,'MAIN_MODULE_MULTICOMPANY_CSS',1,'[\"\\/multicompany\\/css\\/multicompany.css.php\"]','chaine',0,NULL,'2017-02-15 17:17:11'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6154,'MAIN_LOGIN_BACKGROUND',1,'background_dolibarr.jpg','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6376,'MAIN_VERSION_LAST_UPGRADE',0,'6.0.1','chaine',0,'Dolibarr version for last upgrade','2017-09-04 12:19:03'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6497,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6498,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6499,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6500,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6501,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6502,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6503,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6504,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6505,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6506,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2017-09-06 16:18:46'),(6507,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6508,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6509,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6510,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2017-09-06 16:18:46'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_7.0.0.sql b/dev/initdemo/mysqldump_dolibarr_7.0.0.sql index 4e6ee001a76..363cc32670d 100644 --- a/dev/initdemo/mysqldump_dolibarr_7.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_7.0.0.sql @@ -3452,7 +3452,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6568,'MAIN_MODULE_VARIANTS',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:04'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6570,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6571,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6572,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6573,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6574,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6575,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6576,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6577,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6578,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6579,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2018-03-16 09:54:05'),(6580,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6581,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6582,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6583,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6584,'MAIN_MODULE_SALARIES',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6585,'MAIN_VERSION_LAST_UPGRADE',0,'7.0.1','chaine',0,'Dolibarr version for last upgrade','2018-03-16 09:54:07'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','texte',0,'Mail resiliation','2010-07-08 11:17:58'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','texte',0,'Mail de validation','2010-07-08 11:17:59'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','texte',0,'Mail de validation de cotisation','2010-07-08 11:17:59'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','texte',0,'Text to print on member address sheets','2015-11-15 22:39:17'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','texte',0,'','2017-02-12 19:20:04'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','texte',0,'','2017-02-12 19:20:04'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','texte',0,'','2017-02-12 19:20:04'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6568,'MAIN_MODULE_VARIANTS',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:04'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6570,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6571,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6572,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6573,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6574,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6575,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6576,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6577,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6578,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6579,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2018-03-16 09:54:05'),(6580,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6581,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6582,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6583,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6584,'MAIN_MODULE_SALARIES',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6585,'MAIN_VERSION_LAST_UPGRADE',0,'7.0.1','chaine',0,'Dolibarr version for last upgrade','2018-03-16 09:54:07'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_8.0.0.sql b/dev/initdemo/mysqldump_dolibarr_8.0.0.sql index 72814343adf..b000b807930 100644 --- a/dev/initdemo/mysqldump_dolibarr_8.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_8.0.0.sql @@ -5503,7 +5503,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6568,'MAIN_MODULE_VARIANTS',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:04'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6570,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6571,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6572,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6573,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6574,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6575,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6576,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6577,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6578,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6579,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2018-03-16 09:54:05'),(6580,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6581,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6582,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6583,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6584,'MAIN_MODULE_SALARIES',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6588,'MAIN_VERSION_LAST_UPGRADE',0,'8.0.0','chaine',0,'Dolibarr version for last upgrade','2018-11-23 11:56:17'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2010-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2010-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2010-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2010-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2010-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2010-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2010-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2010-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2010-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2010-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2010-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2010-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2010-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2010-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2010-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2010-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2010-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2010-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2010-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2010-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2010-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2010-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2010-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2010-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2010-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2010-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2010-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2010-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2010-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2010-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2010-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2010-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2010-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2010-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2010-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2010-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2010-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2010-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2010-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2010-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2010-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2010-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2010-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2010-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2010-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2010-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2010-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2010-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2013-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2010-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2010-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2010-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2010-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2010-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2010-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2010-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2010-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2010-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2010-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2010-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2010-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2010-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2010-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2010-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2010-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2010-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2010-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2010-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2010-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2010-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2010-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2010-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2010-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2010-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2010-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2010-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2010-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2010-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2010-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2010-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2010-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2010-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2010-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2010-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2010-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2010-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2011-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2011-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2011-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2011-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2011-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2011-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2011-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2011-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2011-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2011-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2011-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2011-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2012-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2012-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2012-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2012-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2012-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2012-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2013-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2012-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2013-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2012-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2012-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2012-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2013-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2013-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2012-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2012-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2012-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2012-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2012-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2012-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2012-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2012-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2012-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2012-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2012-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2012-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2012-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2012-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2012-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2012-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2012-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2012-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2012-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2012-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2012-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2012-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2012-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2012-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2012-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2012-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2012-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2012-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2012-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2013-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2013-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2013-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2013-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2013-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2013-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2013-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2013-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2013-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2013-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2013-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2013-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2013-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2013-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2013-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2013-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2013-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2013-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2013-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2013-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2013-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2013-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2013-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2013-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2013-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2013-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2013-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2013-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2013-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2013-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2013-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2013-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2013-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2013-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2013-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2013-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2013-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2013-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2013-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2013-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2013-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2013-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2013-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2013-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2013-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2013-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2013-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2013-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2013-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2013-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2013-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2013-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2013-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2013-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2013-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2013-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2013-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2013-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2013-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2013-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2013-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2013-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2013-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2013-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2013-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2013-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2013-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2013-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2013-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2013-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2013-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2013-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2013-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2013-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2013-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2013-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2013-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2013-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2013-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2013-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2013-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2013-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2013-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2013-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2013-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2013-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2013-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2013-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2013-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2013-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2013-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2013-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2014-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2014-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2014-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2014-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2014-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2015-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2015-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2015-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2015-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2015-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2015-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2015-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2015-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2015-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2015-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2015-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2015-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2015-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2015-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2015-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2015-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2015-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2015-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2015-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2015-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2015-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2015-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2015-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2015-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2015-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2016-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2016-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2016-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2016-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2016-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2016-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2016-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2016-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2016-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2016-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2016-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2016-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2016-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2016-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2016-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2016-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2016-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2016-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2016-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2016-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2016-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2016-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2016-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2016-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2016-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2016-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2016-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2016-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2016-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2016-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2016-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5856,'MAIN_MODULE_PRINTING',1,'1',NULL,0,NULL,'2017-01-29 15:12:44'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6047,'MAIN_MODULE_SYSLOG',0,'1',NULL,0,NULL,'2017-02-15 22:36:58'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6101,'MAIN_MODULE_ACCOUNTING',1,'1',NULL,0,NULL,'2017-05-12 09:14:30'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6568,'MAIN_MODULE_VARIANTS',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:04'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6570,'MAIN_MODULE_AGENDA',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6571,'MAIN_MODULE_BARCODE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6572,'MAIN_MODULE_CRON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6573,'MAIN_MODULE_COMMANDE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6574,'MAIN_MODULE_DON',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6575,'MAIN_MODULE_ECM',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6576,'MAIN_MODULE_FACTURE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6577,'MAIN_MODULE_FOURNISSEUR',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6578,'MAIN_MODULE_HOLIDAY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6579,'MAIN_MODULE_HOLIDAY_TABS_0',1,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__','chaine',0,NULL,'2018-03-16 09:54:05'),(6580,'MAIN_MODULE_OPENSURVEY',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6581,'MAIN_MODULE_SOCIETE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6582,'MAIN_MODULE_SERVICE',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6583,'MAIN_MODULE_USER',0,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6584,'MAIN_MODULE_SALARIES',1,'1',NULL,0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-03-16 09:54:05'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6588,'MAIN_VERSION_LAST_UPGRADE',0,'8.0.0','chaine',0,'Dolibarr version for last upgrade','2018-11-23 11:56:17'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/initdemo/mysqldump_dolibarr_9.0.0.sql b/dev/initdemo/mysqldump_dolibarr_9.0.0.sql index 3b7e13b70f8..c3d5fcd9e73 100644 --- a/dev/initdemo/mysqldump_dolibarr_9.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_9.0.0.sql @@ -5418,7 +5418,7 @@ CREATE TABLE `llx_const` ( LOCK TABLES `llx_const` WRITE; /*!40000 ALTER TABLE `llx_const` DISABLE KEYS */; -INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2012-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2012-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2012-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2012-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2012-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2012-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2012-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2012-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2012-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2012-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2012-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2012-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2012-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2012-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2012-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2012-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2012-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2012-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2012-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2012-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2012-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2012-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2012-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2012-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2012-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2012-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2012-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2012-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2012-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2012-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2012-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2012-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2012-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2012-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2012-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2012-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2012-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2012-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2012-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2012-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2012-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2012-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2012-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2012-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2012-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2012-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2015-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2012-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2012-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2012-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2012-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2012-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2012-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2012-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2012-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2012-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2012-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2012-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2012-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2012-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2012-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2012-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2012-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2012-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2012-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2012-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2012-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2012-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2012-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2012-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2012-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2012-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2012-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2012-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2012-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2012-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2012-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2012-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2012-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2012-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2012-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2013-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2013-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2013-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2013-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2013-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2013-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2013-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2013-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2013-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2013-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2014-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2014-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2014-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2014-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2014-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2015-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2014-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2015-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2014-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2014-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2014-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2014-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2014-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2014-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2014-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2014-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2014-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2014-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2014-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2014-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2014-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2014-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2014-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2014-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2014-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2015-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2015-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2015-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2015-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2015-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2015-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2015-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2015-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2015-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2015-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2015-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2015-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2015-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2015-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2015-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2015-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2015-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2015-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2015-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2015-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2015-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2015-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2015-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2015-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2015-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2015-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2015-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2015-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2015-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2015-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2015-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2015-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2015-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2015-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2015-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2015-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2015-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2015-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2015-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2015-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2015-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2015-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2015-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2015-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2015-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2015-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2015-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2015-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2015-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2015-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2015-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2015-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2015-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2015-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2015-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2015-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2015-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2015-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2015-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2015-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2015-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2015-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2015-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2015-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2015-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2015-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2015-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2015-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2015-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2015-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2015-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2015-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2015-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2015-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2015-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2015-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2015-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2015-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2015-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2015-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2015-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2015-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2015-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2015-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2016-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2016-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2016-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2016-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2016-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2017-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2017-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2017-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2017-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2017-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2017-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2017-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2017-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2017-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2017-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2017-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2017-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2017-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2017-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2017-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2017-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2017-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2017-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2017-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->socid) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2018-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2018-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2018-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2018-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2018-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2018-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2018-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2018-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2018-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2018-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2018-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2018-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2018-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2018-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2018-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2018-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2018-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2018-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2018-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2018-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2018-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2018-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2018-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2018-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2018-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2018-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2018-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2018-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2018-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2018-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6590,'MAIN_MODULE_ACCOUNTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6591,'MAIN_MODULE_AGENDA',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6592,'MAIN_MODULE_BARCODE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6593,'MAIN_MODULE_CRON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:16'),(6594,'MAIN_MODULE_COMMANDE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:16'),(6595,'MAIN_MODULE_DON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6596,'MAIN_MODULE_ECM',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6597,'MAIN_MODULE_FACTURE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6598,'MAIN_MODULE_FOURNISSEUR',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:18'),(6599,'MAIN_MODULE_HOLIDAY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6600,'MAIN_MODULE_OPENSURVEY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6601,'MAIN_MODULE_PRINTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6602,'MAIN_MODULE_SALARIES',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6603,'MAIN_MODULE_SYSLOG',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6604,'MAIN_MODULE_SOCIETE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6605,'MAIN_MODULE_SERVICE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:20'),(6606,'MAIN_MODULE_USER',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:20'),(6607,'MAIN_MODULE_VARIANTS',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:21'),(6608,'MAIN_VERSION_LAST_UPGRADE',0,'9.0.0-beta','chaine',0,'Dolibarr version for last upgrade','2018-11-23 11:58:23'); +INSERT INTO `llx_const` VALUES (8,'MAIN_UPLOAD_DOC',0,'2048','chaine',0,'Max size for file upload (0 means no upload allowed)','2012-07-08 11:17:57'),(9,'MAIN_SEARCHFORM_SOCIETE',0,'1','yesno',0,'Show form for quick company search','2012-07-08 11:17:57'),(10,'MAIN_SEARCHFORM_CONTACT',0,'1','yesno',0,'Show form for quick contact search','2012-07-08 11:17:57'),(11,'MAIN_SEARCHFORM_PRODUITSERVICE',0,'1','yesno',0,'Show form for quick product search','2012-07-08 11:17:58'),(12,'MAIN_SEARCHFORM_ADHERENT',0,'1','yesno',0,'Show form for quick member search','2012-07-08 11:17:58'),(16,'MAIN_SIZE_LISTE_LIMIT',0,'25','chaine',0,'Longueur maximum des listes','2012-07-08 11:17:58'),(29,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',1,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2012-07-08 11:17:58'),(33,'SOCIETE_NOLIST_COURRIER',0,'1','yesno',0,'Liste les fichiers du repertoire courrier','2012-07-08 11:17:58'),(36,'ADHERENT_MAIL_REQUIRED',1,'1','yesno',0,'EMail required to create a new member','2012-07-08 11:17:58'),(37,'ADHERENT_MAIL_FROM',1,'adherents@domain.com','chaine',0,'Sender EMail for automatic emails','2012-07-08 11:17:58'),(38,'ADHERENT_MAIL_RESIL',1,'Your subscription has been resiliated.\r\nWe hope to see you soon again','html',0,'Mail resiliation','2018-11-23 11:56:07'),(39,'ADHERENT_MAIL_VALID',1,'Your subscription has been validated.\r\nThis is a remind of your personal information :\r\n\r\n%INFOS%\r\n\r\n','html',0,'Mail de validation','2018-11-23 11:56:07'),(40,'ADHERENT_MAIL_COTIS',1,'Hello %PRENOM%,\r\nThanks for your subscription.\r\nThis email confirms that your subscription has been received and processed.\r\n\r\n','html',0,'Mail de validation de cotisation','2018-11-23 11:56:07'),(41,'ADHERENT_MAIL_VALID_SUBJECT',1,'Your subscription has been validated','chaine',0,'Sujet du mail de validation','2012-07-08 11:17:59'),(42,'ADHERENT_MAIL_RESIL_SUBJECT',1,'Resiliating your subscription','chaine',0,'Sujet du mail de resiliation','2012-07-08 11:17:59'),(43,'ADHERENT_MAIL_COTIS_SUBJECT',1,'Receipt of your subscription','chaine',0,'Sujet du mail de validation de cotisation','2012-07-08 11:17:59'),(44,'MAILING_EMAIL_FROM',1,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2012-07-08 11:17:59'),(45,'ADHERENT_USE_MAILMAN',1,'0','yesno',0,'Utilisation de Mailman','2012-07-08 11:17:59'),(46,'ADHERENT_MAILMAN_UNSUB_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&user=%EMAIL%','chaine',0,'Url de desinscription aux listes mailman','2012-07-08 11:17:59'),(47,'ADHERENT_MAILMAN_URL',1,'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members?adminpw=%MAILMAN_ADMINPW%&send_welcome_msg_to_this_batch=1&subscribees=%EMAIL%','chaine',0,'Url pour les inscriptions mailman','2012-07-08 11:17:59'),(48,'ADHERENT_MAILMAN_LISTS',1,'test-test,test-test2','chaine',0,'Listes auxquelles inscrire les nouveaux adherents','2012-07-08 11:17:59'),(49,'ADHERENT_MAILMAN_ADMINPW',1,'','chaine',0,'Mot de passe Admin des liste mailman','2012-07-08 11:17:59'),(50,'ADHERENT_MAILMAN_SERVER',1,'lists.domain.com','chaine',0,'Serveur hebergeant les interfaces d Admin des listes mailman','2012-07-08 11:17:59'),(51,'ADHERENT_MAILMAN_LISTS_COTISANT',1,'','chaine',0,'Liste(s) auxquelles les nouveaux cotisants sont inscris automatiquement','2012-07-08 11:17:59'),(52,'ADHERENT_USE_SPIP',1,'0','yesno',0,'Utilisation de SPIP ?','2012-07-08 11:17:59'),(53,'ADHERENT_USE_SPIP_AUTO',1,'0','yesno',0,'Utilisation de SPIP automatiquement','2012-07-08 11:17:59'),(54,'ADHERENT_SPIP_USER',1,'user','chaine',0,'user spip','2012-07-08 11:17:59'),(55,'ADHERENT_SPIP_PASS',1,'pass','chaine',0,'Pass de connection','2012-07-08 11:17:59'),(56,'ADHERENT_SPIP_SERVEUR',1,'localhost','chaine',0,'serveur spip','2012-07-08 11:17:59'),(57,'ADHERENT_SPIP_DB',1,'spip','chaine',0,'db spip','2012-07-08 11:17:59'),(58,'ADHERENT_CARD_HEADER_TEXT',1,'%ANNEE%','chaine',0,'Texte imprime sur le haut de la carte adherent','2012-07-08 11:17:59'),(59,'ADHERENT_CARD_FOOTER_TEXT',1,'Association AZERTY','chaine',0,'Texte imprime sur le bas de la carte adherent','2012-07-08 11:17:59'),(61,'FCKEDITOR_ENABLE_USER',1,'1','yesno',0,'Activation fckeditor sur notes utilisateurs','2012-07-08 11:17:59'),(62,'FCKEDITOR_ENABLE_SOCIETE',1,'1','yesno',0,'Activation fckeditor sur notes societe','2012-07-08 11:17:59'),(63,'FCKEDITOR_ENABLE_PRODUCTDESC',1,'1','yesno',0,'Activation fckeditor sur notes produits','2012-07-08 11:17:59'),(64,'FCKEDITOR_ENABLE_MEMBER',1,'1','yesno',0,'Activation fckeditor sur notes adherent','2012-07-08 11:17:59'),(65,'FCKEDITOR_ENABLE_MAILING',1,'1','yesno',0,'Activation fckeditor sur emailing','2012-07-08 11:17:59'),(67,'DON_ADDON_MODEL',1,'html_cerfafr','chaine',0,'','2012-07-08 11:18:00'),(68,'PROPALE_ADDON',1,'mod_propale_marbre','chaine',0,'','2012-07-08 11:18:00'),(69,'PROPALE_ADDON_PDF',1,'azur','chaine',0,'','2012-07-08 11:18:00'),(70,'COMMANDE_ADDON',1,'mod_commande_marbre','chaine',0,'','2012-07-08 11:18:00'),(71,'COMMANDE_ADDON_PDF',1,'einstein','chaine',0,'','2012-07-08 11:18:00'),(72,'COMMANDE_SUPPLIER_ADDON',1,'mod_commande_fournisseur_muguet','chaine',0,'','2012-07-08 11:18:00'),(73,'COMMANDE_SUPPLIER_ADDON_PDF',1,'muscadet','chaine',0,'','2012-07-08 11:18:00'),(74,'EXPEDITION_ADDON',1,'enlevement','chaine',0,'','2012-07-08 11:18:00'),(76,'FICHEINTER_ADDON',1,'pacific','chaine',0,'','2012-07-08 11:18:00'),(77,'FICHEINTER_ADDON_PDF',1,'soleil','chaine',0,'','2012-07-08 11:18:00'),(79,'FACTURE_ADDON_PDF',1,'crabe','chaine',0,'','2012-07-08 11:18:00'),(80,'PROPALE_VALIDITY_DURATION',1,'15','chaine',0,'Durée de validitée des propales','2012-07-08 11:18:00'),(230,'COMPANY_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2012-07-08 11:26:20'),(238,'LIVRAISON_ADDON_PDF',1,'typhon','chaine',0,'Nom du gestionnaire de generation des commandes en PDF','2012-07-08 11:26:27'),(239,'LIVRAISON_ADDON_NUMBER',1,'mod_livraison_jade','chaine',0,'Nom du gestionnaire de numerotation des bons de livraison','2015-03-20 13:17:36'),(245,'FACTURE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2012-07-08 11:28:53'),(249,'DON_FORM',1,'html_cerfafr','chaine',0,'Nom du gestionnaire de formulaire de dons','2017-09-06 16:12:22'),(254,'ADHERENT_BANK_ACCOUNT',1,'','chaine',0,'ID du Compte banquaire utilise','2012-07-08 11:29:05'),(255,'ADHERENT_BANK_CATEGORIE',1,'','chaine',0,'ID de la categorie banquaire des cotisations','2012-07-08 11:29:05'),(256,'ADHERENT_ETIQUETTE_TYPE',1,'L7163','chaine',0,'Type d etiquette (pour impression de planche d etiquette)','2012-07-08 11:29:05'),(269,'PROJECT_ADDON_PDF',1,'baleine','chaine',0,'Nom du gestionnaire de generation des projets en PDF','2012-07-08 11:29:33'),(270,'PROJECT_ADDON',1,'mod_project_simple','chaine',0,'Nom du gestionnaire de numerotation des projets','2012-07-08 11:29:33'),(368,'STOCK_USERSTOCK_AUTOCREATE',1,'1','chaine',0,'','2012-07-08 22:44:59'),(369,'EXPEDITION_ADDON_PDF',1,'merou','chaine',0,'','2012-07-08 22:58:07'),(377,'FACTURE_ADDON',1,'mod_facture_terre','chaine',0,'','2012-07-08 23:08:12'),(380,'ADHERENT_CARD_TEXT',1,'%TYPE% n° %ID%\r\n%PRENOM% %NOM%\r\n<%EMAIL%>\r\n%ADRESSE%\r\n%CP% %VILLE%\r\n%PAYS%','',0,'Texte imprime sur la carte adherent','2012-07-08 23:14:46'),(381,'ADHERENT_CARD_TEXT_RIGHT',1,'aaa','',0,'','2012-07-08 23:14:55'),(385,'PRODUIT_USE_SEARCH_TO_SELECT',1,'1','chaine',0,'','2012-07-08 23:22:19'),(386,'STOCK_CALCULATE_ON_SHIPMENT',1,'1','chaine',0,'','2012-07-08 23:23:21'),(387,'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER',1,'1','chaine',0,'','2012-07-08 23:23:26'),(392,'MAIN_AGENDA_XCAL_EXPORTKEY',1,'dolibarr','chaine',0,'','2012-07-08 23:27:50'),(393,'MAIN_AGENDA_EXPORT_PAST_DELAY',1,'100','chaine',0,'','2012-07-08 23:27:50'),(610,'CASHDESK_ID_THIRDPARTY',1,'7','chaine',0,'','2012-07-11 17:08:18'),(611,'CASHDESK_ID_BANKACCOUNT_CASH',1,'3','chaine',0,'','2012-07-11 17:08:18'),(612,'CASHDESK_ID_BANKACCOUNT_CHEQUE',1,'1','chaine',0,'','2012-07-11 17:08:18'),(613,'CASHDESK_ID_BANKACCOUNT_CB',1,'1','chaine',0,'','2012-07-11 17:08:18'),(614,'CASHDESK_ID_WAREHOUSE',1,'2','chaine',0,'','2012-07-11 17:08:18'),(660,'LDAP_USER_DN',1,'ou=users,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(661,'LDAP_GROUP_DN',1,'ou=groups,dc=my-domain,dc=com','chaine',0,NULL,'2012-07-18 10:25:27'),(662,'LDAP_FILTER_CONNECTION',1,'&(objectClass=user)(objectCategory=person)','chaine',0,NULL,'2012-07-18 10:25:27'),(663,'LDAP_FIELD_LOGIN',1,'uid','chaine',0,NULL,'2012-07-18 10:25:27'),(664,'LDAP_FIELD_FULLNAME',1,'cn','chaine',0,NULL,'2012-07-18 10:25:27'),(665,'LDAP_FIELD_NAME',1,'sn','chaine',0,NULL,'2012-07-18 10:25:27'),(666,'LDAP_FIELD_FIRSTNAME',1,'givenname','chaine',0,NULL,'2012-07-18 10:25:27'),(667,'LDAP_FIELD_MAIL',1,'mail','chaine',0,NULL,'2012-07-18 10:25:27'),(668,'LDAP_FIELD_PHONE',1,'telephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(669,'LDAP_FIELD_FAX',1,'facsimiletelephonenumber','chaine',0,NULL,'2012-07-18 10:25:27'),(670,'LDAP_FIELD_MOBILE',1,'mobile','chaine',0,NULL,'2012-07-18 10:25:27'),(671,'LDAP_SERVER_TYPE',1,'openldap','chaine',0,'','2012-07-18 10:25:46'),(672,'LDAP_SERVER_PROTOCOLVERSION',1,'3','chaine',0,'','2012-07-18 10:25:47'),(673,'LDAP_SERVER_HOST',1,'localhost','chaine',0,'','2012-07-18 10:25:47'),(674,'LDAP_SERVER_PORT',1,'389','chaine',0,'','2012-07-18 10:25:47'),(675,'LDAP_SERVER_USE_TLS',1,'0','chaine',0,'','2012-07-18 10:25:47'),(676,'LDAP_SYNCHRO_ACTIVE',1,'dolibarr2ldap','chaine',0,'','2012-07-18 10:25:47'),(677,'LDAP_CONTACT_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(678,'LDAP_MEMBER_ACTIVE',1,'1','chaine',0,'','2012-07-18 10:25:47'),(974,'MAIN_MODULE_WORKFLOW_TRIGGERS',1,'1','chaine',0,NULL,'2013-07-18 18:02:20'),(975,'WORKFLOW_PROPAL_AUTOCREATE_ORDER',1,'1','chaine',0,'','2013-07-18 18:02:24'),(980,'PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR',1,'1234567','chaine',0,'','2013-07-18 18:05:50'),(983,'FACTURE_RIB_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(984,'FACTURE_CHQ_NUMBER',1,'1','chaine',0,'','2013-07-18 18:35:14'),(1016,'GOOGLE_DUPLICATE_INTO_GCAL',1,'1','chaine',0,'','2013-07-18 21:40:20'),(1152,'SOCIETE_CODECLIENT_ADDON',1,'mod_codeclient_monkey','chaine',0,'','2013-07-29 20:50:02'),(1231,'MAIN_UPLOAD_DOC',1,'2048','chaine',0,'','2013-07-29 21:04:00'),(1234,'MAIN_UMASK',1,'0664','chaine',0,'','2013-07-29 21:04:11'),(1240,'MAIN_LOGEVENTS_USER_LOGIN',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1241,'MAIN_LOGEVENTS_USER_LOGIN_FAILED',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1242,'MAIN_LOGEVENTS_USER_LOGOUT',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1243,'MAIN_LOGEVENTS_USER_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1244,'MAIN_LOGEVENTS_USER_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1245,'MAIN_LOGEVENTS_USER_NEW_PASSWORD',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1246,'MAIN_LOGEVENTS_USER_ENABLEDISABLE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1247,'MAIN_LOGEVENTS_USER_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1248,'MAIN_LOGEVENTS_GROUP_CREATE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1249,'MAIN_LOGEVENTS_GROUP_MODIFY',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1250,'MAIN_LOGEVENTS_GROUP_DELETE',1,'1','chaine',0,'','2013-07-29 21:05:01'),(1251,'MAIN_BOXES_MAXLINES',1,'5','',0,'','2013-07-29 21:05:42'),(1482,'EXPEDITION_ADDON_NUMBER',1,'mod_expedition_safor','chaine',0,'Nom du gestionnaire de numerotation des expeditions','2013-08-05 17:53:11'),(1490,'CONTRACT_ADDON',1,'mod_contract_serpis','chaine',0,'Nom du gestionnaire de numerotation des contrats','2013-08-05 18:11:58'),(1677,'COMMANDE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/orders','chaine',0,NULL,'2014-12-08 13:11:02'),(1698,'PRODUCT_CODEPRODUCT_ADDON',1,'mod_codeproduct_leopard','yesno',0,'Module to control product codes','2014-12-08 13:11:25'),(1724,'PROPALE_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2014-12-08 13:17:14'),(1730,'OPENSTREETMAP_ENABLE_MAPS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1731,'OPENSTREETMAP_ENABLE_MAPS_CONTACTS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1732,'OPENSTREETMAP_ENABLE_MAPS_MEMBERS',1,'1','chaine',0,'','2014-12-08 13:22:47'),(1733,'OPENSTREETMAP_MAPS_ZOOM_LEVEL',1,'15','chaine',0,'','2014-12-08 13:22:47'),(1742,'MAIN_MAIL_EMAIL_FROM',2,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:14'),(1743,'MAIN_MENU_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1744,'MAIN_MENUFRONT_STANDARD',2,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1745,'MAIN_MENU_SMARTPHONE',2,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:14'),(1746,'MAIN_MENUFRONT_SMARTPHONE',2,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:14'),(1747,'MAIN_THEME',2,'eldy','chaine',0,'Default theme','2014-12-08 14:08:14'),(1748,'MAIN_DELAY_ACTIONS_TODO',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:14'),(1749,'MAIN_DELAY_ORDERS_TO_PROCESS',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:14'),(1750,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:14'),(1751,'MAIN_DELAY_PROPALS_TO_CLOSE',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:14'),(1752,'MAIN_DELAY_PROPALS_TO_BILL',2,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:14'),(1753,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:14'),(1754,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',2,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:14'),(1755,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:14'),(1756,'MAIN_DELAY_RUNNING_SERVICES',2,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:14'),(1757,'MAIN_DELAY_MEMBERS',2,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:14'),(1758,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',2,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:14'),(1759,'MAILING_EMAIL_FROM',2,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:14'),(1760,'MAIN_INFO_SOCIETE_COUNTRY',3,'1:FR:France','chaine',0,'','2015-02-26 21:56:28'),(1761,'MAIN_INFO_SOCIETE_NOM',3,'bbb','chaine',0,'','2014-12-08 14:08:20'),(1762,'MAIN_INFO_SOCIETE_STATE',3,'0','chaine',0,'','2015-02-27 14:20:27'),(1763,'MAIN_MONNAIE',3,'EUR','chaine',0,'','2014-12-08 14:08:20'),(1764,'MAIN_LANG_DEFAULT',3,'auto','chaine',0,'','2014-12-08 14:08:20'),(1765,'MAIN_MAIL_EMAIL_FROM',3,'dolibarr-robot@domain.com','chaine',0,'EMail emetteur pour les emails automatiques Dolibarr','2014-12-08 14:08:20'),(1766,'MAIN_MENU_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs internes','2015-02-11 19:43:54'),(1767,'MAIN_MENUFRONT_STANDARD',3,'eldy_menu.php','chaine',0,'Module de gestion de la barre de menu du haut pour utilisateurs externes','2015-02-11 19:43:54'),(1768,'MAIN_MENU_SMARTPHONE',3,'iphone_backoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs internes','2014-12-08 14:08:20'),(1769,'MAIN_MENUFRONT_SMARTPHONE',3,'iphone_frontoffice.php','chaine',0,'Module de gestion de la barre de menu smartphone pour utilisateurs externes','2014-12-08 14:08:20'),(1770,'MAIN_THEME',3,'eldy','chaine',0,'Default theme','2014-12-08 14:08:20'),(1771,'MAIN_DELAY_ACTIONS_TODO',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur actions planifiées non réalisées','2014-12-08 14:08:20'),(1772,'MAIN_DELAY_ORDERS_TO_PROCESS',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes clients non traitées','2014-12-08 14:08:20'),(1773,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur commandes fournisseurs non traitées','2014-12-08 14:08:20'),(1774,'MAIN_DELAY_PROPALS_TO_CLOSE',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales à cloturer','2014-12-08 14:08:20'),(1775,'MAIN_DELAY_PROPALS_TO_BILL',3,'7','chaine',0,'Tolérance de retard avant alerte (en jours) sur propales non facturées','2014-12-08 14:08:20'),(1776,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures client impayées','2014-12-08 14:08:20'),(1777,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',3,'2','chaine',0,'Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées','2014-12-08 14:08:20'),(1778,'MAIN_DELAY_NOT_ACTIVATED_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services à activer','2014-12-08 14:08:20'),(1779,'MAIN_DELAY_RUNNING_SERVICES',3,'0','chaine',0,'Tolérance de retard avant alerte (en jours) sur services expirés','2014-12-08 14:08:20'),(1780,'MAIN_DELAY_MEMBERS',3,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur cotisations adhérent en retard','2014-12-08 14:08:20'),(1781,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',3,'62','chaine',0,'Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire','2014-12-08 14:08:20'),(1782,'MAILING_EMAIL_FROM',3,'dolibarr@domain.com','chaine',0,'EMail emmetteur pour les envois d emailings','2014-12-08 14:08:20'),(1803,'SYSLOG_FILE',1,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2014-12-08 14:15:08'),(1804,'SYSLOG_HANDLERS',1,'[\"mod_syslog_file\"]','chaine',0,'','2014-12-08 14:15:08'),(1805,'MAIN_MODULE_SKINCOLOREDITOR',3,'1',NULL,0,NULL,'2014-12-08 14:35:40'),(1806,'MAIN_MODULE_SKINCOLOREDITOR_TABS_0',3,'user:+tabskincoloreditors:ColorEditor:skincoloreditor@skincoloreditor:/skincoloreditor/usercolors.php?id=__ID__','chaine',0,NULL,'2014-12-08 14:35:40'),(1922,'PAYPAL_API_SANDBOX',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1923,'PAYPAL_API_USER',1,'seller_1355312017_biz_api1.nltechno.com','chaine',0,'','2014-12-12 12:11:05'),(1924,'PAYPAL_API_PASSWORD',1,'1355312040','chaine',0,'','2014-12-12 12:11:05'),(1925,'PAYPAL_API_SIGNATURE',1,'AXqqdsWBzvfn0q5iNmbuiDv1y.3EAXIMWyl4C5KvDReR9HDwwAd6dQ4Q','chaine',0,'','2014-12-12 12:11:05'),(1926,'PAYPAL_API_INTEGRAL_OR_PAYPALONLY',1,'integral','chaine',0,'','2014-12-12 12:11:05'),(1927,'PAYPAL_SECURITY_TOKEN',1,'50c82fab36bb3b6aa83e2a50691803b2','chaine',0,'','2014-12-12 12:11:05'),(1928,'PAYPAL_SECURITY_TOKEN_UNIQUE',1,'0','chaine',0,'','2014-12-12 12:11:05'),(1929,'PAYPAL_ADD_PAYMENT_URL',1,'1','chaine',0,'','2014-12-12 12:11:05'),(1980,'MAIN_PDF_FORMAT',1,'EUA4','chaine',0,'','2014-12-12 19:58:05'),(1981,'MAIN_PROFID1_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1982,'MAIN_PROFID2_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1983,'MAIN_PROFID3_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1984,'MAIN_PROFID4_IN_ADDRESS',1,'0','chaine',0,'','2014-12-12 19:58:05'),(1985,'MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',1,'0','chaine',0,'','2014-12-12 19:58:05'),(2251,'FCKEDITOR_TEST',1,'Test
    \r\n\"\"fdfs','chaine',0,'','2014-12-19 19:12:24'),(2293,'SYSTEMTOOLS_MYSQLDUMP',1,'/usr/bin/mysqldump','chaine',0,'','2014-12-27 02:02:00'),(2835,'MAIN_USE_CONNECT_TIMEOUT',1,'10','chaine',0,'','2015-01-16 19:28:50'),(2836,'MAIN_USE_RESPONSE_TIMEOUT',1,'30','chaine',0,'','2015-01-16 19:28:50'),(2837,'MAIN_PROXY_USE',1,'0','chaine',0,'','2015-01-16 19:28:50'),(2838,'MAIN_PROXY_HOST',1,'localhost','chaine',0,'','2015-01-16 19:28:50'),(2839,'MAIN_PROXY_PORT',1,'8080','chaine',0,'','2015-01-16 19:28:50'),(2840,'MAIN_PROXY_USER',1,'aaa','chaine',0,'','2015-01-16 19:28:50'),(2841,'MAIN_PROXY_PASS',1,'bbb','chaine',0,'','2015-01-16 19:28:50'),(2848,'OVHSMS_NICK',1,'BN196-OVH','chaine',0,'','2015-01-16 19:32:36'),(2849,'OVHSMS_PASS',1,'bigone-10','chaine',0,'','2015-01-16 19:32:36'),(2850,'OVHSMS_SOAPURL',1,'https://www.ovh.com/soapi/soapi-re-1.55.wsdl','chaine',0,'','2015-01-16 19:32:36'),(2854,'THEME_ELDY_RGB',1,'bfbf00','chaine',0,'','2015-01-18 10:02:53'),(2855,'THEME_ELDY_ENABLE_PERSONALIZED',1,'0','chaine',0,'','2015-01-18 10:02:55'),(2858,'MAIN_SESSION_TIMEOUT',1,'2000','chaine',0,'','2015-01-19 17:01:53'),(2862,'TICKET_ADDON',1,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-01-19 17:16:10'),(2867,'FACSIM_ADDON',1,'mod_facsim_alcoy','chaine',0,'','2015-01-19 17:16:25'),(2868,'POS_SERVICES',1,'0','chaine',0,'','2015-01-19 17:16:51'),(2869,'POS_USE_TICKETS',1,'1','chaine',0,'','2015-01-19 17:16:51'),(2870,'POS_MAX_TTC',1,'100','chaine',0,'','2015-01-19 17:16:51'),(3190,'MAIN_MODULE_HOLIDAY',2,'1',NULL,0,NULL,'2015-02-01 08:52:34'),(3191,'MAIN_MODULE_HOLIDAY_TABS_0',2,'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->write:/holiday/index.php?mainmenu=holiday&id=__ID__','chaine',0,NULL,'2015-02-01 08:52:34'),(3195,'INVOICE_SUPPLIER_ADDON_PDF',1,'canelle','chaine',0,'','2015-02-10 19:50:27'),(3199,'MAIN_FORCE_RELOAD_PAGE',1,'1','chaine',0,NULL,'2015-02-12 16:22:55'),(3217,'MAIN_PDF_TITLE_BACKGROUND_COLOR',1,'240,240,240','chaine',1,'','2015-02-13 15:18:02'),(3223,'OVH_THIRDPARTY_IMPORT',1,'2','chaine',0,'','2015-02-13 16:20:18'),(3241,'COMPANY_USE_SEARCH_TO_SELECT',1,'2','chaine',0,'','2015-02-17 14:33:39'),(3409,'AGENDA_USE_EVENT_TYPE',1,'1','chaine',0,'','2015-02-27 18:12:24'),(3886,'MAIN_REMOVE_INSTALL_WARNING',1,'1','chaine',1,'','2015-03-02 18:32:50'),(4013,'MAIN_DELAY_ACTIONS_TODO',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4014,'MAIN_DELAY_PROPALS_TO_CLOSE',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4015,'MAIN_DELAY_PROPALS_TO_BILL',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4016,'MAIN_DELAY_ORDERS_TO_PROCESS',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4017,'MAIN_DELAY_CUSTOMER_BILLS_UNPAYED',1,'31','chaine',0,'','2015-03-06 08:59:12'),(4018,'MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS',1,'7','chaine',0,'','2015-03-06 08:59:12'),(4019,'MAIN_DELAY_SUPPLIER_BILLS_TO_PAY',1,'2','chaine',0,'','2015-03-06 08:59:12'),(4020,'MAIN_DELAY_RUNNING_SERVICES',1,'-15','chaine',0,'','2015-03-06 08:59:12'),(4021,'MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE',1,'62','chaine',0,'','2015-03-06 08:59:13'),(4022,'MAIN_DELAY_MEMBERS',1,'31','chaine',0,'','2015-03-06 08:59:13'),(4023,'MAIN_DISABLE_METEO',1,'0','chaine',0,'','2015-03-06 08:59:13'),(4044,'ADHERENT_VAT_FOR_SUBSCRIPTIONS',1,'0','',0,'','2015-03-06 16:06:38'),(4047,'ADHERENT_BANK_USE',1,'bankviainvoice','',0,'','2015-03-06 16:12:30'),(4049,'PHPSANE_SCANIMAGE',1,'/usr/bin/scanimage','chaine',0,'','2015-03-06 21:54:13'),(4050,'PHPSANE_PNMTOJPEG',1,'/usr/bin/pnmtojpeg','chaine',0,'','2015-03-06 21:54:13'),(4051,'PHPSANE_PNMTOTIFF',1,'/usr/bin/pnmtotiff','chaine',0,'','2015-03-06 21:54:13'),(4052,'PHPSANE_OCR',1,'/usr/bin/gocr','chaine',0,'','2015-03-06 21:54:13'),(4548,'ECM_AUTO_TREE_ENABLED',1,'1','chaine',0,'','2015-03-10 15:57:21'),(4579,'MAIN_MODULE_AGENDA',2,'1',NULL,0,NULL,'2015-03-13 15:29:19'),(4580,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4581,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4582,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4583,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4584,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4585,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4586,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4587,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4588,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4589,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4590,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4591,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4592,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4593,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4594,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',2,'1','chaine',0,NULL,'2015-03-13 15:29:19'),(4595,'MAIN_MODULE_GOOGLE',2,'1',NULL,0,NULL,'2015-03-13 15:29:47'),(4596,'MAIN_MODULE_GOOGLE_TABS_0',2,'agenda:+gcal:MenuAgendaGoogle:google@google:$conf->google->enabled && $conf->global->GOOGLE_ENABLE_AGENDA:/google/index.php','chaine',0,NULL,'2015-03-13 15:29:47'),(4597,'MAIN_MODULE_GOOGLE_TABS_1',2,'user:+gsetup:GoogleUserConf:google@google:$conf->google->enabled && $conf->global->GOOGLE_DUPLICATE_INTO_GCAL:/google/admin/google_calsync_user.php?id=__ID__','chaine',0,NULL,'2015-03-13 15:29:47'),(4598,'MAIN_MODULE_GOOGLE_TRIGGERS',2,'1','chaine',0,NULL,'2015-03-13 15:29:47'),(4599,'MAIN_MODULE_GOOGLE_HOOKS',2,'[\"toprightmenu\"]','chaine',0,NULL,'2015-03-13 15:29:47'),(4688,'GOOGLE_ENABLE_AGENDA',2,'1','chaine',0,'','2015-03-13 15:36:29'),(4689,'GOOGLE_AGENDA_NAME1',2,'eldy','chaine',0,'','2015-03-13 15:36:29'),(4690,'GOOGLE_AGENDA_SRC1',2,'eldy10@mail.com','chaine',0,'','2015-03-13 15:36:29'),(4691,'GOOGLE_AGENDA_COLOR1',2,'BE6D00','chaine',0,'','2015-03-13 15:36:29'),(4692,'GOOGLE_AGENDA_COLOR2',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4693,'GOOGLE_AGENDA_COLOR3',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4694,'GOOGLE_AGENDA_COLOR4',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4695,'GOOGLE_AGENDA_COLOR5',2,'7A367A','chaine',0,'','2015-03-13 15:36:29'),(4696,'GOOGLE_AGENDA_TIMEZONE',2,'Europe/Paris','chaine',0,'','2015-03-13 15:36:29'),(4697,'GOOGLE_AGENDA_NB',2,'5','chaine',0,'','2015-03-13 15:36:29'),(4725,'SOCIETE_CODECLIENT_ADDON',2,'mod_codeclient_leopard','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4726,'SOCIETE_CODECOMPTA_ADDON',2,'mod_codecompta_panicum','chaine',0,'Module to control third parties codes','2015-03-13 20:21:35'),(4727,'SOCIETE_FISCAL_MONTH_START',2,'','chaine',0,'Mettre le numero du mois du debut d\\\'annee fiscale, ex: 9 pour septembre','2015-03-13 20:21:35'),(4728,'MAIN_SEARCHFORM_SOCIETE',2,'1','yesno',0,'Show form for quick company search','2015-03-13 20:21:35'),(4729,'MAIN_SEARCHFORM_CONTACT',2,'1','yesno',0,'Show form for quick contact search','2015-03-13 20:21:35'),(4730,'COMPANY_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/thirdparties','chaine',0,NULL,'2015-03-13 20:21:35'),(4743,'MAIN_MODULE_CLICKTODIAL',2,'1',NULL,0,NULL,'2015-03-13 20:30:28'),(4744,'MAIN_MODULE_NOTIFICATION',2,'1',NULL,0,NULL,'2015-03-13 20:30:34'),(4745,'MAIN_MODULE_WEBSERVICES',2,'1',NULL,0,NULL,'2015-03-13 20:30:41'),(4746,'MAIN_MODULE_PROPALE',2,'1',NULL,0,NULL,'2015-03-13 20:32:38'),(4747,'PROPALE_ADDON_PDF',2,'azur','chaine',0,'Nom du gestionnaire de generation des propales en PDF','2015-03-13 20:32:38'),(4748,'PROPALE_ADDON',2,'mod_propale_marbre','chaine',0,'Nom du gestionnaire de numerotation des propales','2015-03-13 20:32:38'),(4749,'PROPALE_VALIDITY_DURATION',2,'15','chaine',0,'Duration of validity of business proposals','2015-03-13 20:32:38'),(4750,'PROPALE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/proposals','chaine',0,NULL,'2015-03-13 20:32:38'),(4752,'MAIN_MODULE_TAX',2,'1',NULL,0,NULL,'2015-03-13 20:32:47'),(4753,'MAIN_MODULE_DON',2,'1',NULL,0,NULL,'2015-03-13 20:32:54'),(4754,'DON_ADDON_MODEL',2,'html_cerfafr','chaine',0,'Nom du gestionnaire de generation de recu de dons','2015-03-13 20:32:54'),(4755,'POS_USE_TICKETS',2,'1','chaine',0,'','2015-03-13 20:33:09'),(4756,'POS_MAX_TTC',2,'100','chaine',0,'','2015-03-13 20:33:09'),(4757,'MAIN_MODULE_POS',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4758,'TICKET_ADDON',2,'mod_ticket_avenc','chaine',0,'Nom du gestionnaire de numerotation des tickets','2015-03-13 20:33:09'),(4759,'MAIN_MODULE_BANQUE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4760,'MAIN_MODULE_FACTURE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4761,'FACTURE_ADDON_PDF',2,'crabe','chaine',0,'Name of PDF model of invoice','2015-03-13 20:33:09'),(4762,'FACTURE_ADDON',2,'mod_facture_terre','chaine',0,'Name of numbering numerotation rules of invoice','2015-03-13 20:33:09'),(4763,'FACTURE_ADDON_PDF_ODT_PATH',2,'DOL_DATA_ROOT/doctemplates/invoices','chaine',0,NULL,'2015-03-13 20:33:09'),(4764,'MAIN_MODULE_SOCIETE',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4765,'MAIN_MODULE_PRODUCT',2,'1',NULL,0,NULL,'2015-03-13 20:33:09'),(4766,'PRODUCT_CODEPRODUCT_ADDON',2,'mod_codeproduct_leopard','chaine',0,'Module to control product codes','2015-03-13 20:33:09'),(4767,'MAIN_SEARCHFORM_PRODUITSERVICE',2,'1','yesno',0,'Show form for quick product search','2015-03-13 20:33:09'),(4772,'FACSIM_ADDON',2,'mod_facsim_alcoy','chaine',0,'','2015-03-13 20:33:32'),(4773,'MAIN_MODULE_MAILING',2,'1',NULL,0,NULL,'2015-03-13 20:33:37'),(4774,'MAIN_MODULE_OPENSURVEY',2,'1',NULL,0,NULL,'2015-03-13 20:33:42'),(4782,'AGENDA_USE_EVENT_TYPE',2,'1','chaine',0,'','2015-03-13 20:53:36'),(4884,'AGENDA_DISABLE_EXT',2,'1','chaine',0,'','2015-03-13 22:03:40'),(4928,'COMMANDE_SUPPLIER_ADDON_NUMBER',1,'mod_commande_fournisseur_muguet','chaine',0,'Nom du gestionnaire de numerotation des commandes fournisseur','2015-03-22 09:24:29'),(4929,'INVOICE_SUPPLIER_ADDON_NUMBER',1,'mod_facture_fournisseur_cactus','chaine',0,'Nom du gestionnaire de numerotation des factures fournisseur','2015-03-22 09:24:29'),(5001,'MAIN_CRON_KEY',0,'bc54582fe30d5d4a830c6f582ec28810','chaine',0,'','2015-03-23 17:54:53'),(5009,'CRON_KEY',0,'2c2e755c20be2014098f629865598006','chaine',0,'','2015-03-23 18:06:24'),(5139,'SOCIETE_ADD_REF_IN_LIST',1,'','yesno',0,'Display customer ref into select list','2015-09-08 23:06:08'),(5150,'PROJECT_TASK_ADDON_PDF',1,'','chaine',0,'Name of PDF/ODT tasks manager class','2015-09-08 23:06:14'),(5151,'PROJECT_TASK_ADDON',1,'mod_task_simple','chaine',0,'Name of Numbering Rule task manager class','2015-09-08 23:06:14'),(5152,'PROJECT_TASK_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/tasks','chaine',0,'','2015-09-08 23:06:14'),(5239,'BOOKMARKS_SHOW_IN_MENU',1,'10','chaine',0,'','2016-03-02 15:42:26'),(5271,'DONATION_ART200',1,'','yesno',0,'Option Française - Eligibilité Art200 du CGI','2016-12-21 12:51:28'),(5272,'DONATION_ART238',1,'','yesno',0,'Option Française - Eligibilité Art238 bis du CGI','2016-12-21 12:51:28'),(5273,'DONATION_ART885',1,'','yesno',0,'Option Française - Eligibilité Art885-0 V bis du CGI','2016-12-21 12:51:28'),(5274,'DONATION_MESSAGE',1,'Thank you','chaine',0,'Message affiché sur le récépissé de versements ou dons','2016-12-21 12:51:28'),(5288,'DONATION_ACCOUNTINGACCOUNT',1,'7581','chaine',0,'Compte comptable de remise des versements ou dons','2017-07-19 13:41:21'),(5349,'MAIN_SEARCHFORM_CONTACT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5351,'MAIN_SEARCHFORM_PRODUITSERVICE',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5352,'MAIN_SEARCHFORM_PRODUITSERVICE_SUPPLIER',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5353,'MAIN_SEARCHFORM_ADHERENT',1,'1','chaine',0,'','2017-10-03 10:11:33'),(5354,'MAIN_SEARCHFORM_PROJECT',1,'0','chaine',0,'','2017-10-03 10:11:33'),(5394,'FCKEDITOR_ENABLE_DETAILS',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5395,'FCKEDITOR_ENABLE_USERSIGN',1,'1','yesno',0,'WYSIWIG for user signature','2017-11-04 15:27:44'),(5396,'FCKEDITOR_ENABLE_MAIL',1,'1','yesno',0,'WYSIWIG for products details lines for all entities','2017-11-04 15:27:44'),(5398,'CATEGORIE_RECURSIV_ADD',1,'','yesno',0,'Affect parent categories','2017-11-04 15:27:46'),(5403,'MAIN_MODULE_FCKEDITOR',1,'1',NULL,0,NULL,'2017-11-04 15:41:40'),(5404,'MAIN_MODULE_CATEGORIE',1,'1',NULL,0,NULL,'2017-11-04 15:41:43'),(5415,'EXPEDITION_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/shipment','chaine',0,NULL,'2017-11-15 22:38:28'),(5416,'LIVRAISON_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/delivery','chaine',0,NULL,'2017-11-15 22:38:28'),(5419,'MAIN_MODULE_CASHDESK',1,'1',NULL,0,NULL,'2017-11-15 22:38:33'),(5426,'MAIN_MODULE_PROJET',1,'1',NULL,0,NULL,'2017-11-15 22:38:44'),(5427,'PROJECT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/projects','chaine',0,NULL,'2017-11-15 22:38:44'),(5428,'PROJECT_USE_OPPORTUNIES',1,'1','chaine',0,NULL,'2017-11-15 22:38:44'),(5430,'MAIN_MODULE_EXPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:56'),(5431,'MAIN_MODULE_IMPORT',1,'1',NULL,0,NULL,'2017-11-15 22:38:58'),(5432,'MAIN_MODULE_MAILING',1,'1',NULL,0,NULL,'2017-11-15 22:39:00'),(5434,'EXPENSEREPORT_ADDON_PDF',1,'standard','chaine',0,'Name of manager to build PDF expense reports documents','2017-11-15 22:39:05'),(5436,'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT',1,'421','chaine',0,NULL,'2017-11-15 22:39:08'),(5437,'SALARIES_ACCOUNTING_ACCOUNT_CHARGE',1,'641','chaine',0,NULL,'2017-11-15 22:39:08'),(5441,'ADHERENT_ETIQUETTE_TEXT',1,'%FULLNAME%\n%ADDRESS%\n%ZIP% %TOWN%\n%COUNTRY%','text',0,'Text to print on member address sheets','2018-11-23 11:56:07'),(5443,'MAIN_MODULE_PRELEVEMENT',1,'1',NULL,0,NULL,'2017-11-15 22:39:33'),(5453,'MAIN_MODULE_CONTRAT',1,'1',NULL,0,NULL,'2017-11-15 22:39:52'),(5455,'MAIN_MODULE_FICHEINTER',1,'1',NULL,0,NULL,'2017-11-15 22:39:56'),(5459,'MAIN_MODULE_PAYPAL',1,'1',NULL,0,NULL,'2017-11-15 22:41:02'),(5460,'MAIN_MODULE_MARGIN',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5461,'MAIN_MODULE_MARGIN_TABS_0',1,'product:+margin:Margins:margins:$user->rights->margins->liretous:/margin/tabs/productMargins.php?id=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5462,'MAIN_MODULE_MARGIN_TABS_1',1,'thirdparty:+margin:Margins:margins:empty($user->societe_id) && $user->rights->margins->liretous && ($object->client > 0):/margin/tabs/thirdpartyMargins.php?socid=__ID__','chaine',0,NULL,'2017-11-15 22:41:47'),(5463,'MAIN_MODULE_PROPALE',1,'1',NULL,0,NULL,'2017-11-15 22:41:47'),(5483,'GENBARCODE_BARCODETYPE_THIRDPARTY',1,'6','chaine',0,'','2018-01-16 15:49:43'),(5484,'PRODUIT_DEFAULT_BARCODE_TYPE',1,'2','chaine',0,'','2018-01-16 15:49:46'),(5539,'PRODUCT_USE_OLD_PATH_FOR_PHOTO',0,'0','chaine',1,'Use old path for products images','2018-01-22 13:34:23'),(5541,'MODULE_GOOGLE_DEBUG',1,'0','chaine',1,'','2018-01-22 13:34:57'),(5586,'MAIN_DELAY_EXPENSEREPORTS_TO_PAY',1,'31','chaine',0,'Tolérance de retard avant alerte (en jours) sur les notes de frais impayées','2018-01-22 17:28:18'),(5587,'MAIN_FIX_FOR_BUGGED_MTA',1,'1','chaine',1,'Set constant to fix email ending from PHP with some linux ike system','2018-01-22 17:28:18'),(5590,'MAIN_VERSION_LAST_INSTALL',0,'3.8.3','chaine',0,'Dolibarr version when install','2018-01-22 17:28:42'),(5604,'MAIN_INFO_SOCIETE_LOGO',1,'mybigcompany.png','chaine',0,'','2018-01-22 17:33:49'),(5605,'MAIN_INFO_SOCIETE_LOGO_SMALL',1,'mybigcompany_small.png','chaine',0,'','2018-01-22 17:33:49'),(5606,'MAIN_INFO_SOCIETE_LOGO_MINI',1,'mybigcompany_mini.png','chaine',0,'','2018-01-22 17:33:49'),(5612,'MAIN_ENABLE_LOG_TO_HTML',0,'0','chaine',1,'If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL','2018-03-13 10:54:45'),(5614,'MAIN_SIZE_SHORTLISTE_LIMIT',1,'4','chaine',0,'Longueur maximum des listes courtes (fiche client)','2018-03-13 10:54:46'),(5626,'MAIN_MODULE_SUPPLIERPROPOSAL',1,'1',NULL,0,NULL,'2018-07-30 11:13:20'),(5627,'SUPPLIER_PROPOSAL_ADDON_PDF',1,'aurore','chaine',0,'Name of submodule to generate PDF for supplier quotation request','2018-07-30 11:13:20'),(5628,'SUPPLIER_PROPOSAL_ADDON',1,'mod_supplier_proposal_marbre','chaine',0,'Name of submodule to number supplier quotation request','2018-07-30 11:13:20'),(5629,'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/supplier_proposal','chaine',0,NULL,'2018-07-30 11:13:20'),(5632,'MAIN_MODULE_RESOURCE',1,'1',NULL,0,NULL,'2018-07-30 11:13:32'),(5633,'MAIN_MODULE_API',1,'1',NULL,0,NULL,'2018-07-30 11:13:54'),(5634,'MAIN_MODULE_WEBSERVICES',1,'1',NULL,0,NULL,'2018-07-30 11:13:56'),(5635,'WEBSERVICES_KEY',1,'dolibarrkey','chaine',0,'','2018-07-30 11:14:04'),(5638,'MAIN_MODULE_EXTERNALRSS',1,'1',NULL,0,NULL,'2018-07-30 11:15:04'),(5639,'EXTERNAL_RSS_TITLE_1',1,'Dolibarr.org News','chaine',0,'','2018-07-30 11:15:25'),(5640,'EXTERNAL_RSS_URLRSS_1',1,'https://www.dolibarr.org/rss','chaine',0,'','2018-07-30 11:15:25'),(5642,'SOCIETE_CODECOMPTA_ADDON',1,'mod_codecompta_aquarium','chaine',0,'','2018-07-30 11:16:42'),(5707,'CASHDESK_NO_DECREASE_STOCK',1,'1','chaine',0,'','2018-07-30 13:38:11'),(5708,'MAIN_MODULE_PRODUCTBATCH',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5710,'MAIN_MODULE_STOCK',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5711,'MAIN_MODULE_PRODUCT',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5712,'MAIN_MODULE_EXPEDITION',1,'1',NULL,0,NULL,'2018-07-30 13:38:11'),(5808,'MARGIN_TYPE',1,'costprice','chaine',0,'','2018-07-30 16:32:18'),(5809,'DISPLAY_MARGIN_RATES',1,'1','chaine',0,'','2018-07-30 16:32:20'),(5810,'MAIN_FEATURES_LEVEL',0,'0','chaine',1,'Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development','2018-07-30 18:36:15'),(5813,'USER_PASSWORD_PATTERN',1,'8;1;1;1;3;1','chaine',0,'','2018-07-31 16:04:58'),(5814,'MAIN_MODULE_EXPENSEREPORT',1,'1',NULL,0,NULL,'2018-07-31 21:14:32'),(5830,'LOAN_ACCOUNTING_ACCOUNT_CAPITAL',1,'164','chaine',0,NULL,'2017-01-29 15:11:51'),(5831,'LOAN_ACCOUNTING_ACCOUNT_INSURANCE',1,'6162','chaine',0,NULL,'2017-01-29 15:11:51'),(5833,'ACCOUNTING_EXPORT_SEPARATORCSV',1,',','string',0,NULL,'2017-01-29 15:11:56'),(5834,'ACCOUNTING_ACCOUNT_SUSPENSE',1,'471','chaine',0,NULL,'2017-01-29 15:11:56'),(5839,'ACCOUNTING_ACCOUNT_TRANSFER_CASH',1,'58','chaine',0,NULL,'2017-01-29 15:11:56'),(5840,'CHARTOFACCOUNTS',1,'2','chaine',0,NULL,'2017-01-29 15:11:56'),(5841,'ACCOUNTING_EXPORT_MODELCSV',1,'1','chaine',0,NULL,'2017-01-29 15:11:56'),(5842,'ACCOUNTING_LENGTH_GACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5843,'ACCOUNTING_LENGTH_AACCOUNT',1,'','chaine',0,NULL,'2017-01-29 15:11:56'),(5844,'ACCOUNTING_LIST_SORT_VENTILATION_TODO',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5845,'ACCOUNTING_LIST_SORT_VENTILATION_DONE',1,'1','yesno',0,NULL,'2017-01-29 15:11:56'),(5846,'ACCOUNTING_EXPORT_DATE',1,'%d%m%Y','chaine',0,NULL,'2017-01-29 15:11:56'),(5848,'ACCOUNTING_EXPORT_FORMAT',1,'csv','chaine',0,NULL,'2017-01-29 15:11:56'),(5853,'MAIN_MODULE_WORKFLOW',1,'1',NULL,0,NULL,'2017-01-29 15:12:12'),(5854,'MAIN_MODULE_NOTIFICATION',1,'1',NULL,0,NULL,'2017-01-29 15:12:35'),(5855,'MAIN_MODULE_OAUTH',1,'1',NULL,0,NULL,'2017-01-29 15:12:41'),(5883,'MAILING_LIMIT_SENDBYWEB',0,'15','chaine',1,'Number of targets to defined packet size when sending mass email','2017-01-29 17:36:33'),(5884,'MAIN_MAIL_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5885,'MAIN_SOAP_DEBUG',1,'0','chaine',1,'','2017-01-29 18:53:02'),(5887,'PROJECT_USE_OPPORTUNITIES',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5888,'PROJECT_HIDE_TASKS',1,'1','chaine',0,'','2017-02-01 12:23:56'),(5889,'MAIN_AGENDA_ACTIONAUTO_COMPANY_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5890,'MAIN_AGENDA_ACTIONAUTO_COMPANY_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5891,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_REFUSED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5892,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLOSE_SIGNED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5893,'MAIN_AGENDA_ACTIONAUTO_PROPAL_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5894,'MAIN_AGENDA_ACTIONAUTO_PROPAL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5895,'MAIN_AGENDA_ACTIONAUTO_PROPAL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5896,'MAIN_AGENDA_ACTIONAUTO_ORDER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5897,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLOSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5898,'MAIN_AGENDA_ACTIONAUTO_ORDER_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5899,'MAIN_AGENDA_ACTIONAUTO_ORDER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5900,'MAIN_AGENDA_ACTIONAUTO_ORDER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5901,'MAIN_AGENDA_ACTIONAUTO_BILL_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5902,'MAIN_AGENDA_ACTIONAUTO_BILL_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5903,'MAIN_AGENDA_ACTIONAUTO_BILL_CANCEL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5904,'MAIN_AGENDA_ACTIONAUTO_BILL_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5905,'MAIN_AGENDA_ACTIONAUTO_BILL_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5906,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5907,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_APPROVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5908,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_RECEIVE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5909,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SUBMIT',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5910,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_REFUSE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5911,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CLASSIFY_BILLED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5912,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5913,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_UNVALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5914,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5915,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_PAYED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5916,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5917,'MAIN_AGENDA_ACTIONAUTO_BILL_SUPPLIER_CANCELED',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5918,'MAIN_AGENDA_ACTIONAUTO_CONTRACT_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5919,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_REOPEN',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5920,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5921,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5922,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5923,'MAIN_AGENDA_ACTIONAUTO_SHIPPING_SENTBYMAIL',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5924,'MAIN_AGENDA_ACTIONAUTO_MEMBER_VALIDATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5925,'MAIN_AGENDA_ACTIONAUTO_MEMBER_SUBSCRIPTION',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5926,'MAIN_AGENDA_ACTIONAUTO_MEMBER_MODIFY',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5927,'MAIN_AGENDA_ACTIONAUTO_MEMBER_RESILIATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5928,'MAIN_AGENDA_ACTIONAUTO_MEMBER_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5929,'MAIN_AGENDA_ACTIONAUTO_PROJECT_CREATE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5930,'MAIN_AGENDA_ACTIONAUTO_PROJECT_DELETE',1,'1','chaine',0,'','2017-02-01 14:48:55'),(5931,'DATABASE_PWD_ENCRYPTED',1,'1','chaine',0,'','2017-02-01 15:06:04'),(5932,'MAIN_DISABLE_ALL_MAILS',1,'0','chaine',0,'','2017-02-01 15:09:09'),(5933,'MAIN_MAIL_SENDMODE',1,'mail','chaine',0,'','2017-02-01 15:09:09'),(5934,'MAIN_MAIL_SMTP_PORT',1,'465','chaine',0,'','2017-02-01 15:09:09'),(5935,'MAIN_MAIL_SMTP_SERVER',1,'smtp.mail.com','chaine',0,'','2017-02-01 15:09:09'),(5936,'MAIN_MAIL_SMTPS_ID',1,'eldy10@mail.com','chaine',0,'','2017-02-01 15:09:09'),(5937,'MAIN_MAIL_SMTPS_PW',1,'bidonge','chaine',0,'','2017-02-01 15:09:09'),(5938,'MAIN_MAIL_EMAIL_FROM',1,'robot@example.com','chaine',0,'','2017-02-01 15:09:09'),(5939,'MAIN_MAIL_DEFAULT_FROMTYPE',1,'user','chaine',0,'','2017-02-01 15:09:09'),(5940,'PRELEVEMENT_ID_BANKACCOUNT',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5941,'PRELEVEMENT_ICS',1,'ICS123456','chaine',0,'','2017-02-06 04:04:47'),(5942,'PRELEVEMENT_USER',1,'1','chaine',0,'','2017-02-06 04:04:47'),(5943,'BANKADDON_PDF',1,'sepamandate','chaine',0,'','2017-02-06 04:13:52'),(5947,'CHEQUERECEIPTS_THYME_MASK',1,'CHK{yy}{mm}-{0000@1}','chaine',0,'','2017-02-06 04:16:27'),(5948,'MAIN_MODULE_LOAN',1,'1',NULL,0,NULL,'2017-02-06 19:19:05'),(5954,'MAIN_SUBMODULE_EXPEDITION',1,'1','chaine',0,'','2017-02-06 23:57:37'),(5963,'MAIN_MODULE_BANQUE',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5964,'MAIN_MODULE_TAX',1,'1',NULL,0,NULL,'2017-02-07 18:56:12'),(5996,'CABINETMED_RHEUMATOLOGY_ON',1,'0','text',0,'','2018-11-23 11:56:07'),(5999,'MAIN_SEARCHFORM_SOCIETE',1,'1','text',0,'','2018-11-23 11:56:07'),(6000,'CABINETMED_BANK_PATIENT_REQUIRED',1,'0','text',0,'','2018-11-23 11:56:07'),(6019,'MAIN_INFO_SOCIETE_COUNTRY',2,'1:FR:France','chaine',0,'','2017-02-15 17:18:22'),(6020,'MAIN_INFO_SOCIETE_NOM',2,'MySecondCompany','chaine',0,'','2017-02-15 17:18:22'),(6021,'MAIN_INFO_SOCIETE_STATE',2,'0','chaine',0,'','2017-02-15 17:18:22'),(6022,'MAIN_MONNAIE',2,'EUR','chaine',0,'','2017-02-15 17:18:22'),(6023,'MAIN_LANG_DEFAULT',2,'auto','chaine',0,'','2017-02-15 17:18:22'),(6032,'MAIN_MODULE_MULTICURRENCY',1,'1',NULL,0,NULL,'2017-02-15 17:29:59'),(6048,'SYSLOG_FACILITY',0,'LOG_USER','chaine',0,'','2017-02-15 22:37:01'),(6049,'SYSLOG_FIREPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/firephp/firephp-core/lib/','chaine',0,'','2017-02-15 22:37:01'),(6050,'SYSLOG_FILE',0,'DOL_DATA_ROOT/dolibarr.log','chaine',0,'','2017-02-15 22:37:01'),(6051,'SYSLOG_CHROMEPHP_INCLUDEPATH',0,'/home/ldestailleur/git/dolibarr_5.0/htdocs/includes/ccampbell/chromephp/','chaine',0,'','2017-02-15 22:37:01'),(6052,'SYSLOG_HANDLERS',0,'[\"mod_syslog_file\"]','chaine',0,'','2017-02-15 22:37:01'),(6054,'SYSLOG_LEVEL',0,'7','chaine',0,'','2017-02-15 22:37:21'),(6074,'CABINETMED_DELAY_TO_LOCK_RECORD',1,'','chaine',1,'Number of days before locking edit of consultation','2017-02-21 00:04:15'),(6092,'MAIN_SIZE_SHORTLIST_LIMIT',0,'3','chaine',0,'Max length for small lists (tabs)','2017-05-12 09:02:38'),(6099,'MAIN_MODULE_SKYPE',1,'1',NULL,0,NULL,'2017-05-12 09:03:51'),(6100,'MAIN_MODULE_GRAVATAR',1,'1',NULL,0,NULL,'2017-05-12 09:03:54'),(6102,'PRODUCT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/products','chaine',0,'','2017-08-27 13:29:07'),(6103,'CONTRACT_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/contracts','chaine',0,'','2017-08-27 13:29:07'),(6104,'USERGROUP_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/usergroups','chaine',0,'','2017-08-27 13:29:07'),(6105,'USER_ADDON_PDF_ODT_PATH',1,'DOL_DATA_ROOT/doctemplates/users','chaine',0,'','2017-08-27 13:29:07'),(6106,'MAIN_ENABLE_OVERWRITE_TRANSLATION',1,'1','chaine',0,'Enable overwrote of translation','2017-08-27 13:29:07'),(6108,'MAIN_AGENDA_ACTIONAUTO_ORDER_SUPPLIER_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6109,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_BILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6110,'MAIN_AGENDA_ACTIONAUTO_FICHINTER_CLASSIFY_UNBILLED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6111,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6112,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6113,'MAIN_AGENDA_ACTIONAUTO_PRODUCT_DELETE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6114,'MAIN_AGENDA_ACTIONAUTO_PROJECT_MODIFY',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6115,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6116,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6117,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6118,'MAIN_AGENDA_ACTIONAUTO_EXPENSE_REPORT_PAYED',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6119,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_CREATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6120,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_VALIDATE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6121,'MAIN_AGENDA_ACTIONAUTO_HOLIDAY_APPROVE',1,'1','chaine',0,NULL,'2017-08-27 13:29:14'),(6137,'MAIN_LANG_DEFAULT',1,'auto','chaine',0,'','2017-08-28 10:19:58'),(6138,'MAIN_MULTILANGS',1,'1','chaine',0,'','2017-08-28 10:19:58'),(6139,'MAIN_THEME',1,'eldy','chaine',0,'','2017-08-28 10:19:58'),(6140,'THEME_ELDY_USE_HOVER',1,'edf4fb','chaine',0,'','2017-08-28 10:19:58'),(6141,'MAIN_SIZE_LISTE_LIMIT',1,'25','chaine',0,'','2017-08-28 10:19:59'),(6142,'MAIN_SIZE_SHORTLIST_LIMIT',1,'3','chaine',0,'','2017-08-28 10:19:59'),(6143,'MAIN_DISABLE_JAVASCRIPT',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6144,'MAIN_BUTTON_HIDE_UNAUTHORIZED',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6145,'MAIN_START_WEEK',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6146,'MAIN_DEFAULT_WORKING_DAYS',1,'1-5','chaine',0,'','2017-08-28 10:19:59'),(6147,'MAIN_DEFAULT_WORKING_HOURS',1,'9-18','chaine',0,'','2017-08-28 10:19:59'),(6148,'MAIN_SHOW_LOGO',1,'1','chaine',0,'','2017-08-28 10:19:59'),(6149,'MAIN_FIRSTNAME_NAME_POSITION',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6150,'MAIN_HELPCENTER_DISABLELINK',0,'1','chaine',0,'','2017-08-28 10:19:59'),(6151,'MAIN_HOME',1,'__(NoteSomeFeaturesAreDisabled)__
    \r\n
    \r\n__(SomeTranslationAreUncomplete)__
    ','chaine',0,'','2017-08-28 10:19:59'),(6152,'MAIN_HELP_DISABLELINK',0,'0','chaine',0,'','2017-08-28 10:19:59'),(6153,'MAIN_BUGTRACK_ENABLELINK',1,'0','chaine',0,'','2017-08-28 10:19:59'),(6353,'MAIN_MENU_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6354,'MAIN_MENU_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6355,'MAIN_MENUFRONT_STANDARD',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6356,'MAIN_MENUFRONT_SMARTPHONE',1,'eldy_menu.php','chaine',0,'','2017-08-30 15:14:44'),(6377,'COMMANDE_SAPHIR_MASK',1,'{yy}{mm}{000}{ttt}','chaine',0,'','2017-09-06 07:56:25'),(6461,'MAIN_INFO_SOCIETE_COUNTRY',1,'117:IN:India','chaine',0,'','2017-09-06 08:51:11'),(6462,'MAIN_INFO_SOCIETE_NOM',1,'MyBigCompany','chaine',0,'','2017-09-06 08:51:11'),(6463,'MAIN_INFO_SOCIETE_ADDRESS',1,'21 Jump street..ll..ee \"','chaine',0,'','2017-09-06 08:51:11'),(6464,'MAIN_INFO_SOCIETE_TOWN',1,'MyTown','chaine',0,'','2017-09-06 08:51:12'),(6465,'MAIN_INFO_SOCIETE_ZIP',1,'75500','chaine',0,'','2017-09-06 08:51:12'),(6466,'MAIN_INFO_SOCIETE_STATE',1,'290','chaine',0,'','2017-09-06 08:51:12'),(6467,'MAIN_MONNAIE',1,'EUR','chaine',0,'','2017-09-06 08:51:12'),(6468,'MAIN_INFO_SOCIETE_TEL',1,'09123123','chaine',0,'','2017-09-06 08:51:12'),(6469,'MAIN_INFO_SOCIETE_FAX',1,'09123124','chaine',0,'','2017-09-06 08:51:12'),(6470,'MAIN_INFO_SOCIETE_MAIL',1,'myemail@mybigcompany.com','chaine',0,'','2017-09-06 08:51:12'),(6471,'MAIN_INFO_SOCIETE_WEB',1,'https://www.dolibarr.org','chaine',0,'','2017-09-06 08:51:12'),(6472,'MAIN_INFO_SOCIETE_NOTE',1,'This is note about my company\r\n\"ee\"','chaine',0,'','2017-09-06 08:51:12'),(6473,'MAIN_INFO_SOCIETE_GENCOD',1,'1234567890','chaine',0,'','2017-09-06 08:51:12'),(6474,'MAIN_INFO_SOCIETE_MANAGERS',1,'Zack Zeceo','chaine',0,'','2017-09-06 08:51:12'),(6475,'MAIN_INFO_CAPITAL',1,'10000','chaine',0,'','2017-09-06 08:51:12'),(6476,'MAIN_INFO_SOCIETE_FORME_JURIDIQUE',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6477,'MAIN_INFO_SIREN',1,'123456','chaine',0,'','2017-09-06 08:51:12'),(6478,'MAIN_INFO_SIRET',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6479,'MAIN_INFO_APE',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6480,'MAIN_INFO_RCS',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6481,'MAIN_INFO_PROFID5',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6482,'MAIN_INFO_TVAINTRA',1,'FR1234567','chaine',0,'','2017-09-06 08:51:12'),(6483,'MAIN_INFO_SOCIETE_OBJECT',1,'A company demo to show how Dolibarr ERP CRM is wonderfull','chaine',0,'','2017-09-06 08:51:12'),(6484,'SOCIETE_FISCAL_MONTH_START',1,'4','chaine',0,'','2017-09-06 08:51:12'),(6485,'FACTURE_TVAOPTION',1,'1','chaine',0,'','2017-09-06 08:51:12'),(6486,'FACTURE_LOCAL_TAX1_OPTION',1,'localtax1on','chaine',0,'','2017-09-06 08:51:12'),(6487,'FACTURE_LOCAL_TAX2_OPTION',1,'localtax2on','chaine',0,'','2017-09-06 08:51:12'),(6488,'MAIN_INFO_VALUE_LOCALTAX1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6489,'MAIN_INFO_LOCALTAX_CALC1',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6490,'MAIN_INFO_VALUE_LOCALTAX2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6491,'MAIN_INFO_LOCALTAX_CALC2',1,'0','chaine',0,'','2017-09-06 08:51:12'),(6518,'GOOGLE_DUPLICATE_INTO_THIRDPARTIES',1,'1','chaine',0,'','2017-09-06 19:43:57'),(6519,'GOOGLE_DUPLICATE_INTO_CONTACTS',1,'0','chaine',0,'','2017-09-06 19:43:57'),(6520,'GOOGLE_TAG_PREFIX',1,'Dolibarr (Thirdparties)','chaine',0,'','2017-09-06 19:43:57'),(6521,'GOOGLE_TAG_PREFIX_CONTACTS',1,'Dolibarr (Contacts/Addresses)','chaine',0,'','2017-09-06 19:43:57'),(6522,'GOOGLE_ENABLE_AGENDA',1,'1','chaine',0,'','2017-09-06 19:44:12'),(6523,'GOOGLE_AGENDA_COLOR1',1,'1B887A','chaine',0,'','2017-09-06 19:44:12'),(6524,'GOOGLE_AGENDA_COLOR2',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6525,'GOOGLE_AGENDA_COLOR3',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6526,'GOOGLE_AGENDA_COLOR4',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6527,'GOOGLE_AGENDA_COLOR5',1,'7A367A','chaine',0,'','2017-09-06 19:44:12'),(6528,'GOOGLE_AGENDA_TIMEZONE',1,'Europe/Paris','chaine',0,'','2017-09-06 19:44:12'),(6529,'GOOGLE_AGENDA_NB',1,'5','chaine',0,'','2017-09-06 19:44:12'),(6543,'MAIN_SMS_DEBUG',0,'1','chaine',1,'This is to enable OVH SMS debug','2017-09-06 19:44:34'),(6562,'BLOCKEDLOG_ENTITY_FINGERPRINT',1,'b63e359ffca54d5c2bab869916eaf23d4a736703028ccbf77ce1167c5f830e7b','chaine',0,'Numeric Unique Fingerprint','2018-01-19 11:27:15'),(6564,'BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY',1,'FR','chaine',0,'This is list of country code where the module may be mandatory','2018-01-19 11:27:15'),(6565,'MAIN_MODULE_BOOKMARK',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:34'),(6566,'MAIN_MODULE_ADHERENT',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:27:56'),(6567,'ADHERENT_ADDON_PDF',1,'standard','chaine',0,'Name of PDF model of member','2018-01-19 11:27:56'),(6569,'MAIN_MODULE_STRIPE',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"82.240.38.230\"}','2018-01-19 11:28:17'),(6587,'MAIN_MODULE_BLOCKEDLOG',1,'1',NULL,0,'{\"authorid\":\"12\",\"ip\":\"127.0.0.1\"}','2018-03-16 09:57:24'),(6590,'MAIN_MODULE_ACCOUNTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6591,'MAIN_MODULE_AGENDA',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6592,'MAIN_MODULE_BARCODE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:15'),(6593,'MAIN_MODULE_CRON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:16'),(6594,'MAIN_MODULE_COMMANDE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:16'),(6595,'MAIN_MODULE_DON',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6596,'MAIN_MODULE_ECM',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6597,'MAIN_MODULE_FACTURE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:17'),(6598,'MAIN_MODULE_FOURNISSEUR',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:18'),(6599,'MAIN_MODULE_HOLIDAY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6600,'MAIN_MODULE_OPENSURVEY',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6601,'MAIN_MODULE_PRINTING',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6602,'MAIN_MODULE_SALARIES',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6603,'MAIN_MODULE_SYSLOG',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6604,'MAIN_MODULE_SOCIETE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:19'),(6605,'MAIN_MODULE_SERVICE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:20'),(6606,'MAIN_MODULE_USER',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:20'),(6607,'MAIN_MODULE_VARIANTS',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\"}','2018-11-23 11:58:21'),(6608,'MAIN_VERSION_LAST_UPGRADE',0,'9.0.0-beta','chaine',0,'Dolibarr version for last upgrade','2018-11-23 11:58:23'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; UNLOCK TABLES; From f98df3c8077b8aeacf1e69862d4bbb029e13a0fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 21:09:33 +0100 Subject: [PATCH 719/980] NEW Can edit link to the translation page in website module --- htdocs/admin/website.php | 2 +- htdocs/core/class/html.formwebsite.class.php | 74 ++++++- htdocs/core/lib/functions.lib.php | 5 +- htdocs/langs/en_US/website.lang | 3 +- htdocs/theme/eldy/global.inc.php | 5 + htdocs/theme/md/style.css.php | 6 + htdocs/ticket/css/styles.css.php | 2 +- htdocs/website/class/website.class.php | 54 +++--- htdocs/website/class/websitepage.class.php | 87 +++++---- htdocs/website/index.php | 194 +++++++++---------- 10 files changed, 253 insertions(+), 179 deletions(-) diff --git a/htdocs/admin/website.php b/htdocs/admin/website.php index 0343fecf69d..5ea6ee66dd9 100644 --- a/htdocs/admin/website.php +++ b/htdocs/admin/website.php @@ -421,7 +421,7 @@ $h++; dol_fiche_head($head, 'website', '', -1); -print $langs->trans("WebsiteSetupDesc").'
    '; +print ''.$langs->trans("WebsiteSetupDesc").'
    '; print "
    \n"; diff --git a/htdocs/core/class/html.formwebsite.class.php b/htdocs/core/class/html.formwebsite.class.php index 6fc00605d77..12ec3e7f5ad 100644 --- a/htdocs/core/class/html.formwebsite.class.php +++ b/htdocs/core/class/html.formwebsite.class.php @@ -47,7 +47,7 @@ class FormWebsite /** - * Return HTML select list of export models + * Return HTML select list of websites * * @param string $selected Id modele pre-selectionne * @param string $htmlname Name of HTML select @@ -99,7 +99,7 @@ class FormWebsite /** - * Return a HTML select list of a dictionary + * Return a HTML select list of type of containers from the dictionary * * @param string $htmlname Name of select zone * @param string $selected Selected value @@ -162,7 +162,7 @@ class FormWebsite /** - * Return a HTML select list of type of containers + * Return a HTML select list of samples of containers content * * @param string $htmlname Name of select zone * @param string $selected Selected value @@ -217,4 +217,72 @@ class FormWebsite return $out; } + + + /** + * Return a HTML select list of containers of a website. + * Note: $website->lines must have been loaded. + * + * @param Website $website Object Website + * @param string $htmlname Name of select zone + * @param int $pageid Preselected container ID + * @param int $showempty Show empty record + * @param string $action Action on page that use this select list + * @return string HTML select component with list of type of containers + */ + public function selectContainer($website, $htmlname = 'pageid', $pageid = 0, $showempty = 0, $action = '') + { + global $langs; + + $atleastonepage = (is_array($website->lines) && count($website->lines) > 0); + + $out=''; + if ($atleastonepage && $action != 'editsource') + { + $out.=''; + } + + if ($showempty || ! $atleastonepage) $out.=''; + + if ($atleastonepage) + { + if (empty($pageid) && $action != 'createcontainer') // Page id is not defined, we try to take one + { + $firstpageid=0;$homepageid=0; + foreach($website->lines as $key => $valpage) + { + if (empty($firstpageid)) $firstpageid=$valpage->id; + if ($website->fk_default_home && $key == $website->fk_default_home) $homepageid=$valpage->id; + } + $pageid=$homepageid?$homepageid:$firstpageid; // We choose home page and if not defined yet, we take first page + } + + foreach($website->lines as $key => $valpage) + { + $out.=''; + } + } + $out.=''; + + if ($atleastonepage && $action != 'editsource') + { + $out.=ajax_combobox($htmlname); + } + else + { + $out.=''; + $out.=ajax_combobox($htmlname); + } + return $out; + } } diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index ca6a4a93e4e..4d4a20f3a5c 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3028,7 +3028,8 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ //if (in_array($picto, array('switch_off', 'switch_on', 'off', 'on'))) if (empty($srconly) && in_array($pictowithouttext, array( '1downarrow', '1uparrow', '1leftarrow', '1rightarrow', '1uparrow_selected', '1downarrow_selected', '1leftarrow_selected', '1rightarrow_selected', - 'address', 'bank', 'building', 'cash-register', 'close_title', 'cubes', 'delete', 'dolly', 'edit', 'ellipsis-h', 'bookmark', 'filter', 'grip', 'grip_title', 'list', 'listlight', 'note', + 'address', 'bank', 'bookmark', 'building', 'cash-register', 'close_title', 'cubes', 'delete', 'dolly', 'edit', 'ellipsis-h', + 'filter', 'file-code', 'grip', 'grip_title', 'list', 'listlight', 'note', 'object_list','object_calendar', 'object_calendarweek', 'object_calendarmonth', 'object_calendarday', 'object_calendarperuser', 'off', 'on', 'play', 'playdisabled', 'printer', 'resize', 'stats', 'note', 'setup', 'sign-out', 'split', 'switch_off', 'switch_on', 'tools', 'unlink', 'uparrow', 'user', 'wrench', 'globe', @@ -3058,12 +3059,10 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ $morecss .= ($morecss ? ' ' : '').('picto'.$pictowithouttext); } elseif ($pictowithouttext == 'switch_off') { $facolor = '#999'; - $fasize = '2em'; $fakey = 'fa-'.$arrayconvpictotofa[$pictowithouttext]; } elseif ($pictowithouttext == 'switch_on') { $facolor = '#227722'; - $fasize = '2em'; $fakey = 'fa-'.$arrayconvpictotofa[$pictowithouttext]; } elseif ($pictowithouttext == 'off') { diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index be758c04890..62ce5a23531 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -117,4 +117,5 @@ ImportSite=Import site EditInLineOnOff=Mode 'Edit inline' is %s ShowSubContainersOnOff=Mode to execute 'dynamic content' is %s GlobalCSSorJS=Global CSS/JS/Header file of web site -BackToHomePage=Back to home page... \ No newline at end of file +BackToHomePage=Back to home page... +TranslationLinks=Translation links \ No newline at end of file diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index aeb1cbf70c9..c3bbc92af9c 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -488,6 +488,9 @@ textarea.centpercent { .backgroundblank { background-color: #fff; } +.nobackground, .nobackground tr { + background: unset !important; +} .checkboxattachfilelabel { font-size: 0.85em; opacity: 0.7; @@ -517,6 +520,8 @@ body[class*="colorblind-"] .text-success{ color: rgb() !important; } +.fa-toggle-on, .fa-toggle-off { font-size: 2em; } +.websiteselectionsection .fa-toggle-on, .websiteselectionsection .fa-toggle-off { font-size: 1.5em; vertical-align: text-bottom; } /* Themes for badges */ diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index d1a1c2025c0..320a03c2775 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -691,6 +691,9 @@ textarea.centpercent { .backgroundblank { background-color: #fff; } +.nobackground, .nobackground tr { + background: unset !important; +} .checkboxattachfilelabel { font-size: 0.85em; opacity: 0.7; @@ -720,6 +723,9 @@ body[class*="colorblind-"] .text-success{ color: rgb() !important; } +.fa-toggle-on, .fa-toggle-off { font-size: 2em; } +.websiteselectionsection .fa-toggle-on, .websiteselectionsection .fa-toggle-off { font-size: 1.5em; vertical-align: text-bottom; } + /* Themes for badges */ diff --git a/htdocs/ticket/css/styles.css.php b/htdocs/ticket/css/styles.css.php index 1d0626d190b..906d50602a1 100644 --- a/htdocs/ticket/css/styles.css.php +++ b/htdocs/ticket/css/styles.css.php @@ -31,7 +31,7 @@ if (! defined('NOLOGIN')) define('NOLOGIN', 1); // File must be if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', 1); if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); -session_cache_limiter(false); +session_cache_limiter('public'); require_once '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index bd54b93438f..ac99001bf4b 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -92,6 +92,17 @@ class Website extends CommonObject */ public $virtualhost; + /** + * List of containers + * + * @var array + */ + public $lines; + + + const STATUS_DRAFT = 0; + const STATUS_VALIDATED = 1; + /** * Constructor @@ -229,10 +240,10 @@ class Website extends CommonObject $sql .= " t.tms as date_modification"; $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t'; $sql .= ' WHERE t.entity IN ('.getEntity('website').')'; - if (null !== $ref) { + if (! empty($ref)) { $sql .= " AND t.ref = '" . $this->db->escape($ref) . "'"; } else { - $sql .= ' AND t.rowid = ' . $id; + $sql .= ' AND t.rowid = ' . (int) $id; } $resql = $this->db->query($sql); @@ -691,8 +702,8 @@ class Website extends CommonObject $companylink = ''; $label = '' . $langs->trans("WebSite") . ''; - $label.= '
    '; - $label.= '' . $langs->trans('Nom') . ': ' . $this->ref; + $label.= '
    '; + $label.= '' . $langs->trans('Ref') . ': ' . $this->ref; $linkstart = 'labelstatus) || empty($this->labelstatusshort)) { - if ($status == 1) return $langs->trans('Enabled'); - elseif ($status == 0) return $langs->trans('Disabled'); - } - elseif ($mode == 2) - { - if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4').' '.$langs->trans('Enabled'); - elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5').' '.$langs->trans('Disabled'); - } - elseif ($mode == 3) - { - if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4'); - elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5'); - } - elseif ($mode == 4) - { - if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4').' '.$langs->trans('Enabled'); - elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5').' '.$langs->trans('Disabled'); - } - elseif ($mode == 5) - { - if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'), 'statut4'); - elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'), 'statut5'); + global $langs; + //$langs->load("mymodule"); + $this->labelstatus[self::STATUS_DRAFT] = $langs->trans('Disabled'); + $this->labelstatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); + $this->labelstatusshort[self::STATUS_DRAFT] = $langs->trans('Disabled'); + $this->labelstatusshort[self::STATUS_VALIDATED] = $langs->trans('Enabled'); } + + $statusType = 'status5'; + if ($status == self::STATUS_VALIDATED) $statusType = 'status4'; + + return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); } diff --git a/htdocs/website/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php index 870e300e650..e85af6244e3 100644 --- a/htdocs/website/class/websitepage.class.php +++ b/htdocs/website/class/websitepage.class.php @@ -47,7 +47,7 @@ class WebsitePage extends CommonObject /** * @var string String with name of icon for websitepage. Must be the part after the 'object_' into object_myobject.png */ - public $picto = 'label'; + public $picto = 'file-code'; /** * @var int ID @@ -88,6 +88,11 @@ class WebsitePage extends CommonObject public $date_modification; + const STATUS_DRAFT = 0; + const STATUS_VALIDATED = 1; + + + // BEGIN MODULEBUILDER PROPERTIES /** * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. @@ -480,25 +485,39 @@ class WebsitePage extends CommonObject global $menumanager; $result = ''; - $companylink = ''; $label = '' . $langs->trans("Page") . ''; - $label.= '
    '; - $label.= '' . $langs->trans('Ref') . ': ' . $this->ref; + $label.= '
    '; + $label.= '' . $langs->trans('Ref') . ': ' . $this->ref.'
    '; + $label.= '' . $langs->trans('ID') . ': ' . $this->id.'
    '; + $label.= '' . $langs->trans('Title') . ': ' . $this->title; - $linkstart = '
    fk_website.'&pageid='.$this->id; + + $linkclose=''; + if (empty($notooltip)) + { + if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) + { + $label=$langs->trans("ShowMyObject"); + $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"'; + } + $linkclose.=' title="'.dol_escape_htmltag($label, 1).'"'; + $linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"'; + } + else $linkclose = ($morecss?' class="'.$morecss.'"':''); + + $linkstart = ''; $linkend=''; - $linkstart = $linkend = ''; + //$linkstart = $linkend = ''; + + $result .= $linkstart; + if ($withpicto) $result.=img_picto(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1); + if ($withpicto != 2) $result.= $this->ref; + $result .= $linkend; - if ($withpicto) - { - $result.=($linkstart.img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?'':'class="classfortooltip"')).$linkend); - if ($withpicto != 2) $result.=' '; - } - $result.= $linkstart . $this->ref . $linkend; return $result; } @@ -526,36 +545,20 @@ class WebsitePage extends CommonObject // phpcs:enable global $langs; - if ($mode == 0) + if (empty($this->labelstatus) || empty($this->labelstatusshort)) { - if ($status == 1) return $langs->trans('Enabled'); - elseif ($status == 0) return $langs->trans('Disabled'); - } - elseif ($mode == 1) - { - if ($status == 1) return $langs->trans('Enabled'); - elseif ($status == 0) return $langs->trans('Disabled'); - } - elseif ($mode == 2) - { - if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4').' '.$langs->trans('Enabled'); - elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5').' '.$langs->trans('Disabled'); - } - elseif ($mode == 3) - { - if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4'); - elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5'); - } - elseif ($mode == 4) - { - if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4').' '.$langs->trans('Enabled'); - elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5').' '.$langs->trans('Disabled'); - } - elseif ($mode == 5) - { - if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'), 'statut4'); - elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'), 'statut5'); + global $langs; + //$langs->load("mymodule"); + $this->labelstatus[self::STATUS_DRAFT] = $langs->trans('Disabled'); + $this->labelstatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); + $this->labelstatusshort[self::STATUS_DRAFT] = $langs->trans('Disabled'); + $this->labelstatusshort[self::STATUS_VALIDATED] = $langs->trans('Enabled'); } + + $statusType = 'status5'; + if ($status == self::STATUS_VALIDATED) $statusType = 'status4'; + + return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); } diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 56b3a0c8cb3..afc85a9c213 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -46,6 +46,7 @@ if (! $user->rights->website->read) accessforbidden(); $conf->dol_hide_leftmenu = 1; // Force hide of left menu. $error=0; +$websiteid=GETPOST('websiteid', 'int'); $websitekey=GETPOST('website', 'alpha'); $page=GETPOST('page', 'alpha'); $pageid=GETPOST('pageid', 'int'); @@ -101,7 +102,7 @@ $objectpage=new WebsitePage($db); $object->fetchAll(); // Init $object->records with list of websites // If website not defined, we take first found -if (empty($websitekey)) +if (! ($websiteid > 0) && empty($websitekey)) { foreach($object->records as $key => $valwebsite) { @@ -109,10 +110,12 @@ if (empty($websitekey)) break; } } -if ($websitekey) +if ($websiteid > 0 || $websitekey) { - $res = $object->fetch(0, $websitekey); + $res = $object->fetch($websiteid, $websitekey); + $websitekey = $object->ref; } + $website = $object; // Check pageid received as aprameter @@ -418,7 +421,7 @@ if ($action == 'addcontainer') $db->begin(); $objectpage->fk_website = $object->id; - if (GETPOST('fetchexternalurl', 'alpha')) + if (GETPOSTISSET('fetchexternalurl')) { $urltograb=GETPOST('externalurl', 'alpha'); $grabimages=GETPOST('grabimages', 'alpha'); @@ -426,12 +429,18 @@ if ($action == 'addcontainer') //var_dump($grabimages);exit; } - if ($urltograb) + if (GETPOSTISSET('fetchexternalurl')) { include_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php'; - //if (! preg_match('/^http/', $urltograb) && ! preg_match('/^file/', $urltograb)) - if (! preg_match('/^http/', $urltograb)) + if (empty($urltograb)) + { + $error++; + $langs->load("errors"); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("URL")), null, 'errors'); + $action = 'createcontainer'; + } + elseif (! preg_match('/^http/', $urltograb)) { $error++; $langs->load("errors"); @@ -1372,6 +1381,8 @@ if ($action == 'updatemeta') $objectpage->keywords = GETPOST('WEBSITE_KEYWORDS', 'alpha'); $objectpage->lang = GETPOST('WEBSITE_LANG', 'aZ09'); $objectpage->htmlheader = trim(GETPOST('htmlheader', 'none')); + $objectpage->fk_page = GETPOST('pageidfortranslation', 'int'); + $newdatecreation=dol_mktime(GETPOST('datecreationhour', 'int'), GETPOST('datecreationmin', 'int'), GETPOST('datecreationsec', 'int'), GETPOST('datecreationmonth', 'int'), GETPOST('datecreationday', 'int'), GETPOST('datecreationyear', 'int')); if ($newdatecreation) $objectpage->date_creation = $newdatecreation; @@ -2006,6 +2017,7 @@ if (! GETPOST('hide_websitemenu')) if ($object->id > 0) { $array=$objectpage->fetchAll($object->id, 'ASC,ASC', 'type_container,pageurl'); + $object->lines = $array; } if (! is_array($array) && $array < 0) dol_print_error('', $objectpage->error, $objectpage->errors); $atleastonepage=(is_array($array) && count($array) > 0); @@ -2019,13 +2031,13 @@ if (! GETPOST('hide_websitemenu')) print ''; - if (! $atleastonepage) + if ($atleastonepage) { - print ''; + print ''; } else { - print ''; + print ''; } //print ''; @@ -2137,55 +2149,11 @@ if (! GETPOST('hide_websitemenu')) print ''; print ''; - print ''; + //print ''; if ($action != 'addcontainer') { - $out=''; - if ($atleastonepage && $action != 'editsource') - { - $out.=''; - } - if ($atleastonepage) - { - if (empty($pageid) && $action != 'createcontainer') // Page id is not defined, we try to take one - { - $firstpageid=0;$homepageid=0; - foreach($array as $key => $valpage) - { - if (empty($firstpageid)) $firstpageid=$valpage->id; - if ($object->fk_default_home && $key == $object->fk_default_home) $homepageid=$valpage->id; - } - $pageid=$homepageid?$homepageid:$firstpageid; // We choose home page and if not defined yet, we take first page - } - - foreach($array as $key => $valpage) - { - $out.=''; - } - } - else $out.=''; - $out.=''; - if ($atleastonepage && $action != 'editsource') - { - $out.=ajax_combobox('pageid'); - } - else - { - $out.=''; - $out.=ajax_combobox('pageid'); - } - print $out; + print $formwebsite->selectContainer($website, 'pageid', $pageid, 0, $action); } else { @@ -2298,7 +2266,7 @@ if (! GETPOST('hide_websitemenu')) print ''."\n"; print '
    '; - print '
    '; + print ''; - print '
    '; + print ''; @@ -2405,7 +2373,7 @@ if (! GETPOST('hide_websitemenu')) } } - print ''; // end website selection + //print ''; // end website selection print ''; @@ -2888,12 +2856,24 @@ if ($action == 'editmeta' || $action == 'createcontainer') print ''."\n"; //print '
    '; + $hiddenfromfetchingafterload = ' hideobject'; + $hiddenmanuallyafterload = ' hideobject'; + if (GETPOST('radiocreatefrom') == 'checkboxcreatefromfetching') $hiddenfromfetchingafterload = ''; + if (GETPOST('radiocreatefrom') == 'checkboxcreatemanually') $hiddenmanuallyafterload = ''; + + if ($action == 'editmeta' || empty($conf->use_javascript_ajax)) { // No autohide/show in such case + $hiddenfromfetchingafterload=''; + $hiddenmanuallyafterload=''; + } + if ($action == 'createcontainer') { print '
    '; - print ' * '.$langs->trans("CreateByFetchingExternalPage").'

    '; - print ''; + if (! empty($conf->use_javascript_ajax)) print ' '; + print '
    '; + print '
    '; + print '
    '; print ''; print ''; print ''; print ''; From c215d534fc7a64f25acb9a17b6ce45e3188a3f28 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 21:16:41 +0100 Subject: [PATCH 720/980] Fix phpcs --- htdocs/comm/action/index.php | 2 +- htdocs/core/lib/files.lib.php | 2 +- htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php | 2 +- htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php | 2 +- htdocs/don/payment/payment.php | 2 +- htdocs/societe/canvas/company/tpl/card_edit.tpl.php | 1 - htdocs/societe/canvas/individual/tpl/card_edit.tpl.php | 4 ++-- htdocs/ticket/class/api_tickets.class.php | 2 +- 8 files changed, 8 insertions(+), 9 deletions(-) diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index 9ad3ef80dde..569b57ca552 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -1735,7 +1735,7 @@ function sort_events_by_date($a, $b) } // If both events have the same start time, longest first - + if(! is_numeric($b->datef)) { // when event B have no end timestamp, event B should sort be before event A (All day events on top) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 07d51105ca8..711e65edaaa 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1851,7 +1851,7 @@ function dol_convert_file($fileinput, $ext = 'png', $fileoutput = '', $page = '' if (! dol_is_file($fileoutput) || is_writeable($fileoutput)) { try { - $ret = $image->writeImages($fileoutput, true); + $ret = $image->writeImages($fileoutput, true); } catch(Exception $e) { diff --git a/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php index 3c371c39491..acbb2ae0b36 100644 --- a/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php +++ b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php @@ -479,7 +479,7 @@ class doc_generic_bom_odt extends ModelePDFBOMs } else { try { - $odfHandler->saveToDisk($file); + $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error=$e->getMessage(); dol_syslog($e->getMessage(), LOG_INFO); diff --git a/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php index 6d85bfd3553..9beb300ebb0 100644 --- a/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php +++ b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php @@ -486,7 +486,7 @@ class doc_generic_mo_odt extends ModelePDFMOs } else { try { - $odfHandler->saveToDisk($file); + $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error=$e->getMessage(); dol_syslog($e->getMessage(), LOG_INFO); diff --git a/htdocs/don/payment/payment.php b/htdocs/don/payment/payment.php index 71895a7d2c3..612ea5a553b 100644 --- a/htdocs/don/payment/payment.php +++ b/htdocs/don/payment/payment.php @@ -240,7 +240,7 @@ if (GETPOST('action', 'aZ09') == 'create') /* * List of payments on donation */ - + $num = 1; $i = 0; diff --git a/htdocs/societe/canvas/company/tpl/card_edit.tpl.php b/htdocs/societe/canvas/company/tpl/card_edit.tpl.php index 11100c79d75..b26f19204bb 100644 --- a/htdocs/societe/canvas/company/tpl/card_edit.tpl.php +++ b/htdocs/societe/canvas/company/tpl/card_edit.tpl.php @@ -23,7 +23,6 @@ if (empty($conf) || ! is_object($conf)) exit; } - $contact = $GLOBALS['objcanvas']->control->object; ?> diff --git a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php index 6f3628d93b7..b69e9e8370b 100644 --- a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php +++ b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php @@ -75,7 +75,7 @@ if (empty($conf) || ! is_object($conf)) control->tpl['ismodifiable_customercode']) { ?> - control->tpl['customercode']; ?> + control->tpl['customercode']; ?> @@ -96,7 +96,7 @@ if (empty($conf) || ! is_object($conf)) control->tpl['ismodifiable_suppliercode']) { ?> - control->tpl['suppliercode']; ?> + control->tpl['suppliercode']; ?> diff --git a/htdocs/ticket/class/api_tickets.class.php b/htdocs/ticket/class/api_tickets.class.php index 4289fab99dc..c95b092cf2e 100644 --- a/htdocs/ticket/class/api_tickets.class.php +++ b/htdocs/ticket/class/api_tickets.class.php @@ -435,7 +435,7 @@ class Tickets extends DolibarrApi throw new RestException(500); } - return array( + return array( 'success' => array( 'code' => 200, 'message' => 'Ticket deleted' From a1700e71be3a1fc48a418926001003c438cd87bb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 21:18:38 +0100 Subject: [PATCH 721/980] Fix phpcs --- htdocs/compta/facture/class/api_invoices.class.php | 2 +- htdocs/fourn/class/api_supplier_orders.class.php | 2 +- htdocs/modulebuilder/template/class/api_mymodule.class.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/facture/class/api_invoices.class.php b/htdocs/compta/facture/class/api_invoices.class.php index 25d92fad92a..da5ad40002b 100644 --- a/htdocs/compta/facture/class/api_invoices.class.php +++ b/htdocs/compta/facture/class/api_invoices.class.php @@ -565,7 +565,7 @@ class Invoices extends DolibarrApi throw new RestException(500); } - return array( + return array( 'success' => array( 'code' => 200, 'message' => 'Invoice deleted' diff --git a/htdocs/fourn/class/api_supplier_orders.class.php b/htdocs/fourn/class/api_supplier_orders.class.php index c09c62a4714..2ab90bcd73b 100644 --- a/htdocs/fourn/class/api_supplier_orders.class.php +++ b/htdocs/fourn/class/api_supplier_orders.class.php @@ -273,7 +273,7 @@ class SupplierOrders extends DolibarrApi throw new RestException(500); } - return array( + return array( 'success' => array( 'code' => 200, 'message' => 'Supplier order deleted' diff --git a/htdocs/modulebuilder/template/class/api_mymodule.class.php b/htdocs/modulebuilder/template/class/api_mymodule.class.php index bc3b6c4050c..2cfcd269b62 100644 --- a/htdocs/modulebuilder/template/class/api_mymodule.class.php +++ b/htdocs/modulebuilder/template/class/api_mymodule.class.php @@ -271,7 +271,7 @@ class MyModuleApi extends DolibarrApi throw new RestException(500, 'Error when deleting MyObject : '.$this->myobject->error); } - return array( + return array( 'success' => array( 'code' => 200, 'message' => 'MyObject deleted' From 0e7a8680870cb3d374bbbe3c794dcb4d3d793279 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 21:27:25 +0100 Subject: [PATCH 722/980] translation og pages --- htdocs/website/index.php | 53 ++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/htdocs/website/index.php b/htdocs/website/index.php index afc85a9c213..e0e3378bf26 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -3000,10 +3000,36 @@ if ($action == 'editmeta' || $action == 'createcontainer') // Translation of $translationof=0; + $translatedby=0; print ''; print ''; print ''; print ''; - print ''; + print ''; print ''; $i++; } diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php index 074216dee3e..0d054402b7a 100644 --- a/htdocs/api/class/api.class.php +++ b/htdocs/api/class/api.class.php @@ -132,8 +132,8 @@ class DolibarrApi unset($object->statuts_short); unset($object->statuts_logo); unset($object->statuts_long); - unset($object->labelstatut); - unset($object->labelstatut_short); + unset($object->labelStatus); + unset($object->labelStatusShort); unset($object->element); unset($object->fk_element); diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 444caa2a4da..bd5eb4513d2 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -809,19 +809,19 @@ class BOM extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - if (empty($this->labelstatus)) + if (empty($this->labelStatus)) { global $langs; //$langs->load("mrp"); - $this->labelstatus[self::STATUS_DRAFT] = $langs->trans('Draft'); - $this->labelstatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); - $this->labelstatus[self::STATUS_CANCELED] = $langs->trans('Disabled'); + $this->labelStatus[self::STATUS_DRAFT] = $langs->trans('Draft'); + $this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); + $this->labelStatus[self::STATUS_CANCELED] = $langs->trans('Disabled'); } $statusType = 'status'.$status; if ($status == self::STATUS_VALIDATED) $statusType = 'status4'; - return dolGetStatus($this->labelstatus[$status], $this->labelstatus[$status], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatus[$status], '', $statusType, $mode); } /** diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index a2b89dedb11..8d84d1f4820 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -192,8 +192,8 @@ class Propal extends CommonObject public $lines = array(); public $line; - public $labelstatut=array(); - public $labelstatut_short=array(); + public $labelStatus=array(); + public $labelStatusShort=array(); public $specimen; @@ -3210,20 +3210,20 @@ class Propal extends CommonObject global $conf; // Init/load array of translation of status - if (empty($this->labelstatut) || empty($this->labelstatut_short)) + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { global $langs; $langs->load("propal"); - $this->labelstatut[0]=$langs->trans("PropalStatusDraft"); - $this->labelstatut[1]=$langs->trans("PropalStatusValidated"); - $this->labelstatut[2]=$langs->trans("PropalStatusSigned"); - $this->labelstatut[3]=$langs->trans("PropalStatusNotSigned"); - $this->labelstatut[4]=$langs->trans("PropalStatusBilled"); - $this->labelstatut_short[0]=$langs->trans("PropalStatusDraftShort"); - $this->labelstatut_short[1]=$langs->trans("PropalStatusValidatedShort"); - $this->labelstatut_short[2]=$langs->trans("PropalStatusSignedShort"); - $this->labelstatut_short[3]=$langs->trans("PropalStatusNotSignedShort"); - $this->labelstatut_short[4]=$langs->trans("PropalStatusBilledShort"); + $this->labelStatus[0]=$langs->trans("PropalStatusDraft"); + $this->labelStatus[1]=$langs->trans("PropalStatusValidated"); + $this->labelStatus[2]=$langs->trans("PropalStatusSigned"); + $this->labelStatus[3]=$langs->trans("PropalStatusNotSigned"); + $this->labelStatus[4]=$langs->trans("PropalStatusBilled"); + $this->labelStatusShort[0]=$langs->trans("PropalStatusDraftShort"); + $this->labelStatusShort[1]=$langs->trans("PropalStatusValidatedShort"); + $this->labelStatusShort[2]=$langs->trans("PropalStatusSignedShort"); + $this->labelStatusShort[3]=$langs->trans("PropalStatusNotSignedShort"); + $this->labelStatusShort[4]=$langs->trans("PropalStatusBilledShort"); } $statusType=''; @@ -3233,7 +3233,7 @@ class Propal extends CommonObject elseif ($statut==self::STATUS_NOTSIGNED) $statusType='status5'; elseif ($statut==self::STATUS_BILLED) $statusType='status6'; - return dolGetStatus($this->labelstatut[$statut], $this->labelstatut_short[$statut], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$statut], $this->labelStatusShort[$statut], '', $statusType, $mode); } diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 4cc922a8cbf..261190a747e 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3484,48 +3484,48 @@ class Commande extends CommonOrder if (empty($donotshowbilled)) $billedtext .= ($billed?' - '.$langs->trans("Billed"):''); if ($statut==self::STATUS_CANCELED){ - $labelstatut = $langs->trans('StatusOrderCanceled'); - $labelstatutShort = $langs->trans('StatusOrderCanceledShort'); + $labelStatus = $langs->trans('StatusOrderCanceled'); + $labelStatusShort = $langs->trans('StatusOrderCanceledShort'); $statusType='status5'; } elseif ($statut==self::STATUS_DRAFT){ - $labelstatut = $langs->trans('StatusOrderDraft'); - $labelstatutShort = $langs->trans('StatusOrderDraftShort'); + $labelStatus = $langs->trans('StatusOrderDraft'); + $labelStatusShort = $langs->trans('StatusOrderDraftShort'); $statusType='status0'; } elseif ($statut==self::STATUS_VALIDATED){ - $labelstatut = $langs->trans('StatusOrderValidated').$billedtext; - $labelstatutShort = $langs->trans('StatusOrderValidatedShort').$billedtext; + $labelStatus = $langs->trans('StatusOrderValidated').$billedtext; + $labelStatusShort = $langs->trans('StatusOrderValidatedShort').$billedtext; $statusType='status1'; } elseif ($statut==self::STATUS_SHIPMENTONPROCESS){ - $labelstatut = $langs->trans('StatusOrderSentShort').$billedtext; - $labelstatutShort = $langs->trans('StatusOrderSentShort').$billedtext; + $labelStatus = $langs->trans('StatusOrderSentShort').$billedtext; + $labelStatusShort = $langs->trans('StatusOrderSentShort').$billedtext; $statusType='status3'; } elseif ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))){ - $labelstatut = $langs->trans('StatusOrderToBill'); - $labelstatutShort = $langs->trans('StatusOrderToBillShort'); + $labelStatus = $langs->trans('StatusOrderToBill'); + $labelStatusShort = $langs->trans('StatusOrderToBillShort'); $statusType='status4'; } elseif ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))){ - $labelstatut = $langs->trans('StatusOrderProcessed').$billedtext; - $labelstatutShort = $langs->trans('StatusOrderProcessed').$billedtext; + $labelStatus = $langs->trans('StatusOrderProcessed').$billedtext; + $labelStatusShort = $langs->trans('StatusOrderProcessed').$billedtext; $statusType='status6'; } elseif ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))){ - $labelstatut = $langs->trans('StatusOrderDelivered'); - $labelstatutShort = $langs->trans('StatusOrderDelivered'); + $labelStatus = $langs->trans('StatusOrderDelivered'); + $labelStatusShort = $langs->trans('StatusOrderDelivered'); $statusType='status6'; } else{ - $labelstatut = $langs->trans('Unknown'); - $labelstatutShort = ''; + $labelStatus = $langs->trans('Unknown'); + $labelStatusShort = ''; $statusType=''; $mode = 0; } - return dolGetStatus($labelstatut, $labelstatutShort, '', $statusType, $mode); + return dolGetStatus($labelStatus, $labelStatusShort, '', $statusType, $mode); } diff --git a/htdocs/compta/cashcontrol/class/cashcontrol.class.php b/htdocs/compta/cashcontrol/class/cashcontrol.class.php index 354b50365ca..06331dc0f2b 100644 --- a/htdocs/compta/cashcontrol/class/cashcontrol.class.php +++ b/htdocs/compta/cashcontrol/class/cashcontrol.class.php @@ -311,20 +311,20 @@ class CashControl extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - if (empty($this->labelstatus) || empty($this->labelstatusshort)) + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { global $langs; //$langs->load("mymodule"); - $this->labelstatus[0] = $langs->trans('Draft'); - $this->labelstatus[1] = $langs->trans('Closed'); - $this->labelstatusshort[0] = $langs->trans('Draft'); - $this->labelstatusshort[1] = $langs->trans('Closed'); + $this->labelStatus[0] = $langs->trans('Draft'); + $this->labelStatus[1] = $langs->trans('Closed'); + $this->labelStatusShort[0] = $langs->trans('Draft'); + $this->labelStatusShort[1] = $langs->trans('Closed'); } $statusType = 'status0'; if ($status == self::STATUS_VALIDATED) $statusType = 'status6'; - return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); } /** diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 4016ebdc813..3058d418237 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -69,7 +69,7 @@ class BonPrelevement extends CommonObject public $total; public $fetched; public $statut; // 0-Wait, 1-Trans, 2-Done - public $labelstatut=array(); + public $labelStatus=array(); public $invoice_in_error=array(); public $thirdparty_in_error=array(); @@ -2002,48 +2002,48 @@ class BonPrelevement extends CommonObject public function LibStatut($statut, $mode = 0) { // phpcs:enable - if (empty($this->labelstatut)) + if (empty($this->labelStatus)) { global $langs; $langs->load("withdrawals"); - $this->labelstatut[0]=$langs->trans("StatusWaiting"); - $this->labelstatut[1]=$langs->trans("StatusTrans"); - $this->labelstatut[2]=$langs->trans("StatusCredited"); + $this->labelStatus[0]=$langs->trans("StatusWaiting"); + $this->labelStatus[1]=$langs->trans("StatusTrans"); + $this->labelStatus[2]=$langs->trans("StatusCredited"); } if ($mode == 0 || $mode == 1) { - return $this->labelstatut[$statut]; + return $this->labelStatus[$statut]; } elseif ($mode == 2) { - if ($statut==0) return img_picto($this->labelstatut[$statut], 'statut1').' '.$this->labelstatut[$statut]; - elseif ($statut==1) return img_picto($this->labelstatut[$statut], 'statut3').' '.$this->labelstatut[$statut]; - elseif ($statut==2) return img_picto($this->labelstatut[$statut], 'statut6').' '.$this->labelstatut[$statut]; + if ($statut==0) return img_picto($this->labelStatus[$statut], 'statut1').' '.$this->labelStatus[$statut]; + elseif ($statut==1) return img_picto($this->labelStatus[$statut], 'statut3').' '.$this->labelStatus[$statut]; + elseif ($statut==2) return img_picto($this->labelStatus[$statut], 'statut6').' '.$this->labelStatus[$statut]; } elseif ($mode == 3) { - if ($statut==0) return img_picto($this->labelstatut[$statut], 'statut1'); - elseif ($statut==1) return img_picto($this->labelstatut[$statut], 'statut3'); - elseif ($statut==2) return img_picto($this->labelstatut[$statut], 'statut6'); + if ($statut==0) return img_picto($this->labelStatus[$statut], 'statut1'); + elseif ($statut==1) return img_picto($this->labelStatus[$statut], 'statut3'); + elseif ($statut==2) return img_picto($this->labelStatus[$statut], 'statut6'); } elseif ($mode == 4) { - if ($statut==0) return img_picto($this->labelstatut[$statut], 'statut1').' '.$this->labelstatut[$statut]; - elseif ($statut==1) return img_picto($this->labelstatut[$statut], 'statut3').' '.$this->labelstatut[$statut]; - elseif ($statut==2) return img_picto($this->labelstatut[$statut], 'statut6').' '.$this->labelstatut[$statut]; + if ($statut==0) return img_picto($this->labelStatus[$statut], 'statut1').' '.$this->labelStatus[$statut]; + elseif ($statut==1) return img_picto($this->labelStatus[$statut], 'statut3').' '.$this->labelStatus[$statut]; + elseif ($statut==2) return img_picto($this->labelStatus[$statut], 'statut6').' '.$this->labelStatus[$statut]; } elseif ($mode == 5) { - if ($statut==0) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut], 'statut1'); - elseif ($statut==1) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut], 'statut3'); - elseif ($statut==2) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut], 'statut6'); + if ($statut==0) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut1'); + elseif ($statut==1) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut3'); + elseif ($statut==2) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut6'); } elseif ($mode == 6) { - if ($statut==0) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut], 'statut1'); - elseif ($statut==1) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut], 'statut3'); - elseif ($statut==2) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut], 'statut6'); + if ($statut==0) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut1'); + elseif ($statut==1) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut3'); + elseif ($statut==2) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut6'); } } } diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 895293efaf7..6b738719cf5 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -1264,13 +1264,13 @@ class Contact extends CommonObject // phpcs:enable global $langs; - $labelstatus = array( + $labelStatus = array( 0 => 'ActivityCeased', 1 => 'InActivity', 4 => 'InActivity', 5 => 'ActivityCeased', ); - $labelstatusshort = array( + $labelStatusShort = array( 0 => 'ActivityCeased', 1 => 'InActivity', 4 => 'InActivity', @@ -1280,8 +1280,8 @@ class Contact extends CommonObject $statusType = 'status4'; if ($status==0 || $status==5) $statusType = 'status5'; - $label = $langs->trans($labelstatus[$status]); - $labelshort = $langs->trans($labelstatusshort[$status]); + $label = $langs->trans($labelStatus[$status]); + $labelshort = $langs->trans($labelStatusShort[$status]); return dolGetStatus($label, $labelshort, '', $statusType, $mode); } diff --git a/htdocs/core/class/commoninvoice.class.php b/htdocs/core/class/commoninvoice.class.php index ec27b83e0a0..b6381ccc7ca 100644 --- a/htdocs/core/class/commoninvoice.class.php +++ b/htdocs/core/class/commoninvoice.class.php @@ -496,27 +496,27 @@ abstract class CommonInvoice extends CommonObject $prefix='Short'; if (! $paye){ if ($status == 0) { - $labelstatut = $langs->trans('BillStatusDraft'); - $labelstatutShort = $langs->trans('Bill'.$prefix.'StatusDraft'); + $labelStatus = $langs->trans('BillStatusDraft'); + $labelStatusShort = $langs->trans('Bill'.$prefix.'StatusDraft'); } elseif (($status == 3 || $status == 2) && $alreadypaid <= 0) { - $labelstatut = $langs->trans('BillStatusClosedUnpaid'); - $labelstatutShort = $langs->trans('Bill'.$prefix.'StatusClosedUnpaid'); + $labelStatus = $langs->trans('BillStatusClosedUnpaid'); + $labelStatusShort = $langs->trans('Bill'.$prefix.'StatusClosedUnpaid'); $statusType='status5'; } elseif (($status == 3 || $status == 2) && $alreadypaid > 0) { - $labelstatut = $langs->trans('BillStatusClosedPaidPartially'); - $labelstatutShort = $langs->trans('Bill'.$prefix.'StatusClosedPaidPartially'); + $labelStatus = $langs->trans('BillStatusClosedPaidPartially'); + $labelStatusShort = $langs->trans('Bill'.$prefix.'StatusClosedPaidPartially'); $statusType='status9'; } elseif ($alreadypaid <= 0) { - $labelstatut = $langs->trans('BillStatusNotPaid'); - $labelstatutShort = $langs->trans('Bill'.$prefix.'StatusNotPaid'); + $labelStatus = $langs->trans('BillStatusNotPaid'); + $labelStatusShort = $langs->trans('Bill'.$prefix.'StatusNotPaid'); $statusType='status1'; } else { - $labelstatut = $langs->trans('BillStatusStarted'); - $labelstatutShort = $langs->trans('Bill'.$prefix.'StatusStarted'); + $labelStatus = $langs->trans('BillStatusStarted'); + $labelStatusShort = $langs->trans('Bill'.$prefix.'StatusStarted'); $statusType='status3'; } } @@ -525,20 +525,20 @@ abstract class CommonInvoice extends CommonObject $statusType='status6'; if ($type == self::TYPE_CREDIT_NOTE){ - $labelstatut = $langs->trans('BillStatusPaidBackOrConverted'); // credit note - $labelstatutShort = $langs->trans('Bill'.$prefix.'StatusPaidBackOrConverted'); // credit note + $labelStatus = $langs->trans('BillStatusPaidBackOrConverted'); // credit note + $labelStatusShort = $langs->trans('Bill'.$prefix.'StatusPaidBackOrConverted'); // credit note } elseif ($type == self::TYPE_DEPOSIT){ - $labelstatut = $langs->trans('BillStatusConverted'); // deposit invoice - $labelstatutShort = $langs->trans('Bill'.$prefix.'StatusConverted'); // deposit invoice + $labelStatus = $langs->trans('BillStatusConverted'); // deposit invoice + $labelStatusShort = $langs->trans('Bill'.$prefix.'StatusConverted'); // deposit invoice } else{ - $labelstatut = $langs->trans('BillStatusPaid'); - $labelstatutShort = $langs->trans('Bill'.$prefix.'StatusPaid'); + $labelStatus = $langs->trans('BillStatusPaid'); + $labelStatusShort = $langs->trans('Bill'.$prefix.'StatusPaid'); } } - return dolGetStatus($labelstatut, $labelstatutShort, '', $statusType, $mode); + return dolGetStatus($labelStatus, $labelStatusShort, '', $statusType, $mode); } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 943afe69a1a..56b0dc93c35 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -8182,7 +8182,7 @@ function dolGetStatus($statusLabel = '', $statusLabelShort = '', $html = '', $st elseif ($displayMode == 6) $displayMode = 5; } - // image's filename are still in French, so we use this array to convert + // For backward compatibility. Image's filename are still in French, so we use this array to convert $statusImg=array( 'status0' => 'statut0' ,'status1' => 'statut1' @@ -8212,6 +8212,7 @@ function dolGetStatus($statusLabel = '', $statusLabelShort = '', $html = '', $st $return = $htmlImg .' '. $htmlLabel; } elseif ($displayMode === 5) { + // Add here a span class="hideonsmartphone ? $return = $htmlLabelShort .' '. $htmlImg; } else { // $displayMode >= 6 diff --git a/htdocs/don/class/don.class.php b/htdocs/don/class/don.class.php index b24213d5c70..4c8c5f73d9b 100644 --- a/htdocs/don/class/don.class.php +++ b/htdocs/don/class/don.class.php @@ -116,12 +116,12 @@ class Don extends CommonObject /** * @var array Array of status label */ - public $labelstatut; + public $labelStatus; /** * @var array Array of status label short */ - public $labelstatutshort; + public $labelStatusShort; const STATUS_DRAFT = 0; @@ -163,25 +163,25 @@ class Don extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - if (empty($this->labelstatut) || empty($this->labelstatutshort)) + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { global $langs; $langs->load("donations"); - $this->labelstatut[-1]=$langs->trans("Canceled"); - $this->labelstatut[0]=$langs->trans("DonationStatusPromiseNotValidated"); - $this->labelstatut[1]=$langs->trans("DonationStatusPromiseValidated"); - $this->labelstatut[2]=$langs->trans("DonationStatusPaid"); - $this->labelstatutshort[-1]=$langs->trans("Canceled"); - $this->labelstatutshort[0]=$langs->trans("DonationStatusPromiseNotValidatedShort"); - $this->labelstatutshort[1]=$langs->trans("DonationStatusPromiseValidatedShort"); - $this->labelstatutshort[2]=$langs->trans("DonationStatusPaidShort"); + $this->labelStatus[-1]=$langs->trans("Canceled"); + $this->labelStatus[0]=$langs->trans("DonationStatusPromiseNotValidated"); + $this->labelStatus[1]=$langs->trans("DonationStatusPromiseValidated"); + $this->labelStatus[2]=$langs->trans("DonationStatusPaid"); + $this->labelStatusShort[-1]=$langs->trans("Canceled"); + $this->labelStatusShort[0]=$langs->trans("DonationStatusPromiseNotValidatedShort"); + $this->labelStatusShort[1]=$langs->trans("DonationStatusPromiseValidatedShort"); + $this->labelStatusShort[2]=$langs->trans("DonationStatusPaidShort"); } $statusType = 'status'.$status; if ($status == self::STATUS_CANCELED) $statusType = 'status5'; if ($status == self::STATUS_PAID) $statusType = 'status6'; - return dolGetStatus($this->labelstatut[$status], $this->labelstatutshort[$status], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); } diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index 7469faaa356..6717b42609b 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -506,46 +506,46 @@ class EmailCollector extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - if (empty($this->labelstatus)) + if (empty($this->labelStatus)) { global $langs; //$langs->load("mymodule"); - $this->labelstatus[1] = $langs->trans('Enabled'); - $this->labelstatus[0] = $langs->trans('Disabled'); + $this->labelStatus[1] = $langs->trans('Enabled'); + $this->labelStatus[0] = $langs->trans('Disabled'); } if ($mode == 0) { - return $this->labelstatus[$status]; + return $this->labelStatus[$status]; } elseif ($mode == 1) { - return $this->labelstatus[$status]; + return $this->labelStatus[$status]; } elseif ($mode == 2) { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; + elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; } elseif ($mode == 3) { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } elseif ($mode == 4) { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; + elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; } elseif ($mode == 5) { - if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + if ($status == 1) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + elseif ($status == 0) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } elseif ($mode == 6) { - if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + if ($status == 1) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + elseif ($status == 0) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } } diff --git a/htdocs/emailcollector/class/emailcollectoraction.class.php b/htdocs/emailcollector/class/emailcollectoraction.class.php index 0033b615f8a..7f7360b49f1 100644 --- a/htdocs/emailcollector/class/emailcollectoraction.class.php +++ b/htdocs/emailcollector/class/emailcollectoraction.class.php @@ -408,46 +408,46 @@ class EmailCollectorAction extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - if (empty($this->labelstatus)) + if (empty($this->labelStatus)) { global $langs; //$langs->load("emailcollector"); - $this->labelstatus[1] = $langs->trans('Enabled'); - $this->labelstatus[0] = $langs->trans('Disabled'); + $this->labelStatus[1] = $langs->trans('Enabled'); + $this->labelStatus[0] = $langs->trans('Disabled'); } if ($mode == 0) { - return $this->labelstatus[$status]; + return $this->labelStatus[$status]; } elseif ($mode == 1) { - return $this->labelstatus[$status]; + return $this->labelStatus[$status]; } elseif ($mode == 2) { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; + elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; } elseif ($mode == 3) { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } elseif ($mode == 4) { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; + elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; } elseif ($mode == 5) { - if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + if ($status == 1) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + elseif ($status == 0) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } elseif ($mode == 6) { - if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + if ($status == 1) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + elseif ($status == 0) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } } diff --git a/htdocs/emailcollector/class/emailcollectorfilter.class.php b/htdocs/emailcollector/class/emailcollectorfilter.class.php index 5a8f3003c84..43eb9d1cb65 100644 --- a/htdocs/emailcollector/class/emailcollectorfilter.class.php +++ b/htdocs/emailcollector/class/emailcollectorfilter.class.php @@ -383,46 +383,46 @@ class EmailCollectorFilter extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - if (empty($this->labelstatus)) + if (empty($this->labelStatus)) { global $langs; //$langs->load("emailcollector"); - $this->labelstatus[1] = $langs->trans('Enabled'); - $this->labelstatus[0] = $langs->trans('Disabled'); + $this->labelStatus[1] = $langs->trans('Enabled'); + $this->labelStatus[0] = $langs->trans('Disabled'); } if ($mode == 0) { - return $this->labelstatus[$status]; + return $this->labelStatus[$status]; } elseif ($mode == 1) { - return $this->labelstatus[$status]; + return $this->labelStatus[$status]; } elseif ($mode == 2) { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; + elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; } elseif ($mode == 3) { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } elseif ($mode == 4) { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; + elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; } elseif ($mode == 5) { - if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + if ($status == 1) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + elseif ($status == 0) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } elseif ($mode == 6) { - if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + if ($status == 1) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + elseif ($status == 0) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } } diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 52072b63578..fffde04ac3d 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -683,12 +683,12 @@ class ExpenseReport extends CommonObject // phpcs:enable global $langs; - $labelstatus = $langs->trans($this->statuts[$status]); - $labelstatusshort = $langs->trans($this->statuts_short[$status]); + $labelStatus = $langs->trans($this->statuts[$status]); + $labelStatusShort = $langs->trans($this->statuts_short[$status]); $statusType = $this->statuts_logo[$status]; - return dolGetStatus($labelstatus, $labelstatusshort, '', $statusType, $mode); + return dolGetStatus($labelStatus, $labelStatusShort, '', $statusType, $mode); } diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 8fe5f0570fe..b75eec43eac 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -1227,20 +1227,20 @@ class Holiday extends CommonObject public function LibStatut($status, $mode = 0, $startdate = '') { // phpcs:enable - if (empty($this->labelstatus) || empty($this->labelstatusshort)) + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { global $langs; //$langs->load("mymodule"); - $this->labelstatus[self::STATUS_DRAFT] = $langs->trans('DraftCP'); - $this->labelstatus[self::STATUS_VALIDATED] = $langs->trans('ToReviewCP'); - $this->labelstatus[self::STATUS_APPROVED] = $langs->trans('ApprovedCP'); - $this->labelstatus[self::STATUS_CANCELED] = $langs->trans('CancelCP'); - $this->labelstatus[self::STATUS_REFUSED] = $langs->trans('RefuseCP'); - $this->labelstatusshort[self::STATUS_DRAFT] = $langs->trans('DraftCP'); - $this->labelstatusshort[self::STATUS_VALIDATED] = $langs->trans('ToReviewCP'); - $this->labelstatusshort[self::STATUS_APPROVED] = $langs->trans('ApprovedCP'); - $this->labelstatusshort[self::STATUS_CANCELED] = $langs->trans('CancelCP'); - $this->labelstatusshort[self::STATUS_REFUSED] = $langs->trans('RefuseCP'); + $this->labelStatus[self::STATUS_DRAFT] = $langs->trans('DraftCP'); + $this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('ToReviewCP'); + $this->labelStatus[self::STATUS_APPROVED] = $langs->trans('ApprovedCP'); + $this->labelStatus[self::STATUS_CANCELED] = $langs->trans('CancelCP'); + $this->labelStatus[self::STATUS_REFUSED] = $langs->trans('RefuseCP'); + $this->labelStatusShort[self::STATUS_DRAFT] = $langs->trans('DraftCP'); + $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->trans('ToReviewCP'); + $this->labelStatusShort[self::STATUS_APPROVED] = $langs->trans('ApprovedCP'); + $this->labelStatusShort[self::STATUS_CANCELED] = $langs->trans('CancelCP'); + $this->labelStatusShort[self::STATUS_REFUSED] = $langs->trans('RefuseCP'); } $statusType = 'status6'; @@ -1250,7 +1250,7 @@ class Holiday extends CommonObject if ($status == self::STATUS_CANCELED) $statusType = 'status5'; if ($status == self::STATUS_REFUSED) $statusType = 'status5'; - return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); } diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 41d0af33d46..43488429807 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -656,22 +656,22 @@ class MyObject extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - if (empty($this->labelstatus) || empty($this->labelstatusshort)) + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { global $langs; //$langs->load("mymodule"); - $this->labelstatus[self::STATUS_DRAFT] = $langs->trans('Draft'); - $this->labelstatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); - $this->labelstatus[self::STATUS_CANCELED] = $langs->trans('Disabled'); - $this->labelstatusshort[self::STATUS_DRAFT] = $langs->trans('Draft'); - $this->labelstatusshort[self::STATUS_VALIDATED] = $langs->trans('Enabled'); - $this->labelstatusshort[self::STATUS_CANCELED] = $langs->trans('Disabled'); + $this->labelStatus[self::STATUS_DRAFT] = $langs->trans('Draft'); + $this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); + $this->labelStatus[self::STATUS_CANCELED] = $langs->trans('Disabled'); + $this->labelStatusShort[self::STATUS_DRAFT] = $langs->trans('Draft'); + $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->trans('Enabled'); + $this->labelStatusShort[self::STATUS_CANCELED] = $langs->trans('Disabled'); } $statusType = 'status'.$status; if ($status == self::STATUS_VALIDATED) $statusType = 'status4'; - return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); } /** diff --git a/htdocs/mrp/class/mo.class.php b/htdocs/mrp/class/mo.class.php index 71a743eb071..49160092b63 100644 --- a/htdocs/mrp/class/mo.class.php +++ b/htdocs/mrp/class/mo.class.php @@ -546,21 +546,21 @@ class Mo extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - if (empty($this->labelstatus)) + if (empty($this->labelStatus)) { global $langs; //$langs->load("mrp"); - $this->labelstatus[self::STATUS_DRAFT] = $langs->trans('Draft'); - $this->labelstatus[self::STATUS_VALIDATED] = $langs->trans('Validated'); - $this->labelstatus[self::STATUS_INPROGRESS] = $langs->trans('InProgress'); - $this->labelstatus[self::STATUS_PRODUCED] = $langs->trans('StatusMOProduced'); - $this->labelstatus[self::STATUS_CANCELED] = $langs->trans('Canceled'); + $this->labelStatus[self::STATUS_DRAFT] = $langs->trans('Draft'); + $this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('Validated'); + $this->labelStatus[self::STATUS_INPROGRESS] = $langs->trans('InProgress'); + $this->labelStatus[self::STATUS_PRODUCED] = $langs->trans('StatusMOProduced'); + $this->labelStatus[self::STATUS_CANCELED] = $langs->trans('Canceled'); } $statusType = 'status'.$status; //if ($status == self::STATUS_VALIDATED) $statusType = 'status4'; - return dolGetStatus($this->labelstatus[$status], $this->labelstatus[$status], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatus[$status], '', $statusType, $mode); } /** diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index bf2b3a0e410..5243e84e4de 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -4390,7 +4390,7 @@ class Product extends CommonObject // phpcs:enable global $conf, $langs; - $labelstatut = $labelstatutShort = ''; + $labelStatus = $labelStatusShort = ''; $langs->load('products'); if (! empty($conf->productbatch->enabled)) { $langs->load("productbatch"); @@ -4423,31 +4423,31 @@ class Product extends CommonObject if ($status == 0) { // $type 0=Status "to sell", 1=Status "to buy", 2=Status "to Batch" if($type==0) { - $labelstatut = $langs->trans('ProductStatusNotOnSellShort'); - $labelstatutShort = $langs->trans('ProductStatusNotOnSell'); + $labelStatus = $langs->trans('ProductStatusNotOnSellShort'); + $labelStatusShort = $langs->trans('ProductStatusNotOnSell'); } elseif($type == 1) { - $labelstatut = $langs->trans('ProductStatusNotOnBuyShort'); - $labelstatutShort = $langs->trans('ProductStatusNotOnBuy'); + $labelStatus = $langs->trans('ProductStatusNotOnBuyShort'); + $labelStatusShort = $langs->trans('ProductStatusNotOnBuy'); } elseif($type == 2) { - $labelstatut = $langs->trans('ProductStatusNotOnBatch'); - $labelstatutShort = $langs->trans('ProductStatusNotOnBatchShort'); + $labelStatus = $langs->trans('ProductStatusNotOnBatch'); + $labelStatusShort = $langs->trans('ProductStatusNotOnBatchShort'); } } elseif ($status == 1) { // $type 0=Status "to sell", 1=Status "to buy", 2=Status "to Batch" if ($type==0) { - $labelstatut = $langs->trans('ProductStatusOnSellShort'); - $labelstatutShort = $langs->trans('ProductStatusOnSell'); + $labelStatus = $langs->trans('ProductStatusOnSellShort'); + $labelStatusShort = $langs->trans('ProductStatusOnSell'); } elseif ($type == 1) { - $labelstatut = $langs->trans('ProductStatusOnBuyShort'); - $labelstatutShort = $langs->trans('ProductStatusOnBuy'); + $labelStatus = $langs->trans('ProductStatusOnBuyShort'); + $labelStatusShort = $langs->trans('ProductStatusOnBuy'); } elseif ($type == 2) { - $labelstatut = $langs->trans('ProductStatusOnBatch'); - $labelstatutShort = $langs->trans('ProductStatusOnBatchShort'); + $labelStatus = $langs->trans('ProductStatusOnBatch'); + $labelStatusShort = $langs->trans('ProductStatusOnBatchShort'); } } @@ -4455,7 +4455,7 @@ class Product extends CommonObject if ($mode > 6) { return dolGetStatus($langs->trans('Unknown'), '', '', 'status0', 0); } else { - return dolGetStatus($labelstatut, $labelstatutShort, '', $statuttrans, $mode); + return dolGetStatus($labelStatus, $labelStatusShort, '', $statuttrans, $mode); } } diff --git a/htdocs/product/index.php b/htdocs/product/index.php index 477dcc20b0c..ff5e83b9410 100644 --- a/htdocs/product/index.php +++ b/htdocs/product/index.php @@ -266,7 +266,7 @@ print '
    '; /* - * Last modified products + * Latest modified products */ $max=15; $sql = "SELECT p.rowid, p.label, p.price, p.ref, p.fk_product_type, p.tosell, p.tobuy, p.tobatch, p.fk_price_expression,"; @@ -299,11 +299,11 @@ if ($result) print '
    '; print '
    '; print $langs->trans("URL"); print ''; @@ -2911,10 +2891,12 @@ if ($action == 'editmeta' || $action == 'createcontainer') print '
    '; - print ' * '.$langs->trans("OrEnterPageInfoManually").'

    '; + if (! empty($conf->use_javascript_ajax)) print ' '; + print '
    '; + print '
    '; } - print ''; + print '
    '; if ($action != 'createcontainer') { @@ -2928,16 +2910,9 @@ if ($action == 'editmeta' || $action == 'createcontainer') print $langs->trans('InternalURLOfPage'); print ''; - /* - print ''; - */ - $type_container=$objectpage->type_container; $pageurl=$objectpage->pageurl; $pagealiasalt=$objectpage->aliasalt; @@ -2972,7 +2947,7 @@ if ($action == 'editmeta' || $action == 'createcontainer') print ''; // Alias @@ -3023,26 +2998,28 @@ if ($action == 'editmeta' || $action == 'createcontainer') print $formadmin->select_language($pagelang?$pagelang:$langs->defaultlang, 'WEBSITE_LANG', 0, null, '1'); print ''; + // Translation of + $translationof=0; + print ''; - } - // Has translation pages $sql='SELECT rowid, lang from '.MAIN_DB_PREFIX.'website_page where fk_page = '.$objectpage->id; $resql = $db->query($sql); @@ -3051,9 +3028,8 @@ if ($action == 'editmeta' || $action == 'createcontainer') $num_rows = $db->num_rows($resql); if ($num_rows > 0) { - print ''; } } else dol_print_error($db); } + print ''; print '
    '; print '/public/website/index.php?website='.urlencode($websitekey).'&pageid='.urlencode($pageid); + //if ($objectpage->grabbed_from) print ' - '.$langs->trans('InitiallyGrabbedFrom').' '.$objectpage->grabbed_from.''; print '
    '; - print $langs->trans('InitiallyGrabbedFrom'); - print ''; - print $objectpage->grabbed_from; - print '
    '; print $langs->trans('WEBSITE_TITLE'); print ''; - print ''; + print ''; print '
    '; + print $langs->trans('TranslationLinks'); + print ''; + if ($action == 'editmeta' || $action == 'createcontainer' || $objectpage->fk_page > 0) + { + $sourcepage=new WebsitePage($db); + $result = $sourcepage->fetch($objectpage->fk_page); + if ($result == 0) + { + // not found, we can reset value to clean database + } + elseif ($result > 0) + { + $translationof = $sourcepage->id; + print ''.$langs->trans('ThisPageIsTranslationOf').' '; + print $formwebsite->selectContainer($website, 'pageidfortranslation', $sourcepage->id, 1, $action); + } + } if ($action != 'createcontainer') { - // Translation of - if ($objectpage->fk_page > 0) - { - print '
    '; - print $langs->trans('ThisPageIsTranslationOf'); - print ''; - $sourcepage=new WebsitePage($db); - $result = $sourcepage->fetch($objectpage->fk_page); - if ($result == 0) // not found, we can reset value - { - } - elseif ($result > 0) - { - print $sourcepage->getNomUrl(1); - } - print '
    '; - print $langs->trans('ThisPageHasTranslationPages'); - print ''; + if ($translationof) print '
    '; + print ''.$langs->trans('ThisPageHasTranslationPages').':
    '; $i=0; while ($obj = $db->fetch_object($resql)) { @@ -3063,11 +3039,11 @@ if ($action == 'editmeta' || $action == 'createcontainer') print $tmppage->getNomUrl(1).' ('.$tmppage->lang.')'; $i++; } - print '
    '; $htmlhelp=$langs->trans("WEBSITE_ALIASALTDesc"); @@ -3127,7 +3103,7 @@ if ($action == 'editmeta' || $action == 'createcontainer') print '
    '; if ($action == 'createcontainer') { - print '
    '; + print '
    '; print ''; print ''; @@ -3155,6 +3131,20 @@ if ($action == 'editmeta' || $action == 'createcontainer') jQuery("#WEBSITE_PAGENAME").keyup(function() { disableautofillofalias = 1; }); + + jQuery("#checkboxcreatefromfetching,#checkboxcreatemanually").change(function() { + console.log("we select a method to create a new container"+jQuery("#checkboxcreatefromfetching:checked").val()) + if (typeof(jQuery("#checkboxcreatefromfetching:checked").val()) != \'undefined\') + { + jQuery(".tablecheckboxcreatefromfetching").show(); + jQuery(".tablecheckboxcreatemanually").hide(); + } + if (typeof(jQuery("#checkboxcreatemanually:checked").val()) != \'undefined\') + { + jQuery(".tablecheckboxcreatefromfetching").hide(); + jQuery(".tablecheckboxcreatemanually").show(); + } + }); }); '; } @@ -3286,6 +3276,7 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm') if ($listofpages['code'] == 'OK') { + print ''."\n"; print '
    '; if ($action == 'replacesiteconfirm') @@ -3317,7 +3308,8 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm') print '
    '.$langs->trans("Container").''; - print ''.($answerrecord->title ? $answerrecord->title : $langs->trans("NoTitle")).''; + print $answerrecord->getNomUrl(1); + print ' ('.($answerrecord->title ? $answerrecord->title : $langs->trans("NoTitle")).')'; print ''.$answerrecord->description; print '
    '; print $langs->trans('TranslationLinks'); print ''; - if ($action == 'editmeta' || $action == 'createcontainer' || $objectpage->fk_page > 0) + if ($action != 'createcontainer') + { + // Has translation pages + $sql='SELECT rowid, lang from '.MAIN_DB_PREFIX.'website_page where fk_page = '.$objectpage->id; + $resql = $db->query($sql); + if ($resql) + { + $num_rows = $db->num_rows($resql); + if ($num_rows > 0) + { + print ''.$langs->trans('ThisPageHasTranslationPages').':
    '; + $i=0; + while ($obj = $db->fetch_object($resql)) + { + $tmppage=new WebsitePage($db); + $tmppage->fetch($obj->rowid); + if ($i > 0) print ' - '; + print $tmppage->getNomUrl(1).' ('.$tmppage->lang.')
    '; + $translatedby++; + $i++; + } + } + } + else dol_print_error($db); + } + if (empty($translatedby) && ($action == 'editmeta' || $action == 'createcontainer' || $objectpage->fk_page > 0)) { $sourcepage=new WebsitePage($db); $result = $sourcepage->fetch($objectpage->fk_page); @@ -3018,31 +3044,6 @@ if ($action == 'editmeta' || $action == 'createcontainer') print $formwebsite->selectContainer($website, 'pageidfortranslation', $sourcepage->id, 1, $action); } } - if ($action != 'createcontainer') - { - // Has translation pages - $sql='SELECT rowid, lang from '.MAIN_DB_PREFIX.'website_page where fk_page = '.$objectpage->id; - $resql = $db->query($sql); - if ($resql) - { - $num_rows = $db->num_rows($resql); - if ($num_rows > 0) - { - if ($translationof) print '
    '; - print ''.$langs->trans('ThisPageHasTranslationPages').':
    '; - $i=0; - while ($obj = $db->fetch_object($resql)) - { - $tmppage=new WebsitePage($db); - $tmppage->fetch($obj->rowid); - if ($i > 0) print ' - '; - print $tmppage->getNomUrl(1).' ('.$tmppage->lang.')'; - $i++; - } - } - } - else dol_print_error($db); - } print '
    '; From a0e377feb3b7e978fce9bfc09bc32d35c6ed0599 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 22:11:26 +0100 Subject: [PATCH 723/980] Look and feel v11 --- .../compta/cashcontrol/cashcontrol_list.php | 72 +++++++++---------- .../cashcontrol/class/cashcontrol.class.php | 41 ++--------- 2 files changed, 42 insertions(+), 71 deletions(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_list.php b/htdocs/compta/cashcontrol/cashcontrol_list.php index 6b767bc3949..dce1c13bc40 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_list.php +++ b/htdocs/compta/cashcontrol/cashcontrol_list.php @@ -322,7 +322,7 @@ $arrayofmassactions = array( //'presend'=>$langs->trans("SendByMail"), //'builddoc'=>$langs->trans("PDFMerge"), ); -if ($user->rights->monmodule->delete) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); +//if ($user->rights->monmodule->delete) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array(); $massactionbutton=$form->selectMassAction('', $arrayofmassactions); @@ -336,13 +336,9 @@ print ''; print ''; print ''; -$newcardbutton=''; -//if ($user->rights->monmodule->creer) - //{ -$newcardbutton=''.$langs->trans('New').''; -$newcardbutton.= ''; -$newcardbutton.= ''; -//} +$permforcashfence = 1; + +$newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/compta/cashcontrol/cashcontrol_card?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permforcashfence); print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'cash-register', 0, $newcardbutton, '', $limit); @@ -389,12 +385,18 @@ print ''; foreach($object->fields as $key => $val) { - $cssforfield=''; - if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; - if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; - if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price'))) $cssforfield.=($cssforfield?' ':'').'right'; - if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; - if (! empty($arrayfields['t.'.$key]['checked'])) print ''; + $cssforfield=(empty($val['css'])?'':$val['css']); + if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $val['label'] != 'TechnicalID') $cssforfield.=($cssforfield?' ':'').'right'; + if (! empty($arrayfields['t.'.$key]['checked'])) + { + print ''; + } } // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; @@ -416,15 +418,15 @@ print ''."\n"; print ''; foreach($object->fields as $key => $val) { - $cssforfield=''; - if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; - if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; - if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price'))) $cssforfield.=($cssforfield?' ':'').'right'; - if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; - if (! empty($arrayfields['t.'.$key]['checked'])) - { - print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield?'class="'.$cssforfield.'"':''), $sortfield, $sortorder, ($cssforfield?$cssforfield.' ':''))."\n"; - } + $cssforfield=(empty($val['css'])?'':$val['css']); + if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $val['label'] != 'TechnicalID') $cssforfield.=($cssforfield?' ':'').'right'; + if (! empty($arrayfields['t.'.$key]['checked'])) + { + print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield?'class="'.$cssforfield.'"':''), $sortfield, $sortorder, ($cssforfield?$cssforfield.' ':''))."\n"; + } } // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; @@ -467,25 +469,21 @@ while ($i < min($num, $limit)) print ''; foreach($object->fields as $key => $val) { - $cssforfield=''; - if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; - elseif ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + $cssforfield=(empty($val['css'])?'':$val['css']); + if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; - if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; - elseif ($key == 'ref') $cssforfield.=($cssforfield?' ':'').'nowrap'; + if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif ($key == 'ref') $cssforfield.=($cssforfield?' ':'').'nowrap'; - if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price'))) $cssforfield.=($cssforfield?' ':'').'right'; + if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $key != 'status') $cssforfield.=($cssforfield?' ':'').'right'; if (! empty($arrayfields['t.'.$key]['checked'])) { - print ''; - print $object->showOutputField($val, $key, $obj->$key, ''); + print ''; + if ($key == 'status') print $object->getLibStatut(5); + elseif (in_array($val['type'], array('date','datetime','timestamp'))) print $object->showOutputField($val, $key, $db->jdate($obj->$key), ''); + else print $object->showOutputField($val, $key, $obj->$key, ''); print ''; if (! $i) $totalarray['nbfield']++; if (! empty($val['isameasure'])) diff --git a/htdocs/compta/cashcontrol/class/cashcontrol.class.php b/htdocs/compta/cashcontrol/class/cashcontrol.class.php index 87db81bf98d..354b50365ca 100644 --- a/htdocs/compta/cashcontrol/class/cashcontrol.class.php +++ b/htdocs/compta/cashcontrol/class/cashcontrol.class.php @@ -311,47 +311,20 @@ class CashControl extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - if (empty($this->labelstatus)) + if (empty($this->labelstatus) || empty($this->labelstatusshort)) { global $langs; //$langs->load("mymodule"); $this->labelstatus[0] = $langs->trans('Draft'); $this->labelstatus[1] = $langs->trans('Closed'); + $this->labelstatusshort[0] = $langs->trans('Draft'); + $this->labelstatusshort[1] = $langs->trans('Closed'); } - if ($mode == 0) - { - return $this->labelstatus[$status]; - } - elseif ($mode == 1) - { - return $this->labelstatus[$status]; - } - elseif ($mode == 2) - { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut6', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut0', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; - } - elseif ($mode == 3) - { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut6', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut0', '', false, 0, 0, '', 'valignmiddle'); - } - elseif ($mode == 4) - { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut6', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut0', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; - } - elseif ($mode == 5) - { - if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut6', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut0', '', false, 0, 0, '', 'valignmiddle'); - } - elseif ($mode == 6) - { - if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut6', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut0', '', false, 0, 0, '', 'valignmiddle'); - } + $statusType = 'status0'; + if ($status == self::STATUS_VALIDATED) $statusType = 'status6'; + + return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); } /** From af09c77a0c6ddc24f3acbe8ab1ae7ed69607ddbc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 22:15:18 +0100 Subject: [PATCH 724/980] Fix phpcs --- htdocs/bom/class/api_boms.class.php | 2 +- htdocs/core/modules/modStripe.class.php | 2 +- .../modules/myobject/doc/doc_generic_myobject_odt.modules.php | 2 +- htdocs/societe/canvas/company/tpl/card_edit.tpl.php | 4 ++-- htdocs/societe/canvas/individual/tpl/card_edit.tpl.php | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/bom/class/api_boms.class.php b/htdocs/bom/class/api_boms.class.php index 471fb4f2cce..40d53bff787 100644 --- a/htdocs/bom/class/api_boms.class.php +++ b/htdocs/bom/class/api_boms.class.php @@ -260,7 +260,7 @@ class Boms extends DolibarrApi throw new RestException(500, 'Error when deleting BOM : '.$this->bom->error); } - return array( + return array( 'success' => array( 'code' => 200, 'message' => 'BOM deleted' diff --git a/htdocs/core/modules/modStripe.class.php b/htdocs/core/modules/modStripe.class.php index 30d90b8a0c6..cfa45cb6a4b 100644 --- a/htdocs/core/modules/modStripe.class.php +++ b/htdocs/core/modules/modStripe.class.php @@ -150,7 +150,7 @@ class modStripe extends DolibarrModules 'target' => '', 'user' => 0 ); - $this->menu[$r] = array( + $this->menu[$r] = array( 'fk_menu' => 'fk_mainmenu=bank,fk_leftmenu=stripe', 'type' => 'left', 'titre' => 'StripePayoutList', diff --git a/htdocs/modulebuilder/template/core/modules/myobject/doc/doc_generic_myobject_odt.modules.php b/htdocs/modulebuilder/template/core/modules/myobject/doc/doc_generic_myobject_odt.modules.php index bffc0d5c470..822d6110c4b 100644 --- a/htdocs/modulebuilder/template/core/modules/myobject/doc/doc_generic_myobject_odt.modules.php +++ b/htdocs/modulebuilder/template/core/modules/myobject/doc/doc_generic_myobject_odt.modules.php @@ -486,7 +486,7 @@ class doc_generic_myobject_odt extends ModelePDFMyObject } else { try { - $odfHandler->saveToDisk($file); + $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error=$e->getMessage(); dol_syslog($e->getMessage(), LOG_INFO); diff --git a/htdocs/societe/canvas/company/tpl/card_edit.tpl.php b/htdocs/societe/canvas/company/tpl/card_edit.tpl.php index b26f19204bb..5f513fa886a 100644 --- a/htdocs/societe/canvas/company/tpl/card_edit.tpl.php +++ b/htdocs/societe/canvas/company/tpl/card_edit.tpl.php @@ -77,7 +77,7 @@ $contact = $GLOBALS['objcanvas']->control->object; control->tpl['ismodifiable_customercode']) { ?> - control->tpl['customercode']; ?> + control->tpl['customercode']; ?> @@ -98,7 +98,7 @@ $contact = $GLOBALS['objcanvas']->control->object; control->tpl['ismodifiable_suppliercode']) { ?> - control->tpl['suppliercode']; ?> + control->tpl['suppliercode']; ?> diff --git a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php index b69e9e8370b..d25a9f36121 100644 --- a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php +++ b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php @@ -75,7 +75,7 @@ if (empty($conf) || ! is_object($conf)) control->tpl['ismodifiable_customercode']) { ?> - control->tpl['customercode']; ?> + control->tpl['customercode']; ?> @@ -96,7 +96,7 @@ if (empty($conf) || ! is_object($conf)) control->tpl['ismodifiable_suppliercode']) { ?> - control->tpl['suppliercode']; ?> + control->tpl['suppliercode']; ?> From 716c2bb531b790afccec28da9365964224ad1af7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 22:46:34 +0100 Subject: [PATCH 725/980] Work on MO --- htdocs/admin/mrp.php | 522 ++++++++++++++++++ .../bom/doc/doc_generic_bom_odt.modules.php | 2 +- htdocs/core/modules/bom/modules_bom.php | 2 +- htdocs/core/modules/modBom.class.php | 15 +- htdocs/core/modules/modMrp.class.php | 37 +- .../mrp/doc/doc_generic_mo_odt.modules.php | 4 +- .../doctemplates/boms/template_bom.odt | Bin 17591 -> 18723 bytes .../install/doctemplates/mrps/template_mo.odt | Bin 0 -> 18089 bytes htdocs/langs/en_US/mrp.lang | 8 +- htdocs/mrp/admin/setup.php | 151 ----- 10 files changed, 573 insertions(+), 168 deletions(-) create mode 100644 htdocs/admin/mrp.php create mode 100644 htdocs/install/doctemplates/mrps/template_mo.odt delete mode 100644 htdocs/mrp/admin/setup.php diff --git a/htdocs/admin/mrp.php b/htdocs/admin/mrp.php new file mode 100644 index 00000000000..f3121faa70d --- /dev/null +++ b/htdocs/admin/mrp.php @@ -0,0 +1,522 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/admin/mrp.php + * \ingroup mrp + * \brief Setup page of module MRP + */ + +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/mrp/class/mo.class.php'; +require_once DOL_DOCUMENT_ROOT.'/mrp/lib/mrp_mo.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/mrp/lib/mrp.lib.php'; + +// Load translation files required by the page +$langs->loadLangs(array('admin', 'errors', 'mrp', 'other')); + +if (! $user->admin) accessforbidden(); + +$action = GETPOST('action', 'alpha'); +$value = GETPOST('value', 'alpha'); +$label = GETPOST('label', 'alpha'); +$scandir = GETPOST('scan_dir', 'alpha'); +$type = 'mrp'; + + +/* + * Actions + */ + +include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; + +if ($action == 'updateMask') +{ + $maskconstmrp=GETPOST('maskconstMo', 'alpha'); + $maskmrp=GETPOST('maskMo', 'alpha'); + + if ($maskconstmrp) $res = dolibarr_set_const($db, $maskconstmrp, $maskmrp, 'chaine', 0, '', $conf->entity); + + if (! $res > 0) $error++; + + if (! $error) + { + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); + } + else + { + setEventMessages($langs->trans("Error"), null, 'errors'); + } +} + +elseif ($action == 'specimen') +{ + $modele=GETPOST('module', 'alpha'); + + $mo = new MO($db); + $mrp->initAsSpecimen(); + + // Search template files + $file=''; $classname=''; $filefound=0; + $dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); + foreach($dirmodels as $reldir) + { + $file=dol_buildpath($reldir."core/modules/mrp/doc/pdf_".$modele.".modules.php", 0); + if (file_exists($file)) + { + $filefound=1; + $classname = "pdf_".$modele; + break; + } + } + + if ($filefound) + { + require_once $file; + + $module = new $classname($db); + + if ($module->write_file($mrp, $langs) > 0) + { + header("Location: ".DOL_URL_ROOT."/document.php?modulepart=mrp&file=SPECIMEN.pdf"); + return; + } + else + { + setEventMessages($module->error, null, 'errors'); + dol_syslog($module->error, LOG_ERR); + } + } + else + { + setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); + dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); + } +} + +// Activate a model +elseif ($action == 'set') +{ + $ret = addDocumentModel($value, $type, $label, $scandir); +} + +elseif ($action == 'del') +{ + $ret = delDocumentModel($value, $type); + if ($ret > 0) + { + if ($conf->global->MRP_MO_ADDON_PDF == "$value") dolibarr_del_const($db, 'MRP_MO_ADDON_PDF', $conf->entity); + } +} + +// Set default model +elseif ($action == 'setdoc') +{ + if (dolibarr_set_const($db, "MRP_MO_ADDON_PDF", $value, 'chaine', 0, '', $conf->entity)) + { + // The constant that was read before the new set + // We therefore requires a variable to have a coherent view + $conf->global->MRP_MO_ADDON_PDF = $value; + } + + // On active le modele + $ret = delDocumentModel($value, $type); + if ($ret > 0) + { + $ret = addDocumentModel($value, $type, $label, $scandir); + } +} + +elseif ($action == 'setmod') +{ + // TODO Check if numbering module chosen can be activated + // by calling method canBeActivated + + dolibarr_set_const($db, "MRP_MO_ADDON", $value, 'chaine', 0, '', $conf->entity); +} + +elseif ($action == 'set_MRP_MO_DRAFT_WATERMARK') +{ + $draft = GETPOST("MRP_MO_DRAFT_WATERMARK"); + $res = dolibarr_set_const($db, "MRP_MO_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity); + + if (! $res > 0) $error++; + + if (! $error) + { + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); + } + else + { + setEventMessages($langs->trans("Error"), null, 'errors'); + } +} + +elseif ($action == 'set_MRP_MO_FREE_TEXT') +{ + $freetext = GETPOST("MRP_MO_FREE_TEXT", 'none'); // No alpha here, we want exact string + + $res = dolibarr_set_const($db, "MRP_MO_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); + + if (! $res > 0) $error++; + + if (! $error) + { + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); + } + else + { + setEventMessages($langs->trans("Error"), null, 'errors'); + } +} + + +/* + * View + */ + +$form=new Form($db); + +$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); + +llxHeader("", $langs->trans("MrpSetupPage")); + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans("MrpSetupPage"), $linkback, 'title_setup'); + +$head = mrpAdminPrepareHead(); + +dol_fiche_head($head, 'settings', $langs->trans("MOs"), -1, 'mrp'); + +/* + * MOs Numbering model + */ + +print load_fiche_titre($langs->trans("MOsNumberingModules"), '', ''); + +print '
    '; + if (is_array($val['arrayofkeyval'])) print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth75'); + else print ''; + print '
    '; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''."\n"; + +clearstatcache(); + +foreach ($dirmodels as $reldir) +{ + $dir = dol_buildpath($reldir."core/modules/mrp/"); + + if (is_dir($dir)) + { + $handle = opendir($dir); + if (is_resource($handle)) + { + while (($file = readdir($handle))!==false) + { + if (substr($file, 0, 8) == 'mod_mo_' && substr($file, dol_strlen($file)-3, 3) == 'php') + { + $file = substr($file, 0, dol_strlen($file)-4); + + require_once $dir.$file.'.php'; + + $module = new $file($db); + + // Show modules according to features level + if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) continue; + if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) continue; + + if ($module->isEnabled()) + { + print ''; + + // Show example of numbering model + print ''."\n"; + + print ''; + + $mrp=new MO($db); + $mrp->initAsSpecimen(); + + // Info + $htmltooltip=''; + $htmltooltip.=''.$langs->trans("Version").': '.$module->getVersion().'
    '; + $mrp->type=0; + $nextval=$module->getNextValue($mysoc, $mrp); + if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval + $htmltooltip.=''.$langs->trans("NextValue").': '; + if ($nextval) { + if (preg_match('/^Error/', $nextval) || $nextval=='NotConfigured') + $nextval = $langs->trans($nextval); + $htmltooltip.=$nextval.'
    '; + } else { + $htmltooltip.=$langs->trans($module->error).'
    '; + } + } + + print ''; + + print "\n"; + } + } + } + closedir($handle); + } + } +} +print "
    '.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Example").''.$langs->trans("Status").''.$langs->trans("ShortInfo").'
    '.$module->name."\n"; + print $module->info(); + print ''; + $tmp=$module->getExample(); + if (preg_match('/^Error/', $tmp)) print '
    '.$langs->trans($tmp).'
    '; + elseif ($tmp=='NotConfigured') print $langs->trans($tmp); + else print $tmp; + print '
    '; + if ($conf->global->MRP_MO_ADDON == $file) + { + print img_picto($langs->trans("Activated"), 'switch_on'); + } + else + { + print ''; + print img_picto($langs->trans("Disabled"), 'switch_off'); + print ''; + } + print ''; + print $form->textwithpicto('', $htmltooltip, 1, 0); + print '

    \n"; + + +/* + * Document templates generators + */ + +print load_fiche_titre($langs->trans("MOsModelModule"), '', ''); + +// Load array def with activated templates +$def = array(); +$sql = "SELECT nom"; +$sql.= " FROM ".MAIN_DB_PREFIX."document_model"; +$sql.= " WHERE type = '".$type."'"; +$sql.= " AND entity = ".$conf->entity; +$resql=$db->query($sql); +if ($resql) +{ + $i = 0; + $num_rows=$db->num_rows($resql); + while ($i < $num_rows) + { + $array = $db->fetch_array($resql); + array_push($def, $array[0]); + $i++; + } +} +else +{ + dol_print_error($db); +} + + +print "\n"; +print "\n"; +print ''; +print ''; +print '\n"; +print '\n"; +print ''; +print ''; +print "\n"; + +clearstatcache(); + +foreach ($dirmodels as $reldir) +{ + foreach (array('','/doc') as $valdir) + { + $dir = dol_buildpath($reldir."core/modules/mrp".$valdir); + + if (is_dir($dir)) + { + $handle=opendir($dir); + if (is_resource($handle)) + { + while (($file = readdir($handle))!==false) + { + $filelist[]=$file; + } + closedir($handle); + arsort($filelist); + + foreach($filelist as $file) + { + if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) + { + if (file_exists($dir.'/'.$file)) + { + $name = substr($file, 4, dol_strlen($file) -16); + $classname = substr($file, 0, dol_strlen($file) -12); + + require_once $dir.'/'.$file; + $module = new $classname($db); + + $modulequalified=1; + if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified=0; + if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified=0; + + if ($modulequalified) + { + $var = !$var; + print ''; + + // Active + if (in_array($name, $def)) + { + print ''; + } + else + { + print '"; + } + + // Default + print ''; + + // Info + $htmltooltip = ''.$langs->trans("Name").': '.$module->name; + $htmltooltip.='
    '.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); + if ($module->type == 'pdf') + { + $htmltooltip.='
    '.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur; + } + $htmltooltip.='

    '.$langs->trans("FeaturesSupported").':'; + $htmltooltip.='
    '.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1); + $htmltooltip.='
    '.$langs->trans("WatermarkOnDraftMOs").': '.yn($module->option_draft_watermark, 1, 1); + + + print ''; + + // Preview + print ''; + + print "\n"; + } + } + } + } + } + } + } +} + +print '
    '.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Status")."'.$langs->trans("Default")."'.$langs->trans("ShortInfo").''.$langs->trans("Preview").'
    '; + print (empty($module->name)?$name:$module->name); + print "\n"; + if (method_exists($module, 'info')) print $module->info($langs); + else print $module->description; + print ''."\n"; + print ''; + print img_picto($langs->trans("Enabled"), 'switch_on'); + print ''; + print ''."\n"; + print 'scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').''; + print "'; + if ($conf->global->MRP_MO_ADDON_PDF == $name) + { + print img_picto($langs->trans("Default"), 'on'); + } + else + { + print 'scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').''; + } + print ''; + print $form->textwithpicto('', $htmltooltip, 1, 0); + print ''; + if ($module->type == 'pdf') + { + print ''.img_object($langs->trans("Preview"), 'bill').''; + } + else + { + print img_object($langs->trans("PreviewNotAvailable"), 'generic'); + } + print '
    '; +print "
    "; + +/* + * Other options + */ + +print load_fiche_titre($langs->trans("OtherOptions"), '', ''); +print ''; +print ''; +print ''; +print ''; +print "\n"; +print "\n"; + +$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); +$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); +$htmltext = ''.$langs->trans("AvailableVariables").':
    '; +foreach($substitutionarray as $key => $val) $htmltext.=$key.'
    '; +$htmltext.='
    '; + +print ''; +print ''; +print ''; +print '\n"; +print ''; + +//Use draft Watermark + +print ""; +print ''; +print ""; +print '\n"; +print ''; + +print '
    '.$langs->trans("Parameter").''.$langs->trans("Value").' 
    '; +print $form->textwithpicto($langs->trans("FreeLegalTextOnMOs"), $langs->trans("AddCRIfTooLong").'

    '.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
    '; +$variablename='MRP_MO_FREE_TEXT'; +if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) +{ + print ''; +} +else +{ + include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; + $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); + print $doleditor->Create(); +} +print '
    '; +print ''; +print "
    '; +print $form->textwithpicto($langs->trans("WatermarkOnDraftMOs"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'
    '; +print '
    '; +print ''; +print ''; +print ''; +print "
    '; +print '
    '; + + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php index acbb2ae0b36..38358222282 100644 --- a/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php +++ b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php @@ -38,7 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php'; /** * Class to build documents using ODF templates generator */ -class doc_generic_bom_odt extends ModelePDFBOMs +class doc_generic_bom_odt extends ModelePDFBoms { /** * Issuer diff --git a/htdocs/core/modules/bom/modules_bom.php b/htdocs/core/modules/bom/modules_bom.php index 45bca8a38b3..f8f29fec2e6 100644 --- a/htdocs/core/modules/bom/modules_bom.php +++ b/htdocs/core/modules/bom/modules_bom.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // requir /** * Parent class for boms models */ -abstract class ModelePDFBom extends CommonDocGenerator +abstract class ModelePDFBoms extends CommonDocGenerator { // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps diff --git a/htdocs/core/modules/modBom.class.php b/htdocs/core/modules/modBom.class.php index 1700f15afd7..47daf430873 100644 --- a/htdocs/core/modules/modBom.class.php +++ b/htdocs/core/modules/modBom.class.php @@ -189,7 +189,7 @@ class modBom extends DolibarrModules // Boxes/Widgets // Add here list of php file(s) stored in bom/core/boxes that contains class to show a widget. $this->boxes = array( - 0=>array('file'=>'box_boms.php','note'=>'','enabledbydefaulton'=>'Home') + 0=>array('file' => 'box_boms.php', 'note' => '', 'enabledbydefaulton' => 'Home') ); @@ -203,7 +203,7 @@ class modBom extends DolibarrModules // ); - // Permissions + // Permissions provided by this module $this->rights = array(); // Permission array used by this module $r=0; @@ -228,7 +228,7 @@ class modBom extends DolibarrModules $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->bom->level1->level2) - // Main menu entries + // Main menu entries to add $this->menu = array(); // List of menus to add $r=0; @@ -323,9 +323,8 @@ class modBom extends DolibarrModules if ($result < 0) return -1; // Do not activate module if not allowed errors found on module SQL queries (the _load_table run sql with run_sql with error allowed parameter to 'default') // Create extrafields - include_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; - $extrafields = new ExtraFields($this->db); - + //include_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; + //$extrafields = new ExtraFields($this->db); //$result1=$extrafields->addExtraField('myattr1', "New Attr 1 label", 'boolean', 1, 3, 'thirdparty', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->bom->enabled'); //$result2=$extrafields->addExtraField('myattr2', "New Attr 2 label", 'varchar', 1, 10, 'project', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->bom->enabled'); //$result3=$extrafields->addExtraField('myattr3', "New Attr 3 label", 'varchar', 1, 10, 'bank_account', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->bom->enabled'); @@ -357,8 +356,8 @@ class modBom extends DolibarrModules } $sql = array( - "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->db->escape('alpha')."' AND type = 'bom' AND entity = ".$conf->entity, - "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->db->escape('alpha')."', 'bom', ".$conf->entity.")" + "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->db->escape('standard')."' AND type = 'bom' AND entity = ".$conf->entity, + "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->db->escape('standard')."', 'bom', ".$conf->entity.")" ); return $this->_init($sql, $options); diff --git a/htdocs/core/modules/modMrp.class.php b/htdocs/core/modules/modMrp.class.php index 53f778d063f..248179b5447 100644 --- a/htdocs/core/modules/modMrp.class.php +++ b/htdocs/core/modules/modMrp.class.php @@ -58,7 +58,7 @@ class modMrp extends DolibarrModules // Module label (no space allowed), used if translation string 'ModuleMrpName' not found (Mrp is name of module). $this->name = preg_replace('/^mod/i', '', get_class($this)); // Module description, used if translation string 'ModuleMrpDesc' not found (Mrp is name of module). - $this->description = "MRPDescription"; + $this->description = "Module to Manage Manufacturing Orders (MO)"; // Used only if file README.md and README-LL.md not found. $this->descriptionlong = "Module to Manage Manufacturing Orders (MO)"; // Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated' or a version string like 'x.y.z' @@ -113,7 +113,7 @@ class modMrp extends DolibarrModules // Example: this->dirs = array("/mrp/temp","/mrp/subdir"); $this->dirs = array("/mrp/temp"); // Config pages. Put here list of php page, stored into mrp/admin directory, to use to setup module. - $this->config_page_url = array("setup.php@mrp"); + $this->config_page_url = array("mrp.php"); // Dependencies // A condition to hide module $this->hidden = false; @@ -135,7 +135,9 @@ class modMrp extends DolibarrModules // 2 => array('MRP_MYNEWCONST2', 'chaine', 'myvalue', 'This is another constant to add', 0, 'current', 1) // ); $this->const = array( - // 1 => array('MRP_MYCONSTANT', 'chaine', 'avalue', 'This is a constant to add', 1, 'allentities', 1) + 1=>array('MRP_MO_ADDON_PDF', 'chaine', 'alpha', 'Name of PDF model of BOM', 0), + 2=>array('MRP_MO_ADDON', 'chaine', 'mod_bom_standard', 'Name of numbering rules of BOM', 0), + 3=>array('MRP_MO_ADDON_PDF_ODT_PATH', 'chaine', 'DOL_DATA_ROOT/doctemplates/boms', '', 0) ); // Some keys to add into the overwriting translation tables @@ -312,6 +314,8 @@ class modMrp extends DolibarrModules */ public function init($options = '') { + global $conf, $langs; + $result=$this->_load_tables('/mrp/sql/'); if ($result < 0) return -1; // Do not activate module if error 'not allowed' returned when loading module SQL queries (the _load_table run sql with run_sql with the error allowed parameter set to 'default') @@ -324,7 +328,34 @@ class modMrp extends DolibarrModules //$result4=$extrafields->addExtraField('myattr4', "New Attr 4 label", 'select', 1, 3, 'thirdparty', 0, 1, '', array('options'=>array('code1'=>'Val1','code2'=>'Val2','code3'=>'Val3')), 1,'', 0, 0, '', '', 'mrp', '$conf->mrp->enabled'); //$result5=$extrafields->addExtraField('myattr5', "New Attr 5 label", 'text', 1, 10, 'user', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->mrp->enabled'); + // Permissions + $this->remove($options); + $sql = array(); + + // ODT template + $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/mrps/template_mo.odt'; + $dirodt=DOL_DATA_ROOT.'/doctemplates/mrps'; + $dest=$dirodt.'/template_mo.odt'; + + if (file_exists($src) && ! file_exists($dest)) + { + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + dol_mkdir($dirodt); + $result=dol_copy($src, $dest, 0, 0); + if ($result < 0) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorFailToCopyFile', $src, $dest); + return 0; + } + } + + $sql = array( + "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->db->escape('standard')."' AND type = 'mo' AND entity = ".$conf->entity, + "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->db->escape('standard')."', 'mo', ".$conf->entity.")" + ); + return $this->_init($sql, $options); } diff --git a/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php index 9beb300ebb0..0447694465f 100644 --- a/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php +++ b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php @@ -27,7 +27,7 @@ * \brief File of class to build ODT documents for MOs */ -require_once DOL_DOCUMENT_ROOT.'/core/modules/bom/modules_bom.php'; +require_once DOL_DOCUMENT_ROOT.'/core/modules/mrp/modules_mrp.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; @@ -38,7 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php'; /** * Class to build documents using ODF templates generator */ -class doc_generic_mo_odt extends ModelePDFMOs +class doc_generic_mo_odt extends ModelePDFMos { /** * Issuer diff --git a/htdocs/install/doctemplates/boms/template_bom.odt b/htdocs/install/doctemplates/boms/template_bom.odt index 344fcfa391aefbfef2b4ae85c5436e6c707adaa2..9eea32e4197b0c004fb2526d014698dec8ff194d 100644 GIT binary patch literal 18723 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 literal 17591 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 S5Ri|*ChK4Q4*~!0PyYwa2 - * Copyright (C) 2019 Alicealalalamdskfldmjgdfgdfhfghgfh Adminson - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/** - * \file mrp/admin/setup.php - * \ingroup mrp - * \brief Mrp setup page. - */ - -// Load Dolibarr environment -$res=0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1; -while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; } -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php"; -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php"; -// Try main.inc.php using relative path -if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php"; -if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php"; -if (! $res) die("Include of main fails"); - -global $langs, $user; - -// Libraries -require_once DOL_DOCUMENT_ROOT . "/core/lib/admin.lib.php"; -require_once '../lib/mrp.lib.php'; -//require_once "../class/myclass.class.php"; - -// Translations -$langs->loadLangs(array("admin", "mrp")); - -// Access control -if (! $user->admin) accessforbidden(); - -// Parameters -$action = GETPOST('action', 'alpha'); -$backtopage = GETPOST('backtopage', 'alpha'); - -$arrayofparameters=array( - 'MRP_MYPARAM1'=>array('css'=>'minwidth200','enabled'=>1), - 'MRP_MYPARAM2'=>array('css'=>'minwidth500','enabled'=>1) -); - - - -/* - * Actions - */ - -if ((float) DOL_VERSION >= 6) -{ - include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; -} - - - -/* - * View - */ - -$page_name = "MrpSetup"; -llxHeader('', $langs->trans($page_name)); - -// Subheader -$linkback = ''.$langs->trans("BackToModuleList").''; - -print load_fiche_titre($langs->trans($page_name), $linkback, 'object_mrp'); - -// Configuration header -$head = mrpAdminPrepareHead(); -dol_fiche_head($head, 'settings', '', -1, "mrp"); - -// Setup page goes here -echo ''.$langs->trans("MrpSetupPage").'

    '; - - -if ($action == 'edit') -{ - print '

    '; - print ''; - print ''; - - print ''; - print ''; - - foreach($arrayofparameters as $key => $val) - { - print ''; - } - print '
    '.$langs->trans("Parameter").''.$langs->trans("Value").'
    '; - $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); - print $form->textwithpicto($langs->trans($key), $tooltiphelp); - print '
    '; - - print '
    '; - print ''; - print '
    '; - - print '
    '; - print '
    '; -} -else -{ - if (! empty($arrayofparameters)) - { - print ''; - print ''; - - foreach($arrayofparameters as $key => $val) - { - print ''; - } - - print '
    '.$langs->trans("Parameter").''.$langs->trans("Value").'
    '; - $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); - print $form->textwithpicto($langs->trans($key), $tooltiphelp); - print '' . $conf->global->$key . '
    '; - - print '
    '; - print ''.$langs->trans("Modify").''; - print '
    '; - } - else - { - print '
    '.$langs->trans("NothingToSetup"); - } -} - - -// Page end -dol_fiche_end(); - -llxFooter(); -$db->close(); From b8803fa8dfdc28e363769239bc28a4bc97ed2f9a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 22:56:08 +0100 Subject: [PATCH 726/980] Work on MO --- htdocs/admin/mrp.php | 2 +- htdocs/core/modules/modMrp.class.php | 6 +++--- .../{mod_mrp_advanced.php => mod_mo_advanced.php} | 12 ++++++------ .../{mod_mrp_standard.php => mod_mo_standard.php} | 14 +++++++------- htdocs/mrp/class/mo.class.php | 6 +++--- htdocs/mrp/lib/mrp.lib.php | 2 +- 6 files changed, 21 insertions(+), 21 deletions(-) rename htdocs/core/modules/mrp/{mod_mrp_advanced.php => mod_mo_advanced.php} (93%) rename htdocs/core/modules/mrp/{mod_mrp_standard.php => mod_mo_standard.php} (90%) diff --git a/htdocs/admin/mrp.php b/htdocs/admin/mrp.php index f3121faa70d..06c59338e58 100644 --- a/htdocs/admin/mrp.php +++ b/htdocs/admin/mrp.php @@ -232,7 +232,7 @@ foreach ($dirmodels as $reldir) { while (($file = readdir($handle))!==false) { - if (substr($file, 0, 8) == 'mod_mo_' && substr($file, dol_strlen($file)-3, 3) == 'php') + if (substr($file, 0, 7) == 'mod_mo_' && substr($file, dol_strlen($file)-3, 3) == 'php') { $file = substr($file, 0, dol_strlen($file)-4); diff --git a/htdocs/core/modules/modMrp.class.php b/htdocs/core/modules/modMrp.class.php index 248179b5447..bc85111ebd2 100644 --- a/htdocs/core/modules/modMrp.class.php +++ b/htdocs/core/modules/modMrp.class.php @@ -135,9 +135,9 @@ class modMrp extends DolibarrModules // 2 => array('MRP_MYNEWCONST2', 'chaine', 'myvalue', 'This is another constant to add', 0, 'current', 1) // ); $this->const = array( - 1=>array('MRP_MO_ADDON_PDF', 'chaine', 'alpha', 'Name of PDF model of BOM', 0), - 2=>array('MRP_MO_ADDON', 'chaine', 'mod_bom_standard', 'Name of numbering rules of BOM', 0), - 3=>array('MRP_MO_ADDON_PDF_ODT_PATH', 'chaine', 'DOL_DATA_ROOT/doctemplates/boms', '', 0) + 1=>array('MRP_MO_ADDON_PDF', 'chaine', 'alpha', 'Name of PDF model of MO', 0), + 2=>array('MRP_MO_ADDON', 'chaine', 'mod_mo_standard', 'Name of numbering rules of MO', 0), + 3=>array('MRP_MO_ADDON_PDF_ODT_PATH', 'chaine', 'DOL_DATA_ROOT/doctemplates/mrps', '', 0) ); // Some keys to add into the overwriting translation tables diff --git a/htdocs/core/modules/mrp/mod_mrp_advanced.php b/htdocs/core/modules/mrp/mod_mo_advanced.php similarity index 93% rename from htdocs/core/modules/mrp/mod_mrp_advanced.php rename to htdocs/core/modules/mrp/mod_mo_advanced.php index 1c24b4010ba..42c506194f3 100644 --- a/htdocs/core/modules/mrp/mod_mrp_advanced.php +++ b/htdocs/core/modules/mrp/mod_mo_advanced.php @@ -21,7 +21,7 @@ */ /** - * \file htdocs/core/modules/mrp/mod_mrp_advanced.php + * \file htdocs/core/modules/mrp/mod_mo_advanced.php * \ingroup mrp * \brief File containing class for numbering model of MOs advanced */ @@ -30,9 +30,9 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/mrp/modules_mrp.php'; /** - * Class to manage customer Bom numbering rules advanced + * Class to manage MO numbering rules advanced */ -class mod_mrp_advanced extends ModeleNumRefMos +class mod_mo_advanced extends ModeleNumRefMos { /** * Dolibarr version of the loaded document @@ -68,7 +68,7 @@ class mod_mrp_advanced extends ModeleNumRefMos $texte.= '
    '; $texte.= ''; $texte.= ''; - $texte.= ''; + $texte.= ''; $texte.= ''; $tooltip=$langs->trans("GenericMaskCodes", $langs->transnoentities("Mo"), $langs->transnoentities("Mo")); @@ -79,7 +79,7 @@ class mod_mrp_advanced extends ModeleNumRefMos // Parametrage du prefix $texte.= ''; - $texte.= ''; + $texte.= ''; $texte.= ''; @@ -129,7 +129,7 @@ class mod_mrp_advanced extends ModeleNumRefMos require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php'; // We get cursor rule - $mask=$conf->global->MRP_ADVANCED_MASK; + $mask=$conf->global->MRP_MO_ADVANCED_MASK; if (! $mask) { diff --git a/htdocs/core/modules/mrp/mod_mrp_standard.php b/htdocs/core/modules/mrp/mod_mo_standard.php similarity index 90% rename from htdocs/core/modules/mrp/mod_mrp_standard.php rename to htdocs/core/modules/mrp/mod_mo_standard.php index 24f1b0a1f69..6d392a6b74c 100644 --- a/htdocs/core/modules/mrp/mod_mrp_standard.php +++ b/htdocs/core/modules/mrp/mod_mo_standard.php @@ -18,16 +18,16 @@ */ /** - * \file htdocs/core/modules/mrp/mod_mrp_standard.php + * \file htdocs/core/modules/mrp/mod_mo_standard.php * \ingroup mrp * \brief File of class to manage MO numbering rules standard */ require_once DOL_DOCUMENT_ROOT .'/core/modules/mrp/modules_mrp.php'; /** - * Class to manage customer order numbering rules standard + * Class to manage MO numbering rules standard */ -class mod_mrp_standard extends ModeleNumRefMos +class mod_mo_standard extends ModeleNumRefMos { /** * Dolibarr version of the loaded document @@ -85,7 +85,7 @@ class mod_mrp_standard extends ModeleNumRefMos $posindice=8; $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; - $sql.= " FROM ".MAIN_DB_PREFIX."bom"; + $sql.= " FROM ".MAIN_DB_PREFIX."mrp_mo"; $sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -119,7 +119,7 @@ class mod_mrp_standard extends ModeleNumRefMos // D'abord on recupere la valeur max $posindice=9; $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; - $sql.= " FROM ".MAIN_DB_PREFIX."bom_bom"; + $sql.= " FROM ".MAIN_DB_PREFIX."mrp_mo"; $sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -132,7 +132,7 @@ class mod_mrp_standard extends ModeleNumRefMos } else { - dol_syslog("mod_mrp_standard::getNextValue", LOG_DEBUG); + dol_syslog("mod_mo_standard::getNextValue", LOG_DEBUG); return -1; } @@ -143,7 +143,7 @@ class mod_mrp_standard extends ModeleNumRefMos if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is else $num = sprintf("%04s", $max+1); - dol_syslog("mod_mrp_standard::getNextValue return ".$this->prefix.$yymm."-".$num); + dol_syslog("mod_mo_standard::getNextValue return ".$this->prefix.$yymm."-".$num); return $this->prefix.$yymm."-".$num; } } diff --git a/htdocs/mrp/class/mo.class.php b/htdocs/mrp/class/mo.class.php index 0525f71ab5f..d19807c03c6 100644 --- a/htdocs/mrp/class/mo.class.php +++ b/htdocs/mrp/class/mo.class.php @@ -94,8 +94,10 @@ class Mo extends CommonObject 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",), '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',), 'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'position'=>20, 'notnull'=>1, 'default'=>'1', 'index'=>1,), - 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'notnull'=>-1, 'searchall'=>1, 'showoncombobox'=>'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",), + 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:1', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'comment'=>"Product to produce",), 'qty' => array('type'=>'real', 'label'=>'QtyToProduce', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'notnull'=>1, 'comment'=>"Qty to produce",), + 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>42, 'notnull'=>-1, 'searchall'=>1, 'showoncombobox'=>'1',), 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php:1', 'label'=>'ThirdParty', 'enabled'=>1, 'visible'=>-1, 'position'=>50, 'notnull'=>-1, 'index'=>1), 'fk_warehouse' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php:0', 'label'=>'WarehouseForProduction', 'enabled'=>1, 'visible'=>-1, 'position'=>52), 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>61, 'notnull'=>-1,), @@ -105,10 +107,8 @@ class Mo extends CommonObject 'fk_user_creat' => array('type'=>'integer', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'position'=>510, 'notnull'=>1, 'foreignkey'=>'user.rowid',), 'fk_user_modif' => array('type'=>'integer', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'position'=>511, 'notnull'=>-1,), 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:1', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'comment'=>"Product to produce",), 'date_start_planned' => array('type'=>'datetime', 'label'=>'DateStartPlannedMo', 'enabled'=>1, 'visible'=>1, 'position'=>55, 'notnull'=>-1, 'index'=>1, 'help'=>'KeepEmptyForAsap'), 'date_end_planned' => array('type'=>'datetime', 'label'=>'DateEndPlannedMo', 'enabled'=>1, 'visible'=>1, 'position'=>56, 'notnull'=>-1, 'index'=>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",), 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'enabled'=>1, 'visible'=>-1, 'position'=>52, 'notnull'=>-1, 'index'=>1,), 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>4, 'position'=>1000, 'default'=>0, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Brouillon', '1'=>'Validated', '2'=>'InProgress', '3'=>'StatusMOProduced', '-1'=>'Canceled')), ); diff --git a/htdocs/mrp/lib/mrp.lib.php b/htdocs/mrp/lib/mrp.lib.php index 7ee1fcd04c7..4fdfa25342e 100644 --- a/htdocs/mrp/lib/mrp.lib.php +++ b/htdocs/mrp/lib/mrp.lib.php @@ -35,7 +35,7 @@ function mrpAdminPrepareHead() $h = 0; $head = array(); - $head[$h][0] = dol_buildpath("/mrp/admin/setup.php", 1); + $head[$h][0] = dol_buildpath("/admin/mrp.php", 1); $head[$h][1] = $langs->trans("Settings"); $head[$h][2] = 'settings'; $h++; From fb95d14aebd07964351f4d1fdbe2e22e29945b36 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 23:02:51 +0100 Subject: [PATCH 727/980] Work on MO --- htdocs/langs/en_US/mrp.lang | 5 ++++- htdocs/mrp/class/mo.class.php | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index 4fc51f5a114..bc71a65f72a 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -21,11 +21,14 @@ FreeLegalTextOnBOMs=Free text on document of BOM WatermarkOnDraftBOMs=Watermark on draft BOM FreeLegalTextOnMOs=Free text on document of MO WatermarkOnDraftMOs=Watermark on draft MO -ConfirmCloneBillOfMaterials=Are you sure you want to clone this bill of material ? +ConfirmCloneBillOfMaterials=Are you sure you want to clone the bill of material %s ? +ConfirmCloneMo=Are you sure you want to clone the Manufacturing Order %s ? ManufacturingEfficiency=Manufacturing efficiency ValueOfMeansLoss=Value of 0.95 means an average of 5%% of loss during the production DeleteBillOfMaterials=Delete Bill Of Materials +DeleteMo=Delete Manufacturing Order ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Material? +ConfirmDeleteMo=Are you sure you want to delete this Bill Of Material? MenuMRP=Manufacturing Orders NewMO=New Manufacturing Order QtyToProduce=Qty to produce diff --git a/htdocs/mrp/class/mo.class.php b/htdocs/mrp/class/mo.class.php index d19807c03c6..71a743eb071 100644 --- a/htdocs/mrp/class/mo.class.php +++ b/htdocs/mrp/class/mo.class.php @@ -110,7 +110,7 @@ class Mo extends CommonObject 'date_start_planned' => array('type'=>'datetime', 'label'=>'DateStartPlannedMo', 'enabled'=>1, 'visible'=>1, 'position'=>55, 'notnull'=>-1, 'index'=>1, 'help'=>'KeepEmptyForAsap'), 'date_end_planned' => array('type'=>'datetime', 'label'=>'DateEndPlannedMo', 'enabled'=>1, 'visible'=>1, 'position'=>56, 'notnull'=>-1, 'index'=>1,), 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'enabled'=>1, 'visible'=>-1, 'position'=>52, 'notnull'=>-1, 'index'=>1,), - 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>4, 'position'=>1000, 'default'=>0, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Brouillon', '1'=>'Validated', '2'=>'InProgress', '3'=>'StatusMOProduced', '-1'=>'Canceled')), + 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>2, 'position'=>1000, 'default'=>0, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Brouillon', '1'=>'Validated', '2'=>'InProgress', '3'=>'StatusMOProduced', '-1'=>'Canceled')), ); public $rowid; public $ref; From c9fc17efaea936e2c0ef10140bccd5d44d12dc4a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 23:06:34 +0100 Subject: [PATCH 728/980] Fix phpcs --- htdocs/societe/canvas/company/tpl/card_edit.tpl.php | 4 ++-- htdocs/societe/canvas/individual/tpl/card_edit.tpl.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/societe/canvas/company/tpl/card_edit.tpl.php b/htdocs/societe/canvas/company/tpl/card_edit.tpl.php index 5f513fa886a..474d97d07c2 100644 --- a/htdocs/societe/canvas/company/tpl/card_edit.tpl.php +++ b/htdocs/societe/canvas/company/tpl/card_edit.tpl.php @@ -77,7 +77,7 @@ $contact = $GLOBALS['objcanvas']->control->object; control->tpl['ismodifiable_customercode']) { ?> - control->tpl['customercode']; ?> + control->tpl['customercode']; ?> @@ -98,7 +98,7 @@ $contact = $GLOBALS['objcanvas']->control->object; control->tpl['ismodifiable_suppliercode']) { ?> - control->tpl['suppliercode']; ?> + control->tpl['suppliercode']; ?> diff --git a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php index d25a9f36121..98ef1dcea18 100644 --- a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php +++ b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php @@ -75,7 +75,7 @@ if (empty($conf) || ! is_object($conf)) control->tpl['ismodifiable_customercode']) { ?> - control->tpl['customercode']; ?> + control->tpl['customercode']; ?> @@ -96,7 +96,7 @@ if (empty($conf) || ! is_object($conf)) control->tpl['ismodifiable_suppliercode']) { ?> - control->tpl['suppliercode']; ?> + control->tpl['suppliercode']; ?> From 036c1410c79703ec25893ef4fb36bca8994c16aa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 23:17:08 +0100 Subject: [PATCH 729/980] NEW Save user of last modification in donation record --- htdocs/don/card.php | 2 +- htdocs/don/class/don.class.php | 59 ++++--------------- .../install/mysql/migration/10.0.0-11.0.0.sql | 2 + htdocs/install/mysql/tables/llx_don.sql | 1 + 4 files changed, 15 insertions(+), 49 deletions(-) diff --git a/htdocs/don/card.php b/htdocs/don/card.php index 54d4e392f61..b804f3c7a46 100644 --- a/htdocs/don/card.php +++ b/htdocs/don/card.php @@ -741,7 +741,7 @@ if (! empty($id) && $action != 'edit') { $num = $db->num_rows($resql); $i = 0; $total = 0; - print '
    '.$langs->trans("Mask").':'.$form->textwithpicto('', $tooltip, 1, 1).''.$form->textwithpicto('', $tooltip, 1, 1).' 
    '; + print '
    '; print ''; print ''; print ''; diff --git a/htdocs/don/class/don.class.php b/htdocs/don/class/don.class.php index 43bdcead36f..b24213d5c70 100644 --- a/htdocs/don/class/don.class.php +++ b/htdocs/don/class/don.class.php @@ -123,10 +123,11 @@ class Don extends CommonObject */ public $labelstatutshort; - /** - * Draft - */ + const STATUS_DRAFT = 0; + const STATUS_VALIDATED = 1; + const STATUS_PAID = 2; + const STATUS_CANCELED = -1; /** @@ -155,11 +156,11 @@ class Don extends CommonObject /** * Return the label of a given status * - * @param int $statut Id statut + * @param int $status Id statut * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto * @return string Libelle du statut */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable if (empty($this->labelstatut) || empty($this->labelstatutshort)) @@ -176,49 +177,11 @@ class Don extends CommonObject $this->labelstatutshort[2]=$langs->trans("DonationStatusPaidShort"); } - if ($mode == 0) - { - return $this->labelstatut[$statut]; - } - elseif ($mode == 1) - { - return $this->labelstatutshort[$statut]; - } - elseif ($mode == 2) - { - if ($statut == -1) return img_picto($this->labelstatut[$statut], 'statut5').' '.$this->labelstatutshort[$statut]; - elseif ($statut == 0) return img_picto($this->labelstatut[$statut], 'statut0').' '.$this->labelstatutshort[$statut]; - elseif ($statut == 1) return img_picto($this->labelstatut[$statut], 'statut1').' '.$this->labelstatutshort[$statut]; - elseif ($statut == 2) return img_picto($this->labelstatut[$statut], 'statut6').' '.$this->labelstatutshort[$statut]; - } - elseif ($mode == 3) - { - if ($statut == -1) return img_picto($this->labelstatut[$statut], 'statut5'); - elseif ($statut == 0) return img_picto($this->labelstatut[$statut], 'statut0'); - elseif ($statut == 1) return img_picto($this->labelstatut[$statut], 'statut1'); - elseif ($statut == 2) return img_picto($this->labelstatut[$statut], 'statut6'); - } - elseif ($mode == 4) - { - if ($statut == -1) return img_picto($this->labelstatut[$statut], 'statut5').' '.$this->labelstatut[$statut]; - elseif ($statut == 0) return img_picto($this->labelstatut[$statut], 'statut0').' '.$this->labelstatut[$statut]; - elseif ($statut == 1) return img_picto($this->labelstatut[$statut], 'statut1').' '.$this->labelstatut[$statut]; - elseif ($statut == 2) return img_picto($this->labelstatut[$statut], 'statut6').' '.$this->labelstatut[$statut]; - } - elseif ($mode == 5) - { - if ($statut == -1) return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut], 'statut5'); - elseif ($statut == 0) return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut], 'statut0'); - elseif ($statut == 1) return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut], 'statut1'); - elseif ($statut == 2) return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut], 'statut6'); - } - elseif ($mode == 6) - { - if ($statut == -1) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut], 'statut5'); - elseif ($statut == 0) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut], 'statut0'); - elseif ($statut == 1) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut], 'statut1'); - elseif ($statut == 2) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut], 'statut6'); - } + $statusType = 'status'.$status; + if ($status == self::STATUS_CANCELED) $statusType = 'status5'; + if ($status == self::STATUS_PAID) $statusType = 'status6'; + + return dolGetStatus($this->labelstatut[$status], $this->labelstatutshort[$status], '', $statusType, $mode); } diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 064db3be207..d599f1b40ed 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -49,6 +49,8 @@ UPDATE llx_c_units SET label = 'SurfaceUnitm2' WHERE code IN ('M2'); -- For v11 +ALTER TABLE llx_don ADD COLUMN fk_user_modif integer; + ALTER TABLE llx_expeditiondet ADD INDEX idx_expeditiondet_fk_origin_line (fk_origin_line); ALTER TABLE llx_rights_def ADD COLUMN module_position INTEGER NOT NULL DEFAULT 0; diff --git a/htdocs/install/mysql/tables/llx_don.sql b/htdocs/install/mysql/tables/llx_don.sql index ee17fdd1e67..f03e82d6143 100644 --- a/htdocs/install/mysql/tables/llx_don.sql +++ b/htdocs/install/mysql/tables/llx_don.sql @@ -47,6 +47,7 @@ create table llx_don fk_projet integer NULL, -- Donation is given for a project ? datec datetime, -- Create date fk_user_author integer NOT NULL, + fk_user_modif integer, date_valid datetime, -- date de validation fk_user_valid integer NULL, note_private text, From 68a4ddceed20849a06a610cf6d4ca9c44af21bea Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 23:29:17 +0100 Subject: [PATCH 730/980] Look and feel v11 --- htdocs/product/class/product.class.php | 29 +++++++------- htdocs/product/index.php | 4 +- htdocs/societe/class/societe.class.php | 4 +- htdocs/societe/index.php | 2 +- htdocs/user/class/user.class.php | 55 +++++++++++--------------- htdocs/user/list.php | 2 +- 6 files changed, 42 insertions(+), 54 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 2ba78b32945..bf2b3a0e410 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -4380,10 +4380,10 @@ class Product extends CommonObject /** * Return label of a given status * - * @param int $status Statut - * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto - * @param int $type 0=Status "to sell", 1=Status "to buy", 2=Status "to Batch" - * @return string Label of status + * @param int $status Statut + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto + * @param int $type 0=Status "to sell", 1=Status "to buy", 2=Status "to Batch" + * @return string Label of status */ public function LibStatut($status, $mode = 0, $type = 0) { @@ -4420,42 +4420,41 @@ class Product extends CommonObject $statuttrans=empty($status)?'status5':'status4'; - if($status == 0){ + if ($status == 0) { // $type 0=Status "to sell", 1=Status "to buy", 2=Status "to Batch" - if($type==0){ + if($type==0) { $labelstatut = $langs->trans('ProductStatusNotOnSellShort'); $labelstatutShort = $langs->trans('ProductStatusNotOnSell'); } - elseif($type == 1){ + elseif($type == 1) { $labelstatut = $langs->trans('ProductStatusNotOnBuyShort'); $labelstatutShort = $langs->trans('ProductStatusNotOnBuy'); } - elseif($type == 2){ + elseif($type == 2) { $labelstatut = $langs->trans('ProductStatusNotOnBatch'); $labelstatutShort = $langs->trans('ProductStatusNotOnBatchShort'); } } - elseif($status == 1){ + elseif ($status == 1) { // $type 0=Status "to sell", 1=Status "to buy", 2=Status "to Batch" - if($type==0){ + if ($type==0) { $labelstatut = $langs->trans('ProductStatusOnSellShort'); $labelstatutShort = $langs->trans('ProductStatusOnSell'); } - elseif($type == 1){ + elseif ($type == 1) { $labelstatut = $langs->trans('ProductStatusOnBuyShort'); $labelstatutShort = $langs->trans('ProductStatusOnBuy'); } - elseif($type == 2){ + elseif ($type == 2) { $labelstatut = $langs->trans('ProductStatusOnBatch'); $labelstatutShort = $langs->trans('ProductStatusOnBatchShort'); } } - if($mode>6){ + if ($mode > 6) { return dolGetStatus($langs->trans('Unknown'), '', '', 'status0', 0); - } - else{ + } else { return dolGetStatus($labelstatut, $labelstatutShort, '', $statuttrans, $mode); } } diff --git a/htdocs/product/index.php b/htdocs/product/index.php index a92d2cd071a..477dcc20b0c 100644 --- a/htdocs/product/index.php +++ b/htdocs/product/index.php @@ -360,10 +360,10 @@ if ($result) print ''; } print '"; print '"; print "\n"; $i++; diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index b20f80f5439..fe8c78c7aa2 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -2258,8 +2258,8 @@ class Societe extends CommonObject /** * Return label of status (activity, closed) * - * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto - * @return string Libelle + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto + * @return string Label of status */ public function getLibStatut($mode = 0) { diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php index 5bd493fdeba..b2962478b17 100644 --- a/htdocs/societe/index.php +++ b/htdocs/societe/index.php @@ -316,7 +316,7 @@ if ($result) print dol_print_date($thirdparty_static->datem, 'day'); print ""; print '"; print "\n"; $i++; diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index db919c9bf0a..6e7d2540d32 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -201,6 +201,12 @@ class User extends CommonObject 'firstname'=>array('type'=>'varchar(50)', 'label'=>'Name','enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'), ); + + const STATUS_DISABLED = 0; + const STATUS_ENABLED = 1; + + + /** * Constructor of the class * @@ -2478,48 +2484,31 @@ class User extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoi le libelle d'un statut donne + * Return label of a status of user (active, inactive) * - * @param int $statut Id statut - * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto + * @param int $status Id status + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto * @return string Label of status */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; - $langs->load('users'); - if ($mode == 0) + if (empty($this->labelstatus) || empty($this->labelstatusshort)) { - if ($statut == 1) return $langs->trans('Enabled'); - elseif ($statut == 0) return $langs->trans('Disabled'); - } - elseif ($mode == 1) - { - if ($statut == 1) return $langs->trans('Enabled'); - elseif ($statut == 0) return $langs->trans('Disabled'); - } - elseif ($mode == 2) - { - if ($statut == 1) return img_picto($langs->trans('Enabled'), 'statut4', 'class="pictostatus"').' '.$langs->trans('Enabled'); - elseif ($statut == 0) return img_picto($langs->trans('Disabled'), 'statut5', 'class="pictostatus"').' '.$langs->trans('Disabled'); - } - elseif ($mode == 3) - { - if ($statut == 1) return img_picto($langs->trans('Enabled'), 'statut4', 'class="pictostatus"'); - elseif ($statut == 0) return img_picto($langs->trans('Disabled'), 'statut5', 'class="pictostatus"'); - } - elseif ($mode == 4) - { - if ($statut == 1) return img_picto($langs->trans('Enabled'), 'statut4', 'class="pictostatus"').' '.$langs->trans('Enabled'); - elseif ($statut == 0) return img_picto($langs->trans('Disabled'), 'statut5', 'class="pictostatus"').' '.$langs->trans('Disabled'); - } - elseif ($mode == 5) - { - if ($statut == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'), 'statut4', 'class="pictostatus"'); - elseif ($statut == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'), 'statut5', 'class="pictostatus"'); + global $langs; + //$langs->load("mymodule"); + $this->labelstatus[self::STATUS_ENABLED] = $langs->trans('Enabled'); + $this->labelstatus[self::STATUS_DISABLED] = $langs->trans('Disabled'); + $this->labelstatusshort[self::STATUS_ENABLED] = $langs->trans('Enabled'); + $this->labelstatusshort[self::STATUS_DISABLED] = $langs->trans('Disabled'); } + + $statusType = 'status5'; + if ($status == self::STATUS_ENABLED) $statusType = 'status4'; + + return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); } diff --git a/htdocs/user/list.php b/htdocs/user/list.php index 3b334871c06..668f05fa6c2 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -677,7 +677,7 @@ while ($i < min($num, $limit)) if (! empty($arrayfields['u.statut']['checked'])) { $userstatic->statut=$obj->statut; - print ''; + print ''; if (! $i) $totalarray['nbfield']++; } // Action column From 6a39ecc3c00a22c2411e2be0c5aa3afe63f3301d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 23:33:11 +0100 Subject: [PATCH 731/980] Fix phpcs --- htdocs/societe/canvas/individual/tpl/card_edit.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php index 98ef1dcea18..61fd7bdefdf 100644 --- a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php +++ b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php @@ -75,7 +75,7 @@ if (empty($conf) || ! is_object($conf)) control->tpl['ismodifiable_customercode']) { ?> - control->tpl['customercode']; ?> + control->tpl['customercode']; ?> @@ -96,7 +96,7 @@ if (empty($conf) || ! is_object($conf)) control->tpl['ismodifiable_suppliercode']) { ?> - control->tpl['suppliercode']; ?> + control->tpl['suppliercode']; ?> From aa306bf5d427f9d179fc28bbe817b6ce7027b9e3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 23:50:36 +0100 Subject: [PATCH 732/980] Debug widgets --- htdocs/core/boxes/box_ficheinter.php | 2 +- htdocs/core/boxes/box_task.php | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/core/boxes/box_ficheinter.php b/htdocs/core/boxes/box_ficheinter.php index a646d6556ba..ed3569cc3e4 100644 --- a/htdocs/core/boxes/box_ficheinter.php +++ b/htdocs/core/boxes/box_ficheinter.php @@ -138,7 +138,7 @@ class box_ficheinter extends ModeleBoxes $this->info_box_contents[$i][] = array( 'td' => 'class="nowrap right"', - 'text' => $ficheinterstatic->getLibStatut(6), + 'text' => $ficheinterstatic->getLibStatut(3), 'asis' => 1, ); diff --git a/htdocs/core/boxes/box_task.php b/htdocs/core/boxes/box_task.php index e285cc34289..1039ea74385 100644 --- a/htdocs/core/boxes/box_task.php +++ b/htdocs/core/boxes/box_task.php @@ -119,25 +119,25 @@ class box_task extends ModeleBoxes // list the summary of the orders if ($user->rights->projet->lire) { $boxcontent.= '
    '."\n"; - $boxcontent.= '
    '."\n"; + $boxcontent.= '
    '."\n"; $boxcontent.= 'boxcode.'">'."\n"; $boxcontent.= ''."\n"; $selectArray = array('all' => $langs->trans("NoFilter"), 'im_task_contact' => $langs->trans("WhichIamLinkedTo"), 'im_project_contact' => $langs->trans("WhichIamLinkedToProject")); $boxcontent.= $form->selectArray($cookie_name, $selectArray, $filterValue); - $boxcontent.= ''; + $boxcontent.= ''; $boxcontent.= ''."\n"; $boxcontent.= '
    '."\n"; $boxcontent.= ''; // set cookie by js $boxcontent.=''; $this->info_box_contents[0][] = array( - 'tr'=>'class="nohover"', + 'tr'=>'class="nohover showiffilter'.$this->boxcode.' hideobject"', 'td' => 'class="nohover"', 'textnoformat' => $boxcontent, ); @@ -188,7 +188,7 @@ class box_task extends ModeleBoxes $label = $projectstatic->getNomUrl(1).' '.$taskstatic->getNomUrl(1).' '.dol_htmlentities($taskstatic->label); - $boxcontent = getTaskProgressView($taskstatic, $label, true, false, true); + $boxcontent = getTaskProgressView($taskstatic, $label, true, false, false); $this->info_box_contents[$i][] = array( 'td' => '', From 01ac313a8750201b85d285b81ea57a11cb49617a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 23:52:05 +0100 Subject: [PATCH 733/980] Fix phpcs --- htdocs/societe/canvas/company/tpl/card_edit.tpl.php | 4 ++-- htdocs/societe/canvas/individual/tpl/card_edit.tpl.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/societe/canvas/company/tpl/card_edit.tpl.php b/htdocs/societe/canvas/company/tpl/card_edit.tpl.php index 474d97d07c2..3f1740d395c 100644 --- a/htdocs/societe/canvas/company/tpl/card_edit.tpl.php +++ b/htdocs/societe/canvas/company/tpl/card_edit.tpl.php @@ -77,7 +77,7 @@ $contact = $GLOBALS['objcanvas']->control->object; control->tpl['ismodifiable_customercode']) { ?> - control->tpl['customercode']; ?> + control->tpl['customercode']; ?> @@ -98,7 +98,7 @@ $contact = $GLOBALS['objcanvas']->control->object; control->tpl['ismodifiable_suppliercode']) { ?> - control->tpl['suppliercode']; ?> + control->tpl['suppliercode']; ?> diff --git a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php index 61fd7bdefdf..976b00962d8 100644 --- a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php +++ b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php @@ -75,7 +75,7 @@ if (empty($conf) || ! is_object($conf)) control->tpl['ismodifiable_customercode']) { ?> - control->tpl['customercode']; ?> + control->tpl['customercode']; ?> @@ -96,7 +96,7 @@ if (empty($conf) || ! is_object($conf)) control->tpl['ismodifiable_suppliercode']) { ?> - control->tpl['suppliercode']; ?> + control->tpl['suppliercode']; ?> From 70530b558de3ee64b872ed0524e8b70c5e6b4422 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 03:10:48 +0100 Subject: [PATCH 734/980] Enable / Disable js css in modulebuilder --- htdocs/modulebuilder/index.php | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 0bb48af3b46..3c9b23c7638 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -480,10 +480,15 @@ if ($dirins && $action == 'initcss' && !empty($module)) 'Mon module'=>$modulename, 'mon module'=>$modulename, 'htdocs/modulebuilder/template'=>strtolower($modulename), - '---Put here your own copyright and developer email---'=>dol_print_date($now, '%Y').' '.$user->getFullName($langs).($user->email?' <'.$user->email.'>':'') + '---Put here your own copyright and developer email---'=>dol_print_date($now, '%Y').' '.$user->getFullName($langs).($user->email?' <'.$user->email.'>':''), ); dolReplaceInFile($destfile, $arrayreplacement); + + // Update descriptor file to uncomment file + $srcfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php'; + $arrayreplacement = array('/\/\/\s*\''.preg_quote('/'.strtolower($module).'/css/'.strtolower($module).'.css.php', '/').'\'/' => '\'/'.strtolower($module).'/css/'.strtolower($module).'.css.php\''); + dolReplaceInFile($srcfile, $arrayreplacement, '', 0, 0, 1); } else { @@ -518,6 +523,11 @@ if ($dirins && $action == 'initjs' && !empty($module)) ); dolReplaceInFile($destfile, $arrayreplacement); + + // Update descriptor file to uncomment file + $srcfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php'; + $arrayreplacement = array('/\/\/\s*\''.preg_quote('/'.strtolower($module).'/js/'.strtolower($module).'.js.php', '/').'\'/' => '\'/'.strtolower($module).'/js/'.strtolower($module).'.js.php\''); + dolReplaceInFile($srcfile, $arrayreplacement, '', 0, 0, 1); } else { @@ -635,6 +645,14 @@ if ($dirins && $action == 'confirm_removefile' && !empty($module)) $result = dol_delete_file($filetodelete); if (dol_is_dir_empty($dirtodelete)) dol_delete_dir($dirtodelete); + + // Update descriptor file to comment file + if (in_array($tab, array('css', 'js'))) + { + $srcfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php'; + $arrayreplacement = array('/^\s*\''.preg_quote('/'.$relativefilename, '/').'\',*/m'=>' // \'/'.$relativefilename.'\','); + dolReplaceInFile($srcfile, $arrayreplacement, '', 0, 0, 1); + } } } @@ -1967,7 +1985,10 @@ elseif (! empty($module)) print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; - print ' '.$langs->trans("LanguageFile").' : '.$dicts['langs'].'
    '; + print ' '.$langs->trans("LanguageFile").' : '; + if (! is_array($dicts) || empty($dicts)) print ''.$langs->trans("NoDictionaries").''; + else print ''.$dicts['langs'].''; + print '
    '; print load_fiche_titre($langs->trans("ListOfDictionariesEntries"), '', ''); From 5b5a2e98048892919937019660027488f0cac1c3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 03:25:09 +0100 Subject: [PATCH 735/980] Clean code --- htdocs/core/lib/functions.lib.php | 2 +- htdocs/modulebuilder/index.php | 8 ++++---- htdocs/theme/eldy/global.inc.php | 3 ++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 4d4a20f3a5c..943afe69a1a 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -2997,7 +2997,7 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF * @param int $notitle 1=Disable tag title. Use it if you add js tooltip, to avoid duplicate tooltip. * @param string $alt Force alt for bind people * @param string $morecss Add more class css on img tag (For example 'myclascss'). Work only if $moreatt is empty. - * @param string $marginleftonlyshort 1 = Add a short left margin on picto, 2 = Add a larger left maring on picto, 0 = No margin left. Works for fontawesome picto only. + * @param string $marginleftonlyshort 1 = Add a short left margin on picto, 2 = Add a larger left margin on picto, 0 = No margin left. Works for fontawesome picto only. * @return string Return img tag * @see img_object(), img_picto_common() */ diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 3c9b23c7638..234746a0d83 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -1641,14 +1641,14 @@ elseif (! empty($module)) $linktoenabledisable=''; if (! empty($conf->global->$const_name)) // If module is already activated { - $linktoenabledisable.=''; - $linktoenabledisable.=img_picto($langs->trans("Activated"), 'switch_on'); + $linktoenabledisable.=''; + $linktoenabledisable.=img_picto($langs->trans("Activated"), 'switch_on', '', false, 0, 0, '', '', 1); $linktoenabledisable.=''; } else { - $linktoenabledisable.=''; - $linktoenabledisable.=img_picto($langs->trans("Disabled"), 'switch_off'); + $linktoenabledisable.=''; + $linktoenabledisable.=img_picto($langs->trans("Disabled"), 'switch_off', '', false, 0, 0, '', '', 1); $linktoenabledisable.="\n"; } if (! empty($conf->$modulelowercase->enabled)) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index c3bbc92af9c..cf5c4f9703a 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -521,7 +521,8 @@ body[class*="colorblind-"] .text-success{ } .fa-toggle-on, .fa-toggle-off { font-size: 2em; } -.websiteselectionsection .fa-toggle-on, .websiteselectionsection .fa-toggle-off { font-size: 1.5em; vertical-align: text-bottom; } +.websiteselectionsection .fa-toggle-on, .websiteselectionsection .fa-toggle-off, +.asetresetmodule .fa-toggle-on, .asetresetmodule .fa-toggle-off { font-size: 1.5em; vertical-align: text-bottom; } /* Themes for badges */ From 78c1e8dfbe3d1961f1f4b6c1bb5cd9fb1018de3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 08:25:58 +0100 Subject: [PATCH 736/980] Update define_holiday.php --- htdocs/holiday/define_holiday.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/htdocs/holiday/define_holiday.php b/htdocs/holiday/define_holiday.php index 9add71da395..ec2b12f9bf5 100644 --- a/htdocs/holiday/define_holiday.php +++ b/htdocs/holiday/define_holiday.php @@ -173,6 +173,10 @@ llxHeader('', $langs->trans('CPTitreMenu')); $typeleaves=$holiday->getTypes(1, 1); +$result = $holiday->updateBalance(); // Create users into table holiday if they don't exists. TODO Remove this whif we use field into table user. +if ($result < 0) { + setEventMessages($holiday->error, $holiday->errors, 'errors'); +} print '
    '; @@ -189,14 +193,12 @@ print load_fiche_titre($langs->trans('MenuConfCP'), '', 'title_hrm.png'); print '
    '.$langs->trans('LastUpdateCP').': '."\n"; $lastUpdate = $holiday->getConfCP('lastUpdate'); -if ($lastUpdate) -{ - $monthLastUpdate = $lastUpdate[4].$lastUpdate[5]; - $yearLastUpdate = $lastUpdate[0].$lastUpdate[1].$lastUpdate[2].$lastUpdate[3]; - print ''.dol_print_date($db->jdate($holiday->getConfCP('lastUpdate')), 'dayhour', 'tzuser').''; - print '
    '.$langs->trans("MonthOfLastMonthlyUpdate").': '.$yearLastUpdate.'-'.$monthLastUpdate.''."\n"; +if ($lastUpdate) { + print ''.dol_print_date($db->jdate($lastUpdate), 'dayhour').''; + print '
    '.$langs->trans("MonthOfLastMonthlyUpdate").': '.$langs->trans('Month'.substr($lastUpdate, 4, 2)).' '.substr($lastUpdate, 0, 4).''."\n"; +} else { + print $langs->trans('None'); } -else print $langs->trans('None'); print "

    \n"; $result = $holiday->updateBalance(); // Create users into table holiday if they don't exists. TODO Remove this whif we use field into table user. From 5bafcae76719f0cfe3fef3825f7cd80e22831a48 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Fri, 1 Nov 2019 10:36:17 +0100 Subject: [PATCH 737/980] add some comment --- htdocs/accountancy/class/bookkeeping.class.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index b4e747d65f3..3a9319da46b 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -1975,7 +1975,13 @@ class BookKeepingLine public $code_journal; public $journal_label; public $piece_num; + + /** + * Creation date + * @var int + */ public $date_creation; + public $date_modification; public $date_export; } From a8f7082a3a85db67e1a8584a332e0d82169f7c63 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Fri, 1 Nov 2019 09:36:18 +0000 Subject: [PATCH 738/980] Fixing style errors. --- htdocs/accountancy/class/bookkeeping.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 3a9319da46b..7b2cecc16af 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -1975,13 +1975,13 @@ class BookKeepingLine public $code_journal; public $journal_label; public $piece_num; - + /** * Creation date * @var int */ public $date_creation; - + public $date_modification; public $date_export; } From c851a9faffaf98ac661107cd460762f03babb042 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Fri, 1 Nov 2019 10:38:58 +0100 Subject: [PATCH 739/980] add some comment --- htdocs/asset/class/asset.class.php | 7 +++++++ htdocs/blockedlog/class/blockedlog.class.php | 6 ++++++ htdocs/bom/class/bom.class.php | 7 +++++++ htdocs/comm/mailing/class/mailing.class.php | 6 ++++++ 4 files changed, 26 insertions(+) diff --git a/htdocs/asset/class/asset.class.php b/htdocs/asset/class/asset.class.php index 04c195c08ff..64e8551928f 100644 --- a/htdocs/asset/class/asset.class.php +++ b/htdocs/asset/class/asset.class.php @@ -128,7 +128,14 @@ class Asset extends CommonObject public $note_public; public $note_private; + + /** + * Creation date + * @var int + */ public $date_creation; + + public $tms; /** diff --git a/htdocs/blockedlog/class/blockedlog.class.php b/htdocs/blockedlog/class/blockedlog.class.php index 906040a6bd9..cd41bb5837e 100644 --- a/htdocs/blockedlog/class/blockedlog.class.php +++ b/htdocs/blockedlog/class/blockedlog.class.php @@ -100,7 +100,13 @@ class BlockedLog */ public $fk_user = 0; + /** + * Creation date + * @var int + */ public $date_creation; + + public $date_modification; public $date_object = 0; diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 444caa2a4da..dbaa450463b 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -112,7 +112,14 @@ class BOM extends CommonObject public $description; public $note_public; public $note_private; + + /** + * Creation date + * @var int + */ public $date_creation; + + public $tms; public $fk_user_creat; public $fk_user_modif; diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php index 41f74846125..6bd1d17f53a 100644 --- a/htdocs/comm/mailing/class/mailing.class.php +++ b/htdocs/comm/mailing/class/mailing.class.php @@ -67,7 +67,13 @@ class Mailing extends CommonObject public $user_creat; public $user_valid; + /** + * Creation date + * @var int + */ public $date_creat; + + public $date_valid; public $extraparams=array(); From 4fe3e4950268673eb5e57d9ae0991dfd4b0b5c7a Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Fri, 1 Nov 2019 10:42:14 +0100 Subject: [PATCH 740/980] add some comment --- htdocs/compta/cashcontrol/class/cashcontrol.class.php | 7 +++++++ htdocs/compta/sociales/class/chargesociales.class.php | 7 +++++++ htdocs/core/class/commonobject.class.php | 7 ++++++- htdocs/core/class/emailsenderprofile.class.php | 6 ++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/cashcontrol/class/cashcontrol.class.php b/htdocs/compta/cashcontrol/class/cashcontrol.class.php index 354b50365ca..b80128f6570 100644 --- a/htdocs/compta/cashcontrol/class/cashcontrol.class.php +++ b/htdocs/compta/cashcontrol/class/cashcontrol.class.php @@ -87,7 +87,14 @@ class CashControl extends CommonObject public $cheque; public $card; public $date_valid; + + /** + * Creation date + * @var int + */ public $date_creation; + + public $date_modification; const STATUS_DRAFT = 0; diff --git a/htdocs/compta/sociales/class/chargesociales.class.php b/htdocs/compta/sociales/class/chargesociales.class.php index bbffbebe0c9..cc6c94ee4ad 100644 --- a/htdocs/compta/sociales/class/chargesociales.class.php +++ b/htdocs/compta/sociales/class/chargesociales.class.php @@ -61,7 +61,14 @@ class ChargeSociales extends CommonObject public $amount; public $paye; public $periode; + + /** + * Creation date + * @var int + */ public $date_creation; + + public $date_modification; public $date_validation; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 7707be211f3..a1f42da03eb 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -421,7 +421,12 @@ abstract class CommonObject public $civility_id; // Dates - public $date_creation; // Date creation + /** + * @var int Date of creation + */ + public $date_creation; + + public $date_validation; // Date validation public $date_modification; // Date last change (tms field) diff --git a/htdocs/core/class/emailsenderprofile.class.php b/htdocs/core/class/emailsenderprofile.class.php index 155050c6997..3406eefa3cd 100644 --- a/htdocs/core/class/emailsenderprofile.class.php +++ b/htdocs/core/class/emailsenderprofile.class.php @@ -105,7 +105,13 @@ class EmailSenderProfile extends CommonObject public $label; public $email; + + /** + * @var int Date of creation + */ public $date_creation; + + public $tms; //public $fk_user_creat; //public $fk_user_modif; From 0c6938aa2a58dcaafe9cb83dc6c7b93761dfa938 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Fri, 1 Nov 2019 09:44:29 +0000 Subject: [PATCH 741/980] Fixing style errors. --- htdocs/asset/class/asset.class.php | 6 +++--- htdocs/blockedlog/class/blockedlog.class.php | 4 ++-- htdocs/bom/class/bom.class.php | 6 +++--- htdocs/comm/mailing/class/mailing.class.php | 4 ++-- htdocs/compta/cashcontrol/class/cashcontrol.class.php | 6 +++--- htdocs/compta/sociales/class/chargesociales.class.php | 6 +++--- htdocs/core/class/commonobject.class.php | 4 ++-- htdocs/core/class/emailsenderprofile.class.php | 6 +++--- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/htdocs/asset/class/asset.class.php b/htdocs/asset/class/asset.class.php index 64e8551928f..8f1681b42d3 100644 --- a/htdocs/asset/class/asset.class.php +++ b/htdocs/asset/class/asset.class.php @@ -128,14 +128,14 @@ class Asset extends CommonObject public $note_public; public $note_private; - + /** * Creation date * @var int */ public $date_creation; - - + + public $tms; /** diff --git a/htdocs/blockedlog/class/blockedlog.class.php b/htdocs/blockedlog/class/blockedlog.class.php index cd41bb5837e..025ed07f0e6 100644 --- a/htdocs/blockedlog/class/blockedlog.class.php +++ b/htdocs/blockedlog/class/blockedlog.class.php @@ -105,8 +105,8 @@ class BlockedLog * @var int */ public $date_creation; - - + + public $date_modification; public $date_object = 0; diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index dbaa450463b..ddabce9b2b9 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -112,14 +112,14 @@ class BOM extends CommonObject public $description; public $note_public; public $note_private; - + /** * Creation date * @var int */ public $date_creation; - - + + public $tms; public $fk_user_creat; public $fk_user_modif; diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php index 6bd1d17f53a..3791670ac07 100644 --- a/htdocs/comm/mailing/class/mailing.class.php +++ b/htdocs/comm/mailing/class/mailing.class.php @@ -72,8 +72,8 @@ class Mailing extends CommonObject * @var int */ public $date_creat; - - + + public $date_valid; public $extraparams=array(); diff --git a/htdocs/compta/cashcontrol/class/cashcontrol.class.php b/htdocs/compta/cashcontrol/class/cashcontrol.class.php index b80128f6570..0867c1a8e8e 100644 --- a/htdocs/compta/cashcontrol/class/cashcontrol.class.php +++ b/htdocs/compta/cashcontrol/class/cashcontrol.class.php @@ -87,14 +87,14 @@ class CashControl extends CommonObject public $cheque; public $card; public $date_valid; - + /** * Creation date * @var int */ public $date_creation; - - + + public $date_modification; const STATUS_DRAFT = 0; diff --git a/htdocs/compta/sociales/class/chargesociales.class.php b/htdocs/compta/sociales/class/chargesociales.class.php index cc6c94ee4ad..c12fe65e989 100644 --- a/htdocs/compta/sociales/class/chargesociales.class.php +++ b/htdocs/compta/sociales/class/chargesociales.class.php @@ -61,14 +61,14 @@ class ChargeSociales extends CommonObject public $amount; public $paye; public $periode; - + /** * Creation date * @var int */ public $date_creation; - - + + public $date_modification; public $date_validation; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index a1f42da03eb..cd1fae53e34 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -425,8 +425,8 @@ abstract class CommonObject * @var int Date of creation */ public $date_creation; - - + + public $date_validation; // Date validation public $date_modification; // Date last change (tms field) diff --git a/htdocs/core/class/emailsenderprofile.class.php b/htdocs/core/class/emailsenderprofile.class.php index 3406eefa3cd..41b0acbfe7d 100644 --- a/htdocs/core/class/emailsenderprofile.class.php +++ b/htdocs/core/class/emailsenderprofile.class.php @@ -105,13 +105,13 @@ class EmailSenderProfile extends CommonObject public $label; public $email; - + /** * @var int Date of creation */ public $date_creation; - - + + public $tms; //public $fk_user_creat; //public $fk_user_modif; From d82b7f5840abbaf4efe425f77659ab94dbc6c5f0 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Fri, 1 Nov 2019 10:48:21 +0100 Subject: [PATCH 742/980] add some comment --- htdocs/emailcollector/class/emailcollector.class.php | 5 +++++ htdocs/emailcollector/class/emailcollectoraction.class.php | 6 ++++++ htdocs/emailcollector/class/emailcollectorfilter.class.php | 6 ++++++ htdocs/expedition/class/expedition.class.php | 5 +++++ 4 files changed, 22 insertions(+) diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index 7469faaa356..8b7218074cc 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -151,7 +151,12 @@ class EmailCollector extends CommonObject */ public $status; + /** + * @var int Date of creation + */ public $date_creation; + + public $tms; /** diff --git a/htdocs/emailcollector/class/emailcollectoraction.class.php b/htdocs/emailcollector/class/emailcollectoraction.class.php index 0033b615f8a..2dd9a7b4230 100644 --- a/htdocs/emailcollector/class/emailcollectoraction.class.php +++ b/htdocs/emailcollector/class/emailcollectoraction.class.php @@ -98,7 +98,13 @@ class EmailCollectorAction extends CommonObject public $fk_emailcollector; public $type; public $actionparam; + + /** + * @var int Date of creation + */ public $date_creation; + + public $tms; public $fk_user_creat; public $fk_user_modif; diff --git a/htdocs/emailcollector/class/emailcollectorfilter.class.php b/htdocs/emailcollector/class/emailcollectorfilter.class.php index 5a8f3003c84..6a326b5c8f6 100644 --- a/htdocs/emailcollector/class/emailcollectorfilter.class.php +++ b/htdocs/emailcollector/class/emailcollectorfilter.class.php @@ -97,7 +97,13 @@ class EmailCollectorFilter extends CommonObject public $fk_emailcollector; public $type; public $rulevalue; + + /** + * @var int Date of creation + */ public $date_creation; + + public $tms; public $fk_user_creat; public $fk_user_modif; diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 0c340bc8695..102b854a2bd 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -143,7 +143,12 @@ class Expedition extends CommonObject */ public $date_shipping; + /** + * @var int Date of creation + */ public $date_creation; + + public $date_valid; public $meths; From 4628caf0a31c6451597c0eb71a30ef6db8194dc1 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Fri, 1 Nov 2019 09:48:58 +0000 Subject: [PATCH 743/980] Fixing style errors. --- htdocs/emailcollector/class/emailcollector.class.php | 4 ++-- htdocs/emailcollector/class/emailcollectoraction.class.php | 6 +++--- htdocs/emailcollector/class/emailcollectorfilter.class.php | 6 +++--- htdocs/expedition/class/expedition.class.php | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index 8b7218074cc..1fcadb2b627 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -155,8 +155,8 @@ class EmailCollector extends CommonObject * @var int Date of creation */ public $date_creation; - - + + public $tms; /** diff --git a/htdocs/emailcollector/class/emailcollectoraction.class.php b/htdocs/emailcollector/class/emailcollectoraction.class.php index 2dd9a7b4230..0d580342170 100644 --- a/htdocs/emailcollector/class/emailcollectoraction.class.php +++ b/htdocs/emailcollector/class/emailcollectoraction.class.php @@ -98,13 +98,13 @@ class EmailCollectorAction extends CommonObject public $fk_emailcollector; public $type; public $actionparam; - + /** * @var int Date of creation */ public $date_creation; - - + + public $tms; public $fk_user_creat; public $fk_user_modif; diff --git a/htdocs/emailcollector/class/emailcollectorfilter.class.php b/htdocs/emailcollector/class/emailcollectorfilter.class.php index 6a326b5c8f6..010948a79f8 100644 --- a/htdocs/emailcollector/class/emailcollectorfilter.class.php +++ b/htdocs/emailcollector/class/emailcollectorfilter.class.php @@ -97,13 +97,13 @@ class EmailCollectorFilter extends CommonObject public $fk_emailcollector; public $type; public $rulevalue; - + /** * @var int Date of creation */ public $date_creation; - - + + public $tms; public $fk_user_creat; public $fk_user_modif; diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 102b854a2bd..1fc7d1e4889 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -147,8 +147,8 @@ class Expedition extends CommonObject * @var int Date of creation */ public $date_creation; - - + + public $date_valid; public $meths; From 07cd656a1c96b70b19b48126952ac33b0e1f4d4a Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Fri, 1 Nov 2019 10:56:46 +0100 Subject: [PATCH 744/980] add some comment --- htdocs/livraison/class/livraison.class.php | 6 ++++++ htdocs/loan/class/loan.class.php | 6 ++++++ htdocs/mrp/class/mo.class.php | 6 ++++++ htdocs/product/class/product.class.php | 5 +++++ 4 files changed, 23 insertions(+) diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 428015a96f4..b52eb1154d3 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -64,7 +64,13 @@ class Livraison extends CommonObject public $ref_customer; public $date_delivery; // Date really received + + /** + * @var integer|string date_creation + */ public $date_creation; + + public $date_valid; public $model_pdf; diff --git a/htdocs/loan/class/loan.class.php b/htdocs/loan/class/loan.class.php index c8e241186d2..174b779dcf3 100644 --- a/htdocs/loan/class/loan.class.php +++ b/htdocs/loan/class/loan.class.php @@ -63,7 +63,13 @@ class Loan extends CommonObject public $account_capital; public $account_insurance; public $account_interest; + + /** + * @var integer|string date_creation + */ public $date_creation; + + public $date_modification; public $date_validation; diff --git a/htdocs/mrp/class/mo.class.php b/htdocs/mrp/class/mo.class.php index 71a743eb071..cac7420d9ee 100644 --- a/htdocs/mrp/class/mo.class.php +++ b/htdocs/mrp/class/mo.class.php @@ -121,7 +121,13 @@ class Mo extends CommonObject public $fk_soc; public $note_public; public $note_private; + + /** + * @var integer|string date_creation + */ public $date_creation; + + public $tms; public $fk_user_creat; public $fk_user_modif; diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index bf2b3a0e410..01fc6703301 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -325,7 +325,12 @@ class Product extends CommonObject public $imgWidth; public $imgHeight; + /** + * @var integer|string date_creation + */ public $date_creation; + + public $date_modification; //! Id du fournisseur From 3692a6602db266e571d43f79ef6192997e9e819c Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:12:09 +0100 Subject: [PATCH 745/980] Update bookkeeping.class.php --- htdocs/accountancy/class/bookkeeping.class.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 7b2cecc16af..9e58ffed942 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -1977,9 +1977,8 @@ class BookKeepingLine public $piece_num; /** - * Creation date - * @var int - */ + * @var integer|string date_creation + */ public $date_creation; public $date_modification; From 9f76f20833af6fce5687f412c4a102a3883c58b7 Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:12:55 +0100 Subject: [PATCH 746/980] Update asset.class.php --- htdocs/asset/class/asset.class.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/asset/class/asset.class.php b/htdocs/asset/class/asset.class.php index 8f1681b42d3..0e34cd9b989 100644 --- a/htdocs/asset/class/asset.class.php +++ b/htdocs/asset/class/asset.class.php @@ -130,9 +130,8 @@ class Asset extends CommonObject public $note_private; /** - * Creation date - * @var int - */ + * @var integer|string date_creation + */ public $date_creation; From 4df21701bea1c6fd84d222de00c515ae99ead63a Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:14:55 +0100 Subject: [PATCH 747/980] Update blockedlog.class.php --- htdocs/blockedlog/class/blockedlog.class.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/blockedlog/class/blockedlog.class.php b/htdocs/blockedlog/class/blockedlog.class.php index 025ed07f0e6..4981c05afd7 100644 --- a/htdocs/blockedlog/class/blockedlog.class.php +++ b/htdocs/blockedlog/class/blockedlog.class.php @@ -101,9 +101,8 @@ class BlockedLog public $fk_user = 0; /** - * Creation date - * @var int - */ + * @var integer|string date_creation + */ public $date_creation; From 12faebd63f8ed9888f8b40c375f6bc8a6526ecad Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:15:26 +0100 Subject: [PATCH 748/980] Update bom.class.php --- htdocs/bom/class/bom.class.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index ddabce9b2b9..32cedb73826 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -114,9 +114,8 @@ class BOM extends CommonObject public $note_private; /** - * Creation date - * @var int - */ + * @var integer|string date_creation + */ public $date_creation; From 4b5ca5c25eedb2f7f456f1514c6f94c648f784de Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:15:53 +0100 Subject: [PATCH 749/980] Update mailing.class.php --- htdocs/comm/mailing/class/mailing.class.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php index 3791670ac07..00bd33f6704 100644 --- a/htdocs/comm/mailing/class/mailing.class.php +++ b/htdocs/comm/mailing/class/mailing.class.php @@ -68,9 +68,8 @@ class Mailing extends CommonObject public $user_valid; /** - * Creation date - * @var int - */ + * @var integer|string date_creation + */ public $date_creat; From f568241a81fffaa0f8773f6fee2ea1a58715f3ea Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:16:20 +0100 Subject: [PATCH 750/980] Update cashcontrol.class.php --- htdocs/compta/cashcontrol/class/cashcontrol.class.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/cashcontrol/class/cashcontrol.class.php b/htdocs/compta/cashcontrol/class/cashcontrol.class.php index 0867c1a8e8e..7d675b061b5 100644 --- a/htdocs/compta/cashcontrol/class/cashcontrol.class.php +++ b/htdocs/compta/cashcontrol/class/cashcontrol.class.php @@ -89,9 +89,8 @@ class CashControl extends CommonObject public $date_valid; /** - * Creation date - * @var int - */ + * @var integer|string date_creation + */ public $date_creation; From 9fad5dc8fc1cf6c93aca1623745d298435c3728a Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:16:47 +0100 Subject: [PATCH 751/980] Update chargesociales.class.php --- htdocs/compta/sociales/class/chargesociales.class.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/compta/sociales/class/chargesociales.class.php b/htdocs/compta/sociales/class/chargesociales.class.php index c12fe65e989..980538e34aa 100644 --- a/htdocs/compta/sociales/class/chargesociales.class.php +++ b/htdocs/compta/sociales/class/chargesociales.class.php @@ -63,8 +63,7 @@ class ChargeSociales extends CommonObject public $periode; /** - * Creation date - * @var int + * @var integer|string date_creation */ public $date_creation; From 74ae90f9daa1f387574faf7d62c4bd0caffd88c4 Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:18:12 +0100 Subject: [PATCH 752/980] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index cd1fae53e34..473f50b16d7 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -422,8 +422,8 @@ abstract class CommonObject // Dates /** - * @var int Date of creation - */ + * @var integer|string date_creation + */ public $date_creation; From db9c4904703c4ca4f4a8e94eaae65e80ceb74ee2 Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:18:54 +0100 Subject: [PATCH 753/980] Update emailsenderprofile.class.php --- htdocs/core/class/emailsenderprofile.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/emailsenderprofile.class.php b/htdocs/core/class/emailsenderprofile.class.php index 41b0acbfe7d..c4af5773885 100644 --- a/htdocs/core/class/emailsenderprofile.class.php +++ b/htdocs/core/class/emailsenderprofile.class.php @@ -107,8 +107,8 @@ class EmailSenderProfile extends CommonObject public $email; /** - * @var int Date of creation - */ + * @var integer|string date_creation + */ public $date_creation; From 2dce468b2df3ee13e2061cf7583afdb1726e35df Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:19:37 +0100 Subject: [PATCH 754/980] Update emailcollector.class.php --- htdocs/emailcollector/class/emailcollector.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index 1fcadb2b627..f65ebaea6af 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -152,7 +152,7 @@ class EmailCollector extends CommonObject public $status; /** - * @var int Date of creation + * @var integer|string date_creation */ public $date_creation; From d4e9d831f6fbd83a4f92ad8c2f342c737b4a6179 Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:23:41 +0100 Subject: [PATCH 755/980] Update emailcollectoraction.class.php --- htdocs/emailcollector/class/emailcollectoraction.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/emailcollector/class/emailcollectoraction.class.php b/htdocs/emailcollector/class/emailcollectoraction.class.php index 0d580342170..42e5e62a21d 100644 --- a/htdocs/emailcollector/class/emailcollectoraction.class.php +++ b/htdocs/emailcollector/class/emailcollectoraction.class.php @@ -100,7 +100,7 @@ class EmailCollectorAction extends CommonObject public $actionparam; /** - * @var int Date of creation + * @var integer|string date_creation */ public $date_creation; From b83c89d6a18f8e08ac9946b9ed28d7d16269b215 Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:24:33 +0100 Subject: [PATCH 756/980] Update emailcollectorfilter.class.php --- htdocs/emailcollector/class/emailcollectorfilter.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/emailcollector/class/emailcollectorfilter.class.php b/htdocs/emailcollector/class/emailcollectorfilter.class.php index 010948a79f8..0cc5208ac13 100644 --- a/htdocs/emailcollector/class/emailcollectorfilter.class.php +++ b/htdocs/emailcollector/class/emailcollectorfilter.class.php @@ -99,8 +99,8 @@ class EmailCollectorFilter extends CommonObject public $rulevalue; /** - * @var int Date of creation - */ + * @var integer|string date_creation + */ public $date_creation; From 99cf8f07e9451562dd0cb457e60e3370c8cd61a5 Mon Sep 17 00:00:00 2001 From: Philippe Grand Date: Fri, 1 Nov 2019 11:25:29 +0100 Subject: [PATCH 757/980] Update expedition.class.php --- htdocs/expedition/class/expedition.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 1fc7d1e4889..a096e3ea734 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -144,8 +144,8 @@ class Expedition extends CommonObject public $date_shipping; /** - * @var int Date of creation - */ + * @var integer|string date_creation + */ public $date_creation; From 0bfff92032d8573a9ce96b285fcada70136acc80 Mon Sep 17 00:00:00 2001 From: "Sekan, Tobias" Date: Fri, 1 Nov 2019 11:59:54 +0100 Subject: [PATCH 758/980] Add attendee to ical export + cleanup --- htdocs/comm/action/class/actioncomm.class.php | 16 + htdocs/core/lib/xcal.lib.php | 847 +++++++++--------- 2 files changed, 459 insertions(+), 404 deletions(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 8432ba786a1..308012c6ca9 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1579,6 +1579,22 @@ class ActionComm extends CommonObject $event['created']=$this->db->jdate($obj->datec)-(empty($conf->global->AGENDA_EXPORT_FIX_TZ)?0:($conf->global->AGENDA_EXPORT_FIX_TZ*3600)); $event['modified']=$this->db->jdate($obj->datem)-(empty($conf->global->AGENDA_EXPORT_FIX_TZ)?0:($conf->global->AGENDA_EXPORT_FIX_TZ*3600)); + // TODO: find a way to call "$this->fetch_userassigned();" without override "$this" properties + $this->id = $obj->id; + $this->fetch_userassigned(); + + $assignedUserArray = array(); + + foreach($this->userassigned as $key => $value) + { + $assignedUser = new User($this->db); + $assignedUser->fetch($value['id']); + + $assignedUserArray[$key]=$assignedUser; + } + + $event['assignedUsers']=$assignedUserArray; + if ($qualified && $datestart) { $eventarray[]=$event; diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php index b45eaa4b7a9..40656e5c0c4 100644 --- a/htdocs/core/lib/xcal.lib.php +++ b/htdocs/core/lib/xcal.lib.php @@ -12,7 +12,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ @@ -25,499 +25,538 @@ * Build a file from an array of events * All input params and data must be encoded in $conf->charset_output * - * @param string $format 'vcal' or 'ical' - * @param string $title Title of export - * @param string $desc Description of export - * @param array $events_array Array of events ('eid','startdate','duration','enddate','title','summary','category','email','url','desc','author') - * @param string $outputfile Output file - * @return int <0 if ko, Nb of events in file if ok + * @param string $format "vcal" or "ical" + * @param string $title Title of export + * @param string $desc Description of export + * @param array $events_array Array of events ("uid","startdate","duration","enddate","title","summary","category","email","url","desc","author") + * @param string $outputfile Output file + * @return int < 0 if ko, Nb of events in file if ok */ function build_calfile($format, $title, $desc, $events_array, $outputfile) { - global $conf,$langs; + global $conf, $langs; - dol_syslog("xcal.lib.php::build_calfile Build cal file ".$outputfile." to format ".$format); + dol_syslog("xcal.lib.php::build_calfile Build cal file ".$outputfile." to format ".$format); - if (empty($outputfile)) return -1; + if (empty($outputfile)) + { + // -1 = error + return -1; + } // Note: A cal file is an UTF8 encoded file - $calfileh=fopen($outputfile, 'w'); - if ($calfileh) - { - include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; - $now=dol_now(); + $calfileh = fopen($outputfile, "w"); - $encoding=''; - if ($format == 'vcal') $encoding='ENCODING=QUOTED-PRINTABLE:'; + if ($calfileh) + { + include_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"; - // Print header - fwrite($calfileh, "BEGIN:VCALENDAR\n"); - fwrite($calfileh, "VERSION:2.0\n"); - fwrite($calfileh, "METHOD:PUBLISH\n"); - //fwrite($calfileh,"PRODID:-//DOLIBARR ".DOL_VERSION."//EN\n"); - fwrite($calfileh, "PRODID:-//DOLIBARR ".DOL_VERSION."\n"); - fwrite($calfileh, "CALSCALE:GREGORIAN\n"); - fwrite($calfileh, "X-WR-CALNAME:".$encoding.format_cal($format, $title)."\n"); - fwrite($calfileh, "X-WR-CALDESC:".$encoding.format_cal($format, $desc)."\n"); - //fwrite($calfileh,"X-WR-TIMEZONE:Europe/Paris\n"); - if (! empty($conf->global->MAIN_AGENDA_EXPORT_CACHE) - && $conf->global->MAIN_AGENDA_EXPORT_CACHE > 60){ - $hh=convertSecondToTime($conf->global->MAIN_AGENDA_EXPORT_CACHE, 'hour'); - $mm=convertSecondToTime($conf->global->MAIN_AGENDA_EXPORT_CACHE, 'min'); - $ss=convertSecondToTime($conf->global->MAIN_AGENDA_EXPORT_CACHE, 'sec'); - fwrite($calfileh, "X-PUBLISHED-TTL: P".$hh."H".$mm."M".$ss."S\n"); + $now = dol_now(); + $encoding = ""; + + if ($format === "vcal") + { + $encoding = "ENCODING=QUOTED-PRINTABLE:"; } - foreach ($events_array as $key => $event) - { - $eventqualified=true; - if ($eventqualified) - { - // See http://fr.wikipedia.org/wiki/ICalendar for format - // See http://www.ietf.org/rfc/rfc2445.txt for RFC - $uid = $event['uid']; - $type = $event['type']; - $startdate = $event['startdate']; - $duration = $event['duration']; - $enddate = $event['enddate']; - $summary = $event['summary']; - $category = $event['category']; - $priority = $event['priority']; - $fulldayevent = $event['fulldayevent']; - $location = $event['location']; - $email = $event['email']; - $url = $event['url']; - $transparency = $event['transparency']; // OPAQUE (busy) or TRANSPARENT (not busy) - $description=preg_replace('//i', "\n", $event['desc']); - $description=dol_string_nohtmltag($description, 0); // Remove html tags - $created = $event['created']; - $modified = $event['modified']; + // Print header + fwrite($calfileh, "BEGIN:VCALENDAR\n"); - // Uncomment for tests - //$summary="Resume"; - //$description="Description"; - //$description="MemberValidatedInDolibarr gd gdf gd gdff\nNom: tgdf g dfgdf gfd r ter\nType: gdfgfdf dfg fd gfd gd gdf gdf gfd gdfg dfg ddf\nAuteur: AD01fg dgdgdfg df gdf gd"; + // version is always "2.0" + fwrite($calfileh, "VERSION:2.0\n"); - // Format - $summary=format_cal($format, $summary); - $description=format_cal($format, $description); - $category=format_cal($format, $category); - $location=format_cal($format, $location); + fwrite($calfileh, "METHOD:PUBLISH\n"); + fwrite($calfileh, "PRODID:-//DOLIBARR ".DOL_VERSION."\n"); + fwrite($calfileh, "CALSCALE:GREGORIAN\n"); + fwrite($calfileh, "X-WR-CALNAME:".$encoding.format_cal($format, $title)."\n"); + fwrite($calfileh, "X-WR-CALDESC:".$encoding.format_cal($format, $desc)."\n"); + //fwrite($calfileh,"X-WR-TIMEZONE:Europe/Paris\n"); - // Output the vCard/iCal VEVENT object - /* - Example from Google ical export for a 1 hour event: - BEGIN:VEVENT - DTSTART:20101103T120000Z - DTEND:20101103T130000Z - DTSTAMP:20101121T144902Z - UID:4eilllcsq8r1p87ncg7vc8dbpk@google.com - CREATED:20101121T144657Z - DESCRIPTION: - LAST-MODIFIED:20101121T144707Z - LOCATION: - SEQUENCE:0 - STATUS:CONFIRMED - SUMMARY:Tâche 1 heure - TRANSP:OPAQUE - END:VEVENT + if (! empty($conf->global->MAIN_AGENDA_EXPORT_CACHE) && $conf->global->MAIN_AGENDA_EXPORT_CACHE > 60) + { + $hh = convertSecondToTime($conf->global->MAIN_AGENDA_EXPORT_CACHE, "hour"); + $mm = convertSecondToTime($conf->global->MAIN_AGENDA_EXPORT_CACHE, "min"); + $ss = convertSecondToTime($conf->global->MAIN_AGENDA_EXPORT_CACHE, "sec"); - Example from Google ical export for a 1 day event: - BEGIN:VEVENT - DTSTART;VALUE=DATE:20101102 - DTEND;VALUE=DATE:20101103 - DTSTAMP:20101121T144902Z - UID:d09t43kcf1qgapu9efsmmo1m6k@google.com - CREATED:20101121T144607Z - DESCRIPTION: - LAST-MODIFIED:20101121T144607Z - LOCATION: - SEQUENCE:0 - STATUS:CONFIRMED - SUMMARY:Tâche 1 jour - TRANSP:TRANSPARENT - END:VEVENT - */ - if ($type == 'event') - { - fwrite($calfileh, "BEGIN:VEVENT\n"); - fwrite($calfileh, "UID:".$uid."\n"); - if (! empty($email)) - { - fwrite($calfileh, "ORGANIZER:MAILTO:".$email."\n"); - fwrite($calfileh, "CONTACT:MAILTO:".$email."\n"); - } - if (! empty($url)) - { - fwrite($calfileh, "URL:".$url."\n"); - }; + fwrite($calfileh, "X-PUBLISHED-TTL: P".$hh."H".$mm."M".$ss."S\n"); + } - if ($created) fwrite($calfileh, "CREATED:".dol_print_date($created, 'dayhourxcard', true)."\n"); - if ($modified) fwrite($calfileh, "LAST-MODIFIED:".dol_print_date($modified, 'dayhourxcard', true)."\n"); - fwrite($calfileh, "SUMMARY:".$encoding.$summary."\n"); - fwrite($calfileh, "DESCRIPTION:".$encoding.$description."\n"); + foreach ($events_array as $key => $event) + { + // See http://fr.wikipedia.org/wiki/ICalendar for format + // See http://www.ietf.org/rfc/rfc2445.txt for RFC - /* Other keys: - // Status values for a "VEVENT" - statvalue = "TENTATIVE" ;Indicates event is - ;tentative. - / "CONFIRMED" ;Indicates event is - ;definite. - / "CANCELLED" ;Indicates event was - // Status values for "VTODO". - statvalue =/ "NEEDS-ACTION" ;Indicates to-do needs action. - / "COMPLETED" ;Indicates to-do completed. - / "IN-PROCESS" ;Indicates to-do in process of - / "CANCELLED" ;Indicates to-do was cancelled. - // Status values for "VJOURNAL". - statvalue =/ "DRAFT" ;Indicates journal is draft. - / "FINAL" ;Indicates journal is final. - / "CANCELLED" ;Indicates journal is removed. - */ - //fwrite($calfileh,"CLASS:PUBLIC\n"); // PUBLIC, PRIVATE, CONFIDENTIAL - //fwrite($calfileh,"X-MICROSOFT-CDO-BUSYSTATUS:1\n"); - //ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;CN=Laurent Destailleur;X-NUM-GUESTS=0:mailto:eldy10@gmail.com + // TODO: avoid use extra event array, use objects direct thahtwas created before - if (! empty($location)) fwrite($calfileh, "LOCATION:".$encoding.$location."\n"); - if ($fulldayevent) fwrite($calfileh, "X-FUNAMBOL-ALLDAY:1\n"); + $uid = $event["uid"]; + $type = $event["type"]; + $startdate = $event["startdate"]; + $duration = $event["duration"]; + $enddate = $event["enddate"]; + $summary = $event["summary"]; + $category = $event["category"]; + $priority = $event["priority"]; + $fulldayevent = $event["fulldayevent"]; + $location = $event["location"]; + $email = $event["email"]; + $url = $event["url"]; + $transparency = $event["transparency"]; + $description = dol_string_nohtmltag(preg_replace("//i", "\n", $event["desc"]), 0); + $created = $event["created"]; + $modified = $event["modified"]; + $assignedUsers = $event["assignedUsers"]; - // see https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxcical/0f262da6-c5fd-459e-9f18-145eba86b5d2 - if ($fulldayevent) fwrite($calfileh, "X-MICROSOFT-CDO-ALLDAYEVENT:TRUE\n"); + // Format + $summary = format_cal($format, $summary); + $description = format_cal($format, $description); + $category = format_cal($format, $category); + $location = format_cal($format, $location); - // Date must be GMT dates - // Current date - fwrite($calfileh, "DTSTAMP:".dol_print_date($now, 'dayhourxcard', true)."\n"); - // Start date - $prefix=''; - $startdatef = dol_print_date($startdate, 'dayhourxcard', true); - if ($fulldayevent) - { - $prefix=';VALUE=DATE'; - $startdatef = dol_print_date($startdate, 'dayxcard', false); // Local time - } - fwrite($calfileh, "DTSTART".$prefix.":".$startdatef."\n"); - // End date - if ($fulldayevent) - { - if (empty($enddate)) $enddate=dol_time_plus_duree($startdate, 1, 'd'); - } - else - { - if (empty($enddate)) $enddate=$startdate+$duration; - } - $prefix=''; - $enddatef = dol_print_date($enddate, 'dayhourxcard', true); - if ($fulldayevent) - { - $prefix=';VALUE=DATE'; - $enddatef = dol_print_date($enddate+1, 'dayxcard', false); - //$enddatef .= dol_print_date($enddate+1,'dayhourxcard',false); // Local time - } - fwrite($calfileh, "DTEND".$prefix.":".$enddatef."\n"); - fwrite($calfileh, 'STATUS:CONFIRMED'."\n"); - if (! empty($transparency)) fwrite($calfileh, "TRANSP:".$transparency."\n"); - if (! empty($category)) fwrite($calfileh, "CATEGORIES:".$encoding.$category."\n"); - fwrite($calfileh, "END:VEVENT\n"); - } + if ($type === "event") + { + fwrite($calfileh, "BEGIN:VEVENT\n"); + fwrite($calfileh, "UID:".$uid."\n"); - // Output the vCard/iCal VTODO object - // ... - //PERCENT-COMPLETE:39 + if (! empty($email)) + { + fwrite($calfileh, "ORGANIZER:MAILTO:".$email."\n"); + fwrite($calfileh, "CONTACT:MAILTO:".$email."\n"); + } - // Output the vCard/iCal VJOURNAL object - if ($type == 'journal') - { - fwrite($calfileh, "BEGIN:VJOURNAL\n"); - fwrite($calfileh, "UID:".$uid."\n"); - if (! empty($email)) - { - fwrite($calfileh, "ORGANIZER:MAILTO:".$email."\n"); - fwrite($calfileh, "CONTACT:MAILTO:".$email."\n"); - } - if (! empty($url)) - { - fwrite($calfileh, "URL:".$url."\n"); - }; + if (! empty($url)) + { + fwrite($calfileh, "URL:".$url."\n"); + } - if ($created) fwrite($calfileh, "CREATED:".dol_print_date($created, 'dayhourxcard', true)."\n"); - if ($modified) fwrite($calfileh, "LAST-MODIFIED:".dol_print_date($modified, 'dayhourxcard', true)."\n"); - fwrite($calfileh, "SUMMARY:".$encoding.$summary."\n"); - fwrite($calfileh, "DESCRIPTION:".$encoding.$description."\n"); - fwrite($calfileh, 'STATUS:CONFIRMED'."\n"); - fwrite($calfileh, "CATEGORIES:".$category."\n"); - fwrite($calfileh, "LOCATION:".$location."\n"); - fwrite($calfileh, "TRANSP:OPAQUE\n"); - fwrite($calfileh, "CLASS:CONFIDENTIAL\n"); - fwrite($calfileh, "DTSTAMP:".dol_print_date($startdatef, 'dayhourxcard', true)."\n"); + if (is_array($assignedUsers)) + { + foreach($assignedUsers as $assignedUser) + { + if($assignedUser->email === $email) + { + continue; + } - fwrite($calfileh, "END:VJOURNAL\n"); - } + fwrite($calfileh,"ATTENDEE;RSVP=TRUE:mailto:".$assignedUser->email."\n"); + } + } + if ($created) + { + fwrite($calfileh, "CREATED:".dol_print_date($created, "dayhourxcard", true)."\n"); + } - // Put other info in comment - /* - $comment=array(); - $comment ['eid'] = $eid; - $comment ['url'] = $linktoevent; - $comment ['date'] = dol_mktime($evttime,"Ymd"); - $comment ['duration'] = $duration; - $comment ['startdate'] = $startdate; - $comment ['enddate'] = $enddate; - fwrite($calfileh,"COMMENT:" . serialize ($comment) . "\n"); - */ - } - } + if ($modified) + { + fwrite($calfileh, "LAST-MODIFIED:".dol_print_date($modified, "dayhourxcard", true)."\n"); + } - // Footer - fwrite($calfileh, "END:VCALENDAR"); + fwrite($calfileh, "SUMMARY:".$encoding.$summary."\n"); + fwrite($calfileh, "DESCRIPTION:".$encoding.$description."\n"); - fclose($calfileh); - if (! empty($conf->global->MAIN_UMASK)) - @chmod($outputfile, octdec($conf->global->MAIN_UMASK)); - } - else - { - dol_syslog("xcal.lib.php::build_calfile Failed to open file ".$outputfile." for writing"); - return -2; - } + if (! empty($location)) + { + fwrite($calfileh, "LOCATION:".$encoding.$location."\n"); + } + + if ($fulldayevent) + { + fwrite($calfileh, "X-FUNAMBOL-ALLDAY:1\n"); + } + + // see https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxcical/0f262da6-c5fd-459e-9f18-145eba86b5d2 + if ($fulldayevent) + { + fwrite($calfileh, "X-MICROSOFT-CDO-ALLDAYEVENT:TRUE\n"); + } + + // Date must be GMT dates + // Current date + fwrite($calfileh, "DTSTAMP:".dol_print_date($now, "dayhourxcard", true)."\n"); + + // Start date + $prefix = ""; + $startdatef = dol_print_date($startdate, "dayhourxcard", true); + + if ($fulldayevent) + { + // Local time + $prefix = ";VALUE=DATE"; + $startdatef = dol_print_date($startdate, "dayxcard", false); + } + + fwrite($calfileh, "DTSTART".$prefix.":".$startdatef."\n"); + + // End date + if ($fulldayevent) + { + if (empty($enddate)) + { + $enddate = dol_time_plus_duree($startdate, 1, "d"); + } + } + else + { + if (empty($enddate)) + { + $enddate = $startdate+$duration; + } + } + + $prefix = ""; + $enddatef = dol_print_date($enddate, "dayhourxcard", true); + + if ($fulldayevent) + { + $prefix = ";VALUE=DATE"; + $enddatef = dol_print_date($enddate+1, "dayxcard", false); + + // Local time + //$enddatef .= dol_print_date($enddate+1,"dayhourxcard",false); + } + + fwrite($calfileh, "DTEND".$prefix.":".$enddatef."\n"); + fwrite($calfileh, "STATUS:CONFIRMED"."\n"); + + if (! empty($transparency)) + { + fwrite($calfileh, "TRANSP:".$transparency."\n"); + } + + if (! empty($category)) + { + fwrite($calfileh, "CATEGORIES:".$encoding.$category."\n"); + } + + fwrite($calfileh, "END:VEVENT\n"); + } + + // Output the vCard/iCal VJOURNAL object + if ($type === "journal") + { + fwrite($calfileh, "BEGIN:VJOURNAL\n"); + fwrite($calfileh, "UID:".$uid."\n"); + + if (! empty($email)) + { + fwrite($calfileh, "ORGANIZER:MAILTO:".$email."\n"); + fwrite($calfileh, "CONTACT:MAILTO:".$email."\n"); + } + + if (! empty($url)) + { + fwrite($calfileh, "URL:".$url."\n"); + } + + if ($created) + { + fwrite($calfileh, "CREATED:".dol_print_date($created, "dayhourxcard", true)."\n"); + } + + if ($modified) + { + fwrite($calfileh, "LAST-MODIFIED:".dol_print_date($modified, "dayhourxcard", true)."\n"); + } + + fwrite($calfileh, "SUMMARY:".$encoding.$summary."\n"); + fwrite($calfileh, "DESCRIPTION:".$encoding.$description."\n"); + fwrite($calfileh, "STATUS:CONFIRMED"."\n"); + fwrite($calfileh, "CATEGORIES:".$category."\n"); + fwrite($calfileh, "LOCATION:".$location."\n"); + fwrite($calfileh, "TRANSP:OPAQUE\n"); + fwrite($calfileh, "CLASS:CONFIDENTIAL\n"); + fwrite($calfileh, "DTSTAMP:".dol_print_date($startdatef, "dayhourxcard", true)."\n"); + + fwrite($calfileh, "END:VJOURNAL\n"); + } + } + + // Footer + fwrite($calfileh, "END:VCALENDAR"); + + fclose($calfileh); + + if (! empty($conf->global->MAIN_UMASK)) + { + @chmod($outputfile, octdec($conf->global->MAIN_UMASK)); + } + } + else + { + dol_syslog("xcal.lib.php::build_calfile Failed to open file ".$outputfile." for writing"); + return -2; + } } /** - * Build a file from an array of events. + * Build a file from an array of events. * All input data must be encoded in $conf->charset_output * - * @param string $format 'rss' - * @param string $title Title of export - * @param string $desc Description of export - * @param array $events_array Array of events ('uid','startdate','summary','url','desc','author','category') - * @param string $outputfile Output file - * @param string $filter Filter - * @return int <0 if ko, Nb of events in file if ok + * @param string $format "rss" + * @param string $title Title of export + * @param string $desc Description of export + * @param array $events_array Array of events ("uid","startdate","summary","url","desc","author","category") + * @param string $outputfile Output file + * @param string $filter (optional) Filter + * @return int < 0 if ko, Nb of events in file if ok */ -function build_rssfile($format, $title, $desc, $events_array, $outputfile, $filter = '') +function build_rssfile($format, $title, $desc, $events_array, $outputfile, $filter = "") { - global $user,$conf,$langs; - global $dolibarr_main_url_root; + global $user, $conf, $langs; + global $dolibarr_main_url_root; - dol_syslog("xcal.lib.php::build_rssfile Build rss file ".$outputfile." to format ".$format); + dol_syslog("xcal.lib.php::build_rssfile Build rss file ".$outputfile." to format ".$format); - if (empty($outputfile)) return -1; + if (empty($outputfile)) + { + // -1 = error + return -1; + } - $fichier=fopen($outputfile, 'w'); - if ($fichier) - { - $date=date("r"); + $fichier = fopen($outputfile, "w"); - // Print header - $form='charset_output.'"?>'; - fwrite($fichier, $form); - fwrite($fichier, "\n"); - $form=''; - fwrite($fichier, $form); - fwrite($fichier, "\n"); + if ($fichier) + { + $date = date("r"); - $form="\n".$title."\n"; - fwrite($fichier, $form); + // Print header + fwrite($fichier, 'charset_output.""?>'); + fwrite($fichier, "\n"); - $form=''."\n". - // 'fr'."\n". - 'Dolibarr'."\n". - ''.$date.''."\n". - 'Dolibarr'."\n"; + fwrite($fichier, ''); + fwrite($fichier, "\n"); - // Define $urlwithroot - $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); - $urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file - //$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current - $url=$urlwithroot.'/public/agenda/agendaexport.php?format=rss&exportkey='.urlencode($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY); - $form.=''."\n"; + fwrite($fichier, "\n".$title."\n"); - //print $form; - fwrite($fichier, $form); + $form = ""."\n". + // "fr"."\n". + "Dolibarr"."\n". + "".$date.""."\n". + "Dolibarr"."\n"; + // Define $urlwithroot + $urlwithouturlroot = preg_replace("/".preg_quote(DOL_URL_ROOT, "/")."$/i", "", trim($dolibarr_main_url_root)); - foreach ($events_array as $key => $event) - { - $eventqualified=true; - if ($filter) - { - // TODO Add a filter + $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file + //$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current - $eventqualified=false; - } + $url=$urlwithroot."/public/agenda/agendaexport.php?format=rss&exportkey=".urlencode($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY); - if ($eventqualified) - { - $uid = $event['uid']; - $startdate = $event['startdate']; - $summary = $event['summary']; - $url = $event['url']; - $author = $event['author']; - $category = $event['category']; - /* No place inside a RSS - $priority = $event['priority']; - $fulldayevent = $event['fulldayevent']; - $location = $event['location']; - $email = $event['email']; + fwrite($fichier, ""."\n"); + + foreach ($events_array as $key => $event) + { + $eventqualified = true; + + if ($filter) + { + // TODO Add a filter + + $eventqualified=false; + } + + if ($eventqualified) + { + $uid = $event["uid"]; + $startdate = $event["startdate"]; + $summary = $event["summary"]; + $url = $event["url"]; + $author = $event["author"]; + $category = $event["category"]; + + /* No place inside a RSS + $priority = $event["priority"]; + $fulldayevent = $event["fulldayevent"]; + $location = $event["location"]; + $email = $event["email"]; */ - $description=preg_replace('//i', "\n", $event['desc']); - $description=dol_string_nohtmltag($description, 0); // Remove html tags - fwrite($fichier, "\n"); - fwrite($fichier, "<![CDATA[".$summary."]]>\n"); - fwrite($fichier, "\n"); - fwrite($fichier, "\n"); - fwrite($fichier, "\n"); - fwrite($fichier, "\n"); - fwrite($fichier, "".date("r", $startdate)."\n"); - fwrite($fichier, "\n"); - fwrite($fichier, "\n"); - fwrite($fichier, "\n"); - } - } + $description = dol_string_nohtmltag(preg_replace("//i", "\n", $event["desc"]), 0); - fwrite($fichier, ''); - fwrite($fichier, "\n"); - fwrite($fichier, ''); + fwrite($fichier, "\n"); + fwrite($fichier, "<![CDATA[".$summary."]]>\n"); + fwrite($fichier, "\n"); + fwrite($fichier, "\n"); + fwrite($fichier, "\n"); + fwrite($fichier, "global->MAIN_UMASK)) - @chmod($outputfile, octdec($conf->global->MAIN_UMASK)); - } + if ($description) + fwrite($fichier, $description); + // else + // fwrite($fichier, "NoDesc"); + + fwrite($fichier, "]]>\n"); + fwrite($fichier, "".date("r", $startdate)."\n"); + fwrite($fichier, "\n"); + fwrite($fichier, "\n"); + fwrite($fichier, "\n"); + } + } + + fwrite($fichier, ""); + fwrite($fichier, "\n"); + fwrite($fichier, ""); + + fclose($fichier); + + if (! empty($conf->global->MAIN_UMASK)) + { + @chmod($outputfile, octdec($conf->global->MAIN_UMASK)); + } + } } - /** - * Encode for cal export + * Encode for cal export * - * @param string $format vcal or ical - * @param string $string string to encode - * @return string string encoded + * @param string $format "vcal" or "ical" + * @param string $string String to encode + * @return string String encoded */ function format_cal($format, $string) { - global $conf; + global $conf; - $newstring=$string; + $newstring = $string; - if ($format == 'vcal') - { - $newstring=quotedPrintEncode($newstring); - } - if ($format == 'ical') - { - // Replace new lines chars by '\n' - $newstring=preg_replace('/'."\r\n".'/i', "\n", $newstring); - $newstring=preg_replace('/'."\n\r".'/i', "\n", $newstring); - $newstring=preg_replace('/'."\n".'/i', '\n', $newstring); - // Must not exceed 75 char. Cut with "\r\n"+Space - $newstring=calEncode($newstring); - } + if ($format === "vcal") + { + $newstring = quotedPrintEncode($newstring); + } - return $newstring; + if ($format === "ical") + { + // Replace new lines chars by "\n" + $newstring = preg_replace("/"."\r\n"."/i", "\n", $newstring); + $newstring = preg_replace("/"."\n\r"."/i", "\n", $newstring); + $newstring = preg_replace("/"."\n"."/i", "\n", $newstring); + + // Must not exceed 75 char. Cut with "\r\n"+Space + $newstring = calEncode($newstring); + } + + return $newstring; } /** - * Cut string after 75 chars. Add CRLF+Space. - * line must be encoded in UTF-8 + * Cut string after 75 chars. Add CRLF+Space. + * line must be encoded in UTF-8 * - * @param string $line String to convert - * @return string String converted + * @param string $line String to convert + * @return string String converted */ function calEncode($line) { - $out = ''; + $out = ""; + $newpara = ""; - $newpara = ''; + // If mb_ functions exists, it"s better to use them + if (function_exists("mb_strlen")) + { + $strlength = mb_strlen($line, "UTF-8"); - // If mb_ functions exists, it's better to use them - if (function_exists('mb_strlen')) - { - $strlength=mb_strlen($line, 'UTF-8'); - for ($j = 0; $j <= ($strlength - 1); $j++) - { - $char = mb_substr($line, $j, 1, 'UTF-8'); // Take char at position $j + for ($j = 0; $j < $strlength; $j++) + { + // Take char at position $j + $char = mb_substr($line, $j, 1, "UTF-8"); - if ((mb_strlen($newpara, 'UTF-8') + mb_strlen($char, 'UTF-8')) >= 75) - { - $out .= $newpara . "\r\n "; // CRLF + Space for cal - $newpara = ''; - } - $newpara .= $char; - } - $out .= $newpara; - } - else - { - $strlength=dol_strlen($line); - for ($j = 0; $j <= ($strlength - 1); $j++) - { - $char = substr($line, $j, 1); // Take char at position $j + if ((mb_strlen($newpara, "UTF-8") + mb_strlen($char, "UTF-8")) >= 75) + { + // CRLF + Space for cal + $out .= $newpara . "\r\n "; - if ((dol_strlen($newpara) + dol_strlen($char)) >= 75 ) - { - $out .= $newpara . "\r\n "; // CRLF + Space for cal - $newpara = ''; - } - $newpara .= $char; - } - $out .= $newpara; - } + $newpara = ""; + } - return trim($out); + $newpara .= $char; + } + + $out .= $newpara; + } + else + { + $strlength = dol_strlen($line); + + for ($j = 0; $j < $strlength; $j++) + { + // Take char at position $j + $char = substr($line, $j, 1); + + if ((dol_strlen($newpara) + dol_strlen($char)) >= 75 ) + { + // CRLF + Space for cal + $out .= $newpara . "\r\n "; + + $newpara = ""; + } + + $newpara .= $char; + } + + $out .= $newpara; + } + + return trim($out); } /** - * Encode into vcal format + * Encode into vcal format * - * @param string $str String to convert - * @param int $forcal 1=For cal - * @return string String converted + * @param string $str String to convert + * @param int $forcal (optional) 1 = For cal + * @return string String converted */ function quotedPrintEncode($str, $forcal = 0) { - $lines = preg_split("/\r\n/", $str); - $out = ''; + $lines = preg_split("/\r\n/", $str); + $out = ""; - foreach ($lines as $line) - { - $newpara = ''; + foreach ($lines as $line) + { + $newpara = ""; - $strlength=strlen($line); // Do not use dol_strlen here, we need number of bytes - for ($j = 0; $j <= ($strlength - 1); $j++) - { - $char = substr($line, $j, 1); - $ascii = ord($char); + // Do not use dol_strlen here, we need number of bytes + $strlength = strlen($line); - if ( $ascii < 32 || $ascii == 61 || $ascii > 126 ) - $char = '=' . strtoupper(sprintf("%02X", $ascii)); + for ($j = 0; $j < $strlength; $j++) + { + $char = substr($line, $j, 1); + $ascii = ord($char); - if ((strlen($newpara) + strlen($char)) >= 76 ) // Do not use dol_strlen here, we need number of bytes - { - $out .= $newpara . '=' . "\r\n"; // CRLF - if ($forcal) $out .= " "; // + Space for cal - $newpara = ''; - } - $newpara .= $char; - } - $out .= $newpara; - } - return trim($out); + if ( $ascii < 32 || $ascii === 61 || $ascii > 126 ) + { + $char = "=" . strtoupper(sprintf("%02X", $ascii)); + } + + // Do not use dol_strlen here, we need number of bytes + if ((strlen($newpara) + strlen($char)) >= 76 ) + { + // New line with carray-return (CR) and line-feed (LF) + $out .= $newpara . "=" . "\r\n"; + + // extra space for cal + if ($forcal) + $out .= " "; + + $newpara = ""; + } + + $newpara .= $char; + } + + $out .= $newpara; + } + return trim($out); } /** - * Decode vcal format + * Decode vcal format * - * @param string $str String to convert - * @return string String converted + * @param string $str String to convert + * @return string String converted */ function quotedPrintDecode($str) { - $out = preg_replace('/=\r?\n/', '', $str); - $out = quoted_printable_decode($out); // Available with PHP 4+ - return trim($out); + return trim(quoted_printable_decode(preg_replace("/=\r?\n/", "", $str))); } From 2a983a6a7c7cc38b2e686a4c950a1e8e44a87c70 Mon Sep 17 00:00:00 2001 From: "Sekan, Tobias" Date: Fri, 1 Nov 2019 12:09:43 +0100 Subject: [PATCH 759/980] fix link in documentation --- htdocs/core/lib/xcal.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php index 40656e5c0c4..67a978ec89c 100644 --- a/htdocs/core/lib/xcal.lib.php +++ b/htdocs/core/lib/xcal.lib.php @@ -12,7 +12,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ From e684c1c4504d920b4db4f3b8c668bd2b102ff534 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 12:11:29 +0100 Subject: [PATCH 760/980] Look and feel v11 --- .../class/expensereport.class.php | 31 ++------ htdocs/holiday/class/holiday.class.php | 78 ++++++------------- htdocs/hrm/index.php | 76 +----------------- 3 files changed, 34 insertions(+), 151 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 485373c5840..52072b63578 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -101,9 +101,6 @@ class ExpenseReport extends CommonObject // Paiement public $user_paid_infos; - /* - END ACTIONS - */ /** * Draft status @@ -198,7 +195,7 @@ class ExpenseReport extends CommonObject // List of language codes for status $this->statuts_short = array(0 => 'Draft', 2 => 'Validated', 4 => 'Canceled', 5 => 'Approved', 6 => 'Paid', 99 => 'Refused'); $this->statuts = array(0 => 'Draft', 2 => 'ValidatedWaitingApproval', 4 => 'Canceled', 5 => 'Approved', 6 => 'Paid', 99 => 'Refused'); - $this->statuts_logo = array(0 => 'statut0', 2 => 'statut1', 4 => 'statut5', 5 => 'statut3', 6 => 'statut6', 99 => 'statut5'); + $this->statuts_logo = array(0 => 'status0', 2 => 'status1', 4 => 'status6', 5 => 'status4', 6 => 'status6', 99 => 'status5'); } /** @@ -683,29 +680,15 @@ class ExpenseReport extends CommonObject */ public function LibStatut($status, $mode = 0) { - // phpcs:enable - global $langs; + // phpcs:enable + global $langs; - if ($mode == 0) - return $langs->transnoentities($this->statuts[$status]); + $labelstatus = $langs->trans($this->statuts[$status]); + $labelstatusshort = $langs->trans($this->statuts_short[$status]); - elseif ($mode == 1) - return $langs->transnoentities($this->statuts_short[$status]); + $statusType = $this->statuts_logo[$status]; - elseif ($mode == 2) - return img_picto($langs->transnoentities($this->statuts_short[$status]), $this->statuts_logo[$status]).' '.$langs->transnoentities($this->statuts_short[$status]); - - elseif ($mode == 3) - return img_picto($langs->transnoentities($this->statuts_short[$status]), $this->statuts_logo[$status]); - - elseif ($mode == 4) - return img_picto($langs->transnoentities($this->statuts_short[$status]), $this->statuts_logo[$status]).' '.$langs->transnoentities($this->statuts[$status]); - - elseif ($mode == 5) - return ''.$langs->transnoentities($this->statuts_short[$status]).' '.img_picto($langs->transnoentities($this->statuts_short[$status]), $this->statuts_logo[$status]); - - elseif ($mode == 6) - return $langs->transnoentities($this->statuts[$status]).' '.img_picto($langs->transnoentities($this->statuts_short[$status]), $this->statuts_logo[$status]); + return dolGetStatus($labelstatus, $labelstatusshort, '', $statusType, $mode); } diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 0eb02e006e5..8fe5f0570fe 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -1217,68 +1217,40 @@ class Holiday extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Returns the label of a statut + * Returns the label of a status * - * @param int $statut id statut + * @param int $status Id status * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto * @param integer $startdate Date holiday should start * @return string Label */ - public function LibStatut($statut, $mode = 0, $startdate = '') + public function LibStatut($status, $mode = 0, $startdate = '') { - // phpcs:enable - global $langs; - - if ($mode == 0) + // phpcs:enable + if (empty($this->labelstatus) || empty($this->labelstatusshort)) { - if ($statut == 1) return $langs->trans('DraftCP'); - elseif ($statut == 2) return $langs->trans('ToReviewCP'); - elseif ($statut == 3) return $langs->trans('ApprovedCP'); - elseif ($statut == 4) return $langs->trans('CancelCP'); - elseif ($statut == 5) return $langs->trans('RefuseCP'); - } - elseif ($mode == 2) - { - $pictoapproved='statut6'; - if (! empty($startdate) && $startdate > dol_now()) $pictoapproved='statut4'; - if ($statut == 1) return img_picto($langs->trans('DraftCP'), 'statut0').' '.$langs->trans('DraftCP'); // Draft - elseif ($statut == 2) return img_picto($langs->trans('ToReviewCP'), 'statut1').' '.$langs->trans('ToReviewCP'); // Waiting approval - elseif ($statut == 3) return img_picto($langs->trans('ApprovedCP'), $pictoapproved).' '.$langs->trans('ApprovedCP'); - elseif ($statut == 4) return img_picto($langs->trans('CancelCP'), 'statut5').' '.$langs->trans('CancelCP'); - elseif ($statut == 5) return img_picto($langs->trans('RefuseCP'), 'statut5').' '.$langs->trans('RefuseCP'); - } - elseif ($mode == 3) - { - $pictoapproved='statut6'; - if (! empty($startdate) && $startdate > dol_now()) $pictoapproved='statut4'; - if ($statut == 1) return img_picto($langs->trans('DraftCP'), 'statut0'); - elseif ($statut == 2) return img_picto($langs->trans('ToReviewCP'), 'statut1'); - elseif ($statut == 3) return img_picto($langs->trans('ApprovedCP'), $pictoapproved); - elseif ($statut == 4) return img_picto($langs->trans('CancelCP'), 'statut5'); - elseif ($statut == 5) return img_picto($langs->trans('RefuseCP'), 'statut5'); - } - elseif ($mode == 5) - { - $pictoapproved='statut6'; - if (! empty($startdate) && $startdate > dol_now()) $pictoapproved='statut4'; - if ($statut == 1) return $langs->trans('DraftCP').' '.img_picto($langs->trans('DraftCP'), 'statut0'); // Draft - elseif ($statut == 2) return $langs->trans('ToReviewCP').' '.img_picto($langs->trans('ToReviewCP'), 'statut1'); // Waiting approval - elseif ($statut == 3) return $langs->trans('ApprovedCP').' '.img_picto($langs->trans('ApprovedCP'), $pictoapproved); - elseif ($statut == 4) return $langs->trans('CancelCP').' '.img_picto($langs->trans('CancelCP'), 'statut5'); - elseif ($statut == 5) return $langs->trans('RefuseCP').' '.img_picto($langs->trans('RefuseCP'), 'statut5'); - } - elseif ($mode == 6) - { - $pictoapproved='statut6'; - if (! empty($startdate) && $startdate > dol_now()) $pictoapproved='statut4'; - if ($statut == 1) return $langs->trans('DraftCP').' '.img_picto($langs->trans('DraftCP'), 'statut0'); // Draft - elseif ($statut == 2) return $langs->trans('ToReviewCP').' '.img_picto($langs->trans('ToReviewCP'), 'statut1'); // Waiting approval - elseif ($statut == 3) return $langs->trans('ApprovedCP').' '.img_picto($langs->trans('ApprovedCP'), $pictoapproved); - elseif ($statut == 4) return $langs->trans('CancelCP').' '.img_picto($langs->trans('CancelCP'), 'statut5'); - elseif ($statut == 5) return $langs->trans('RefuseCP').' '.img_picto($langs->trans('RefuseCP'), 'statut5'); + global $langs; + //$langs->load("mymodule"); + $this->labelstatus[self::STATUS_DRAFT] = $langs->trans('DraftCP'); + $this->labelstatus[self::STATUS_VALIDATED] = $langs->trans('ToReviewCP'); + $this->labelstatus[self::STATUS_APPROVED] = $langs->trans('ApprovedCP'); + $this->labelstatus[self::STATUS_CANCELED] = $langs->trans('CancelCP'); + $this->labelstatus[self::STATUS_REFUSED] = $langs->trans('RefuseCP'); + $this->labelstatusshort[self::STATUS_DRAFT] = $langs->trans('DraftCP'); + $this->labelstatusshort[self::STATUS_VALIDATED] = $langs->trans('ToReviewCP'); + $this->labelstatusshort[self::STATUS_APPROVED] = $langs->trans('ApprovedCP'); + $this->labelstatusshort[self::STATUS_CANCELED] = $langs->trans('CancelCP'); + $this->labelstatusshort[self::STATUS_REFUSED] = $langs->trans('RefuseCP'); } - else return $statut; + $statusType = 'status6'; + if (! empty($startdate) && $startdate > dol_now()) $statusType = 'status4'; + if ($status == self::STATUS_DRAFT) $statusType = 'status0'; + if ($status == self::STATUS_VALIDATED) $statusType = 'status1'; + if ($status == self::STATUS_CANCELED) $statusType = 'status5'; + if ($status == self::STATUS_REFUSED) $statusType = 'status5'; + + return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); } diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php index 9d9d2fcd632..9fa758f8338 100644 --- a/htdocs/hrm/index.php +++ b/htdocs/hrm/index.php @@ -248,84 +248,13 @@ if (! empty($conf->holiday->enabled) && $user->rights->holiday->read) } print '
    '.$langs->trans("RefPayment").''.$langs->trans("Date").''; - print $product_static->LibStatut($objp->tosell, 3, 0); + print $product_static->LibStatut($objp->tosell, 5, 0); print "'; - print $product_static->LibStatut($objp->tobuy, 3, 1); + print $product_static->LibStatut($objp->tobuy, 5, 1); print "
    '; - print $thirdparty_static->getLibStatut(3); + print $thirdparty_static->getLibStatut(5); print "
    '.$userstatic->getLibStatut(3).''.$userstatic->getLibStatut(5).'
    '; print ''; + print '
    '; } else dol_print_error($db); } -// Last expense report (old module) -if (! empty($conf->deplacement->enabled) && $user->rights->deplacement->lire) -{ - $sql = "SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.email, u.statut, u.photo, d.rowid, d.dated as date, d.tms as dm, d.km, d.fk_statut"; - $sql.= " FROM ".MAIN_DB_PREFIX."deplacement as d, ".MAIN_DB_PREFIX."user as u"; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - $sql.= " WHERE u.rowid = d.fk_user"; - $sql.= " AND d.entity = ".$conf->entity; - if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous)) $sql.=' AND d.fk_user IN ('.join(',', $childids).')'; - if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND d.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if (!empty($socid)) $sql.= " AND d.fk_soc = ".$socid; - $sql.= $db->order("d.tms", "DESC"); - $sql.= $db->plimit($max, 0); - - $result = $db->query($sql); - if ($result) - { - $var=false; - $num = $db->num_rows($result); - - $i = 0; - - print '
    '; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - if ($num) - { - $total_ttc = $totalam = $total = 0; - - $deplacementstatic=new Deplacement($db); - $userstatic=new User($db); - while ($i < $num && $i < $max) - { - $obj = $db->fetch_object($result); - - $deplacementstatic->ref=$obj->rowid; - $deplacementstatic->id=$obj->rowid; - - $userstatic->id=$obj->uid; - $userstatic->lastname=$obj->lastname; - $userstatic->firstname=$obj->firstname; - $userstatic->login=$obj->login; - $userstatic->email=$obj->email; - $userstatic->statut=$obj->statut; - $userstatic->photo=$obj->photo; - - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - - $i++; - } - } - else - { - print ''; - } - print '
    '.$langs->trans("BoxTitleLastModifiedExpenses", min($max, $num)).''.$langs->trans("FeesKilometersOrAmout").''.$langs->trans("DateModificationShort").' 
    '.$deplacementstatic->getNomUrl(1).''.$userstatic->getNomUrl(-1).''.$obj->km.''.dol_print_date($db->jdate($obj->dm), 'day').''.$deplacementstatic->LibStatut($obj->fk_statut, 3).'
    '.$langs->trans("None").'
    '; - print '
    '; - } - else dol_print_error($db); -} - -// Last expense report (new module) +// Latest expense report if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire) { $sql = "SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.email, u.statut, u.photo, x.rowid, x.ref, x.date_debut as date, x.tms as dm, x.total_ttc, x.fk_statut as status"; @@ -342,7 +271,6 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire $result = $db->query($sql); if ($result) { - $var=false; $num = $db->num_rows($result); $i = 0; From fee0a362adcc5a895407f61944b5b625376c7b5a Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Fri, 1 Nov 2019 11:11:59 +0000 Subject: [PATCH 761/980] Fixing style errors. --- htdocs/core/lib/xcal.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php index 67a978ec89c..406601dedf0 100644 --- a/htdocs/core/lib/xcal.lib.php +++ b/htdocs/core/lib/xcal.lib.php @@ -137,7 +137,7 @@ function build_calfile($format, $title, $desc, $events_array, $outputfile) continue; } - fwrite($calfileh,"ATTENDEE;RSVP=TRUE:mailto:".$assignedUser->email."\n"); + fwrite($calfileh, "ATTENDEE;RSVP=TRUE:mailto:".$assignedUser->email."\n"); } } From 1821fa6317c200dac86693ed23a18e62f90722ac Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 12:48:09 +0100 Subject: [PATCH 762/980] Fix translation of "Terminal" --- htdocs/takepos/takepos.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index dd65469ec05..001fd842165 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -562,23 +562,23 @@ function MoreActions(totalactions){ } } +// Popup to select the terminal to use function TerminalsDialog() { jQuery("#dialog-info").dialog({ resizable: false, - height:220, - width:400, + height: global->TAKEPOS_NUM_TERMINALS / 3 * 20); ?>, + width: dol_optimize_smallscreen ? 316 : 400); ?>, modal: true, buttons: { - Terminal1: function() { + 'trans("Terminal")) ?> 1': function() { location.href='takepos.php?setterminal=1'; } global->TAKEPOS_NUM_TERMINALS; $i++) { - print " - , - Terminal".$i.": function() { + print ", + '".dol_escape_js($langs->trans("Terminal"))." ".$i."': function() { location.href='takepos.php?setterminal=".$i."'; } "; From e3b5be7475467f680247859b93e834ba3398b280 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 12:52:03 +0100 Subject: [PATCH 763/980] All properties 'libstatut', 'labelstatut', 'labelstatus' were renamed into 'labelStatus'. All properties 'labelstatusshort' and 'labelstatut_short' were renamed into 'labelStatusShort'. --- ChangeLog | 3 +- htdocs/adherents/class/adherent.class.php | 30 ++++++------- htdocs/adherents/index.php | 8 ++-- htdocs/api/class/api.class.php | 4 +- htdocs/bom/class/bom.class.php | 10 ++--- htdocs/comm/propal/class/propal.class.php | 28 ++++++------- htdocs/commande/class/commande.class.php | 34 +++++++-------- .../cashcontrol/class/cashcontrol.class.php | 12 +++--- .../class/bonprelevement.class.php | 42 +++++++++---------- htdocs/contact/class/contact.class.php | 8 ++-- htdocs/core/class/commoninvoice.class.php | 34 +++++++-------- htdocs/core/lib/functions.lib.php | 3 +- htdocs/don/class/don.class.php | 24 +++++------ .../class/emailcollector.class.php | 30 ++++++------- .../class/emailcollectoraction.class.php | 30 ++++++------- .../class/emailcollectorfilter.class.php | 30 ++++++------- .../class/expensereport.class.php | 6 +-- htdocs/holiday/class/holiday.class.php | 24 +++++------ .../template/class/myobject.class.php | 16 +++---- htdocs/mrp/class/mo.class.php | 14 +++---- htdocs/product/class/product.class.php | 28 ++++++------- htdocs/product/index.php | 14 +++---- .../inventory/class/inventory.class.php | 10 ++--- htdocs/projet/graph_opportunities.inc.php | 14 +++---- htdocs/societe/class/societe.class.php | 12 +++--- htdocs/societe/index.php | 4 +- .../class/supplier_proposal.class.php | 28 ++++++------- htdocs/user/class/user.class.php | 12 +++--- htdocs/website/class/website.class.php | 12 +++--- htdocs/website/class/websitepage.class.php | 12 +++--- htdocs/zapier/class/hook.class.php | 30 ++++++------- 31 files changed, 284 insertions(+), 282 deletions(-) diff --git a/ChangeLog b/ChangeLog index f6a1c949bf5..ab23a79d299 100644 --- a/ChangeLog +++ b/ChangeLog @@ -25,7 +25,8 @@ Following changes may create regressions for some external modules, but were nec * The trigger BON_PRELEVEMENT_CREATE has been renamed into DIRECT_DEBIT_ORDER_CREATE. * The constant INVOICE_SHOW_POS_IN_EXPORT has been renamed into INVOICE_SHOW_POS. * If your logo was visible on the menu bar, you must upload a new logo into 'Home-Setup-Company/Organization' to have it visible agin in menu. - +* All properties 'libstatut', 'labelstatut', 'labelstatus' were renamed into 'labelStatus'. +* All properties 'labelstatusshort' and 'labelstatut_short' were renamed into 'labelStatusShort'. ***** ChangeLog for 10.0.3 compared to 10.0.2 ***** IMPORTANT : This version fixes a serious bug in saving the units of weight, size, surface and volume on product card. diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 8f546b3d3c2..9d0e0fa47dc 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2181,48 +2181,48 @@ class Adherent extends CommonObject $langs->load("members"); $statusType = ''; - $labelstatut = ''; - $labelstatutShort = ''; + $labelStatus = ''; + $labelStatusShort = ''; if ($statut == -1) { $statusType = 'status0'; - $labelstatut = $langs->trans("MemberStatusDraft"); - $labelstatutShort = $langs->trans("MemberStatusDraftShort"); + $labelStatus = $langs->trans("MemberStatusDraft"); + $labelStatusShort = $langs->trans("MemberStatusDraftShort"); } elseif ($statut >= 1) { if ($need_subscription == 0) { $statusType = 'status4'; - $labelstatut = $langs->trans("MemberStatusNoSubscription"); - $labelstatutShort = $langs->trans("MemberStatusNoSubscriptionShort"); + $labelStatus = $langs->trans("MemberStatusNoSubscription"); + $labelStatusShort = $langs->trans("MemberStatusNoSubscriptionShort"); } elseif (! $date_end_subscription) { $statusType = 'status1'; - $labelstatut = $langs->trans("MemberStatusActive"); - $labelstatutShort = $langs->trans("MemberStatusActiveShort"); + $labelStatus = $langs->trans("MemberStatusActive"); + $labelStatusShort = $langs->trans("MemberStatusActiveShort"); } elseif ($date_end_subscription < time()) { $statusType = 'status3'; - $labelstatut = $langs->trans("MemberStatusActiveLate"); - $labelstatutShort = $langs->trans("MemberStatusActiveLateShort"); + $labelStatus = $langs->trans("MemberStatusActiveLate"); + $labelStatusShort = $langs->trans("MemberStatusActiveLateShort"); } else { $statusType = 'status4'; - $labelstatut = $langs->trans("MemberStatusPaid"); - $labelstatutShort = $langs->trans("MemberStatusPaidShort"); + $labelStatus = $langs->trans("MemberStatusPaid"); + $labelStatusShort = $langs->trans("MemberStatusPaidShort"); } } elseif ($statut == 0) { $statusType = 'status6'; - $labelstatut = $langs->trans("MemberStatusResiliated"); - $labelstatutShort = $langs->trans("MemberStatusResiliatedShort"); + $labelStatus = $langs->trans("MemberStatusResiliated"); + $labelStatusShort = $langs->trans("MemberStatusResiliatedShort"); } - return dolGetStatus($labelstatut, $labelstatutShort, '', $statusType, $mode); + return dolGetStatus($labelStatus, $labelStatusShort, '', $statusType, $mode); } diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php index 3f3c77568c2..a0dc9b81a86 100644 --- a/htdocs/adherents/index.php +++ b/htdocs/adherents/index.php @@ -61,7 +61,7 @@ $AdherentsResilies=array(); $AdherentType=array(); -// Members list +// Type of membership $sql = "SELECT t.rowid, t.libelle as label, t.subscription,"; $sql.= " d.statut, count(d.rowid) as somme"; $sql.= " FROM ".MAIN_DB_PREFIX."adherent_type as t"; @@ -71,7 +71,7 @@ $sql.= " AND d.entity IN (".getEntity('adherent').")"; $sql.= " WHERE t.entity IN (".getEntity('member_type').")"; $sql.= " GROUP BY t.rowid, t.libelle, t.subscription, d.statut"; -dol_syslog("index.php::select nb of members by type", LOG_DEBUG); +dol_syslog("index.php::select nb of members per type", LOG_DEBUG); $result = $db->query($sql); if ($result) { @@ -294,7 +294,7 @@ print "
    \n"; print '
    '; /* - * Last modified members + * Latest modified members */ $max=5; @@ -342,7 +342,7 @@ if ($resql) print '
    '.$staticmember->getNomUrl(1, 32).''.$statictype->getNomUrl(1, 32).''.dol_print_date($db->jdate($obj->datem), 'dayhour').''.$staticmember->LibStatut($obj->statut, ($obj->subscription=='yes'?1:0), $db->jdate($obj->date_end_subscription), 5).''.$staticmember->LibStatut($obj->statut, ($obj->subscription=='yes'?1:0), $db->jdate($obj->date_end_subscription), 3).'
    '; - $colnb=4; + $colnb=2; if (empty($conf->global->PRODUIT_MULTIPRICES)) $colnb++; print ''; - print ''; while ($i < $num) @@ -359,11 +359,11 @@ if ($result) else print price($objp->price).' '.$langs->trans("HT"); print ''; } - print '"; - print '"; print "\n"; $i++; diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php index 775ffcf3e5c..4434f82fbcf 100644 --- a/htdocs/product/inventory/class/inventory.class.php +++ b/htdocs/product/inventory/class/inventory.class.php @@ -396,16 +396,16 @@ class Inventory extends CommonObject // phpcs:enable global $langs; - if (empty($this->labelstatus)) + if (empty($this->labelStatus)) { global $langs; //$langs->load("mrp"); - $this->labelstatus[self::STATUS_DRAFT] = $langs->trans('Draft'); - $this->labelstatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); - $this->labelstatus[self::STATUS_CANCELED] = $langs->trans('Canceled'); + $this->labelStatus[self::STATUS_DRAFT] = $langs->trans('Draft'); + $this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); + $this->labelStatus[self::STATUS_CANCELED] = $langs->trans('Canceled'); } - return dolGetStatus($this->labelstatus[$status], $this->labelstatus[$status], '', 'status'.$status, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatus[$status], '', 'status'.$status, $mode); } /** diff --git a/htdocs/projet/graph_opportunities.inc.php b/htdocs/projet/graph_opportunities.inc.php index 7d75544ef93..0987a47e507 100644 --- a/htdocs/projet/graph_opportunities.inc.php +++ b/htdocs/projet/graph_opportunities.inc.php @@ -55,20 +55,20 @@ if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) $listofstatus=array_keys($listofoppstatus); foreach ($listofstatus as $status) { - $labelstatus = ''; + $labelStatus = ''; $code = dol_getIdFromCode($db, $status, 'c_lead_status', 'rowid', 'code'); - if ($code) $labelstatus = $langs->trans("OppStatus".$code); - if (empty($labelstatus)) $labelstatus=$listofopplabel[$status]; + if ($code) $labelStatus = $langs->trans("OppStatus".$code); + if (empty($labelStatus)) $labelStatus=$listofopplabel[$status]; - //$labelstatus .= ' ('.$langs->trans("Coeff").': '.price2num($listofoppstatus[$status]).')'; - //$labelstatus .= ' - '.price2num($listofoppstatus[$status]).'%'; + //$labelStatus .= ' ('.$langs->trans("Coeff").': '.price2num($listofoppstatus[$status]).')'; + //$labelStatus .= ' - '.price2num($listofoppstatus[$status]).'%'; - $dataseries[]=array($labelstatus, (isset($valsamount[$status])?(float) $valsamount[$status]:0)); + $dataseries[]=array($labelStatus, (isset($valsamount[$status])?(float) $valsamount[$status]:0)); if (! $conf->use_javascript_ajax) { print ''; - print ''; + print ''; print ''; print "\n"; } diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index fe8c78c7aa2..ca17077a47b 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -2283,15 +2283,15 @@ class Societe extends CommonObject $statusType = 'status4'; if ($status == 0) $statusType = 'status5'; - if (empty($this->labelstatus) || empty($this->labelstatusshort)) + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { - $this->labelstatus[0] = $langs->trans("ActivityCeased"); - $this->labelstatus[1] = $langs->trans("InActivity"); - $this->labelstatusshort[0] = $langs->trans("ActivityCeased"); - $this->labelstatusshort[1] = $langs->trans("InActivity"); + $this->labelStatus[0] = $langs->trans("ActivityCeased"); + $this->labelStatus[1] = $langs->trans("InActivity"); + $this->labelStatusShort[0] = $langs->trans("ActivityCeased"); + $this->labelStatusShort[1] = $langs->trans("InActivity"); } - return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php index b2962478b17..a422e199e55 100644 --- a/htdocs/societe/index.php +++ b/htdocs/societe/index.php @@ -232,7 +232,7 @@ print '
    '; /* - * Last third parties modified + * Latest modified third parties */ $max=15; $sql = "SELECT s.rowid, s.nom as name, s.email, s.client, s.fournisseur"; @@ -316,7 +316,7 @@ if ($result) print dol_print_date($thirdparty_static->datem, 'day'); print ""; print '
    "; print "\n"; $i++; diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index be272ee2d36..aa78324ad37 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -158,8 +158,8 @@ class SupplierProposal extends CommonObject public $lines = array(); public $line; - public $labelstatut=array(); - public $labelstatut_short=array(); + public $labelStatus=array(); + public $labelStatusShort=array(); public $nbtodo; public $nbtodolate; @@ -2196,20 +2196,20 @@ class SupplierProposal extends CommonObject // phpcs:enable // Init/load array of translation of status - if (empty($this->labelstatut) || empty($this->labelstatut_short)) + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { global $langs; $langs->load("supplier_proposal"); - $this->labelstatut[self::STATUS_DRAFT]=$langs->trans("SupplierProposalStatusDraft"); - $this->labelstatut[self::STATUS_VALIDATED]=$langs->trans("SupplierProposalStatusValidated"); - $this->labelstatut[self::STATUS_SIGNED]=$langs->trans("SupplierProposalStatusSigned"); - $this->labelstatut[self::STATUS_NOTSIGNED]=$langs->trans("SupplierProposalStatusNotSigned"); - $this->labelstatut[self::STATUS_CLOSE]=$langs->trans("SupplierProposalStatusClosed"); - $this->labelstatut_short[self::STATUS_DRAFT]=$langs->trans("SupplierProposalStatusDraftShort"); - $this->labelstatut_short[self::STATUS_VALIDATED]=$langs->trans("Opened"); - $this->labelstatut_short[self::STATUS_SIGNED]=$langs->trans("SupplierProposalStatusSignedShort"); - $this->labelstatut_short[self::STATUS_NOTSIGNED]=$langs->trans("SupplierProposalStatusNotSignedShort"); - $this->labelstatut_short[self::STATUS_CLOSE]=$langs->trans("SupplierProposalStatusClosedShort"); + $this->labelStatus[self::STATUS_DRAFT]=$langs->trans("SupplierProposalStatusDraft"); + $this->labelStatus[self::STATUS_VALIDATED]=$langs->trans("SupplierProposalStatusValidated"); + $this->labelStatus[self::STATUS_SIGNED]=$langs->trans("SupplierProposalStatusSigned"); + $this->labelStatus[self::STATUS_NOTSIGNED]=$langs->trans("SupplierProposalStatusNotSigned"); + $this->labelStatus[self::STATUS_CLOSE]=$langs->trans("SupplierProposalStatusClosed"); + $this->labelStatusShort[self::STATUS_DRAFT]=$langs->trans("SupplierProposalStatusDraftShort"); + $this->labelStatusShort[self::STATUS_VALIDATED]=$langs->trans("Opened"); + $this->labelStatusShort[self::STATUS_SIGNED]=$langs->trans("SupplierProposalStatusSignedShort"); + $this->labelStatusShort[self::STATUS_NOTSIGNED]=$langs->trans("SupplierProposalStatusNotSignedShort"); + $this->labelStatusShort[self::STATUS_CLOSE]=$langs->trans("SupplierProposalStatusClosedShort"); } $statusnew=''; @@ -2219,7 +2219,7 @@ class SupplierProposal extends CommonObject elseif ($status==self::STATUS_NOTSIGNED) $statusnew='status5'; elseif ($status==self::STATUS_CLOSE) $statusnew='status6'; - return dolGetStatus($this->labelstatut[$status], $this->labelstatut_short[$status], '', $statusnew, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusnew, $mode); } diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 6e7d2540d32..6baffc74a73 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -2495,20 +2495,20 @@ class User extends CommonObject // phpcs:enable global $langs; - if (empty($this->labelstatus) || empty($this->labelstatusshort)) + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { global $langs; //$langs->load("mymodule"); - $this->labelstatus[self::STATUS_ENABLED] = $langs->trans('Enabled'); - $this->labelstatus[self::STATUS_DISABLED] = $langs->trans('Disabled'); - $this->labelstatusshort[self::STATUS_ENABLED] = $langs->trans('Enabled'); - $this->labelstatusshort[self::STATUS_DISABLED] = $langs->trans('Disabled'); + $this->labelStatus[self::STATUS_ENABLED] = $langs->trans('Enabled'); + $this->labelStatus[self::STATUS_DISABLED] = $langs->trans('Disabled'); + $this->labelStatusShort[self::STATUS_ENABLED] = $langs->trans('Enabled'); + $this->labelStatusShort[self::STATUS_DISABLED] = $langs->trans('Disabled'); } $statusType = 'status5'; if ($status == self::STATUS_ENABLED) $statusType = 'status4'; - return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); } diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index ac99001bf4b..d84b5232773 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -745,20 +745,20 @@ class Website extends CommonObject // phpcs:enable global $langs; - if (empty($this->labelstatus) || empty($this->labelstatusshort)) + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { global $langs; //$langs->load("mymodule"); - $this->labelstatus[self::STATUS_DRAFT] = $langs->trans('Disabled'); - $this->labelstatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); - $this->labelstatusshort[self::STATUS_DRAFT] = $langs->trans('Disabled'); - $this->labelstatusshort[self::STATUS_VALIDATED] = $langs->trans('Enabled'); + $this->labelStatus[self::STATUS_DRAFT] = $langs->trans('Disabled'); + $this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); + $this->labelStatusShort[self::STATUS_DRAFT] = $langs->trans('Disabled'); + $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->trans('Enabled'); } $statusType = 'status5'; if ($status == self::STATUS_VALIDATED) $statusType = 'status4'; - return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); } diff --git a/htdocs/website/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php index e85af6244e3..0258198ba10 100644 --- a/htdocs/website/class/websitepage.class.php +++ b/htdocs/website/class/websitepage.class.php @@ -545,20 +545,20 @@ class WebsitePage extends CommonObject // phpcs:enable global $langs; - if (empty($this->labelstatus) || empty($this->labelstatusshort)) + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { global $langs; //$langs->load("mymodule"); - $this->labelstatus[self::STATUS_DRAFT] = $langs->trans('Disabled'); - $this->labelstatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); - $this->labelstatusshort[self::STATUS_DRAFT] = $langs->trans('Disabled'); - $this->labelstatusshort[self::STATUS_VALIDATED] = $langs->trans('Enabled'); + $this->labelStatus[self::STATUS_DRAFT] = $langs->trans('Disabled'); + $this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('Enabled'); + $this->labelStatusShort[self::STATUS_DRAFT] = $langs->trans('Disabled'); + $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->trans('Enabled'); } $statusType = 'status5'; if ($status == self::STATUS_VALIDATED) $statusType = 'status4'; - return dolGetStatus($this->labelstatus[$status], $this->labelstatusshort[$status], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); } diff --git a/htdocs/zapier/class/hook.class.php b/htdocs/zapier/class/hook.class.php index 81b76b1c81f..5c79d68aefe 100644 --- a/htdocs/zapier/class/hook.class.php +++ b/htdocs/zapier/class/hook.class.php @@ -633,37 +633,37 @@ class Hook extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - if (empty($this->labelstatus)) { + if (empty($this->labelStatus)) { global $langs; //$langs->load("zapier@zapier"); - $this->labelstatus[1] = $langs->trans('Enabled'); - $this->labelstatus[0] = $langs->trans('Disabled'); + $this->labelStatus[1] = $langs->trans('Enabled'); + $this->labelStatus[0] = $langs->trans('Disabled'); } if ($mode == 0) { - return $this->labelstatus[$status]; + return $this->labelStatus[$status]; } elseif ($mode == 1) { - return $this->labelstatus[$status]; + return $this->labelStatus[$status]; } elseif ($mode == 2) { if ($status == 1) { - return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; } elseif ($status == 0) { - return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; } } elseif ($mode == 3) { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } elseif ($mode == 4) { - if ($status == 1) return img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; - elseif ($status == 0) return img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; + elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; } elseif ($mode == 5) { - if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + if ($status == 1) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + elseif ($status == 0) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } elseif ($mode == 6) { if ($status == 1) { - return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); + return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); } elseif ($status == 0) { - return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); + return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); } } } From 885c6e65163cc790b68de763a925af0814949b10 Mon Sep 17 00:00:00 2001 From: "Sekan, Tobias" Date: Fri, 1 Nov 2019 13:16:14 +0100 Subject: [PATCH 764/980] Fix wrong newline replacement --- htdocs/core/lib/xcal.lib.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php index 67a978ec89c..0b999e7b75a 100644 --- a/htdocs/core/lib/xcal.lib.php +++ b/htdocs/core/lib/xcal.lib.php @@ -427,9 +427,9 @@ function format_cal($format, $string) if ($format === "ical") { // Replace new lines chars by "\n" - $newstring = preg_replace("/"."\r\n"."/i", "\n", $newstring); - $newstring = preg_replace("/"."\n\r"."/i", "\n", $newstring); - $newstring = preg_replace("/"."\n"."/i", "\n", $newstring); + $newstring = preg_replace("/"."\r\n"."/i", "\\n", $newstring); + $newstring = preg_replace("/"."\n\r"."/i", "\\n", $newstring); + $newstring = preg_replace("/"."\n"."/i", "\\n", $newstring); // Must not exceed 75 char. Cut with "\r\n"+Space $newstring = calEncode($newstring); From 400defd93d1943dfb62ce0016709403364f0fa6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 15:04:37 +0100 Subject: [PATCH 765/980] form_select_status_action returns void --- htdocs/comm/action/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index 1b33e5da9b8..ac474881732 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -488,7 +488,7 @@ if ($resql) if (! empty($arrayfields['a.tms']['checked'])) print ''; if (! empty($arrayfields['a.percent']['checked'])) { print ''; } From da238e94e10c96fade8cc90669a28dc326d13b33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 15:21:21 +0100 Subject: [PATCH 766/980] php is > 5.4 --- htdocs/core/lib/functions.lib.php | 76 ++++++++++++++----------------- 1 file changed, 34 insertions(+), 42 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 56b0dc93c35..70f6e57eb4b 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1984,56 +1984,48 @@ function dol_mktime($hour, $minute, $second, $month, $day, $year, $gm = false, $ if ($second< 0 || $second > 60) return ''; } - if (method_exists('DateTime', 'getTimestamp')) + if (empty($gm) || $gm === 'server') { - if (empty($gm) || $gm === 'server') - { - $default_timezone=@date_default_timezone_get(); // Example 'Europe/Berlin' + $default_timezone=@date_default_timezone_get(); // Example 'Europe/Berlin' + $localtz = new DateTimeZone($default_timezone); + } + elseif ($gm === 'user') + { + // We use dol_tz_string first because it is more reliable. + $default_timezone=(empty($_SESSION["dol_tz_string"])?@date_default_timezone_get():$_SESSION["dol_tz_string"]); // Example 'Europe/Berlin' + try { $localtz = new DateTimeZone($default_timezone); } - elseif ($gm === 'user') + catch(Exception $e) { - // We use dol_tz_string first because it is more reliable. - $default_timezone=(empty($_SESSION["dol_tz_string"])?@date_default_timezone_get():$_SESSION["dol_tz_string"]); // Example 'Europe/Berlin' - try { - $localtz = new DateTimeZone($default_timezone); - } - catch(Exception $e) - { - dol_syslog("Warning dol_tz_string contains an invalid value ".$_SESSION["dol_tz_string"], LOG_WARNING); - $default_timezone=@date_default_timezone_get(); - } + dol_syslog("Warning dol_tz_string contains an invalid value ".$_SESSION["dol_tz_string"], LOG_WARNING); + $default_timezone=@date_default_timezone_get(); } - elseif (strrpos($gm, "tz,") !== false) - { - $timezone=str_replace("tz,", "", $gm); // Example 'tz,Europe/Berlin' - try - { - $localtz = new DateTimeZone($timezone); - } - catch(Exception $e) - { - dol_syslog("Warning passed timezone contains an invalid value ".$timezone, LOG_WARNING); - } - } - - if (empty($localtz)) { - $localtz = new DateTimeZone('UTC'); - } - //var_dump($localtz); - //var_dump($year.'-'.$month.'-'.$day.'-'.$hour.'-'.$minute); - $dt = new DateTime(null, $localtz); - $dt->setDate((int) $year, (int) $month, (int) $day); - $dt->setTime((int) $hour, (int) $minute, (int) $second); - $date=$dt->getTimestamp(); // should include daylight saving time - //var_dump($date); - return $date; } - else + elseif (strrpos($gm, "tz,") !== false) { - dol_print_error('', 'PHP version must be 5.4+'); - return ''; + $timezone=str_replace("tz,", "", $gm); // Example 'tz,Europe/Berlin' + try + { + $localtz = new DateTimeZone($timezone); + } + catch(Exception $e) + { + dol_syslog("Warning passed timezone contains an invalid value ".$timezone, LOG_WARNING); + } } + + if (empty($localtz)) { + $localtz = new DateTimeZone('UTC'); + } + //var_dump($localtz); + //var_dump($year.'-'.$month.'-'.$day.'-'.$hour.'-'.$minute); + $dt = new DateTime(null, $localtz); + $dt->setDate((int) $year, (int) $month, (int) $day); + $dt->setTime((int) $hour, (int) $minute, (int) $second); + $date=$dt->getTimestamp(); // should include daylight saving time + //var_dump($date); + return $date; } From 0f80ba5353be4990929026e5ae945fc542745e01 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 1 Nov 2019 15:36:48 +0100 Subject: [PATCH 767/980] FIX prices by customer API --- htdocs/product/class/api_products.class.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php index d6066b1a03a..1b5e8adf862 100644 --- a/htdocs/product/class/api_products.class.php +++ b/htdocs/product/class/api_products.class.php @@ -445,7 +445,6 @@ class Products extends DolibarrApi //'multiprices_default_vat_code'=>$this->product->multiprices_default_vat_code ); } - /** * Get prices per customer for a product * @@ -471,13 +470,18 @@ class Products extends DolibarrApi if (! $result ) { throw new RestException(404, 'Product not found'); } - - if ($result < 0) { - throw new RestException(503, 'Error when retrieve prices list : '.array_merge(array($this->product->error), $this->product->errors)); + + if ($result > 0) { + require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php'; + $prodcustprice = new Productcustomerprice($this->db); + $result = $prodcustprice->fetch_all('', '', 0, 0, array('t.fk_product' => $id)); } - throw new RestException(501, 'Feature not yet available'); - //return $result; + if ( empty($prodcustprice->lines)) { + throw new RestException(503, 'Error when retrieve prices list : '.array_merge(array($prodcustprice->error), $prodcustprice->errors)); + } + + return $prodcustprice->lines; } /** From bc5e6c867f4969a5b1697e164e1f033562144661 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Fri, 1 Nov 2019 14:37:21 +0000 Subject: [PATCH 768/980] Fixing style errors. --- htdocs/product/class/api_products.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php index 1b5e8adf862..5b179d487a9 100644 --- a/htdocs/product/class/api_products.class.php +++ b/htdocs/product/class/api_products.class.php @@ -470,11 +470,11 @@ class Products extends DolibarrApi if (! $result ) { throw new RestException(404, 'Product not found'); } - + if ($result > 0) { - require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php'; - $prodcustprice = new Productcustomerprice($this->db); - $result = $prodcustprice->fetch_all('', '', 0, 0, array('t.fk_product' => $id)); + require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php'; + $prodcustprice = new Productcustomerprice($this->db); + $result = $prodcustprice->fetch_all('', '', 0, 0, array('t.fk_product' => $id)); } if ( empty($prodcustprice->lines)) { From 44c8cd9d2338145242db1aa00d28e1dc8cf8180c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 15:48:55 +0100 Subject: [PATCH 769/980] give a value by default The variable $fileurlnb does not seem to be defined for all execution paths --- htdocs/core/boxes/box_graph_invoices_permonth.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_graph_invoices_permonth.php b/htdocs/core/boxes/box_graph_invoices_permonth.php index ba0e24ddaab..19a923ad4e1 100644 --- a/htdocs/core/boxes/box_graph_invoices_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_permonth.php @@ -135,7 +135,8 @@ class box_graph_invoices_permonth extends ModeleBoxes $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicesnbinyear-".$endyear.".png"; - if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesnbinyear-'.$endyear.'.png'; + // default value for customer mode + $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesnbinyear-'.$endyear.'.png'; if ($mode == 'supplier') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstatssupplier&file=invoicessuppliernbinyear-'.$endyear.'.png'; $px1 = new DolGraph(); From 931f2b809d7e822bca1d0767a4ec365954aa43c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 15:52:13 +0100 Subject: [PATCH 770/980] Update box_graph_orders_permonth.php --- htdocs/core/boxes/box_graph_orders_permonth.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php index 6e5bf253832..a67c3b94f92 100644 --- a/htdocs/core/boxes/box_graph_orders_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_permonth.php @@ -135,7 +135,8 @@ class box_graph_orders_permonth extends ModeleBoxes $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."ordersnbinyear-".$endyear.".png"; - if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersnbinyear-'.$endyear.'.png'; + // default value for customer mode + $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersnbinyear-'.$endyear.'.png'; if ($mode == 'supplier') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstatssupplier&file=ordersnbinyear-'.$endyear.'.png'; $px1 = new DolGraph(); @@ -144,7 +145,8 @@ class box_graph_orders_permonth extends ModeleBoxes { $px1->SetData($data1); unset($data1); - $i=$startyear;$legend=array(); + $i=$startyear; + $legend=array(); while ($i <= $endyear) { if ($startmonth != 1) From 135e65c4aaae3e75ba1de48e4c1549bfa59bbdca Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 15:53:57 +0100 Subject: [PATCH 771/980] Look and feel v11 Enhance the progress bar of tasks --- htdocs/admin/emailcollector_card.php | 6 +- htdocs/contrat/class/contrat.class.php | 140 ++++++---------- htdocs/core/lib/functions.lib.php | 24 ++- htdocs/core/lib/project.lib.php | 39 +++-- .../class/emailcollector.class.php | 49 ++---- htdocs/langs/en_US/modulebuilder.lang | 12 +- htdocs/modulebuilder/index.php | 155 ++++++++++-------- htdocs/mrp/ChangeLog.md | 5 - htdocs/takepos/ChangeLog.md | 5 - htdocs/theme/eldy/badges.inc.php | 2 +- htdocs/theme/eldy/global.inc.php | 6 + htdocs/theme/eldy/progress.inc.php | 9 +- htdocs/theme/md/badges.inc.php | 4 +- htdocs/theme/md/style.css.php | 6 + 14 files changed, 223 insertions(+), 239 deletions(-) delete mode 100644 htdocs/mrp/ChangeLog.md delete mode 100644 htdocs/takepos/ChangeLog.md diff --git a/htdocs/admin/emailcollector_card.php b/htdocs/admin/emailcollector_card.php index daa0c896809..cb0288b44ba 100644 --- a/htdocs/admin/emailcollector_card.php +++ b/htdocs/admin/emailcollector_card.php @@ -260,7 +260,7 @@ if ($action == 'create') { dol_fiche_head(array(), ''); - print '
    '.$transRecordedType.''.$langs->trans("FullList").''; + print ''.$langs->trans("FullList").''; print '
    '; - print $product_static->LibStatut($objp->tosell, 5, 0); + print ''; + print $product_static->LibStatut($objp->tosell, 3, 0); print "'; - print $product_static->LibStatut($objp->tobuy, 5, 1); + print ''; + print $product_static->LibStatut($objp->tobuy, 3, 1); print "
    '.$labelstatus.''.$labelStatus.''.price((isset($valsamount[$status])?(float) $valsamount[$status]:0), 0, '', 1, -1, -1, $conf->currency).'
    '; - print $thirdparty_static->getLibStatut(5); + print $thirdparty_static->getLibStatut(3); print "
    '; - print $formactions->form_select_status_action('formaction', $status, 1, 'status', 1, 2); + $formactions->form_select_status_action('formaction', $status, 1, 'status', 1, 2); print ajax_combobox('selectstatus'); print '
    '."\n"; + print '
    '."\n"; //unset($fields[]); @@ -296,7 +296,7 @@ if (($id || $ref) && $action == 'edit') dol_fiche_head(); - print '
    ' . "\n"; + print '
    ' . "\n"; // Common attributes include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_edit.tpl.php'; @@ -448,7 +448,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print '
    '; print '
    '; print '
    '; - print '
    '."\n"; + print '
    '."\n"; // Common attributes //$keyforbreak='fieldkeytoswithonsecondcolumn'; diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index a6ccd9f7cf1..038de071863 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -189,6 +189,12 @@ class Contrat extends CommonObject protected $lines_id_index_mapper=array(); + const STATUS_DRAFT = 0; + const STATUS_VALIDATED = 1; + const STATUS_CLOSED = 2; + + + /** * Constructor * @@ -1881,40 +1887,31 @@ class Contrat extends CommonObject /** * Renvoi label of a given contrat status * - * @param int $statut Status id + * @param int $status Id status * @param int $mode 0=Long label, 1=Short label, 2=Picto + Libelle court, 3=Picto, 4=Picto + Long label of all services, 5=Libelle court + Picto, 6=Picto of all services, 7=Same than 6 with fixed length * @return string Label */ - public function LibStatut($statut, $mode) + public function LibStatut($status, $mode) { // phpcs:enable - global $langs; - $langs->load("contracts"); - if ($mode == 0) + + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { - if ($statut == 0) { return $langs->trans("ContractStatusDraft"); } - elseif ($statut == 1) { return $langs->trans("ContractStatusValidated"); } - elseif ($statut == 2) { return $langs->trans("ContractStatusClosed"); } + global $langs; + $langs->load("contracts"); + $this->labelStatus[self::STATUS_DRAFT] = $langs->trans('ContractStatusDraft'); + $this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('ContractStatusValidated'); + $this->labelStatus[self::STATUS_CLOSED] = $langs->trans('ContractStatusClosed'); + $this->labelStatusShort[self::STATUS_DRAFT] = $langs->trans('ContractStatusDraft'); + $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->trans('ContractStatusValidated'); + $this->labelStatusShort[self::STATUS_CLOSED] = $langs->trans('ContractStatusClosed'); } - elseif ($mode == 1) - { - if ($statut == 0) { return $langs->trans("ContractStatusDraft"); } - elseif ($statut == 1) { return $langs->trans("ContractStatusValidated"); } - elseif ($statut == 2) { return $langs->trans("ContractStatusClosed"); } - } - elseif ($mode == 2) - { - if ($statut == 0) { return img_picto($langs->trans('ContractStatusDraft'), 'statut0').' '.$langs->trans("ContractStatusDraft"); } - elseif ($statut == 1) { return img_picto($langs->trans('ContractStatusValidated'), 'statut4').' '.$langs->trans("ContractStatusValidated"); } - elseif ($statut == 2) { return img_picto($langs->trans('ContractStatusClosed'), 'statut6').' '.$langs->trans("ContractStatusClosed"); } - } - elseif ($mode == 3) - { - if ($statut == 0) { return img_picto($langs->trans('ContractStatusDraft'), 'statut0'); } - elseif ($statut == 1) { return img_picto($langs->trans('ContractStatusValidated'), 'statut4'); } - elseif ($statut == 2) { return img_picto($langs->trans('ContractStatusClosed'), 'statut6'); } - } - elseif ($mode == 4 || $mode == 6 || $mode == 7) + + $statusType = 'status'.$status; + if ($status == self::STATUS_VALIDATED) $statusType = 'status4'; + if ($status == self::STATUS_VALIDATED) $statusType = 'status6'; + + if ($mode == 4 || $mode == 6 || $mode == 7) { $text=''; if ($mode == 4) { @@ -1924,22 +1921,20 @@ class Contrat extends CommonObject $text.=':     '; $text.=''; } - $text.=($mode == 7?'
    ':''); - $text.=($mode != 7 || $this->nbofserviceswait > 0) ? ($this->nbofserviceswait.ContratLigne::LibStatut(0, 3, -1, 'class="paddingleft2 inline-block valigntextbottom"')).(($mode != 7 || $this->nbofservicesopened || $this->nbofservicesexpired || $this->nbofservicesclosed)?'   ':'') : ''; - $text.=($mode == 7?'
    ':''); - $text.=($mode != 7 || $this->nbofservicesopened > 0) ? ($this->nbofservicesopened.ContratLigne::LibStatut(4, 3, 0, 'class="paddingleft2 inline-block valigntextbottom"')).(($mode != 7 || $this->nbofservicesexpired || $this->nbofservicesclosed)?'   ':'') : ''; - $text.=($mode == 7?'
    ':''); - $text.=($mode != 7 || $this->nbofservicesexpired > 0) ? ($this->nbofservicesexpired.ContratLigne::LibStatut(4, 3, 1, 'class="paddingleft2 inline-block valigntextbottom"')).(($mode != 7 || $this->nbofservicesclosed)?'   ':'') : ''; - $text.=($mode == 7?'
    ':''); - $text.=($mode != 7 || $this->nbofservicesclosed > 0) ? ($this->nbofservicesclosed.ContratLigne::LibStatut(5, 3, -1, 'class="paddingleft2 inline-block valigntextbottom"')) : ''; - $text.=($mode == 7?'
    ':''); + $text.=($mode == 7?'':''); + $text.=($mode != 7 || $this->nbofserviceswait > 0) ? ($this->nbofserviceswait.ContratLigne::LibStatut(0, 3, -1, 'class="marginleft2"')).(($mode != 7 || $this->nbofservicesopened || $this->nbofservicesexpired || $this->nbofservicesclosed)?'   ':'') : ''; + $text.=($mode == 7?'':''); + $text.=($mode != 7 || $this->nbofservicesopened > 0) ? ($this->nbofservicesopened.ContratLigne::LibStatut(4, 3, 0, 'class="marginleft2"')).(($mode != 7 || $this->nbofservicesexpired || $this->nbofservicesclosed)?'   ':'') : ''; + $text.=($mode == 7?'':''); + $text.=($mode != 7 || $this->nbofservicesexpired > 0) ? ($this->nbofservicesexpired.ContratLigne::LibStatut(4, 3, 1, 'class="marginleft2"')).(($mode != 7 || $this->nbofservicesclosed)?'   ':'') : ''; + $text.=($mode == 7?'':''); + $text.=($mode != 7 || $this->nbofservicesclosed > 0) ? ($this->nbofservicesclosed.ContratLigne::LibStatut(5, 3, -1, 'class="marginleft2"')) : ''; + $text.=($mode == 7?'':''); return $text; } - elseif ($mode == 5) + else { - if ($statut == 0) { return $langs->trans("ContractStatusDraft").' '.img_picto($langs->trans('ContractStatusDraft'), 'statut0'); } - elseif ($statut == 1) { return $langs->trans("ContractStatusValidated").' '.img_picto($langs->trans('ContractStatusValidated'), 'statut4'); } - elseif ($statut == 2) { return $langs->trans("ContractStatusClosed").' '.img_picto($langs->trans('ContractStatusClosed'), 'statut6'); } + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); } } @@ -2728,65 +2723,34 @@ class ContratLigne extends CommonObjectLine /** * Return label of a contract line status * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto * @param int $expired 0=Not expired, 1=Expired, -1=Both or unknown * @param string $moreatt More attribute * @return string Libelle */ - public static function LibStatut($statut, $mode, $expired = -1, $moreatt = '') + public static function LibStatut($status, $mode, $expired = -1, $moreatt = '') { // phpcs:enable global $langs; $langs->load("contracts"); - if ($mode == 0) + + if ($status == self::STATUS_INITIAL) { $labelStatus = $langs->trans("ServiceStatusInitial"); $labelStatusShort = $langs->trans("ServiceStatusInitial"); } + elseif ($status == self::STATUS_OPEN && $expired == -1) { $labelStatus = $langs->trans("ServiceStatusRunning"); $labelStatusShort = $langs->trans("ServiceStatusRunning"); } + elseif ($status == self::STATUS_OPEN && $expired == 0) { $labelStatus = $langs->trans("ServiceStatusNotLate"); $labelStatusShort = $langs->trans("ServiceStatusNotLateShort"); } + elseif ($status == self::STATUS_OPEN && $expired == 1) { $labelStatus = $langs->trans("ServiceStatusLate"); $labelStatusShort = $langs->trans("ServiceStatusLateShort"); } + elseif ($status == self::STATUS_CLOSED) { $labelStatus = $langs->trans("ServiceStatusClosed"); $labelStatusShort = $langs->trans("ServiceStatusClosed"); } + + $statusType = 'status'.$status; + if ($status == self::STATUS_OPEN && $expired == 1) $statusType = 'status3'; + if ($status == self::STATUS_CLOSED) $statusType = 'status6'; + + $params = array(); $reg = array(); + if (preg_match('/class="(.*)"/', $moreatt, $reg)) { - if ($statut == self::STATUS_INITIAL) { return $langs->trans("ServiceStatusInitial"); } - elseif ($statut == self::STATUS_OPEN && $expired == -1) { return $langs->trans("ServiceStatusRunning"); } - elseif ($statut == self::STATUS_OPEN && $expired == 0) { return $langs->trans("ServiceStatusNotLate"); } - elseif ($statut == self::STATUS_OPEN && $expired == 1) { return $langs->trans("ServiceStatusLate"); } - elseif ($statut == self::STATUS_CLOSED) { return $langs->trans("ServiceStatusClosed"); } - } - elseif ($mode == 1) - { - if ($statut == self::STATUS_INITIAL) { return $langs->trans("ServiceStatusInitial"); } - elseif ($statut == self::STATUS_OPEN && $expired == -1) { return $langs->trans("ServiceStatusRunning"); } - elseif ($statut == self::STATUS_OPEN && $expired == 0) { return $langs->trans("ServiceStatusNotLateShort"); } - elseif ($statut == self::STATUS_OPEN && $expired == 1) { return $langs->trans("ServiceStatusLateShort"); } - elseif ($statut == self::STATUS_CLOSED) { return $langs->trans("ServiceStatusClosed"); } - } - elseif ($mode == 2) - { - if ($statut == self::STATUS_INITIAL) { return img_picto($langs->trans('ServiceStatusInitial'), 'statut0').' '.$langs->trans("ServiceStatusInitial"); } - elseif ($statut == self::STATUS_OPEN && $expired == -1) { return img_picto($langs->trans('ServiceStatusRunning'), 'statut4').' '.$langs->trans("ServiceStatusRunning"); } - elseif ($statut == self::STATUS_OPEN && $expired == 0) { return img_picto($langs->trans('ServiceStatusNotLate'), 'statut4').' '.$langs->trans("ServiceStatusNotLateShort"); } - elseif ($statut == self::STATUS_OPEN && $expired == 1) { return img_picto($langs->trans('ServiceStatusLate'), 'statut3').' '.$langs->trans("ServiceStatusLateShort"); } - elseif ($statut == self::STATUS_CLOSED) { return img_picto($langs->trans('ServiceStatusClosed'), 'statut6') .' '.$langs->trans("ServiceStatusClosed"); } - } - elseif ($mode == 3) - { - if ($statut == self::STATUS_INITIAL) { return img_picto($langs->trans('ServiceStatusInitial'), 'statut0', $moreatt); } - elseif ($statut == self::STATUS_OPEN && $expired == -1) { return img_picto($langs->trans('ServiceStatusRunning'), 'statut4', $moreatt); } - elseif ($statut == self::STATUS_OPEN && $expired == 0) { return img_picto($langs->trans('ServiceStatusNotLate'), 'statut4', $moreatt); } - elseif ($statut == self::STATUS_OPEN && $expired == 1) { return img_picto($langs->trans('ServiceStatusLate'), 'statut3', $moreatt); } - elseif ($statut == self::STATUS_CLOSED) { return img_picto($langs->trans('ServiceStatusClosed'), 'statut6', $moreatt); } - } - elseif ($mode == 4) - { - if ($statut == self::STATUS_INITIAL) { return img_picto($langs->trans('ServiceStatusInitial'), 'statut0').' '.$langs->trans("ServiceStatusInitial"); } - elseif ($statut == self::STATUS_OPEN && $expired == -1) { return img_picto($langs->trans('ServiceStatusRunning'), 'statut4').' '.$langs->trans("ServiceStatusRunning"); } - elseif ($statut == self::STATUS_OPEN && $expired == 0) { return img_picto($langs->trans('ServiceStatusNotLate'), 'statut4').' '.$langs->trans("ServiceStatusNotLate"); } - elseif ($statut == self::STATUS_OPEN && $expired == 1) { return img_picto($langs->trans('ServiceStatusLate'), 'statut3').' '.$langs->trans("ServiceStatusLate"); } - elseif ($statut == self::STATUS_CLOSED) { return img_picto($langs->trans('ServiceStatusClosed'), 'statut6') .' '.$langs->trans("ServiceStatusClosed"); } - } - elseif ($mode == 5) - { - if ($statut == self::STATUS_INITIAL) { return $langs->trans("ServiceStatusInitial").' '.img_picto($langs->trans('ServiceStatusInitial'), 'statut0'); } - elseif ($statut == self::STATUS_OPEN && $expired == -1) { return $langs->trans("ServiceStatusRunning").' '.img_picto($langs->trans('ServiceStatusRunning'), 'statut4'); } - elseif ($statut == self::STATUS_OPEN && $expired == 0) { return $langs->trans("ServiceStatusNotLateShort").' '.img_picto($langs->trans('ServiceStatusNotLateShort'), 'statut4'); } - elseif ($statut == self::STATUS_OPEN && $expired == 1) { return $langs->trans("ServiceStatusLateShort").' '.img_picto($langs->trans('ServiceStatusLate'), 'statut3'); } - elseif ($statut == self::STATUS_CLOSED) { return $langs->trans("ServiceStatusClosed").' '.img_picto($langs->trans('ServiceStatusClosed'), 'statut6'); } + $params = array('badgeParams'=>array('css' => $reg[1])); } + return dolGetStatus($labelStatus, $labelStatusShort, '', $statusType, $mode, '', $params); } /** diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 56b0dc93c35..7750e62c506 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -8093,19 +8093,18 @@ function roundUpToNextMultiple($n, $x = 5) function dolGetBadge($label, $html = '', $type = 'primary', $mode = '', $url = '', $params = array()) { $attr=array( - 'class'=>'badge badge-status'.(!empty($mode)?' badge-'.$mode:'').(!empty($type)?' badge-'.$type:'') + 'class'=>'badge badge-status'.(!empty($mode)?' badge-'.$mode:'').(!empty($type)?' badge-'.$type:'').(empty($params['css'])?'':' '.$params['css']) ); - if(empty($html)){ + if (empty($html)) { $html = $label; } - if(!empty($url)){ + if (!empty($url)) { $attr['href'] = $url; } - if($mode==='dot') - { + if ($mode==='dot') { $attr['class'].= ' classfortooltip'; $attr['title'] = $html; $attr['aria-label'] = $label; @@ -8113,8 +8112,8 @@ function dolGetBadge($label, $html = '', $type = 'primary', $mode = '', $url = ' } // Override attr - if(!empty($params['attr']) && is_array($params['attr'])){ - foreach($params['attr']as $key => $value){ + if (!empty($params['attr']) && is_array($params['attr'])) { + foreach($params['attr']as $key => $value) { $attr[$key] = $value; } } @@ -8125,7 +8124,7 @@ function dolGetBadge($label, $html = '', $type = 'primary', $mode = '', $url = ' $attr = array_map('dol_escape_htmltag', $attr); $TCompiledAttr = array(); - foreach($attr as $key => $value){ + foreach($attr as $key => $value) { $TCompiledAttr[] = $key.'="'.$value.'"'; } @@ -8168,13 +8167,13 @@ function dolGetStatus($statusLabel = '', $statusLabelShort = '', $html = '', $st elseif ($displayMode == 1) { $return = !empty($html)?$html:(!empty($statusLabelShort)?$statusLabelShort:$statusLabel); } - // use status with images - elseif (empty($conf->global->MAIN_STATUS_USES_CSS)) { + // Use status with images (for backward compatibility) + elseif (! empty($conf->global->MAIN_STATUS_USES_IMAGES)) { $return = ''; $htmlLabel = (in_array($displayMode, array(1,2,5))?'':'').(!empty($html)?$html:$statusLabel).(in_array($displayMode, array(1,2,5))?'':''); $htmlLabelShort = (in_array($displayMode, array(1,2,5))?'':'').(!empty($html)?$html:(!empty($statusLabelShort)?$statusLabelShort:$statusLabel)).(in_array($displayMode, array(1,2,5))?'':''); - // For small screen, we use the short label instead of long label. + // For small screen, we always use the short label instead of long label. if (! empty($conf->dol_optimize_smallscreen)) { if ($displayMode == 0) $displayMode = 1; @@ -8212,7 +8211,6 @@ function dolGetStatus($statusLabel = '', $statusLabelShort = '', $html = '', $st $return = $htmlImg .' '. $htmlLabel; } elseif ($displayMode === 5) { - // Add here a span class="hideonsmartphone ? $return = $htmlLabelShort .' '. $htmlImg; } else { // $displayMode >= 6 @@ -8220,7 +8218,7 @@ function dolGetStatus($statusLabel = '', $statusLabelShort = '', $html = '', $st } } // Use new badge - elseif (!empty($conf->global->MAIN_STATUS_USES_CSS) && !empty($displayMode)) { + elseif (empty($conf->global->MAIN_STATUS_USES_IMAGES) && !empty($displayMode)) { $statusLabelShort = !empty($statusLabelShort)?$statusLabelShort:$statusLabel; if ($displayMode == 3) { diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index 0c80b05c9cd..ecadec1b5a8 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -2023,23 +2023,23 @@ function getTaskProgressView($task, $label = true, $progressNumber = true, $hide // this conf is actually hidden, by default we use 1% for "be carefull or warning" $warningRatio = !empty($conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT) ? (1 + $conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT / 100) : 1.01; - $diffTitle = '
    '.$langs->trans('ProgressDeclared').' : '.$task->progress.'%'; - $diffTitle.= '
    '.$langs->trans('ProgressCalculated').' : '.$progressCalculated.'%'; + $diffTitle = '
    '.$langs->trans('ProgressDeclared').' : '.$task->progress.($task->progress ? '%' : ''); + $diffTitle.= '
    '.$langs->trans('ProgressCalculated').' : '.$progressCalculated.($progressCalculated ? '%' : ''); - if($progressCalculated > doubleval($task->progress)){ + if($progressCalculated > doubleval($task->progress)) { $progressBarClass = 'progress-bar-danger'; - $title = $langs->trans('TheReportedProgressIsLessThanTheCalculatedProgressionByX', abs($task->progress-$progressCalculated).'%'); - $diff = ' '.($task->progress-$progressCalculated).'%'; + $title = $langs->trans('TheReportedProgressIsLessThanTheCalculatedProgressionByX', abs($task->progress-$progressCalculated).' '.$langs->trans("point")); + $diff = ' '.($task->progress-$progressCalculated).'%'; } - elseif($progressCalculated * $warningRatio >= doubleval($task->progress)){ // warning if close at 1% + elseif($progressCalculated * $warningRatio >= doubleval($task->progress)) { // warning if close at 1% $progressBarClass = 'progress-bar-warning'; - $title = $langs->trans('TheReportedProgressIsLessThanTheCalculatedProgressionByX', abs($task->progress-$progressCalculated).'%'); - $diff = ' '.($task->progress-$progressCalculated).'%'; + $title = $langs->trans('TheReportedProgressIsLessThanTheCalculatedProgressionByX', abs($task->progress-$progressCalculated).' '.$langs->trans("point")); + $diff = ' '.($task->progress-$progressCalculated).'%'; } else{ $progressBarClass = 'progress-bar-success'; - $title = $langs->trans('TheReportedProgressIsMoreThanTheCalculatedProgressionByX', ($task->progress-$progressCalculated).'%'); - $diff = ' '.($task->progress-$progressCalculated).'%'; + $title = $langs->trans('TheReportedProgressIsMoreThanTheCalculatedProgressionByX', ($task->progress-$progressCalculated).' '.$langs->trans("point")); + $diff = ' '.($task->progress-$progressCalculated).'%'; } } @@ -2062,7 +2062,7 @@ function getTaskProgressView($task, $label = true, $progressNumber = true, $hide if($progressNumber !== false) { $out.= ' '; - if($progressNumber!==true){ + if ($progressNumber!==true) { $out.= $progressNumber; // replace label by param } else{ @@ -2087,8 +2087,21 @@ function getTaskProgressView($task, $label = true, $progressNumber = true, $hide $out.= ''; - $out.= '
    '; - $out.= '
    '; + $out.= '
    '; + $diffval = doubleval($task->progress) - doubleval($progressCalculated); + if ($diffval >= 0) { + // good + $out.= '
    '; + $out.= '
    '; + $out.= '
    '; + } + else + { + // bad + $out.= '
    '; + $out.= '
    '; + $out.= '
    '; + } $out.= '
    '; $out.= '
    '; diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index 6717b42609b..0b67fcb621f 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -183,6 +183,10 @@ class EmailCollector extends CommonObject public $debuginfo; + const STATUS_DISABLED = 0; + const STATUS_ENABLED = 1; + + /** * Constructor * @@ -506,47 +510,20 @@ class EmailCollector extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - if (empty($this->labelStatus)) + if (empty($this->labelStatus) || empty($this->labelStatusShort)) { global $langs; //$langs->load("mymodule"); - $this->labelStatus[1] = $langs->trans('Enabled'); - $this->labelStatus[0] = $langs->trans('Disabled'); + $this->labelStatus[self::STATUS_ENABLED] = $langs->trans('Enabled'); + $this->labelStatus[self::STATUS_DISABLED] = $langs->trans('Disabled'); + $this->labelStatusShort[self::STATUS_ENABLED] = $langs->trans('Enabled'); + $this->labelStatusShort[self::STATUS_DISABLED] = $langs->trans('Disabled'); } - if ($mode == 0) - { - return $this->labelStatus[$status]; - } - elseif ($mode == 1) - { - return $this->labelStatus[$status]; - } - elseif ($mode == 2) - { - if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; - elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; - } - elseif ($mode == 3) - { - if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); - } - elseif ($mode == 4) - { - if ($status == 1) return img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; - elseif ($status == 0) return img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelStatus[$status]; - } - elseif ($mode == 5) - { - if ($status == 1) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); - } - elseif ($mode == 6) - { - if ($status == 1) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut4', '', false, 0, 0, '', 'valignmiddle'); - elseif ($status == 0) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut5', '', false, 0, 0, '', 'valignmiddle'); - } + $statusType = 'status5'; + if ($status == self::STATUS_ENABLED) $statusType = 'status4'; + + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); } /** diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang index 1f8399d939a..59d16eba2fc 100644 --- a/htdocs/langs/en_US/modulebuilder.lang +++ b/htdocs/langs/en_US/modulebuilder.lang @@ -6,7 +6,7 @@ ModuleBuilderDesc2=Path where modules are generated/edited (first directory for ModuleBuilderDesc3=Generated/editable modules found: %s ModuleBuilderDesc4=A module is detected as 'editable' when the file %s exists in root of module directory NewModule=New module -NewObject=New object +NewObjectInModulebuilder=New object ModuleKey=Module key ObjectKey=Object key ModuleInitialized=Module initialized @@ -66,8 +66,8 @@ ReadmeFile=Readme file ChangeLog=ChangeLog file TestClassFile=File for PHP Unit Test class SqlFile=Sql file -PageForLib=File for PHP library -PageForObjLib=File for PHP library dedicated to object +PageForLib=File for the common PHP library +PageForObjLib=File for the PHP library dedicated to object SqlFileExtraFields=Sql file for complementary attributes SqlFileKey=Sql file for keys SqlFileKeyExtraFields=Sql file for keys of complementary attributes @@ -124,4 +124,8 @@ UseSpecificEditorURL = Use a specific editor URL UseSpecificFamily = Use a specific family UseSpecificAuthor = Use a specific author UseSpecificVersion = Use a specific initial version -ModuleMustBeEnabled=The module/application must be enabled first \ No newline at end of file +ModuleMustBeEnabled=The module/application must be enabled first +IncludeRefGeneration=The reference of object must be generated automatically +IncludeRefGenerationHelp=Check this if you want to include code to manage the generation automatically of the reference +IncludeDocGeneration=I want to generate some documents from the object +IncludeDocGenerationHelp=If you check this, some code will be generated to add a "Generate document" box on the record. diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 234746a0d83..a6df5f9db43 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2004-2019 Laurent Destailleur * Copyright (C) 2018-2019 Nicolas ZABOURI * * This program is free software; you can redistribute it and/or modify @@ -810,6 +810,21 @@ if ($dirins && $action == 'initobject' && $module && $objectname) //'class/api_mymodule.class.php'=>'class/api_'.strtolower($module).'.class.php', ); + if (GETPOST('includerefgeneration', 'int')) + { + $filetogenerate += array( + 'core/modules/myobject/mod_myobject_advanced.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_advanced.php', + 'core/modules/myobject/mod_myobject_standard.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_standard.php', + 'core/modules/myobject/modules_myobject.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_advanced.php', + ); + } + if (GETPOST('includedocgeneration', 'int')) + { + $filetogenerate += array( + 'core/modules/myobject/doc/doc_generic_myobject_odt.modules.php'=>'core/modules/'.strtolower($objectname).'/doc/doc_generic_'.strtolower($objectname).'_odt.modules.php' + ); + } + foreach($filetogenerate as $srcfile => $destfile) { $result = dol_copy($srcdir.'/'.$srcfile, $destdir.'/'.$destfile, $newmask, 0); @@ -1123,7 +1138,7 @@ if ($dirins && $action == 'confirm_deleteproperty' && $propertykey) } } -if ($dirins && $action == 'confirm_delete') +if ($dirins && $action == 'confirm_deletemodule') { if (preg_match('/[^a-z0-9_]/i', $module)) { @@ -1150,8 +1165,6 @@ if ($dirins && $action == 'confirm_delete') } } - //header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?module=initmodule'); - //exit; $action = ''; $module = 'deletemodule'; } @@ -1173,26 +1186,30 @@ if ($dirins && $action == 'confirm_deleteobject' && $objectname) $dir = $dirins.'/'.$modulelowercase; // Delete some files - $filetogenerate = array( - 'myobject_card.php'=>strtolower($objectname).'_card.php', - 'myobject_note.php'=>strtolower($objectname).'_note.php', - 'myobject_document.php'=>strtolower($objectname).'_document.php', - 'myobject_agenda.php'=>strtolower($objectname).'_agenda.php', - 'myobject_list.php'=>strtolower($objectname).'_list.php', - 'lib/mymodule.lib.php'=>'lib/'.strtolower($module).'.lib.php', - 'lib/mymodule_myobject.lib.php'=>'lib/'.strtolower($module).'_'.strtolower($objectname).'.lib.php', - 'test/phpunit/MyObjectTest.php'=>'test/phpunit/'.strtolower($objectname).'Test.php', - 'sql/llx_mymodule_myobject.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.sql', - 'sql/llx_mymodule_myobject_extrafields.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'_extrafields.sql', - 'sql/llx_mymodule_myobject.key.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.key.sql', - 'scripts/myobject.php'=>'scripts/'.strtolower($objectname).'.php', - 'img/object_myobject.png'=>'img/object_'.strtolower($objectname).'.png', - 'class/myobject.class.php'=>'class/'.strtolower($objectname).'.class.php', - 'class/api_myobject.class.php'=>'class/api_'.strtolower($module).'.class.php' + $filetodelete = array( + 'myobject_card.php'=>strtolower($objectname).'_card.php', + 'myobject_note.php'=>strtolower($objectname).'_note.php', + 'myobject_document.php'=>strtolower($objectname).'_document.php', + 'myobject_agenda.php'=>strtolower($objectname).'_agenda.php', + 'myobject_list.php'=>strtolower($objectname).'_list.php', + 'lib/mymodule.lib.php'=>'lib/'.strtolower($module).'.lib.php', + 'lib/mymodule_myobject.lib.php'=>'lib/'.strtolower($module).'_'.strtolower($objectname).'.lib.php', + 'test/phpunit/MyObjectTest.php'=>'test/phpunit/'.strtolower($objectname).'Test.php', + 'sql/llx_mymodule_myobject.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.sql', + 'sql/llx_mymodule_myobject_extrafields.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'_extrafields.sql', + 'sql/llx_mymodule_myobject.key.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.key.sql', + 'scripts/myobject.php'=>'scripts/'.strtolower($objectname).'.php', + 'img/object_myobject.png'=>'img/object_'.strtolower($objectname).'.png', + 'class/myobject.class.php'=>'class/'.strtolower($objectname).'.class.php', + 'class/api_myobject.class.php'=>'class/api_'.strtolower($module).'.class.php', + 'core/modules/myobject/mod_myobject_advanced.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_advanced.php', + 'core/modules/myobject/mod_myobject_standard.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_standard.php', + 'core/modules/myobject/modules_myobject.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_advanced.php', + 'core/modules/myobject/doc/doc_generic_myobject_odt.modules.php'=>'core/modules/'.strtolower($objectname).'/doc/doc_generic_'.strtolower($objectname).'_odt.modules.php' ); $resultko = 0; - foreach($filetogenerate as $filetodelete) + foreach($filetodelete as $filetodelete) { $resulttmp = dol_delete_file($dir.'/'.$filetodelete, 0, 0, 1); if (! $resulttmp) $resultko++; @@ -1208,8 +1225,6 @@ if ($dirins && $action == 'confirm_deleteobject' && $objectname) } } - //header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?module=initmodule'); - //exit; $action = ''; $tabobj = 'deleteobject'; } @@ -1436,6 +1451,7 @@ if ($dirread != DOL_DOCUMENT_ROOT && ($conf->global->MAIN_FEATURES_LEVEL >=2 || // Search modules to edit print ''."\n"; $listofmodules=array(); +$i=0; foreach($dirsrootforscan as $dirread) { $dirsincustom=dol_dir_list($dirread, 'directories'); @@ -1493,8 +1509,12 @@ foreach($dirsrootforscan as $dirread) if (empty($newdircustom)) $newdircustom=img_warning(); // If dirread was forced to somewhere else, by using URL // htdocs/modulebuilder/index.php?module=Inventory@/home/ldestailleur/git/dolibarr/htdocs/product - print $langs->trans("DirScanned").' : '.$dirread.'
    '; + if (empty($i)) print $langs->trans("DirScanned").' : '; + else print ', '; + print ''.$dirread.''; + $i++; } +print '
    '; //var_dump($listofmodules); $message=''; @@ -1526,7 +1546,7 @@ if ($message) } //print $langs->trans("ModuleBuilderDesc3", count($listofmodules), $FILEFLAG).'
    '; -$infomodulesfound = '
    '.$form->textwithpicto($langs->trans("ModuleBuilderDesc3", count($listofmodules)), $langs->trans("ModuleBuilderDesc4", $FILEFLAG)).'
    '; +$infomodulesfound = '
    '.$form->textwithpicto(''.$langs->trans("ModuleBuilderDesc3", count($listofmodules)).'', $langs->trans("ModuleBuilderDesc4", $FILEFLAG)).'
    '; // Load module descriptor @@ -1601,16 +1621,17 @@ if ($module == 'initmodule') print $langs->trans("EnterNameOfModuleDesc").'
    '; print '
    '; - print ''; + print '
    '; - print ''; + print '
    '; print ''; } elseif ($module == 'deletemodule') { + print ''."\n"; print '
    '; print ''; - print ''; + print ''; print ''; print $langs->trans("EnterNameOfModuleToDeleteDesc").'

    '; @@ -1651,13 +1672,13 @@ elseif (! empty($module)) $linktoenabledisable.=img_picto($langs->trans("Disabled"), 'switch_off', '', false, 0, 0, '', '', 1); $linktoenabledisable.="\n"; } - if (! empty($conf->$modulelowercase->enabled)) + if (empty($conf->$modulelowercase->enabled)) { - $modulestatusinfo=img_warning().' '.$langs->trans("ModuleIsLive"); + $modulestatusinfo=$form->textwithpicto($langs->trans("ModuleIsNotActive", $urltomodulesetup), '', -1, 'help'); } else { - $modulestatusinfo=img_info('').' '.$langs->trans("ModuleIsNotActive", $urltomodulesetup); + $modulestatusinfo=$form->textwithpicto($langs->trans("ModuleIsLive"), $langs->trans("Warning"), -1, 'warning'); } $head2[$h][0] = $_SERVER["PHP_SELF"].'?tab=description&module='.$module.($forceddirread?'@'.$dirread:''); @@ -1737,13 +1758,8 @@ elseif (! empty($module)) // Link to enable / disable print $modulestatusinfo; - print ' '.$linktoenabledisable; - print '
    '; + print ' '.$linktoenabledisable.'
    '; - if (realpath($dirread.'/'.$modulelowercase) != $dirread.'/'.$modulelowercase) - { - print ''.$langs->trans("RealPathOfModule").' : '.realpath($dirread.'/'.$modulelowercase).'
    '; - } print '
    '; if ($tab == 'description') @@ -1756,21 +1772,28 @@ elseif (! empty($module)) { dol_fiche_head($head2, $tab, '', -1, ''); // Description - level 2 - print ''.$langs->trans("ModuleBuilderDesc".$tab).'

    '; + print ''.$langs->trans("ModuleBuilderDesc".$tab).''; + $infoonmodulepath = ''; + if (realpath($dirread.'/'.$modulelowercase) != $dirread.'/'.$modulelowercase) + { + $infoonmodulepath = ''.$langs->trans("RealPathOfModule").' : '.realpath($dirread.'/'.$modulelowercase).'
    '; + print ' '.$infoonmodulepath; + } + print '
    '; print '
    '; print ''; print ''; print ''; print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; print '
    '.$langs->trans("ReadmeFile").' : '.$pathtofilereadme.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; print '
    '.$langs->trans("ChangeLog").' : '.$pathtochangelog.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; @@ -1931,8 +1954,8 @@ elseif (! empty($module)) { $pathtofile = $modulelowercase.'/langs/'.$langfile['relativename']; print ' '.$langs->trans("LanguageFile").' '.basename(dirname($pathtofile)).' : '.$pathtofile.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; print ''; } print ''; @@ -1983,7 +2006,7 @@ elseif (! empty($module)) print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print ' '.$langs->trans("LanguageFile").' : '; if (! is_array($dicts) || empty($dicts)) print ''.$langs->trans("NoDictionaries").''; @@ -2113,7 +2136,7 @@ elseif (! empty($module)) $dir = $dirread.'/'.$modulelowercase.'/class'; $head3[$h][0] = $_SERVER["PHP_SELF"].'?tab=objects&module='.$module.($forceddirread?'@'.$dirread:'').'&tabobj=newobject'; - $head3[$h][1] = $langs->trans("NewObject"); + $head3[$h][1] = ''.$langs->trans("NewObjectInModulebuilder").''; $head3[$h][2] = 'newobject'; $h++; @@ -2165,7 +2188,9 @@ elseif (! empty($module)) print ''.$langs->trans("EnterNameOfObjectDesc").'

    '; - print ''; + print '
    '; + print ' '.$form->textwithpicto($langs->trans("IncludeRefGeneration"), $langs->trans("IncludeRefGenerationHelp")).'
    '; + print ' '.$form->textwithpicto($langs->trans("IncludeDocGeneration"), $langs->trans("IncludeDocGenerationHelp")).'
    '; print ''; print '
    '; print '
    '; @@ -2173,7 +2198,6 @@ elseif (! empty($module)) print $langs->trans("or"); print '
    '; print '
    '; - print '
    '; //print ' '; print $langs->trans("InitStructureFromExistingTable"); print ''; @@ -2687,7 +2711,7 @@ elseif (! empty($module)) print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print '
    '; @@ -2827,7 +2851,7 @@ elseif (! empty($module)) print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print '
    '; @@ -2924,7 +2948,7 @@ elseif (! empty($module)) $pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath']; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; print ''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; print ''; print ''; @@ -2933,8 +2957,8 @@ elseif (! empty($module)) if (dol_is_file($dirins.'/'.$pathtohook)) { print ''.$pathtohook.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } else { @@ -2991,8 +3015,8 @@ elseif (! empty($module)) print ''; print ' '.$langs->trans("TriggersFile").' : '.$pathtofile.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; print ''; } } @@ -3047,8 +3071,8 @@ elseif (! empty($module)) if (dol_is_file($dirins.'/'.$pathtohook)) { print ''.$pathtohook.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } else { @@ -3099,8 +3123,8 @@ elseif (! empty($module)) if (dol_is_file($dirins.'/'.$pathtohook)) { print ''.$pathtohook.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } else { @@ -3155,9 +3179,8 @@ elseif (! empty($module)) $pathtofile = $widget['relpath']; print ' '.$langs->trans("WidgetFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; - print ''; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; print ''; } } @@ -3242,8 +3265,8 @@ elseif (! empty($module)) $pathtofile = $clifile['relpath']; print ' '.$langs->trans("CLIFile").' : '.$pathtofile.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; print ''; } } @@ -3294,7 +3317,7 @@ elseif (! empty($module)) print '
    '; print ' '.$langs->trans("DescriptorFile").' : '.$pathtofile.''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '.img_picto($langs->trans("Edit"), 'edit').''; print '
    '; print '
    '; @@ -3423,8 +3446,8 @@ elseif (! empty($module)) if (preg_match('/\.md$/i', $spec['name'])) $format='markdown'; print ''; print ' '.$langs->trans("SpecificationFile").' : '.$pathtofile.''; - print ''.img_picto($langs->trans("Edit"), 'edit').''; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ''.img_picto($langs->trans("Edit"), 'edit').''; + print ''.img_picto($langs->trans("Delete"), 'delete').''; print ''; } } diff --git a/htdocs/mrp/ChangeLog.md b/htdocs/mrp/ChangeLog.md deleted file mode 100644 index 416bad1d559..00000000000 --- a/htdocs/mrp/ChangeLog.md +++ /dev/null @@ -1,5 +0,0 @@ -# CHANGELOG MRP FOR DOLIBARR ERP CRM - -## 1.0 -Initial version - diff --git a/htdocs/takepos/ChangeLog.md b/htdocs/takepos/ChangeLog.md deleted file mode 100644 index 7b623eaa252..00000000000 --- a/htdocs/takepos/ChangeLog.md +++ /dev/null @@ -1,5 +0,0 @@ -# CHANGELOG TAKEPOS FOR DOLIBARR ERP CRM - -## 1.0 -Initial version - diff --git a/htdocs/theme/eldy/badges.inc.php b/htdocs/theme/eldy/badges.inc.php index 975f2eb311f..27fc142d991 100644 --- a/htdocs/theme/eldy/badges.inc.php +++ b/htdocs/theme/eldy/badges.inc.php @@ -37,7 +37,7 @@ if (! defined('ISLOADEDBYSTEELSHEET')) die('Must be call by steelsheet'); ?> padding: 0; border-radius: 50%; padding: 0.45em; - vertical-align: middle; + vertical-align: text-top; } a.badge:focus, a.badge:hover { diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index cf5c4f9703a..4a3b73b1d20 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -473,6 +473,12 @@ textarea.centpercent { .paddingright2 { padding-: 2px; } +.marginleft2 { + margin-: 2px; +} +.marginright2 { + margin-: 2px; +} .cursordefault { cursor: default; } diff --git a/htdocs/theme/eldy/progress.inc.php b/htdocs/theme/eldy/progress.inc.php index 3e330745440..c6b48205360 100644 --- a/htdocs/theme/eldy/progress.inc.php +++ b/htdocs/theme/eldy/progress.inc.php @@ -21,10 +21,10 @@ if (! defined('ISLOADEDBYSTEELSHEET')) die('Must be call by steelsheet'); ?> height: 20px; overflow: hidden; background-color: #f5f5f5; - background-color: rgba(0,0,0,0.1); + background-color: rgba(128, 128, 128, 0.1); border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); - box-shadow: inset 0 1px 2px rgba(0,0,0,.1); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } .progress.spaced{ @@ -184,4 +184,7 @@ if (! defined('ISLOADEDBYSTEELSHEET')) die('Must be call by steelsheet'); ?> background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-consumed { + background-color: rgb(0, 0, 0, 0.15); } \ No newline at end of file diff --git a/htdocs/theme/md/badges.inc.php b/htdocs/theme/md/badges.inc.php index 2a1b9ffd24b..11536240ee0 100644 --- a/htdocs/theme/md/badges.inc.php +++ b/htdocs/theme/md/badges.inc.php @@ -36,8 +36,8 @@ if (! defined('ISLOADEDBYSTEELSHEET')) die('Must be call by steelsheet'); ?> .badge-dot { padding: 0; border-radius: 50%; - padding: 0.25rem; - vertical-align: middle; + padding: 0.35em; + vertical-align: unset; } a.badge:focus, a.badge:hover { diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 320a03c2775..04fe7e85d77 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -676,6 +676,12 @@ textarea.centpercent { .paddingright2 { padding-: 2px; } +.marginleft2 { + margin-: 2px; +} +.marginright2 { + margin-: 2px; +} .cursordefault { cursor: default; } From 5bdb9da5c5ca063f78a6bef5ecfb65d3cb36023e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 15:56:15 +0100 Subject: [PATCH 772/980] Update box_graph_invoices_supplier_permonth.php --- htdocs/core/boxes/box_graph_invoices_supplier_permonth.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php index 4393e9db790..e70da7fe680 100644 --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php @@ -132,7 +132,8 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicessuppliernbinyear-".$year.".png"; - if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesnbinyear-'.$year.'.png'; + // default value for customer mode + $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesnbinyear-'.$year.'.png'; if ($mode == 'supplier') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstatssupplier&file=invoicessuppliernbinyear-'.$year.'.png'; $px1 = new DolGraph(); @@ -143,7 +144,8 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $px1->SetData($data1); unset($data1); - $i=$startyear;$legend=array(); + $i=$startyear; + $legend=array(); while ($i <= $endyear) { if ($startmonth != 1) From 93b00038f8c059ef08a4b1ebab193fb306294daf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 15:57:40 +0100 Subject: [PATCH 773/980] Update box_graph_orders_supplier_permonth.php --- htdocs/core/boxes/box_graph_orders_supplier_permonth.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php index 443f374346d..911ac7a91b1 100644 --- a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php @@ -134,7 +134,8 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."orderssuppliernbinyear-".$endyear.".png"; - if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersnbinyear-'.$endyear.'.png'; + // default value for customer mode + $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersnbinyear-'.$endyear.'.png'; if ($mode == 'supplier') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstatssupplier&file=orderssuppliernbinyear-'.$endyear.'.png'; $px1 = new DolGraph(); @@ -143,7 +144,8 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes { $px1->SetData($data1); unset($data1); - $i=$startyear;$legend=array(); + $i=$startyear; + $legend=array(); while ($i <= $endyear) { if ($startmonth != 1) @@ -177,7 +179,8 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."orderssupplieramountinyear-".$endyear.".png"; - if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersamountinyear-'.$endyear.'.png'; + // default value for customer mode + $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersamountinyear-'.$endyear.'.png'; if ($mode == 'supplier') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstatssupplier&file=orderssupplieramountinyear-'.$endyear.'.png'; $px2 = new DolGraph(); From dab8aabb16d3064caa2bbb75e1f5c17d6ff20fd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 15:58:30 +0100 Subject: [PATCH 774/980] Update box_graph_invoices_supplier_permonth.php --- htdocs/core/boxes/box_graph_invoices_supplier_permonth.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php index e70da7fe680..6d65ea7f534 100644 --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php @@ -179,7 +179,8 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicessupplieramountinyear-".$year.".png"; - if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesamountinyear-'.$year.'.png'; + // default value for customer mode + $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesamountinyear-'.$year.'.png'; if ($mode == 'supplier') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstatssupplier&file=invoicessupplieramountinyear-'.$year.'.png'; $px2 = new DolGraph(); From d14015e3df581bfb2cf6efc8febe1b8048c2e2e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 15:59:17 +0100 Subject: [PATCH 775/980] Update box_graph_invoices_permonth.php --- htdocs/core/boxes/box_graph_invoices_permonth.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_graph_invoices_permonth.php b/htdocs/core/boxes/box_graph_invoices_permonth.php index 19a923ad4e1..5f951362be7 100644 --- a/htdocs/core/boxes/box_graph_invoices_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_permonth.php @@ -181,7 +181,8 @@ class box_graph_invoices_permonth extends ModeleBoxes $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicesamountinyear-".$endyear.".png"; - if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesamountinyear-'.$endyear.'.png'; + // default value for customer mode + $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesamountinyear-'.$endyear.'.png'; if ($mode == 'supplier') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstatssupplier&file=invoicessupplieramountinyear-'.$endyear.'.png'; $px2 = new DolGraph(); From 18b662e430feecc6ccded8b909b203d60c4d8b98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 16:01:08 +0100 Subject: [PATCH 776/980] Update box_graph_orders_permonth.php --- htdocs/core/boxes/box_graph_orders_permonth.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php index a67c3b94f92..53952bb437b 100644 --- a/htdocs/core/boxes/box_graph_orders_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_permonth.php @@ -180,7 +180,8 @@ class box_graph_orders_permonth extends ModeleBoxes $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."ordersamountinyear-".$endyear.".png"; - if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersamountinyear-'.$endyear.'.png'; + // default value for customer mode + $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersamountinyear-'.$endyear.'.png'; if ($mode == 'supplier') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstatssupplier&file=ordersamountinyear-'.$endyear.'.png'; $px2 = new DolGraph(); From a1b2130247cef3920d3195235c6fb9ee950eb5a5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 16:09:31 +0100 Subject: [PATCH 777/980] Enhance the progress bar of tasks --- htdocs/core/lib/project.lib.php | 18 ++++++++++-------- htdocs/theme/eldy/progress.inc.php | 2 +- htdocs/theme/eldy/theme_vars.inc.php | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index ecadec1b5a8..06cd96ab995 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -670,8 +670,9 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t if ($total_projectlinesa_planned) { $totalAverageDeclaredProgress = round(100 * $total_projectlinesa_declared_if_planned / $total_projectlinesa_planned, 2); $totalCalculatedProgress = round(100 * $total_projectlinesa_spent / $total_projectlinesa_planned, 2); - // this conf is actually hidden, by default we use 1% for "be carefull or warning" - $warningRatio = !empty($conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT) ? (1 + $conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT / 100) : 1.01; + + // this conf is actually hidden, by default we use 10% for "be carefull or warning" + $warningRatio = !empty($conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT) ? (1 + $conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT / 100) : 1.10; // define progress color according to time spend vs workload $progressBarClass = 'progress-bar-info'; @@ -2020,18 +2021,19 @@ function getTaskProgressView($task, $label = true, $progressNumber = true, $hide if ($task->planned_workload){ $progressCalculated = round(100 * doubleval($task->duration_effective) / doubleval($task->planned_workload), 2); - // this conf is actually hidden, by default we use 1% for "be carefull or warning" - $warningRatio = !empty($conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT) ? (1 + $conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT / 100) : 1.01; + // this conf is actually hidden, by default we use 10% for "be carefull or warning" + $warningRatio = !empty($conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT) ? (1 + $conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT / 100) : 1.10; $diffTitle = '
    '.$langs->trans('ProgressDeclared').' : '.$task->progress.($task->progress ? '%' : ''); $diffTitle.= '
    '.$langs->trans('ProgressCalculated').' : '.$progressCalculated.($progressCalculated ? '%' : ''); - if($progressCalculated > doubleval($task->progress)) { + //var_dump($progressCalculated.' '.$warningRatio.' '.$task->progress.' '.doubleval($task->progress * $warningRatio)); + if (doubleval($progressCalculated) > doubleval($task->progress * $warningRatio)) { $progressBarClass = 'progress-bar-danger'; $title = $langs->trans('TheReportedProgressIsLessThanTheCalculatedProgressionByX', abs($task->progress-$progressCalculated).' '.$langs->trans("point")); $diff = ' '.($task->progress-$progressCalculated).'%'; } - elseif($progressCalculated * $warningRatio >= doubleval($task->progress)) { // warning if close at 1% + elseif (doubleval($progressCalculated) > doubleval($task->progress)) { // warning if close at 1% $progressBarClass = 'progress-bar-warning'; $title = $langs->trans('TheReportedProgressIsLessThanTheCalculatedProgressionByX', abs($task->progress-$progressCalculated).' '.$langs->trans("point")); $diff = ' '.($task->progress-$progressCalculated).'%'; @@ -2130,8 +2132,8 @@ function getTaskProgressBadge($task, $label = '', $tooltip = '') if ($task->planned_workload){ $progressCalculated = round(100 * doubleval($task->duration_effective) / doubleval($task->planned_workload), 2); - // this conf is actually hidden, by default we use 1% for "be carefull or warning" - $warningRatio = !empty($conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT) ? (1 + $conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT / 100) : 1.01; + // this conf is actually hidden, by default we use 10% for "be carefull or warning" + $warningRatio = !empty($conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT) ? (1 + $conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT / 100) : 1.10; if($progressCalculated > doubleval($task->progress)){ $badgeClass.= 'badge-danger'; diff --git a/htdocs/theme/eldy/progress.inc.php b/htdocs/theme/eldy/progress.inc.php index c6b48205360..a211c40efb4 100644 --- a/htdocs/theme/eldy/progress.inc.php +++ b/htdocs/theme/eldy/progress.inc.php @@ -167,7 +167,7 @@ if (! defined('ISLOADEDBYSTEELSHEET')) die('Must be call by steelsheet'); ?> } .progress-bar-yellow, .progress-bar-warning { - background-color: #f39c12; + background-color: #bc9526; } .progress-striped .progress-bar-yellow, .progress-striped .progress-bar-warning { diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 386a81f0afd..24e7e6f7d41 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -81,7 +81,7 @@ $toolTipFontColor='#333'; $textSuccess ='#28a745'; $colorblind_deuteranopes_textSuccess ='#37de5d'; $textDanger ='#dc3545'; -$textWarning ='#f39c12'; +$textWarning ='#bc9526'; $colorblind_deuteranopes_textWarning = $textWarning; // currently not tested with a color blind people so use default color From ec05e8e2c5729d7ad8d3a9e7bf296c6ad97b1dab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 16:13:40 +0100 Subject: [PATCH 778/980] $key is overwriting a variable from outer foreach loop --- htdocs/admin/notification.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/notification.php b/htdocs/admin/notification.php index 6d1a5c57cf6..52de58b80b8 100644 --- a/htdocs/admin/notification.php +++ b/htdocs/admin/notification.php @@ -236,7 +236,7 @@ foreach($listofnotifiedevents as $notifiedevent) $s=''; // Do not use type="email" here, we must be able to enter a list of email with , separator. $arrayemail=explode(',', $value); $showwarning=0; - foreach($arrayemail as $key=>$valuedet) + foreach($arrayemail as $keydet => $valuedet) { $valuedet=trim($valuedet); if (! empty($valuedet) && ! isValidEmail($valuedet, 1)) $showwarning++; From 12b6e4fae6f41141a6be9555231f15889674aaff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 16:25:22 +0100 Subject: [PATCH 779/980] Update translation.php Are you sure the usage of print_barre_liste($title... '', 0, '', '', $limit) is correct as it seems to always return null. --- htdocs/admin/translation.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/translation.php b/htdocs/admin/translation.php index 4d234e266e8..967d7826aa0 100644 --- a/htdocs/admin/translation.php +++ b/htdocs/admin/translation.php @@ -458,7 +458,7 @@ if ($mode == 'searchkey') //print 'param='.$param.' $_SERVER["PHP_SELF"]='.$_SERVER["PHP_SELF"].' num='.$num.' page='.$page.' nbtotalofrecords='.$nbtotalofrecords." sortfield=".$sortfield." sortorder=".$sortorder; $title = $langs->trans("TranslationKeySearch"); if ($nbtotalofrecords > 0) $title.=' ('.$nbtotalofrecords.' / '.$nbtotalofrecordswithoutfilters.' - '.$nbtotaloffiles.' '.$langs->trans("Files").')'; - print print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, -1 * $nbtotalofrecords, '', 0, '', '', $limit)."\n"; + print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, -1 * $nbtotalofrecords, '', 0, '', '', $limit)."\n"; print ''; print ''; @@ -466,7 +466,7 @@ if ($mode == 'searchkey') print '
    '; print ''; print ''; - print_liste_field_titre("Language_en_US_es_MX_etc", $_SERVER["PHP_SELF"], 'lang,transkey', '', $param, '', $sortfield, $sortorder).''; + print_liste_field_titre("Language_en_US_es_MX_etc", $_SERVER["PHP_SELF"], 'lang,transkey', '', $param, '', $sortfield, $sortorder); print_liste_field_titre("Key", $_SERVER["PHP_SELF"], 'transkey', '', $param, '', $sortfield, $sortorder); print_liste_field_titre("CurrentTranslationString", $_SERVER["PHP_SELF"], 'transvalue', '', $param, '', $sortfield, $sortorder); //if (! empty($conf->multicompany->enabled) && !$user->entity) print_liste_field_titre("Entity", $_SERVER["PHP_SELF"], 'entity,transkey', '', $param, '', $sortfield, $sortorder); From e98619745ff92a77092da1e0d0eace5b47fac7d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 16:27:30 +0100 Subject: [PATCH 780/980] Update translation.php --- htdocs/admin/translation.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/translation.php b/htdocs/admin/translation.php index 967d7826aa0..52ef490ceae 100644 --- a/htdocs/admin/translation.php +++ b/htdocs/admin/translation.php @@ -458,7 +458,7 @@ if ($mode == 'searchkey') //print 'param='.$param.' $_SERVER["PHP_SELF"]='.$_SERVER["PHP_SELF"].' num='.$num.' page='.$page.' nbtotalofrecords='.$nbtotalofrecords." sortfield=".$sortfield." sortorder=".$sortorder; $title = $langs->trans("TranslationKeySearch"); if ($nbtotalofrecords > 0) $title.=' ('.$nbtotalofrecords.' / '.$nbtotalofrecordswithoutfilters.' - '.$nbtotaloffiles.' '.$langs->trans("Files").')'; - print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, -1 * $nbtotalofrecords, '', 0, '', '', $limit)."\n"; + print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, -1 * $nbtotalofrecords, '', 0, '', '', $limit); print ''; print ''; From bb9b4358755241694b6b3948bd9d4744769be9c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 17:12:07 +0100 Subject: [PATCH 781/980] doxygen for actioncomm class --- htdocs/comm/action/class/actioncomm.class.php | 228 +++++++++++++----- 1 file changed, 162 insertions(+), 66 deletions(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 8432ba786a1..1b926a97453 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -45,43 +45,67 @@ class ActionComm extends CommonObject */ public $table_element = 'actioncomm'; + /** + * @var string Name of id column + */ public $table_rowid = 'id'; /** - * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + * @var string Name of icon for actioncomm object. Filename of icon is object_action.png */ public $picto = 'action'; /** - * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe - * @var int + * @var int 0=No test on entity, 1=Test with field entity, 2=Test with link by societe */ public $ismultientitymanaged = 1; /** - * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user, 2=Same than 1 but accept record if fksoc is empty - * @var integer + * @var integer 0=Default + * 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user + * 2=Same than 1 but accept record if fksoc is empty */ public $restrictiononfksoc = 2; /** - * Id of the event - * @var int + * @var int Id of the event */ public $id; /** - * Id of the event. Use $id as possible - * @var int + * @var int Id of the event. Use $id as possible */ public $ref; - public $type_id; // Id into parent table llx_c_actioncomm (used only if option to use type is set) - public $type_code; // Code into parent table llx_c_actioncomm (used only if option to use type is set). With default setup, should be AC_OTH_AUTO or AC_OTH. + /** + * @var int Id into parent table llx_c_actioncomm (used only if option to use type is set) + */ + public $type_id; + + /** + * @var string Code into parent table llx_c_actioncomm (used only if option to use type is set). With default setup, should be AC_OTH_AUTO or AC_OTH. + */ + public $type_code; + + /** + * @var string Type label + */ public $type_label; - public $type; // Label into parent table llx_c_actioncomm (used only if option to use type is set) - public $type_color; // Color into parent table llx_c_actioncomm (used only if option to use type is set) - public $code; // Free code to identify action. Ie: Agenda trigger add here AC_TRIGGERNAME ('AC_COMPANY_CREATE', 'AC_PROPAL_VALIDATE', ...) + + /** + * @var string Label into parent table llx_c_actioncomm (used only if option to use type is set) + */ + public $type; + + /** + * @var string Color into parent table llx_c_actioncomm (used only if option to use type is set) + */ + public $type_color; + + /** + * @var string Free code to identify action. Ie: Agenda trigger add here AC_TRIGGERNAME ('AC_COMPANY_CREATE', 'AC_PROPAL_VALIDATE', ...) + */ + public $code; /** * @var string Agenda event label @@ -89,72 +113,56 @@ class ActionComm extends CommonObject public $label; /** - * Date creation record (datec) - * - * @var integer + * @var integer Date creation record (datec) */ public $datec; /** - * Date end record (datef) - * - * @var integer + * @var integer Date end record (datef) */ public $datef; /** - * Duration (duree) - * - * @var integer + * @var integer Duration (duree) */ public $duree; /** - * Date modification record (tms) - * - * @var integer + * @var integer Date modification record (tms) */ public $datem; /** - * Object user that create action - * @var User + * @var User Object user that create action * @deprecated * @see $authorid */ public $author; /** - * Object user that modified action - * @var User + * @var User Object user that modified action * @deprecated * @see $usermodid */ public $usermod; /** - * Id user that create action - * @var int + * @var int Id user that create action */ public $authorid; /** - * Id user that modified action - * @var int + * @var int Id user that modified action */ public $usermodid; /** - * Date action start (datep) - * - * @var integer + * @var integer Date action start (datep) */ public $datep; /** - * Date action end (datep2) - * - * @var integer + * @var integer Date action end (datep2) */ public $datep2; @@ -163,90 +171,178 @@ class ActionComm extends CommonObject * @deprecated */ public $durationp = -1; - public $fulldayevent = 0; // 1=Event on full day /** - * Milestone - * @var int + * @var int 1=Event on full day + */ + public $fulldayevent = 0; + + /** + * @var int Milestone * @deprecated Milestone is already event with end date = start date */ public $punctual = 1; - public $percentage; // Percentage - public $location; // Location - public $transparency; // Transparency (ical standard). Used to say if people assigned to event are busy or not by event. 0=available, 1=busy, 2=busy (refused events) - public $priority; // Small int (0 By default) + /** + * @var integer Percentage + */ + public $percentage; - public $userassigned = array(); // Array of user ids - public $userownerid; // Id of user owner = fk_user_action into table - public $userdoneid; // Id of user done (deprecated) + /** + * @var string Location + */ + public $location; - public $socpeopleassigned = array(); // Array of contact ids + /** + * @var int Transparency (ical standard). Used to say if people assigned to event are busy or not by event. 0=available, 1=busy, 2=busy (refused events) + */ + public $transparency; - public $otherassigned = array(); // Array of other contact emails (not user, not contact) + /** + * @var int (0 By default) + */ + public $priority; + + /** + * @var int[] Array of user ids + */ + public $userassigned = array(); + + /** + * @var int Id of user owner = fk_user_action into table + */ + public $userownerid; + + /** + * @var int Id of user done (deprecated) + * @deprecated + */ + public $userdoneid; + + /** + * @var int[] Array of contact ids + */ + public $socpeopleassigned = array(); + + /** + * @var int[] Array of other contact emails (not user, not contact) + */ + public $otherassigned = array(); - /** - * Object user of owner - * @var User + /** + * @var User Object user of owner * @deprecated * @see userownerid */ public $usertodo; /** - * Object user that did action - * @var User + * @var User Object user that did action * @deprecated * @see userdoneid */ public $userdone; + /** + * @var int thirdparty id linked to action + */ public $socid; + + /** + * @var int socpeople id linked to action + */ public $contactid; /** - * Company linked to action (optional) - * @var Societe|null + * @var Societe|null Company linked to action (optional) * @deprecated * @see socid */ public $societe; /** - * Contact linked to action (optional) - * @var Contact|null + * @var Contact|null Contact linked to action (optional) * @deprecated * @see contactid */ public $contact; // Properties for links to other objects + /** + * @var int Id of linked object + */ public $fk_element; // Id of record - public $elementid; // Id of record alternative for API - public $elementtype; // Type of record. This if property ->element of object linked to. - // Ical + /** + * @var int Id of record alternative for API + */ + public $elementid; + + /** + * @var string Type of record. This if property ->element of object linked to. + */ + public $elementtype; + + /** + * @var string Ical name + */ public $icalname; + + /** + * @var string Ical color + */ public $icalcolor; + /** + * @var array Actions + */ public $actions=array(); - // Fields for emails + /** + * @var string Email msgid + */ public $email_msgid; + + /** + * @var string Email from + */ public $email_from; + + /** + * @var string Email sender + */ public $email_sender; + + /** + * @var string Email to + */ public $email_to; + + /** + * @var string Email tocc + */ public $email_tocc; + /** + * @var string Email tobcc + */ public $email_tobcc; + + /** + * @var string Email subject + */ public $email_subject; + + /** + * @var string Email errors to + */ public $errors_to; /** * Constructor * - * @param DoliDB $db Database handler + * @param DoliDB $db Database handler */ public function __construct(DoliDB $db) { From 5314ff70f5f0d1b75367c58b58e0406efb929f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 17:26:53 +0100 Subject: [PATCH 782/980] Update index.php in class ref and rowid are the same, lib is deprecated and is label --- htdocs/compta/index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index 1453491fd11..fb23929f7a8 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -661,8 +661,8 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) $obj = $db->fetch_object($resql); $chargestatic->id=$obj->rowid; - $chargestatic->ref=$obj->libelle; - $chargestatic->lib=$obj->libelle; + $chargestatic->ref=$obj->rowid; + $chargestatic->label=$obj->libelle; $chargestatic->paye=$obj->paye; print ''; From 61873aa1a89107b4073178d014d80e8ee9414e6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 17:29:21 +0100 Subject: [PATCH 783/980] Update list.php --- htdocs/compta/sociales/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/sociales/list.php b/htdocs/compta/sociales/list.php index 56493f3bf7c..c2d5c94d1a3 100644 --- a/htdocs/compta/sociales/list.php +++ b/htdocs/compta/sociales/list.php @@ -261,7 +261,7 @@ if ($resql) $chargesociale_static->id=$obj->id; $chargesociale_static->ref=$obj->id; - $chargesociale_static->lib=$obj->libelle; + $chargesociale_static->label=$obj->libelle; $chargesociale_static->type_libelle=$obj->type_lib; print ''; From 38b86d4bde713af8eeccf5a348189fc52ba46dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 17:30:49 +0100 Subject: [PATCH 784/980] Update payments.php --- htdocs/compta/sociales/payments.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/sociales/payments.php b/htdocs/compta/sociales/payments.php index caf11a6ea3b..461cf6d8330 100644 --- a/htdocs/compta/sociales/payments.php +++ b/htdocs/compta/sociales/payments.php @@ -176,8 +176,8 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) // Label print ''; // Type From 6dd8e7152cd97e2d4765944d68b95e0055476a77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 17:31:34 +0100 Subject: [PATCH 785/980] Update index.php --- htdocs/compta/charges/index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php index 01cda8871b5..04c2cdd76d1 100644 --- a/htdocs/compta/charges/index.php +++ b/htdocs/compta/charges/index.php @@ -185,8 +185,8 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) // Label print ''; // Type From 8b98df296fd7c3cf64e6270fddfe23d1f6238f95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 17:36:11 +0100 Subject: [PATCH 786/980] Update info.php --- htdocs/compta/sociales/info.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/sociales/info.php b/htdocs/compta/sociales/info.php index 3d59e2b229c..7fedbbba700 100644 --- a/htdocs/compta/sociales/info.php +++ b/htdocs/compta/sociales/info.php @@ -79,8 +79,8 @@ dol_fiche_head($head, 'info', $langs->trans("SocialContribution"), -1, 'bill'); $morehtmlref='
    '; // Label of social contribution -$morehtmlref.=$form->editfieldkey("Label", 'lib', $object->lib, $object, $user->rights->tax->charges->creer, 'string', '', 0, 1); -$morehtmlref.=$form->editfieldval("Label", 'lib', $object->lib, $object, $user->rights->tax->charges->creer, 'string', '', null, null, '', 1); +$morehtmlref.=$form->editfieldkey("Label", 'lib', $object->label, $object, $user->rights->tax->charges->creer, 'string', '', 0, 1); +$morehtmlref.=$form->editfieldval("Label", 'lib', $object->label, $object, $user->rights->tax->charges->creer, 'string', '', null, null, '', 1); // Project if (! empty($conf->projet->enabled)) { From d11fc24e3b90762c176bdc5e5b052baf845ac4c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 17:46:00 +0100 Subject: [PATCH 787/980] Update index.php --- htdocs/mrp/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index 742d94109e2..bd342e06b3e 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -236,7 +236,7 @@ else print '
    '; $parameters = array('type' => $type, 'user' => $user); -$reshook = $hookmanager->executeHooks('dashboardMRP', $parameters, null); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('dashboardMRP', $parameters, ''); // Note that $action and $object may have been modified by hook // End of page llxFooter(); From 2af23aa65828617af5c60e3fdb0df17d557846c3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 17:54:17 +0100 Subject: [PATCH 788/980] Enhance modulebuilder --- htdocs/core/lib/modulebuilder.lib.php | 14 ++- htdocs/langs/en_US/modulebuilder.lang | 6 + htdocs/modulebuilder/index.php | 104 ++++++++++++++---- .../template/class/myobject.class.php | 12 +- .../doc/doc_generic_myobject_odt.modules.php | 0 .../mod_myobject_advanced.php | 0 .../mod_myobject_standard.php | 0 .../modules_myobject.php | 0 .../tpl/linkedobjectblock_myobject.tpl.php | 58 ++++++++++ .../template/core/tpl/mytemplate.tpl.php | 35 ------ 10 files changed, 159 insertions(+), 70 deletions(-) rename htdocs/modulebuilder/template/core/modules/{myobject => mymodule}/doc/doc_generic_myobject_odt.modules.php (100%) rename htdocs/modulebuilder/template/core/modules/{myobject => mymodule}/mod_myobject_advanced.php (100%) rename htdocs/modulebuilder/template/core/modules/{myobject => mymodule}/mod_myobject_standard.php (100%) rename htdocs/modulebuilder/template/core/modules/{myobject => mymodule}/modules_myobject.php (100%) create mode 100644 htdocs/modulebuilder/template/core/tpl/linkedobjectblock_myobject.tpl.php delete mode 100644 htdocs/modulebuilder/template/core/tpl/mytemplate.tpl.php diff --git a/htdocs/core/lib/modulebuilder.lib.php b/htdocs/core/lib/modulebuilder.lib.php index e6f36b25d47..4e5cbb92c02 100644 --- a/htdocs/core/lib/modulebuilder.lib.php +++ b/htdocs/core/lib/modulebuilder.lib.php @@ -128,17 +128,19 @@ function rebuildObjectClass($destdir, $module, $objectname, $newmask, $readdir = $i++; $texttoinsert.= "\t\t'".$key."' => array('type'=>'".$val['type']."', 'label'=>'".$val['label']."',"; $texttoinsert.= " 'enabled'=>".($val['enabled']!=''?$val['enabled']:1).","; - $texttoinsert.= " 'visible'=>".($val['visible']!=''?$val['visible']:-1).","; $texttoinsert.= " 'position'=>".($val['position']!=''?$val['position']:50).","; - $texttoinsert.= " 'notnull'=>".($val['notnull']!=''?$val['notnull']:-1).","; + $texttoinsert.= " 'notnull'=>".(empty($val['notnull'])?0:$val['notnull']).","; + $texttoinsert.= " 'visible'=>".($val['visible']!=''?$val['visible']:-1).","; + if ($val['noteditable']) $texttoinsert.= " 'noteditable'=>'".$val['noteditable']."',"; if ($val['default']) $texttoinsert.= " 'default'=>'".$val['default']."',"; if ($val['index']) $texttoinsert.= " 'index'=>".$val['index'].","; + if ($val['foreignkey']) $texttoinsert.= " 'foreignkey'=>'".$val['foreignkey']."',"; if ($val['searchall']) $texttoinsert.= " 'searchall'=>".$val['searchall'].","; if ($val['isameasure']) $texttoinsert.= " 'isameasure'=>'".$val['isameasure']."',"; - if ($val['foreignkey']) $texttoinsert.= " 'foreignkey'=>'".$val['foreignkey']."',"; + if ($val['css']) $texttoinsert.= " 'css'=>'".$val['css']."',"; if ($val['help']) $texttoinsert.= " 'help'=>\"".preg_replace('/"/', '', $val['help'])."\","; - if ($val['comment']) $texttoinsert.= " 'comment'=>\"".preg_replace('/"/', '', $val['comment'])."\","; if ($val['showoncombobox']) $texttoinsert.= " 'showoncombobox'=>'".$val['showoncombobox']."',"; + if ($val['disabled']) $texttoinsert.= " 'disabled'=>'".$val['disabled']."',"; if ($val['arrayofkeyval']) { $texttoinsert.= " 'arrayofkeyval'=>array("; @@ -149,8 +151,10 @@ function rebuildObjectClass($destdir, $module, $objectname, $newmask, $readdir = $texttoinsert.="'".$key2."'=>'".$val2."'"; $i++; } - $texttoinsert.= ")"; + $texttoinsert.= "),"; } + if ($val['comment']) $texttoinsert.= " 'comment'=>\"".preg_replace('/"/', '', $val['comment'])."\""; + $texttoinsert.= "),\n"; } } diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang index 59d16eba2fc..4a0e0daf5c1 100644 --- a/htdocs/langs/en_US/modulebuilder.lang +++ b/htdocs/langs/en_US/modulebuilder.lang @@ -129,3 +129,9 @@ IncludeRefGeneration=The reference of object must be generated automatically IncludeRefGenerationHelp=Check this if you want to include code to manage the generation automatically of the reference IncludeDocGeneration=I want to generate some documents from the object IncludeDocGenerationHelp=If you check this, some code will be generated to add a "Generate document" box on the record. +ShowOnCombobox=Show value into combobox +KeyForTooltip=Key for tooltip +CSSClass=CSS Class +NotEditable=Not editable +ForeignKey=Foreign key +TypeOfFieldsHelp=Type of fields:
    varchar(99), double(24,8), real, text, html, datetime, timestamp, integer, integer:ClassName:relativepath/to/classfile.class.php:1 (1 means we add a + button after the combo to create the record) \ No newline at end of file diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index a6df5f9db43..7fffdfcd50d 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -810,18 +810,23 @@ if ($dirins && $action == 'initobject' && $module && $objectname) //'class/api_mymodule.class.php'=>'class/api_'.strtolower($module).'.class.php', ); - if (GETPOST('includerefgeneration', 'int')) + if (GETPOST('includerefgeneration', 'aZ09')) { + dol_mkdir($destdir.'/core/modules/'.strtolower($module)); + $filetogenerate += array( - 'core/modules/myobject/mod_myobject_advanced.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_advanced.php', - 'core/modules/myobject/mod_myobject_standard.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_standard.php', - 'core/modules/myobject/modules_myobject.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_advanced.php', + 'core/modules/mymodule/mod_myobject_advanced.php'=>'core/modules/'.strtolower($module).'/mod_'.strtolower($objectname).'_advanced.php', + 'core/modules/mymodule/mod_myobject_standard.php'=>'core/modules/'.strtolower($module).'/mod_'.strtolower($objectname).'_standard.php', + 'core/modules/mymodule/modules_myobject.php'=>'core/modules/'.strtolower($module).'/modules_'.strtolower($objectname).'.php', ); } - if (GETPOST('includedocgeneration', 'int')) + if (GETPOST('includedocgeneration', 'aZ09')) { + dol_mkdir($destdir.'/core/modules/'.strtolower($module)); + dol_mkdir($destdir.'/core/modules/'.strtolower($module).'/doc'); + $filetogenerate += array( - 'core/modules/myobject/doc/doc_generic_myobject_odt.modules.php'=>'core/modules/'.strtolower($objectname).'/doc/doc_generic_'.strtolower($objectname).'_odt.modules.php' + 'core/modules/mymodule/doc/doc_generic_myobject_odt.modules.php'=>'core/modules/'.strtolower($module).'/doc/doc_generic_'.strtolower($objectname).'_odt.modules.php' ); } @@ -843,8 +848,21 @@ if ($dirins && $action == 'initobject' && $module && $objectname) } } - //if (! $error) // If there is error copying 1 file, we still have to make the replacement - //{ + // Edit the class 'class/'.strtolower($objectname).'.class.php' + if (GETPOST('includerefgeneration', 'aZ09')) { + // Replace 'visible'=>1, 'noteditable'=>0, 'default'=>'' + $arrayreplacement = array('/\'visible\'=>1,\s*\'noteditable\'=>0,\s*\'default\'=>\'\'/' => "'visible'=>4, 'noteditable'=>1, 'default'=>'(PROV)'"); + //var_dump($arrayreplacement);exit; + //var_dump($destdir.'/class/'.strtolower($objectname).'.class.php');exit; + dolReplaceInFile($destdir.'/class/'.strtolower($objectname).'.class.php', $arrayreplacement, '', 0, 0, 1); + } + + // Edit the setup file and the card page + if (GETPOST('includedocgeneration', 'aZ09')) { + // TODO + // dolReplaceInFile(); + } + // Scan for object class files $listofobject = dol_dir_list($destdir.'/class', 'files', 0, '\.class\.php$'); @@ -917,15 +935,12 @@ if ($dirins && $action == 'initobject' && $module && $objectname) // Add module descriptor to list of files to replace "MyObject' string with real name of object. $filetogenerate[]='core/modules/mod'.$module.'.class.php'; - - // TODO } - //} } if (! $error) { - // Edit PHP files + // Edit PHP files to make replacement foreach($filetogenerate as $destfile) { $phpfileval['fullname'] = $destdir.'/'.$destfile; @@ -970,6 +985,7 @@ if ($dirins && $action == 'initobject' && $module && $objectname) if (! $error) { setEventMessages($langs->trans('FilesForObjectInitialized', $objectname), null); + $tabobj = $objectname; } } @@ -1198,14 +1214,15 @@ if ($dirins && $action == 'confirm_deleteobject' && $objectname) 'sql/llx_mymodule_myobject.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.sql', 'sql/llx_mymodule_myobject_extrafields.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'_extrafields.sql', 'sql/llx_mymodule_myobject.key.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.key.sql', + 'sql/llx_mymodule_myobject_extrafields.key.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'_extrafields.key.sql', 'scripts/myobject.php'=>'scripts/'.strtolower($objectname).'.php', 'img/object_myobject.png'=>'img/object_'.strtolower($objectname).'.png', 'class/myobject.class.php'=>'class/'.strtolower($objectname).'.class.php', 'class/api_myobject.class.php'=>'class/api_'.strtolower($module).'.class.php', - 'core/modules/myobject/mod_myobject_advanced.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_advanced.php', - 'core/modules/myobject/mod_myobject_standard.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_standard.php', - 'core/modules/myobject/modules_myobject.php'=>'core/modules/'.strtolower($objectname).'/mod_'.strtolower($objectname).'_advanced.php', - 'core/modules/myobject/doc/doc_generic_myobject_odt.modules.php'=>'core/modules/'.strtolower($objectname).'/doc/doc_generic_'.strtolower($objectname).'_odt.modules.php' + 'core/modules/mymodule/mod_myobject_advanced.php'=>'core/modules/'.strtolower($module).'/mod_'.strtolower($objectname).'_advanced.php', + 'core/modules/mymodule/mod_myobject_standard.php'=>'core/modules/'.strtolower($module).'/mod_'.strtolower($objectname).'_standard.php', + 'core/modules/mymodule/modules_myobject.php'=>'core/modules/'.strtolower($module).'/modules_'.strtolower($objectname).'.php', + 'core/modules/mymodule/doc/doc_generic_myobject_odt.modules.php'=>'core/modules/'.strtolower($module).'/doc/doc_generic_'.strtolower($objectname).'_odt.modules.php' ); $resultko = 0; @@ -2460,7 +2477,7 @@ elseif (! empty($module)) print load_fiche_titre($langs->trans("ObjectProperties"), '', ''); - + print ''."\n"; print '
    '; print '
    '; $socialcontrib->id=$obj->rowid; - $socialcontrib->ref=$obj->libelle; - $socialcontrib->lib=$obj->libelle; + $socialcontrib->ref=$obj->rowid; + $socialcontrib->label=$obj->libelle; print $socialcontrib->getNomUrl(1, '20'); print ''; $socialcontrib->id=$obj->rowid; - $socialcontrib->ref=$obj->libelle; - $socialcontrib->lib=$obj->libelle; + $socialcontrib->ref=$obj->rowid; + $socialcontrib->label=$obj->libelle; print $socialcontrib->getNomUrl(1, '20'); print '
    '; print ''; @@ -2470,16 +2487,22 @@ elseif (! empty($module)) print ''; - print ''; print ''; print ''; print ''; print ''; + print ''; print ''; print ''; print ''; - print ''; + print ''; print ''; + print ''; + print ''; + print ''; + print ''; + //print ''; print ''; print ''; print ''; @@ -2500,11 +2523,17 @@ elseif (! empty($module)) print ''; print ''; print ''; + print ''; print ''; print ''; print ''; - print ''; + print ''; print ''; + print ''; + print ''; + print ''; + print ''; + //print ''; print ''; print ''; @@ -2548,7 +2583,7 @@ elseif (! empty($module)) print ''; - print ''; print ''; + print ''; print ''; @@ -2575,16 +2613,34 @@ elseif (! empty($module)) print $propvisible?$propvisible:''; print ''; print ''; print ''; + print ''; + print ''; + print ''; + print ''; + /*print '';*/ print ''; print ''; print ''; diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 43488429807..7d3de98e4df 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -68,21 +68,21 @@ class MyObject extends CommonObject * 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. + * '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). 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 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. * 'showoncombobox' if value of the field must be visible into the label of the combobox that list record - * 'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel") * '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") + * 'comment' is not used. You can store here any text of your choice. It is not used by application. */ // BEGIN MODULEBUILDER PROPERTIES @@ -91,13 +91,13 @@ class MyObject extends CommonObject */ public $fields=array( 'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'noteditable'=>1, 'notnull'=> 1, 'index'=>1, 'position'=>1, 'comment'=>'Id'), - 'ref' =>array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'noteditable'=>0, 'notnull'=> 1, 'default'=>'(PROV)', 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'), + 'ref' =>array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'noteditable'=>0, 'default'=>'', 'notnull'=> 1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'), 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=> 1, 'default'=>1, 'index'=>1, 'position'=>20), 'label' =>array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'searchall'=>1, 'css'=>'minwidth200', 'help'=>'Help text', 'showoncombobox'=>1), 'amount' =>array('type'=>'double(24,8)', 'label'=>'Amount', 'enabled'=>1, 'visible'=>1, 'default'=>'null', 'position'=>40, 'searchall'=>0, 'isameasure'=>1, 'help'=>'Help text for amount'), 'qty' =>array('type'=>'real', 'label'=>'Qty', 'enabled'=>1, 'visible'=>1, 'default'=>'0', 'position'=>45, 'searchall'=>0, 'isameasure'=>1, 'help'=>'Help text for quantity', 'css'=>'maxwidth75imp'), 'fk_soc' =>array('type'=>'integer:Societe:societe/class/societe.class.php:1', 'label'=>'ThirdParty', 'visible'=> 1, 'enabled'=>1, 'position'=>50, 'notnull'=>-1, 'index'=>1, 'help'=>'LinkToThirparty'), - 'fk_project' =>array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'enabled'=>1, 'visible'=>-1, 'position'=>52, 'notnull'=>-1, 'index'=>1,), + 'fk_project' =>array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'enabled'=>1, 'visible'=>-1, 'position'=>52, 'notnull'=>-1, 'index'=>1), 'description' =>array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>3, 'position'=>60), 'note_public' =>array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>61), 'note_private' =>array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>62), diff --git a/htdocs/modulebuilder/template/core/modules/myobject/doc/doc_generic_myobject_odt.modules.php b/htdocs/modulebuilder/template/core/modules/mymodule/doc/doc_generic_myobject_odt.modules.php similarity index 100% rename from htdocs/modulebuilder/template/core/modules/myobject/doc/doc_generic_myobject_odt.modules.php rename to htdocs/modulebuilder/template/core/modules/mymodule/doc/doc_generic_myobject_odt.modules.php diff --git a/htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_advanced.php b/htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_advanced.php similarity index 100% rename from htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_advanced.php rename to htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_advanced.php diff --git a/htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_standard.php b/htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_standard.php similarity index 100% rename from htdocs/modulebuilder/template/core/modules/myobject/mod_myobject_standard.php rename to htdocs/modulebuilder/template/core/modules/mymodule/mod_myobject_standard.php diff --git a/htdocs/modulebuilder/template/core/modules/myobject/modules_myobject.php b/htdocs/modulebuilder/template/core/modules/mymodule/modules_myobject.php similarity index 100% rename from htdocs/modulebuilder/template/core/modules/myobject/modules_myobject.php rename to htdocs/modulebuilder/template/core/modules/mymodule/modules_myobject.php diff --git a/htdocs/modulebuilder/template/core/tpl/linkedobjectblock_myobject.tpl.php b/htdocs/modulebuilder/template/core/tpl/linkedobjectblock_myobject.tpl.php new file mode 100644 index 00000000000..c0b2e073ad0 --- /dev/null +++ b/htdocs/modulebuilder/template/core/tpl/linkedobjectblock_myobject.tpl.php @@ -0,0 +1,58 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +// Protection to avoid direct call of template +if (empty($conf) || ! is_object($conf)) +{ + print "Error, template page can't be called as URL"; + exit; +} + + +print "\n"; + + +global $user; +global $noMoreLinkedObjectBlockAfter; + +$langs = $GLOBALS['langs']; +$linkedObjectBlock = $GLOBALS['linkedObjectBlock']; + +// Load translation files required by the page +$langs->load("mymodule"); + +$total=0; $ilink=0; +foreach($linkedObjectBlock as $key => $objectlink) +{ + $ilink++; + + $trclass='oddeven'; + if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; + ?> + + + + + + + + + + \n"; diff --git a/htdocs/modulebuilder/template/core/tpl/mytemplate.tpl.php b/htdocs/modulebuilder/template/core/tpl/mytemplate.tpl.php deleted file mode 100644 index 8e871e7f416..00000000000 --- a/htdocs/modulebuilder/template/core/tpl/mytemplate.tpl.php +++ /dev/null @@ -1,35 +0,0 @@ -. - */ - -/** - * \file core/tpl/mytemplate.tpl.php - * \ingroup mymodule - * \brief Example template. - * - * Put detailed description here. - */ - -// Protection to avoid direct call of template -if (empty($conf) || ! is_object($conf)) -{ - print "Error, template page can't be called as URL"; - exit; -} - - -/** Your code here. */ -echo "Hello world!"; From f30c8eb6e894f41e42ff1fc9ac5b9716f664db64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 17:54:22 +0100 Subject: [PATCH 789/980] Update index.php Fatal error: Uncaught Error: Cannot pass parameter 3 by reference in /home/fred/netlogic/dolibarr/htdocs/mrp/index.php on line 239 --- htdocs/mrp/index.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index bd342e06b3e..d4b63515157 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -236,7 +236,8 @@ else print ''; $parameters = array('type' => $type, 'user' => $user); -$reshook = $hookmanager->executeHooks('dashboardMRP', $parameters, ''); // Note that $action and $object may have been modified by hook +$object = new stdClass(); +$reshook = $hookmanager->executeHooks('dashboardMRP', $parameters, $object); // Note that $action and $object may have been modified by hook // End of page llxFooter(); From 433b45537669a4b08fd9036ebc6c23ef761e531c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 18:29:02 +0100 Subject: [PATCH 790/980] Update index.php --- htdocs/mrp/index.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index d4b63515157..a46fc868a20 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -236,8 +236,7 @@ else print ''; $parameters = array('type' => $type, 'user' => $user); -$object = new stdClass(); -$reshook = $hookmanager->executeHooks('dashboardMRP', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('dashboardMRP', $parameters); // End of page llxFooter(); From 012c5ef0c4c47b24e7a0107c086449a9f6005d9e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 18:35:48 +0100 Subject: [PATCH 791/980] Can use substitution variables into filter of fields link --- htdocs/core/class/commonobject.class.php | 4 ++-- htdocs/core/class/html.form.class.php | 6 +++++- htdocs/langs/en_US/modulebuilder.lang | 2 +- htdocs/modulebuilder/template/myobject_list.php | 13 +++++++------ 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 7707be211f3..deb27817be9 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5624,7 +5624,7 @@ abstract class CommonObject { $morecss = 'minwidth100imp'; } - elseif ($type == 'datetime') + elseif ($type == 'datetime' || $type == 'link') { $morecss = 'minwidth200imp'; } @@ -6093,7 +6093,7 @@ abstract class CommonObject $param_list_array = explode(':', $param_list[0]); $showempty=(($required && $default != '')?0:1); - $out=$form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty, '', '', '', '', 0, empty($val['disabled'])?0:1); + $out=$form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty, '', '', $morecss, '', 0, empty($val['disabled'])?0:1); if (! empty($param_list_array[2])) // If we set to add a create button { diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 72c1e589233..4be775ea038 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5865,7 +5865,11 @@ class Form if ($classname && class_exists($classname)) { $objecttmp = new $classname($this->db); - $objecttmp->filter = $filter; + // Make some replacement + $objecttmp->filter = str_replace( + array('__ENTITY__', '__USER_ID__'), + array($conf->entity, $user->id), + $filter); } } if (! is_object($objecttmp)) diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang index 4a0e0daf5c1..d26f58fd00e 100644 --- a/htdocs/langs/en_US/modulebuilder.lang +++ b/htdocs/langs/en_US/modulebuilder.lang @@ -134,4 +134,4 @@ KeyForTooltip=Key for tooltip CSSClass=CSS Class NotEditable=Not editable ForeignKey=Foreign key -TypeOfFieldsHelp=Type of fields:
    varchar(99), double(24,8), real, text, html, datetime, timestamp, integer, integer:ClassName:relativepath/to/classfile.class.php:1 (1 means we add a + button after the combo to create the record) \ No newline at end of file +TypeOfFieldsHelp=Type of fields:
    varchar(99), double(24,8), real, text, html, datetime, timestamp, integer, integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]] ('1' means we add a + button after the combo to create the record, 'filter' can be 'status=1;entity=$conf->entity' for example) \ No newline at end of file diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 525fa879562..bf9b73e0f53 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -153,6 +153,9 @@ if (is_array($extrafields->attributes[$object->table_element]['label']) && count $object->fields = dol_sort_array($object->fields, 'position'); $arrayfields = dol_sort_array($arrayfields, 'position'); +$permtoread = $user->rights->mymodule->myobject->read; +$permtowrite = $user->rights->mymodule->myobject->write; +$permtodelete = $user->rights->mymodule->myobject->delete; /* @@ -190,8 +193,6 @@ if (empty($reshook)) // Mass actions $objectclass='MyObject'; $objectlabel='MyObject'; - $permtoread = $user->rights->mymodule->read; - $permtodelete = $user->rights->mymodule->delete; $uploaddir = $conf->mymodule->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } @@ -346,7 +347,7 @@ $arrayofmassactions = array( //'builddoc'=>$langs->trans("PDFMerge"), //'presend'=>$langs->trans("SendByMail"), ); -if ($user->rights->mymodule->delete) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); +if ($permtodelete) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array(); $massactionbutton=$form->selectMassAction('', $arrayofmassactions); @@ -360,7 +361,7 @@ print ''; print ''; print ''; -$newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', dol_buildpath('/mymodule/myobject_card.php', 1).'?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $user->rights->mymodule->write); +$newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', dol_buildpath('/mymodule/myobject_card.php', 1).'?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permtowrite); print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_companies', 0, $newcardbutton, '', $limit); @@ -593,8 +594,8 @@ if (in_array('builddoc', $arrayofmassactions) && ($nbtotalofrecords === '' || $n $urlsource.=str_replace('&', '&', $param); $filedir=$diroutputmassaction; - $genallowed=$user->rights->mymodule->read; - $delallowed=$user->rights->mymodule->write; + $genallowed=$permtoread; + $delallowed=$permtowrite; print $formfile->showdocuments('massfilesarea_mymodule', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty); } From 40a9326d511a1189ec1426585cba5d6c6de7a197 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 18:42:58 +0100 Subject: [PATCH 792/980] $type is undefined --- htdocs/mrp/index.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index a46fc868a20..0a7a77c48f8 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -235,7 +235,10 @@ else print ''; -$parameters = array('type' => $type, 'user' => $user); +$parameters = array( + //'type' => $type, + 'user' => $user, +); $reshook = $hookmanager->executeHooks('dashboardMRP', $parameters); // End of page From f74833cfe11d916bfe162359e27d416d533144cd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 18:44:32 +0100 Subject: [PATCH 793/980] Make modulebuilder more compatible with multicompany --- htdocs/core/class/html.form.class.php | 6 ++++-- htdocs/modulebuilder/template/class/myobject.class.php | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 4be775ea038..6790ec43cae 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5866,9 +5866,10 @@ class Form { $objecttmp = new $classname($this->db); // Make some replacement + $sharedentities = getEntity(strtolower($classname)); $objecttmp->filter = str_replace( - array('__ENTITY__', '__USER_ID__'), - array($conf->entity, $user->id), + array('__ENTITY__', '__SHARED_ENTITIES__', '__USER_ID__'), + array($conf->entity, $sharedentities, $user->id), $filter); } } @@ -5878,6 +5879,7 @@ class Form return 'Error bad setup of type for field '.join(',', $InfoFieldList); } + //var_dump($objecttmp->filter); $prefixforautocompletemode=$objecttmp->element; if ($prefixforautocompletemode == 'societe') $prefixforautocompletemode='company'; $confkeyforautocompletemode=strtoupper($prefixforautocompletemode).'_USE_SEARCH_TO_SELECT'; // For example COMPANY_USE_SEARCH_TO_SELECT diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 7d3de98e4df..4cefbc159a0 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -96,7 +96,7 @@ class MyObject extends CommonObject 'label' =>array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'searchall'=>1, 'css'=>'minwidth200', 'help'=>'Help text', 'showoncombobox'=>1), 'amount' =>array('type'=>'double(24,8)', 'label'=>'Amount', 'enabled'=>1, 'visible'=>1, 'default'=>'null', 'position'=>40, 'searchall'=>0, 'isameasure'=>1, 'help'=>'Help text for amount'), 'qty' =>array('type'=>'real', 'label'=>'Qty', 'enabled'=>1, 'visible'=>1, 'default'=>'0', 'position'=>45, 'searchall'=>0, 'isameasure'=>1, 'help'=>'Help text for quantity', 'css'=>'maxwidth75imp'), - 'fk_soc' =>array('type'=>'integer:Societe:societe/class/societe.class.php:1', 'label'=>'ThirdParty', 'visible'=> 1, 'enabled'=>1, 'position'=>50, 'notnull'=>-1, 'index'=>1, 'help'=>'LinkToThirparty'), + 'fk_soc' =>array('type'=>'integer:Societe:societe/class/societe.class.php:1:status=1 AND entity IN (__SHARED_ENTITIES__)', 'label'=>'ThirdParty', 'visible'=> 1, 'enabled'=>1, 'position'=>50, 'notnull'=>-1, 'index'=>1, 'help'=>'LinkToThirparty'), 'fk_project' =>array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'enabled'=>1, 'visible'=>-1, 'position'=>52, 'notnull'=>-1, 'index'=>1), 'description' =>array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>3, 'position'=>60), 'note_public' =>array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>61), From a95a10b8f03c6dd9e724c42091537353f0197f8e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 18:45:44 +0100 Subject: [PATCH 794/980] Update doc --- htdocs/langs/en_US/modulebuilder.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang index d26f58fd00e..d14aa8a3c71 100644 --- a/htdocs/langs/en_US/modulebuilder.lang +++ b/htdocs/langs/en_US/modulebuilder.lang @@ -134,4 +134,4 @@ KeyForTooltip=Key for tooltip CSSClass=CSS Class NotEditable=Not editable ForeignKey=Foreign key -TypeOfFieldsHelp=Type of fields:
    varchar(99), double(24,8), real, text, html, datetime, timestamp, integer, integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]] ('1' means we add a + button after the combo to create the record, 'filter' can be 'status=1;entity=$conf->entity' for example) \ No newline at end of file +TypeOfFieldsHelp=Type of fields:
    varchar(99), double(24,8), real, text, html, datetime, timestamp, integer, integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]] ('1' means we add a + button after the combo to create the record, 'filter' can be 'status=1 AND fk_user = __USER_ID AND entity IN (__SHARED_ENTITIES__)' for example) \ No newline at end of file From 6f7788568676a219e60729650b1408e0aaf9389e Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 1 Nov 2019 20:26:39 +0100 Subject: [PATCH 795/980] Update api_products.class.php --- htdocs/product/class/api_products.class.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php index 5b179d487a9..e7046e07f43 100644 --- a/htdocs/product/class/api_products.class.php +++ b/htdocs/product/class/api_products.class.php @@ -445,16 +445,18 @@ class Products extends DolibarrApi //'multiprices_default_vat_code'=>$this->product->multiprices_default_vat_code ); } + /** * Get prices per customer for a product * * @param int $id ID of product + * @param string $thirdparty_id Thirdparty id to filter orders of (example '1') {@pattern /^[0-9,]*$/i} * * @return mixed * * @url GET {id}/selling_multiprices/per_customer */ - public function getCustomerPricesPerCustomer($id) + public function getCustomerPricesPerCustomer($id, $thirdparty_id = '') { global $conf; @@ -470,15 +472,18 @@ class Products extends DolibarrApi if (! $result ) { throw new RestException(404, 'Product not found'); } - + if ($result > 0) { require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php'; $prodcustprice = new Productcustomerprice($this->db); - $result = $prodcustprice->fetch_all('', '', 0, 0, array('t.fk_product' => $id)); + $filter = array(); + $filter['t.fk_product'] .= $id; + if ($thirdparty_id) $filter['t.fk_soc'] .= $thirdparty_id; + $result = $prodcustprice->fetch_all('', '', 0, 0, $filter); } if ( empty($prodcustprice->lines)) { - throw new RestException(503, 'Error when retrieve prices list : '.array_merge(array($prodcustprice->error), $prodcustprice->errors)); + throw new RestException(404, 'Prices not found'); } return $prodcustprice->lines; From 693506cebd1e58c20f7eb325c31e3455ae2899ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 20:26:55 +0100 Subject: [PATCH 796/980] Update propal.class.php socid is int --- htdocs/comm/propal/class/propal.class.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 8d84d1f4820..51a888af76e 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -13,7 +13,7 @@ * Copyright (C) 2013 Florian Henry * Copyright (C) 2014-2015 Marcos García * Copyright (C) 2018 Nicolas ZABOURI - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2019 Frédéric France * Copyright (C) 2018 Ferran Marcet * * This program is free software; you can redistribute it and/or modify @@ -95,8 +95,17 @@ class Propal extends CommonObject */ public $socid; + /** + * ID of the contact + * @var int + */ public $contactid; public $author; + + /** + * Ref from thirdparty + * @var string + */ public $ref_client; /** @@ -240,7 +249,7 @@ class Propal extends CommonObject * @param int $socid Id third party * @param int $propalid Id proposal */ - public function __construct($db, $socid = "", $propalid = 0) + public function __construct($db, $socid = 0, $propalid = 0) { global $conf,$langs; From 0e260c859b92d1dc533dcec7874ffb29ff6fbc82 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Fri, 1 Nov 2019 19:28:39 +0000 Subject: [PATCH 797/980] Fixing style errors. --- htdocs/product/class/api_products.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php index e7046e07f43..1b0020faa25 100644 --- a/htdocs/product/class/api_products.class.php +++ b/htdocs/product/class/api_products.class.php @@ -445,7 +445,7 @@ class Products extends DolibarrApi //'multiprices_default_vat_code'=>$this->product->multiprices_default_vat_code ); } - + /** * Get prices per customer for a product * @@ -472,13 +472,13 @@ class Products extends DolibarrApi if (! $result ) { throw new RestException(404, 'Product not found'); } - + if ($result > 0) { require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php'; $prodcustprice = new Productcustomerprice($this->db); $filter = array(); $filter['t.fk_product'] .= $id; - if ($thirdparty_id) $filter['t.fk_soc'] .= $thirdparty_id; + if ($thirdparty_id) $filter['t.fk_soc'] .= $thirdparty_id; $result = $prodcustprice->fetch_all('', '', 0, 0, $filter); } From 83cc9ea643783e27ba863d673fb4f699eb68ff0f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 20:48:46 +0100 Subject: [PATCH 798/980] FIX Search on leave request ref --- htdocs/holiday/list.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index 1c03e3801b6..4256ecd13f9 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -197,10 +197,7 @@ llxHeader('', $langs->trans('CPTitreMenu')); $order = $db->order($sortfield, $sortorder).$db->plimit($limit + 1, $offset); // Ref -if(!empty($search_ref)) -{ - $filter.= " AND cp.rowid = ".(int) $db->escape($search_ref); -} +if (!empty($search_ref)) $filter.= natural_search("cp.ref", $search_ref); // Start date $filter.= dolSqlDateFilter("cp.date_debut", $search_day_start, $search_month_start, $search_year_start); // End date @@ -231,7 +228,6 @@ if (!empty($sall)) if (empty($user->rights->holiday->read_all)) $filter.=' AND cp.fk_user IN ('.join(',', $childids).')'; - // Récupération de l'ID de l'utilisateur $user_id = $user->id; From a3a326b25ef076a3619655e0938cfad200ffcbbf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 20:52:11 +0100 Subject: [PATCH 799/980] FIX Search on leave request ref --- htdocs/holiday/list.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index 4256ecd13f9..1ead5872f78 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -116,6 +116,7 @@ $search_type = GETPOST('search_type', 'int'); // List of fields to search into when doing a "search in all" $fieldstosearchall = array( + 'cp.ref'=>'Ref', 'cp.description'=>'Description', 'uu.lastname'=>'EmployeeLastname', 'uu.firstname'=>'EmployeeFirstname' From 4616519dcfeee162a9710478fd8612a0af4d677e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 20:52:30 +0100 Subject: [PATCH 800/980] FIX Search on leave request ref --- htdocs/holiday/list.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index b86dd2864b5..e4137199060 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -121,6 +121,7 @@ $search_array_options=$extrafields->getOptionalsFromPost($object->table_element, // List of fields to search into when doing a "search in all" $fieldstosearchall = array( + 'cp.ref'=>'Ref', 'cp.description'=>'Description', 'uu.lastname'=>'EmployeeLastname', 'uu.firstname'=>'EmployeeFirstname', @@ -287,7 +288,7 @@ $sql.= ", ".MAIN_DB_PREFIX."user as uu, ".MAIN_DB_PREFIX."user as ua"; $sql.= " WHERE cp.entity IN (".getEntity('holiday').")"; $sql.= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid "; // Hack pour la recherche sur le tableau // Search all -if (!empty($sall)) $sql.= natural_search(array_keys($fieldstosearchall), $sall); +//if (!empty($sall)) $sql.= natural_search(array_keys($fieldstosearchall), $sall); // Ref if(!empty($search_ref)) { From cf2ee892ee1842065dfe1b02a3d54b5526fa261e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 21:27:19 +0100 Subject: [PATCH 801/980] FIX security check. A user can see holiday with link without permissions --- htdocs/holiday/card.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index 1f597f2ddc2..6518258b508 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -44,10 +44,6 @@ $id=GETPOST('id', 'int'); $ref=GETPOST('ref', 'alpha'); $fuserid = (GETPOST('fuserid', 'int')?GETPOST('fuserid', 'int'):$user->id); -// Protection if external user -if ($user->societe_id) $socid=$user->societe_id; -$result = restrictedArea($user, 'holiday', $id, 'holiday'); - $now=dol_now(); // Load translation files required by the page @@ -61,9 +57,9 @@ if (! empty($conf->global->HOLIDAY_FOR_NON_SALARIES_TOO)) $morefilter = ''; $error = 0; $object = new Holiday($db); -if ($id > 0) +if (($id > 0) || $ref) { - $object->fetch($id); + $object->fetch($id, $ref); // Check current user can read this leave request $canread = 0; @@ -83,6 +79,12 @@ $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; +// Protection if external user +if ($user->societe_id) $socid=$user->societe_id; +$result = restrictedArea($user, 'holiday', $object->id, 'holiday'); + + + /* * Actions */ From 7bd88f33a05903e158ee83c7ff64e3062414ac08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 22:22:07 +0100 Subject: [PATCH 802/980] Update define_holiday.php --- htdocs/holiday/define_holiday.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/htdocs/holiday/define_holiday.php b/htdocs/holiday/define_holiday.php index ec2b12f9bf5..c5ab5e0e5ec 100644 --- a/htdocs/holiday/define_holiday.php +++ b/htdocs/holiday/define_holiday.php @@ -201,11 +201,6 @@ if ($lastUpdate) { } print "
    \n"; -$result = $holiday->updateBalance(); // Create users into table holiday if they don't exists. TODO Remove this whif we use field into table user. -if ($result < 0) -{ - setEventMessages($holiday->error, $holiday->errors, 'errors'); -} $filters = ''; From 8608c5db9ca9cce2f18f012a31ab935286c04218 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 23:16:08 +0100 Subject: [PATCH 803/980] Fix color of task progression --- htdocs/core/class/extrafields.class.php | 2 +- htdocs/core/lib/functions.lib.php | 35 +++++++++++++++---------- htdocs/core/lib/project.lib.php | 8 +++--- htdocs/mrp/index.php | 4 +-- htdocs/projet/card.php | 2 +- htdocs/projet/index.php | 4 +-- 6 files changed, 32 insertions(+), 23 deletions(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 6807e75ba80..67693b83c6b 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1029,7 +1029,7 @@ class ExtraFields { $morecss = 'minwidth100imp'; } - elseif ($type == 'datetime') + elseif ($type == 'datetime' || $type == 'link') { $morecss = 'minwidth200imp'; } diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 7750e62c506..90583e1d4e4 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1122,13 +1122,20 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab { global $conf, $langs, $hookmanager; - $out="\n".'
    '."\n"; - - if ($morehtmlright) $out.='
    '.$morehtmlright.'
    '; // Output right area first so when space is missing, text is in front of tabs and not under. - // Show title $showtitle=1; if (! empty($conf->dol_optimize_smallscreen)) $showtitle=0; + + $out = "\n".''; + + if ((! empty($title) && $showtitle) || $morehtmlright || ! empty($links)) { + $out.= '
    '."\n"; + } + + // Show right part + if ($morehtmlright) $out.='
    '.$morehtmlright.'
    '; // Output right area first so when space is missing, text is in front of tabs and not under. + + // Show title if (! empty($title) && $showtitle) { $limittitle=30; @@ -1138,6 +1145,8 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab $out.=''; } + // Show tabs + // Define max of key (max may be higher than sizeof because of hole due to module disabling some tabs). $maxkey=-1; if (is_array($links) && ! empty($links)) @@ -1149,16 +1158,15 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab if (! empty($conf->dol_optimize_smallscreen)) $conf->global->MAIN_MAXTABS_IN_CARD=2; // Show tabs - $bactive=false; // if =0 we don't use the feature $limittoshow=(empty($conf->global->MAIN_MAXTABS_IN_CARD)?99:$conf->global->MAIN_MAXTABS_IN_CARD); $displaytab=0; $nbintab=0; - $popuptab=0; $outmore=''; + $popuptab=0; + $outmore=''; for ($i = 0 ; $i <= $maxkey ; $i++) { - if ((is_numeric($active) && $i == $active) || (! empty($links[$i][2]) && ! is_numeric($active) && $active == $links[$i][2])) - { + if ((is_numeric($active) && $i == $active) || (! empty($links[$i][2]) && ! is_numeric($active) && $active == $links[$i][2])) { // If active tab is already present if ($i >= $limittoshow) $limittoshow--; } @@ -1166,13 +1174,10 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab for ($i = 0 ; $i <= $maxkey ; $i++) { - if ((is_numeric($active) && $i == $active) || (! empty($links[$i][2]) && ! is_numeric($active) && $active == $links[$i][2])) - { + if ((is_numeric($active) && $i == $active) || (! empty($links[$i][2]) && ! is_numeric($active) && $active == $links[$i][2])) { $isactive=true; - $bactive=true; } - else - { + else { $isactive=false; } @@ -1258,7 +1263,9 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab $out.=""; } - $out.="
    \n"; + if ((! empty($title) && $showtitle) || $morehtmlright || ! empty($links)) { + $out.="
    \n"; + } if (! $notab || $notab == -1 || $notab == -2) $out.="\n".'
    '."\n"; diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index 06cd96ab995..a177b3f13c0 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -1996,6 +1996,7 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks * @param hideOnProgressNull $hideOnProgressNull bool hide if progress is null * @param spaced $spaced bool used to add space at bottom (made by css) * @return string + * @see getTaskProgressBadge() */ function getTaskProgressView($task, $label = true, $progressNumber = true, $hideOnProgressNull = false, $spaced = false) { @@ -2033,7 +2034,7 @@ function getTaskProgressView($task, $label = true, $progressNumber = true, $hide $title = $langs->trans('TheReportedProgressIsLessThanTheCalculatedProgressionByX', abs($task->progress-$progressCalculated).' '.$langs->trans("point")); $diff = ' '.($task->progress-$progressCalculated).'%'; } - elseif (doubleval($progressCalculated) > doubleval($task->progress)) { // warning if close at 1% + elseif (doubleval($progressCalculated) > doubleval($task->progress)) { // warning if close at 10% $progressBarClass = 'progress-bar-warning'; $title = $langs->trans('TheReportedProgressIsLessThanTheCalculatedProgressionByX', abs($task->progress-$progressCalculated).' '.$langs->trans("point")); $diff = ' '.($task->progress-$progressCalculated).'%'; @@ -2116,6 +2117,7 @@ function getTaskProgressView($task, $label = true, $progressNumber = true, $hide * @param label $label string empty = auto (progress), string = replace output * @param tooltip $tooltip string empty = auto , string = replace output * @return string + * @see getTaskProgressView() */ function getTaskProgressBadge($task, $label = '', $tooltip = '') { @@ -2135,10 +2137,10 @@ function getTaskProgressBadge($task, $label = '', $tooltip = '') // this conf is actually hidden, by default we use 10% for "be carefull or warning" $warningRatio = !empty($conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT) ? (1 + $conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT / 100) : 1.10; - if($progressCalculated > doubleval($task->progress)){ + if (doubleval($progressCalculated) > doubleval($task->progress * $warningRatio)) { $badgeClass.= 'badge-danger'; } - elseif($progressCalculated * $warningRatio >= doubleval($task->progress)){ // warning if close at 1% + elseif (doubleval($progressCalculated) > doubleval($task->progress)) { // warning if close at 10% $badgeClass.= 'badge-warning'; } else{ diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index 742d94109e2..9abb940283e 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -163,7 +163,7 @@ if ($resql) print '
    '; print ''; print ''; - print ''; + print ''; print ''; $i++; } @@ -216,7 +216,7 @@ if ($resql) print ''; print ''; print ''; - print ''; + print ''; print ''; $i++; } diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index f15499d4682..e4a8dd078ec 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -509,7 +509,7 @@ if ($action == 'create' && $user->rights->projet->creer) dol_fiche_head(); - print '
    '; print $form->textwithpicto($langs->trans("Label"), $langs->trans("YouCanUseTranslationKey")); print ''.$langs->trans("Type").''; + print ''.$form->textwithpicto($langs->trans("Type"), $langs->trans("TypeOfFieldsHelp")).''.$form->textwithpicto($langs->trans("ArrayOfKeyValues"), $langs->trans("ArrayOfKeyValuesDesc")).''.$form->textwithpicto($langs->trans("NotNull"), $langs->trans("NotNullDesc")).''.$langs->trans("DefaultValue").''.$langs->trans("DatabaseIndex").''.$langs->trans("ForeignKey").''.$langs->trans("Position").''.$form->textwithpicto($langs->trans("Enabled"), $langs->trans("EnabledDesc")).''.$form->textwithpicto($langs->trans("Visible"), $langs->trans("VisibleDesc")).''.$form->textwithpicto($langs->trans("IsAMeasure"), $langs->trans("IsAMeasureDesc")).''.$langs->trans("NotEditable").''.$form->textwithpicto($langs->trans("SearchAll"), $langs->trans("SearchAllDesc")).''.$form->textwithpicto($langs->trans("IsAMeasure"), $langs->trans("IsAMeasureDesc")).''.$langs->trans("CSSClass").''.$langs->trans("KeyForTooltip").''.$langs->trans("ShowOnCombobox").''.$langs->trans("Disabled").''.$langs->trans("Comment").'
    '; print ''; @@ -2531,13 +2560,19 @@ elseif (! empty($module)) $proptype=$propval['type']; $proparrayofkeyval=$propval['arrayofkeyval']; $propnotnull=$propval['notnull']; - $propsearchall=$propval['searchall']; $propdefault=$propval['default']; $propindex=$propval['index']; + $propforeignkey=$propval['foreignkey']; $propposition=$propval['position']; $propenabled=$propval['enabled']; $propvisible=$propval['visible']; + $propnoteditable=$propval['noteditable']; + $propsearchall=$propval['searchall']; $propisameasure=$propval['isameasure']; + $propcss=$propval['css']; + $prophelp=$propval['help']; + $propshowoncombobox=$propval['showoncombobox']; + //$propdisabled=$propval['disabled']; $propcomment=$propval['comment']; print '
    '; print $proplabel; print ''; + print ''; print $proptype; print ''; @@ -2565,6 +2600,9 @@ elseif (! empty($module)) print ''; print $propindex?'1':''; print ''; + print $propforeignkey?$propforeignkey:''; + print ''; print $propposition; print ''; - print $propisameasure?$propisameasure:''; + print $propnoteditable?$propnoteditable:''; print ''; print $propsearchall?'1':''; print ''; + print $propisameasure?$propisameasure:''; + print ''; + print $propcss?$propcss:''; + print ''; + print $prophelp?$prophelp:''; + print ''; + print $propshowoncombobox?$propshowoncombobox:''; + print ''; + print $propdisabled?$propdisabled:''; + print ''; print $propcomment; print ''; - print ''.img_delete().''; + if ($propname != 'rowid') + { + print ''.img_delete().''; + } print '
    trans("MyObject"); ?>getNomUrl(1); ?>date, 'day'); ?>getLibStatut(7); ?>'.img_picto($langs->transnoentitiesnoconv("RemoveLink"), 'unlink'); ?>
    '.$staticbom->getNomUrl(1, 32).''.dol_print_date($db->jdate($obj->datem), 'dayhour').''.$staticbom->getLibStatut(5).''.$staticbom->getLibStatut(3).'
    '.$staticmo->getNomUrl(1, 32).''.dol_print_date($db->jdate($obj->datem), 'dayhour').''.$staticmo->getLibStatut(5).''.$staticmo->getLibStatut(3).'
    '; + print '
    '; $defaultref=''; $modele = empty($conf->global->PROJECT_ADDON)?'mod_project_simple':$conf->global->PROJECT_ADDON; diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php index c16d42ae97c..be8a924e1ab 100644 --- a/htdocs/projet/index.php +++ b/htdocs/projet/index.php @@ -171,7 +171,7 @@ print_projecttasks_array($db, $form, $socid, $projectsListId, 0, 0, $listofoppst print '
    '; -// Last modified projects +// Latest modified projects $sql = "SELECT p.rowid, p.ref, p.title, p.fk_statut, p.tms as datem,"; $sql.= " s.rowid as socid, s.nom as name, s.email, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.canvas"; $sql.= " FROM ".MAIN_DB_PREFIX."projet as p"; @@ -243,7 +243,7 @@ if ($resql) } print ''; print '
    '; - print ''; + print ''; print ''; $i++; } From cea2c3a9f43843f149285234a3303a21e95ac6e1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 1 Nov 2019 23:58:14 +0100 Subject: [PATCH 804/980] Look and feel v11 --- .../class/accountingaccount.class.php | 29 ++-- htdocs/adherents/class/adherent.class.php | 12 +- htdocs/comm/mailing/cibles.php | 6 +- htdocs/comm/mailing/class/mailing.class.php | 115 +++++--------- htdocs/comm/propal/class/propal.class.php | 26 ++-- htdocs/commande/class/commande.class.php | 18 +-- .../bank/class/paymentvarious.class.php | 32 ++-- .../deplacement/class/deplacement.class.php | 32 ++-- .../class/bonprelevement.class.php | 36 ++--- .../class/ligneprelevement.class.php | 24 +-- .../sociales/class/chargesociales.class.php | 38 ++--- htdocs/core/class/fiscalyear.class.php | 24 +-- htdocs/core/lib/functions.lib.php | 2 +- htdocs/don/class/paymentdonation.class.php | 4 +- htdocs/expedition/class/expedition.class.php | 34 ++--- .../class/paymentexpensereport.class.php | 4 +- .../fournisseur.commande.dispatch.class.php | 28 ++-- htdocs/fourn/commande/index.php | 8 +- htdocs/livraison/class/livraison.class.php | 34 ++--- htdocs/loan/class/loan.class.php | 38 ++--- .../product/stock/class/productlot.class.php | 4 +- htdocs/projet/class/task.class.php | 68 ++++----- htdocs/reception/class/reception.class.php | 34 ++--- htdocs/ticket/class/ticket.class.php | 144 +++++++++--------- htdocs/user/class/usergroup.class.php | 4 +- 25 files changed, 377 insertions(+), 421 deletions(-) diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php index 21cbdeb9662..0cfc0d24826 100644 --- a/htdocs/accountancy/class/accountingaccount.class.php +++ b/htdocs/accountancy/class/accountingaccount.class.php @@ -638,11 +638,11 @@ class AccountingAccount extends CommonObject /** * Renvoi le libelle d'un statut donne * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto * @return string Label of status */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; @@ -650,34 +650,33 @@ class AccountingAccount extends CommonObject if ($mode == 0) { - $prefix=''; - if ($statut == 1) return $langs->trans('Enabled'); - elseif ($statut == 0) return $langs->trans('Disabled'); + if ($status == 1) return $langs->trans('Enabled'); + elseif ($status == 0) return $langs->trans('Disabled'); } elseif ($mode == 1) { - if ($statut == 1) return $langs->trans('Enabled'); - elseif ($statut == 0) return $langs->trans('Disabled'); + if ($status == 1) return $langs->trans('Enabled'); + elseif ($status == 0) return $langs->trans('Disabled'); } elseif ($mode == 2) { - if ($statut == 1) return img_picto($langs->trans('Enabled'), 'statut4').' '.$langs->trans('Enabled'); - elseif ($statut == 0) return img_picto($langs->trans('Disabled'), 'statut5').' '.$langs->trans('Disabled'); + if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4').' '.$langs->trans('Enabled'); + elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5').' '.$langs->trans('Disabled'); } elseif ($mode == 3) { - if ($statut == 1) return img_picto($langs->trans('Enabled'), 'statut4'); - elseif ($statut == 0) return img_picto($langs->trans('Disabled'), 'statut5'); + if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4'); + elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5'); } elseif ($mode == 4) { - if ($statut == 1) return img_picto($langs->trans('Enabled'), 'statut4').' '.$langs->trans('Enabled'); - elseif ($statut == 0) return img_picto($langs->trans('Disabled'), 'statut5').' '.$langs->trans('Disabled'); + if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4').' '.$langs->trans('Enabled'); + elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5').' '.$langs->trans('Disabled'); } elseif ($mode == 5) { - if ($statut == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'), 'statut4'); - elseif ($statut == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'), 'statut5'); + if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'), 'statut4'); + elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'), 'statut5'); } } } diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 9d0e0fa47dc..f7278f9007a 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -174,7 +174,7 @@ class Adherent extends CommonObject // -1:brouillon, 0:resilie, >=1:valide,paye // def in common object - //public $statut; + //public $status; public $photo; @@ -2168,13 +2168,13 @@ class Adherent extends CommonObject /** * Renvoi le libelle d'un statut donne * - * @param int $statut Id statut + * @param int $status Id status * @param int $need_subscription 1 if member type need subscription, 0 otherwise * @param int $date_end_subscription Date fin adhesion * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto * @return string Label */ - public function LibStatut($statut, $need_subscription, $date_end_subscription, $mode = 0) + public function LibStatut($status, $need_subscription, $date_end_subscription, $mode = 0) { // phpcs:enable global $langs; @@ -2184,13 +2184,13 @@ class Adherent extends CommonObject $labelStatus = ''; $labelStatusShort = ''; - if ($statut == -1) + if ($status == -1) { $statusType = 'status0'; $labelStatus = $langs->trans("MemberStatusDraft"); $labelStatusShort = $langs->trans("MemberStatusDraftShort"); } - elseif ($statut >= 1) { + elseif ($status >= 1) { if ($need_subscription == 0) { $statusType = 'status4'; @@ -2215,7 +2215,7 @@ class Adherent extends CommonObject $labelStatusShort = $langs->trans("MemberStatusPaidShort"); } } - elseif ($statut == 0) + elseif ($status == 0) { $statusType = 'status6'; $labelStatus = $langs->trans("MemberStatusResiliated"); diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index 998f4a6c202..fc83b20d58f 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -479,14 +479,13 @@ if ($object->fetch($id) >= 0) { $num = $db->num_rows($resql); - $param = "&id=".$object->id; + $param = "&id=".$object->id; //if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); if ($search_lastname) $param.= "&search_lastname=".urlencode($search_lastname); if ($search_firstname) $param.= "&search_firstname=".urlencode($search_firstname); if ($search_email) $param.= "&search_email=".urlencode($search_email); if ($search_other) $param.= "&search_other=".urlencode($search_other); - if ($page) $param.= "&page=".urlencode($page); print ''; print ''; @@ -500,6 +499,7 @@ if ($object->fetch($id) >= 0) $morehtmlcenter=''.$langs->trans("ToClearAllRecipientsClickHere").' id.'" class="button reposition">'.$langs->trans("TargetsReset").''; } $morehtmlcenter.=' id.'">'.$langs->trans("Download").''; + print_barre_liste($langs->trans("MailSelectedRecipients"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $morehtmlcenter, $num, $nbtotalofrecords, 'generic', 0, '', '', $limit); print ''; @@ -560,6 +560,8 @@ if ($object->fetch($id) >= 0) print ''; print ''; + if ($page) $param.= "&page=".urlencode($page); + print ''; print_liste_field_titre("EMail", $_SERVER["PHP_SELF"], "mc.email", $param, "", "", $sortfield, $sortorder); print_liste_field_titre("Lastname", $_SERVER["PHP_SELF"], "mc.lastname", $param, "", "", $sortfield, $sortorder); diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php index 41f74846125..5867e80dbb2 100644 --- a/htdocs/comm/mailing/class/mailing.class.php +++ b/htdocs/comm/mailing/class/mailing.class.php @@ -618,48 +618,24 @@ class Mailing extends CommonObject /** * Renvoi le libelle d'un statut donne * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto * @return string Label */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; - $langs->load('mails'); + $langs->load("mailing"); - if ($mode == 0 || $mode == 1) - { - return $langs->trans($this->statuts[$statut]); - } - elseif ($mode == 2) - { - if ($statut == 0) return img_picto($langs->trans($this->statuts[$statut]), 'statut0').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut == 1) return img_picto($langs->trans($this->statuts[$statut]), 'statut1').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut == 2) return img_picto($langs->trans($this->statuts[$statut]), 'statut3').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut == 3) return img_picto($langs->trans($this->statuts[$statut]), 'statut6').' '.$langs->trans($this->statuts[$statut]); - } - elseif ($mode == 3) - { - if ($statut == 0) return img_picto($langs->trans($this->statuts[$statut]), 'statut0'); - elseif ($statut == 1) return img_picto($langs->trans($this->statuts[$statut]), 'statut1'); - elseif ($statut == 2) return img_picto($langs->trans($this->statuts[$statut]), 'statut3'); - elseif ($statut == 3) return img_picto($langs->trans($this->statuts[$statut]), 'statut6'); - } - elseif ($mode == 4) - { - if ($statut == 0) return img_picto($langs->trans($this->statuts[$statut]), 'statut0').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut == 1) return img_picto($langs->trans($this->statuts[$statut]), 'statut1').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut == 2) return img_picto($langs->trans($this->statuts[$statut]), 'statut3').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut == 3) return img_picto($langs->trans($this->statuts[$statut]), 'statut6').' '.$langs->trans($this->statuts[$statut]); - } - elseif ($mode == 5) - { - if ($statut == 0) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut0'); - elseif ($statut == 1) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut1'); - elseif ($statut == 2) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut3'); - elseif ($statut == 3) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut6'); - } + $labelStatus = $langs->trans($this->statuts[$status]); + $labelStatusShort = $langs->trans($this->statuts[$status]); + + $statusType = 'status'.$status; + if ($status == 2) $statusType = 'status3'; + if ($status == 3) $statusType = 'status6'; + + return dolGetStatus($labelStatus, $labelStatusShort, '', $statusType, $mode); } @@ -667,58 +643,37 @@ class Mailing extends CommonObject * Renvoi le libelle d'un statut donne * TODO Add class mailin_target.class.php * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto * @param string $desc Desc error * @return string Label */ - public static function libStatutDest($statut, $mode = 0, $desc = '') + public static function libStatutDest($status, $mode = 0, $desc = '') { global $langs; - $langs->load('mails'); + $langs->load("mails"); - if ($mode == 0) - { - return $langs->trans('MailingStatusError'); - } - elseif ($mode == 1) - { - return $langs->trans('MailingStatusSent'); - } - elseif ($mode == 2) - { - if ($statut==-1) return $langs->trans("MailingStatusError").' '.img_error($desc); - elseif ($statut==1) return $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"), 'statut6'); - elseif ($statut==2) return $langs->trans("MailingStatusRead").' '.img_picto($langs->trans("MailingStatusRead"), 'statut4'); - elseif ($statut==3) return $langs->trans("MailingStatusNotContact").' '.img_picto($langs->trans("MailingStatusNotContact"), 'statut3'); - } - elseif ($mode == 3) - { - if ($statut==-1) return $langs->trans("MailingStatusError").' '.img_error($desc); - elseif ($statut==1) return $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"), 'statut6'); - elseif ($statut==2) return $langs->trans("MailingStatusRead").' '.img_picto($langs->trans("MailingStatusRead"), 'statut4'); - elseif ($statut==3) return $langs->trans("MailingStatusNotContact").' '.img_picto($langs->trans("MailingStatusNotContact"), 'statut3'); - } - elseif ($mode == 4) - { - if ($statut==-1) return $langs->trans("MailingStatusError").' '.img_error($desc); - elseif ($statut==1) return $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"), 'statut6'); - elseif ($statut==2) return $langs->trans("MailingStatusRead").' '.img_picto($langs->trans("MailingStatusRead"), 'statut4'); - elseif ($statut==3) return $langs->trans("MailingStatusNotContact").' '.img_picto($langs->trans("MailingStatusNotContact"), 'statut3'); - } - elseif ($mode == 5) - { - if ($statut==-1) return $langs->trans("MailingStatusError").' '.img_error($desc); - elseif ($statut==1) return $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"), 'statut6'); - elseif ($statut==2) return $langs->trans("MailingStatusRead").' '.img_picto($langs->trans("MailingStatusRead"), 'statut4'); - elseif ($statut==3) return $langs->trans("MailingStatusNotContact").' '.img_picto($langs->trans("MailingStatusNotContact"), 'statut3'); - } - elseif ($mode == 6) - { - if ($statut==-1) return $langs->trans("MailingStatusError").' '.img_error($desc); - elseif ($statut==1) return $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"), 'statut6'); - elseif ($statut==2) return $langs->trans("MailingStatusRead").' '.img_picto($langs->trans("MailingStatusRead"), 'statut4'); - elseif ($statut==3) return $langs->trans("MailingStatusNotContact").' '.img_picto($langs->trans("MailingStatusNotContact"), 'statut3'); + $labelStatus = array(); + $labelStatusShort = array(); + + $labelStatus[-1] = $langs->trans('MailingStatusError'); + $labelStatus[1] = $langs->trans('MailingStatusSent'); + $labelStatus[2] = $langs->trans('MailingStatusRead'); + $labelStatus[3] = $langs->trans('MailingStatusNotContact'); + $labelStatusShort[-1] = $langs->trans('MailingStatusError'); + $labelStatusShort[1] = $langs->trans('MailingStatusSent'); + $labelStatusShort[2] = $langs->trans('MailingStatusRead'); + $labelStatusShort[3] = $langs->trans('MailingStatusNotContact'); + + $statusType = 'status'.$status; + if ($status == -1) $statusType = 'status8'; + if ($status == 1) $statusType = 'status6'; + if ($status == 2) $statusType = 'status4'; + + $param = array(); + if ($status == - 1) { + $param = array('badgeParams'=>array('attr'=>array('title'=>$desc))); } + return dolGetStatus($labelStatus[$status], $labelStatusShort[$status], '', $statusType, $mode, '', $param); } } diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 8d84d1f4820..a76cbe3c519 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -3200,11 +3200,11 @@ class Propal extends CommonObject /** * Return label of a status (draft, validated, ...) * - * @param int $statut id statut + * @param int $status Id status * @param int $mode 0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto, 6=Long label + Picto * @return string Label */ - public function LibStatut($statut, $mode = 1) + public function LibStatut($status, $mode = 1) { // phpcs:enable global $conf; @@ -3227,13 +3227,13 @@ class Propal extends CommonObject } $statusType=''; - if ($statut==self::STATUS_DRAFT) $statusType='status0'; - elseif ($statut==self::STATUS_VALIDATED) $statusType='status1'; - elseif ($statut==self::STATUS_SIGNED) $statusType='status3'; - elseif ($statut==self::STATUS_NOTSIGNED) $statusType='status5'; - elseif ($statut==self::STATUS_BILLED) $statusType='status6'; + if ($status==self::STATUS_DRAFT) $statusType='status0'; + elseif ($status==self::STATUS_VALIDATED) $statusType='status1'; + elseif ($status==self::STATUS_SIGNED) $statusType='status3'; + elseif ($status==self::STATUS_NOTSIGNED) $statusType='status5'; + elseif ($status==self::STATUS_BILLED) $statusType='status6'; - return dolGetStatus($this->labelStatus[$statut], $this->labelStatusShort[$statut], '', $statusType, $mode); + return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode); } @@ -3272,17 +3272,17 @@ class Propal extends CommonObject $now=dol_now(); $delay_warning = 0; - $statut = 0; + $status = 0; $label = $labelShort = ''; if ($mode == 'opened') { $delay_warning=$conf->propal->cloture->warning_delay; - $statut = self::STATUS_VALIDATED; + $status = self::STATUS_VALIDATED; $label = $langs->trans("PropalsToClose"); $labelShort = $langs->trans("ToAcceptRefuse"); } if ($mode == 'signed') { $delay_warning=$conf->propal->facturation->warning_delay; - $statut = self::STATUS_SIGNED; + $status = self::STATUS_SIGNED; $label = $langs->trans("PropalsToBill"); // We set here bill but may be billed or ordered $labelShort = $langs->trans("ToBill"); } @@ -3291,8 +3291,8 @@ class Propal extends CommonObject $response->warning_delay = $delay_warning/60/60/24; $response->label = $label; $response->labelShort = $labelShort; - $response->url = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$statut.'&mainmenu=commercial&leftmenu=propals'; - $response->url_late = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$statut.'&mainmenu=commercial&leftmenu=propals&sortfield=p.datep&sortorder=asc'; + $response->url = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$status.'&mainmenu=commercial&leftmenu=propals'; + $response->url_late = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$status.'&mainmenu=commercial&leftmenu=propals&sortfield=p.datep&sortorder=asc'; $response->img = img_object('', "propal"); // This assignment in condition is not a bug. It allows walking the results. diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 261190a747e..4348b3b05a5 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3469,13 +3469,13 @@ class Commande extends CommonOrder /** * Return label of status * - * @param int $statut Id statut + * @param int $status Id status * @param int $billed If invoiced * @param int $mode 0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto, 6=Long label + Picto * @param int $donotshowbilled Do not show billed status after order status * @return string Label of status */ - public function LibStatut($statut, $billed, $mode, $donotshowbilled = 0) + public function LibStatut($status, $billed, $mode, $donotshowbilled = 0) { // phpcs:enable global $langs, $conf; @@ -3483,37 +3483,37 @@ class Commande extends CommonOrder $billedtext = ''; if (empty($donotshowbilled)) $billedtext .= ($billed?' - '.$langs->trans("Billed"):''); - if ($statut==self::STATUS_CANCELED){ + if ($status==self::STATUS_CANCELED){ $labelStatus = $langs->trans('StatusOrderCanceled'); $labelStatusShort = $langs->trans('StatusOrderCanceledShort'); $statusType='status5'; } - elseif ($statut==self::STATUS_DRAFT){ + elseif ($status==self::STATUS_DRAFT){ $labelStatus = $langs->trans('StatusOrderDraft'); $labelStatusShort = $langs->trans('StatusOrderDraftShort'); $statusType='status0'; } - elseif ($statut==self::STATUS_VALIDATED){ + elseif ($status==self::STATUS_VALIDATED){ $labelStatus = $langs->trans('StatusOrderValidated').$billedtext; $labelStatusShort = $langs->trans('StatusOrderValidatedShort').$billedtext; $statusType='status1'; } - elseif ($statut==self::STATUS_SHIPMENTONPROCESS){ + elseif ($status==self::STATUS_SHIPMENTONPROCESS){ $labelStatus = $langs->trans('StatusOrderSentShort').$billedtext; $labelStatusShort = $langs->trans('StatusOrderSentShort').$billedtext; $statusType='status3'; } - elseif ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))){ + elseif ($status==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))){ $labelStatus = $langs->trans('StatusOrderToBill'); $labelStatusShort = $langs->trans('StatusOrderToBillShort'); $statusType='status4'; } - elseif ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))){ + elseif ($status==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))){ $labelStatus = $langs->trans('StatusOrderProcessed').$billedtext; $labelStatusShort = $langs->trans('StatusOrderProcessed').$billedtext; $statusType='status6'; } - elseif ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))){ + elseif ($status==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))){ $labelStatus = $langs->trans('StatusOrderDelivered'); $labelStatusShort = $langs->trans('StatusOrderDelivered'); $statusType='status6'; diff --git a/htdocs/compta/bank/class/paymentvarious.class.php b/htdocs/compta/bank/class/paymentvarious.class.php index ed94c8e4700..ca3acd59e42 100644 --- a/htdocs/compta/bank/class/paymentvarious.class.php +++ b/htdocs/compta/bank/class/paymentvarious.class.php @@ -523,46 +523,46 @@ class PaymentVarious extends CommonObject /** * Renvoi le libelle d'un statut donne * - * @param int $statut Id status + * @param int $status Id status * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto * @return string Libelle */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; if ($mode == 0) { - return $langs->trans($this->statuts[$statut]); + return $langs->trans($this->statuts[$status]); } elseif ($mode == 1) { - return $langs->trans($this->statuts_short[$statut]); + return $langs->trans($this->statuts_short[$status]); } elseif ($mode == 2) { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0').' '.$langs->trans($this->statuts_short[$statut]); - elseif ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4').' '.$langs->trans($this->statuts_short[$statut]); - elseif ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6').' '.$langs->trans($this->statuts_short[$statut]); + if ($status==0) return img_picto($langs->trans($this->statuts_short[$status]), 'statut0').' '.$langs->trans($this->statuts_short[$status]); + elseif ($status==1) return img_picto($langs->trans($this->statuts_short[$status]), 'statut4').' '.$langs->trans($this->statuts_short[$status]); + elseif ($status==2) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6').' '.$langs->trans($this->statuts_short[$status]); } elseif ($mode == 3) { - if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0'); - elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4'); - elseif ($statut==2 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6'); + if ($status==0 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut0'); + elseif ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut4'); + elseif ($status==2 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6'); } elseif ($mode == 4) { - if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==2 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6').' '.$langs->trans($this->statuts[$statut]); + if ($status==0 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut0').' '.$langs->trans($this->statuts[$status]); + elseif ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut4').' '.$langs->trans($this->statuts[$status]); + elseif ($status==2 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6').' '.$langs->trans($this->statuts[$status]); } elseif ($mode == 5) { - if ($statut==0 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]), 'statut0'); - elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]), 'statut4'); - elseif ($statut==2 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]), 'statut6'); + if ($status==0 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]), 'statut0'); + elseif ($status==1 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]), 'statut4'); + elseif ($status==2 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]), 'statut6'); } } diff --git a/htdocs/compta/deplacement/class/deplacement.class.php b/htdocs/compta/deplacement/class/deplacement.class.php index 1b70641a6bc..0601c62fd80 100644 --- a/htdocs/compta/deplacement/class/deplacement.class.php +++ b/htdocs/compta/deplacement/class/deplacement.class.php @@ -336,46 +336,46 @@ class Deplacement extends CommonObject /** * Renvoi le libelle d'un statut donne * - * @param int $statut Id status + * @param int $status Id status * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto * @return string Libelle */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; if ($mode == 0) { - return $langs->trans($this->statuts[$statut]); + return $langs->trans($this->statuts[$status]); } elseif ($mode == 1) { - return $langs->trans($this->statuts_short[$statut]); + return $langs->trans($this->statuts_short[$status]); } elseif ($mode == 2) { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0').' '.$langs->trans($this->statuts_short[$statut]); - elseif ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4').' '.$langs->trans($this->statuts_short[$statut]); - elseif ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6').' '.$langs->trans($this->statuts_short[$statut]); + if ($status==0) return img_picto($langs->trans($this->statuts_short[$status]), 'statut0').' '.$langs->trans($this->statuts_short[$status]); + elseif ($status==1) return img_picto($langs->trans($this->statuts_short[$status]), 'statut4').' '.$langs->trans($this->statuts_short[$status]); + elseif ($status==2) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6').' '.$langs->trans($this->statuts_short[$status]); } elseif ($mode == 3) { - if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0'); - elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4'); - elseif ($statut==2 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6'); + if ($status==0 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut0'); + elseif ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut4'); + elseif ($status==2 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6'); } elseif ($mode == 4) { - if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==2 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6').' '.$langs->trans($this->statuts[$statut]); + if ($status==0 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut0').' '.$langs->trans($this->statuts[$status]); + elseif ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut4').' '.$langs->trans($this->statuts[$status]); + elseif ($status==2 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6').' '.$langs->trans($this->statuts[$status]); } elseif ($mode == 5) { - if ($statut==0 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]), 'statut0'); - elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]), 'statut4'); - elseif ($statut==2 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]), 'statut6'); + if ($status==0 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]), 'statut0'); + elseif ($status==1 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]), 'statut4'); + elseif ($status==2 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]), 'statut6'); } } diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 3058d418237..f1c3f70c53a 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1995,11 +1995,11 @@ class BonPrelevement extends CommonObject /** * Return status label for a status * - * @param int $statut id statut + * @param int $status Id status * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto * @return string Label */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable if (empty($this->labelStatus)) @@ -2013,37 +2013,37 @@ class BonPrelevement extends CommonObject if ($mode == 0 || $mode == 1) { - return $this->labelStatus[$statut]; + return $this->labelStatus[$status]; } elseif ($mode == 2) { - if ($statut==0) return img_picto($this->labelStatus[$statut], 'statut1').' '.$this->labelStatus[$statut]; - elseif ($statut==1) return img_picto($this->labelStatus[$statut], 'statut3').' '.$this->labelStatus[$statut]; - elseif ($statut==2) return img_picto($this->labelStatus[$statut], 'statut6').' '.$this->labelStatus[$statut]; + if ($status==0) return img_picto($this->labelStatus[$status], 'statut1').' '.$this->labelStatus[$status]; + elseif ($status==1) return img_picto($this->labelStatus[$status], 'statut3').' '.$this->labelStatus[$status]; + elseif ($status==2) return img_picto($this->labelStatus[$status], 'statut6').' '.$this->labelStatus[$status]; } elseif ($mode == 3) { - if ($statut==0) return img_picto($this->labelStatus[$statut], 'statut1'); - elseif ($statut==1) return img_picto($this->labelStatus[$statut], 'statut3'); - elseif ($statut==2) return img_picto($this->labelStatus[$statut], 'statut6'); + if ($status==0) return img_picto($this->labelStatus[$status], 'statut1'); + elseif ($status==1) return img_picto($this->labelStatus[$status], 'statut3'); + elseif ($status==2) return img_picto($this->labelStatus[$status], 'statut6'); } elseif ($mode == 4) { - if ($statut==0) return img_picto($this->labelStatus[$statut], 'statut1').' '.$this->labelStatus[$statut]; - elseif ($statut==1) return img_picto($this->labelStatus[$statut], 'statut3').' '.$this->labelStatus[$statut]; - elseif ($statut==2) return img_picto($this->labelStatus[$statut], 'statut6').' '.$this->labelStatus[$statut]; + if ($status==0) return img_picto($this->labelStatus[$status], 'statut1').' '.$this->labelStatus[$status]; + elseif ($status==1) return img_picto($this->labelStatus[$status], 'statut3').' '.$this->labelStatus[$status]; + elseif ($status==2) return img_picto($this->labelStatus[$status], 'statut6').' '.$this->labelStatus[$status]; } elseif ($mode == 5) { - if ($statut==0) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut1'); - elseif ($statut==1) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut3'); - elseif ($statut==2) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut6'); + if ($status==0) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut1'); + elseif ($status==1) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut3'); + elseif ($status==2) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut6'); } elseif ($mode == 6) { - if ($statut==0) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut1'); - elseif ($statut==1) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut3'); - elseif ($statut==2) return $this->labelStatus[$statut].' '.img_picto($this->labelStatus[$statut], 'statut6'); + if ($status==0) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut1'); + elseif ($status==1) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut3'); + elseif ($status==2) return $this->labelStatus[$status].' '.img_picto($this->labelStatus[$status], 'statut6'); } } } diff --git a/htdocs/compta/prelevement/class/ligneprelevement.class.php b/htdocs/compta/prelevement/class/ligneprelevement.class.php index 3b0f61b17a0..467351e3110 100644 --- a/htdocs/compta/prelevement/class/ligneprelevement.class.php +++ b/htdocs/compta/prelevement/class/ligneprelevement.class.php @@ -132,36 +132,36 @@ class LignePrelevement /** * Return status label for a status * - * @param int $statut id statut + * @param int $status Id status * @param int $mode 0=Label, 1=Picto + label, 2=Picto, 3=Label + Picto * @return string Label */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; if ($mode == 0) { - return $langs->trans($this->statuts[$statut]); + return $langs->trans($this->statuts[$status]); } elseif ($mode == 1) { - if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]), 'statut1').' '.$langs->trans($this->statuts[$statut]); // Waiting - elseif ($statut==2) return img_picto($langs->trans($this->statuts[$statut]), 'statut6').' '.$langs->trans($this->statuts[$statut]); // Credited - elseif ($statut==3) return img_picto($langs->trans($this->statuts[$statut]), 'statut8').' '.$langs->trans($this->statuts[$statut]); // Refused + if ($status==0) return img_picto($langs->trans($this->statuts[$status]), 'statut1').' '.$langs->trans($this->statuts[$status]); // Waiting + elseif ($status==2) return img_picto($langs->trans($this->statuts[$status]), 'statut6').' '.$langs->trans($this->statuts[$status]); // Credited + elseif ($status==3) return img_picto($langs->trans($this->statuts[$status]), 'statut8').' '.$langs->trans($this->statuts[$status]); // Refused } elseif ($mode == 2) { - if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]), 'statut1'); - elseif ($statut==2) return img_picto($langs->trans($this->statuts[$statut]), 'statut6'); - elseif ($statut==3) return img_picto($langs->trans($this->statuts[$statut]), 'statut8'); + if ($status==0) return img_picto($langs->trans($this->statuts[$status]), 'statut1'); + elseif ($status==2) return img_picto($langs->trans($this->statuts[$status]), 'statut6'); + elseif ($status==3) return img_picto($langs->trans($this->statuts[$status]), 'statut8'); } elseif ($mode == 3) { - if ($statut==0) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut1'); - elseif ($statut==2) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut6'); - elseif ($statut==3) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut8'); + if ($status==0) return $langs->trans($this->statuts[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut1'); + elseif ($status==2) return $langs->trans($this->statuts[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut6'); + elseif ($status==3) return $langs->trans($this->statuts[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut8'); } } diff --git a/htdocs/compta/sociales/class/chargesociales.class.php b/htdocs/compta/sociales/class/chargesociales.class.php index bbffbebe0c9..50474f3d52c 100644 --- a/htdocs/compta/sociales/class/chargesociales.class.php +++ b/htdocs/compta/sociales/class/chargesociales.class.php @@ -465,12 +465,12 @@ class ChargeSociales extends CommonObject /** * Renvoi le libelle d'un statut donne * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=short label + picto, 6=Long label + picto * @param double $alreadypaid 0=No payment already done, >0=Some payments were already done (we recommand to put here amount payed if you have it, 1 otherwise) * @return string Label */ - public function LibStatut($statut, $mode = 0, $alreadypaid = -1) + public function LibStatut($status, $mode = 0, $alreadypaid = -1) { // phpcs:enable global $langs; @@ -480,38 +480,38 @@ class ChargeSociales extends CommonObject if ($mode == 0 || $mode == 1) { - if ($statut == 0) return $langs->trans("Unpaid"); - elseif ($statut == 1) return $langs->trans("Paid"); + if ($status == 0) return $langs->trans("Unpaid"); + elseif ($status == 1) return $langs->trans("Paid"); } elseif ($mode == 2) { - if ($statut == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid"); - elseif ($statut == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted"); - elseif ($statut == 1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid"); + if ($status == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid"); + elseif ($status == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted"); + elseif ($status == 1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid"); } elseif ($mode == 3) { - if ($statut == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1'); - elseif ($statut == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3'); - elseif ($statut == 1) return img_picto($langs->trans("Paid"), 'statut6'); + if ($status == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1'); + elseif ($status == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3'); + elseif ($status == 1) return img_picto($langs->trans("Paid"), 'statut6'); } elseif ($mode == 4) { - if ($statut == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid"); - elseif ($statut == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted"); - elseif ($statut == 1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid"); + if ($status == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid"); + elseif ($status == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted"); + elseif ($status == 1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid"); } elseif ($mode == 5) { - if ($statut == 0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1'); - elseif ($statut == 0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3'); - elseif ($statut == 1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6'); + if ($status == 0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1'); + elseif ($status == 0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3'); + elseif ($status == 1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6'); } elseif ($mode == 6) { - if ($statut == 0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1'); - elseif ($statut == 0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3'); - elseif ($statut == 1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6'); + if ($status == 0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1'); + elseif ($status == 0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3'); + elseif ($status == 1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6'); } else return "Error, mode/status not found"; diff --git a/htdocs/core/class/fiscalyear.class.php b/htdocs/core/class/fiscalyear.class.php index f944ccdc0c0..0eed1a56580 100644 --- a/htdocs/core/class/fiscalyear.class.php +++ b/htdocs/core/class/fiscalyear.class.php @@ -290,42 +290,42 @@ class Fiscalyear extends CommonObject /** * Give a label from a status * - * @param int $statut Id status + * @param int $status Id status * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto * @return string Label */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; if ($mode == 0) { - return $langs->trans($this->statuts[$statut]); + return $langs->trans($this->statuts[$status]); } elseif ($mode == 1) { - return $langs->trans($this->statuts_short[$statut]); + return $langs->trans($this->statuts_short[$status]); } elseif ($mode == 2) { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4').' '.$langs->trans($this->statuts_short[$statut]); - elseif ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut8').' '.$langs->trans($this->statuts_short[$statut]); + if ($status==0) return img_picto($langs->trans($this->statuts_short[$status]), 'statut4').' '.$langs->trans($this->statuts_short[$status]); + elseif ($status==1) return img_picto($langs->trans($this->statuts_short[$status]), 'statut8').' '.$langs->trans($this->statuts_short[$status]); } elseif ($mode == 3) { - if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4'); - elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut8'); + if ($status==0 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut4'); + elseif ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut8'); } elseif ($mode == 4) { - if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut8').' '.$langs->trans($this->statuts[$statut]); + if ($status==0 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut4').' '.$langs->trans($this->statuts[$status]); + elseif ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]), 'statut8').' '.$langs->trans($this->statuts[$status]); } elseif ($mode == 5) { - if ($statut==0 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]), 'statut4'); - elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]), 'statut6'); + if ($status==0 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]), 'statut4'); + elseif ($status==1 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]), 'statut6'); } } diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 90583e1d4e4..afecdeeb234 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -8094,7 +8094,7 @@ function roundUpToNextMultiple($n, $x = 5) * @param string $type type of badge : Primary Secondary Success Danger Warning Info Light Dark status0 status1 status2 status3 status4 status5 status6 status7 status8 status9 * @param string $mode default '' , pill, dot * @param string $url the url for link - * @param array $params various params for future : recommended rather than adding more fuction arguments + * @param array $params various params for future : recommended rather than adding more fuction arguments. array('attr'=>array('title'=>'abc')) * @return string Html badge */ function dolGetBadge($label, $html = '', $type = 'primary', $mode = '', $url = '', $params = array()) diff --git a/htdocs/don/class/paymentdonation.class.php b/htdocs/don/class/paymentdonation.class.php index f28ecddc0eb..3c5404366de 100644 --- a/htdocs/don/class/paymentdonation.class.php +++ b/htdocs/don/class/paymentdonation.class.php @@ -474,11 +474,11 @@ class PaymentDonation extends CommonObject /** * Renvoi le libelle d'un statut donne * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto * @return string Libelle du statut */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 0c340bc8695..e4f6f06b5a0 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -1668,44 +1668,44 @@ class Expedition extends CommonObject /** * Return label of a status * - * @param int $statut Id statut + * @param int $status Id statut * @param int $mode 0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto * @return string Label of status */ - public function LibStatut($statut, $mode) + public function LibStatut($status, $mode) { // phpcs:enable global $langs; if ($mode==0) { - if ($statut==0) return $langs->trans($this->statuts[$statut]); - elseif ($statut==1) return $langs->trans($this->statuts[$statut]); - elseif ($statut==2) return $langs->trans($this->statuts[$statut]); + if ($status==0) return $langs->trans($this->statuts[$status]); + elseif ($status==1) return $langs->trans($this->statuts[$status]); + elseif ($status==2) return $langs->trans($this->statuts[$status]); } elseif ($mode==1) { - if ($statut==0) return $langs->trans($this->statutshorts[$statut]); - elseif ($statut==1) return $langs->trans($this->statutshorts[$statut]); - elseif ($statut==2) return $langs->trans($this->statutshorts[$statut]); + if ($status==0) return $langs->trans($this->statutshorts[$status]); + elseif ($status==1) return $langs->trans($this->statutshorts[$status]); + elseif ($status==2) return $langs->trans($this->statutshorts[$status]); } elseif ($mode == 3) { - if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]), 'statut0'); - elseif ($statut==1) return img_picto($langs->trans($this->statuts[$statut]), 'statut4'); - elseif ($statut==2) return img_picto($langs->trans($this->statuts[$statut]), 'statut6'); + if ($status==0) return img_picto($langs->trans($this->statuts[$status]), 'statut0'); + elseif ($status==1) return img_picto($langs->trans($this->statuts[$status]), 'statut4'); + elseif ($status==2) return img_picto($langs->trans($this->statuts[$status]), 'statut6'); } elseif ($mode == 4) { - if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]), 'statut0').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==1) return img_picto($langs->trans($this->statuts[$statut]), 'statut4').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==2) return img_picto($langs->trans($this->statuts[$statut]), 'statut6').' '.$langs->trans($this->statuts[$statut]); + if ($status==0) return img_picto($langs->trans($this->statuts[$status]), 'statut0').' '.$langs->trans($this->statuts[$status]); + elseif ($status==1) return img_picto($langs->trans($this->statuts[$status]), 'statut4').' '.$langs->trans($this->statuts[$status]); + elseif ($status==2) return img_picto($langs->trans($this->statuts[$status]), 'statut6').' '.$langs->trans($this->statuts[$status]); } elseif ($mode == 5) { - if ($statut==0) return $langs->trans($this->statutshorts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut0'); - elseif ($statut==1) return $langs->trans($this->statutshorts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut4'); - elseif ($statut==2) return $langs->trans($this->statutshorts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut6'); + if ($status==0) return $langs->trans($this->statutshorts[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut0'); + elseif ($status==1) return $langs->trans($this->statutshorts[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut4'); + elseif ($status==2) return $langs->trans($this->statutshorts[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut6'); } } diff --git a/htdocs/expensereport/class/paymentexpensereport.class.php b/htdocs/expensereport/class/paymentexpensereport.class.php index 5c72dd18528..074250d2347 100644 --- a/htdocs/expensereport/class/paymentexpensereport.class.php +++ b/htdocs/expensereport/class/paymentexpensereport.class.php @@ -476,11 +476,11 @@ class PaymentExpenseReport extends CommonObject /** * Renvoi le libelle d'un statut donne * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto * @return string Libelle du statut */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; diff --git a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php index aed9db75a64..b453653c681 100644 --- a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php +++ b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php @@ -539,11 +539,11 @@ class CommandeFournisseurDispatch extends CommonObject /** * Return label of a status * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto * @return string Label of status */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; @@ -551,33 +551,33 @@ class CommandeFournisseurDispatch extends CommonObject if ($mode == 0) { - return $langs->trans($this->statuts[$statut]); + return $langs->trans($this->statuts[$status]); } elseif ($mode == 1) { - return $langs->trans($this->statutshort[$statut]); + return $langs->trans($this->statutshort[$status]); } elseif ($mode == 2) { - return $langs->trans($this->statuts[$statut]); + return $langs->trans($this->statuts[$status]); } elseif ($mode == 3) { - if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]), 'statut0'); - elseif ($statut==1) return img_picto($langs->trans($this->statuts[$statut]), 'statut4'); - elseif ($statut==2) return img_picto($langs->trans($this->statuts[$statut]), 'statut8'); + if ($status==0) return img_picto($langs->trans($this->statuts[$status]), 'statut0'); + elseif ($status==1) return img_picto($langs->trans($this->statuts[$status]), 'statut4'); + elseif ($status==2) return img_picto($langs->trans($this->statuts[$status]), 'statut8'); } elseif ($mode == 4) { - if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]), 'statut0').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==1) return img_picto($langs->trans($this->statuts[$statut]), 'statut4').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==2) return img_picto($langs->trans($this->statuts[$statut]), 'statut8').' '.$langs->trans($this->statuts[$statut]); + if ($status==0) return img_picto($langs->trans($this->statuts[$status]), 'statut0').' '.$langs->trans($this->statuts[$status]); + elseif ($status==1) return img_picto($langs->trans($this->statuts[$status]), 'statut4').' '.$langs->trans($this->statuts[$status]); + elseif ($status==2) return img_picto($langs->trans($this->statuts[$status]), 'statut8').' '.$langs->trans($this->statuts[$status]); } elseif ($mode == 5) { - if ($statut==0) return ''.$langs->trans($this->statutshort[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut0'); - elseif ($statut==1) return ''.$langs->trans($this->statutshort[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut4'); - elseif ($statut==2) return ''.$langs->trans($this->statutshort[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]), 'statut8'); + if ($status==0) return ''.$langs->trans($this->statutshort[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut0'); + elseif ($status==1) return ''.$langs->trans($this->statutshort[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut4'); + elseif ($status==2) return ''.$langs->trans($this->statutshort[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut8'); } } diff --git a/htdocs/fourn/commande/index.php b/htdocs/fourn/commande/index.php index ec71820ebbb..6804f96545d 100644 --- a/htdocs/fourn/commande/index.php +++ b/htdocs/fourn/commande/index.php @@ -117,14 +117,14 @@ if ($resql) print '
    '.dol_print_date($db->jdate($obj->datem), 'day').''.$projectstatic->LibStatut($obj->fk_statut, 5).''.$projectstatic->LibStatut($obj->fk_statut, 3).'
    '; print ''; print "\n"; - foreach (array(0,1,2,3,4,5,6) as $statut) + foreach (array(0,1,2,3,4,5,6) as $status) { - $dataseries[]=array($commandestatic->LibStatut($statut, 1), (isset($vals[$statut])?(int) $vals[$statut]:0)); + $dataseries[]=array($commandestatic->LibStatut($status, 1), (isset($vals[$status])?(int) $vals[$status]:0)); if (! $conf->use_javascript_ajax) { print ''; - print ''; - print ''; + print ''; + print ''; print "\n"; } } diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 428015a96f4..1e7fdebaa64 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -823,44 +823,44 @@ class Livraison extends CommonObject /** * Renvoi le libelle d'un statut donne * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto * @return string Label */ - public function LibStatut($statut, $mode) + public function LibStatut($status, $mode) { // phpcs:enable global $langs; if ($mode==0) { - if ($statut==-1) return $langs->trans('StatusDeliveryCanceled'); - elseif ($statut==0) return $langs->trans('StatusDeliveryDraft'); - elseif ($statut==1) return $langs->trans('StatusDeliveryValidated'); + if ($status==-1) return $langs->trans('StatusDeliveryCanceled'); + elseif ($status==0) return $langs->trans('StatusDeliveryDraft'); + elseif ($status==1) return $langs->trans('StatusDeliveryValidated'); } elseif ($mode==1) { - if ($statut==-1) return $langs->trans($this->statuts[$statut]); - elseif ($statut==0) return $langs->trans($this->statuts[$statut]); - elseif ($statut==1) return $langs->trans($this->statuts[$statut]); + if ($status==-1) return $langs->trans($this->statuts[$status]); + elseif ($status==0) return $langs->trans($this->statuts[$status]); + elseif ($status==1) return $langs->trans($this->statuts[$status]); } elseif ($mode == 3) { - if ($statut==-1) return img_picto($langs->trans('StatusDeliveryCanceled'), 'statut5'); - if ($statut==0) return img_picto($langs->trans('StatusDeliveryDraft'), 'statut0'); - if ($statut==1) return img_picto($langs->trans('StatusDeliveryValidated'), 'statut4'); + if ($status==-1) return img_picto($langs->trans('StatusDeliveryCanceled'), 'statut5'); + if ($status==0) return img_picto($langs->trans('StatusDeliveryDraft'), 'statut0'); + if ($status==1) return img_picto($langs->trans('StatusDeliveryValidated'), 'statut4'); } elseif ($mode == 4) { - if ($statut==-1) return img_picto($langs->trans('StatusDeliveryCanceled'), 'statut5').' '.$langs->trans('StatusDeliveryCanceled'); - elseif ($statut==0) return img_picto($langs->trans('StatusDeliveryDraft'), 'statut0').' '.$langs->trans('StatusDeliveryDraft'); - elseif ($statut==1) return img_picto($langs->trans('StatusDeliveryValidated'), 'statut4').' '.$langs->trans('StatusDeliveryValidated'); + if ($status==-1) return img_picto($langs->trans('StatusDeliveryCanceled'), 'statut5').' '.$langs->trans('StatusDeliveryCanceled'); + elseif ($status==0) return img_picto($langs->trans('StatusDeliveryDraft'), 'statut0').' '.$langs->trans('StatusDeliveryDraft'); + elseif ($status==1) return img_picto($langs->trans('StatusDeliveryValidated'), 'statut4').' '.$langs->trans('StatusDeliveryValidated'); } elseif ($mode == 6) { - if ($statut==-1) return $langs->trans('StatusDeliveryCanceled').' '.img_picto($langs->trans('StatusDeliveryCanceled'), 'statut5'); - elseif ($statut==0) return $langs->trans('StatusDeliveryDraft').' '.img_picto($langs->trans('StatusDeliveryDraft'), 'statut0'); - elseif ($statut==1) return $langs->trans('StatusDeliveryValidated').' '.img_picto($langs->trans('StatusDeliveryValidated'), 'statut4'); + if ($status==-1) return $langs->trans('StatusDeliveryCanceled').' '.img_picto($langs->trans('StatusDeliveryCanceled'), 'statut5'); + elseif ($status==0) return $langs->trans('StatusDeliveryDraft').' '.img_picto($langs->trans('StatusDeliveryDraft'), 'statut0'); + elseif ($status==1) return $langs->trans('StatusDeliveryValidated').' '.img_picto($langs->trans('StatusDeliveryValidated'), 'statut4'); } } diff --git a/htdocs/loan/class/loan.class.php b/htdocs/loan/class/loan.class.php index c8e241186d2..9b0c3c69ca6 100644 --- a/htdocs/loan/class/loan.class.php +++ b/htdocs/loan/class/loan.class.php @@ -402,12 +402,12 @@ class Loan extends CommonObject /** * Return label for given status * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=Label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Label, 5=Short label + Picto * @param integer $alreadypaid 0=No payment already done, >0=Some payments were already done (we recommand to put here amount payed if you have it, 1 otherwise) * @return string Label */ - public function LibStatut($statut, $mode = 0, $alreadypaid = -1) + public function LibStatut($status, $mode = 0, $alreadypaid = -1) { // phpcs:enable global $langs; @@ -415,38 +415,38 @@ class Loan extends CommonObject if ($mode == 0 || $mode == 1) { - if ($statut == 0) return $langs->trans("Unpaid"); - elseif ($statut == 1) return $langs->trans("Paid"); + if ($status == 0) return $langs->trans("Unpaid"); + elseif ($status == 1) return $langs->trans("Paid"); } elseif ($mode == 2) { - if ($statut == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid"); - elseif ($statut == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted"); - elseif ($statut == 1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid"); + if ($status == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid"); + elseif ($status == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted"); + elseif ($status == 1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid"); } elseif ($mode == 3) { - if ($statut == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1'); - elseif ($statut == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3'); - elseif ($statut == 1) return img_picto($langs->trans("Paid"), 'statut6'); + if ($status == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1'); + elseif ($status == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3'); + elseif ($status == 1) return img_picto($langs->trans("Paid"), 'statut6'); } elseif ($mode == 4) { - if ($statut == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid"); - elseif ($statut == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted"); - elseif ($statut == 1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid"); + if ($status == 0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid"); + elseif ($status == 0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted"); + elseif ($status == 1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid"); } elseif ($mode == 5) { - if ($statut == 0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1'); - elseif ($statut == 0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3'); - elseif ($statut == 1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6'); + if ($status == 0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1'); + elseif ($status == 0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3'); + elseif ($status == 1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6'); } elseif ($mode == 6) { - if ($statut == 0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1'); - elseif ($statut == 0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3'); - elseif ($statut == 1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6'); + if ($status == 0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1'); + elseif ($status == 0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3'); + elseif ($status == 1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6'); } else return "Error, mode/status not found"; diff --git a/htdocs/product/stock/class/productlot.class.php b/htdocs/product/stock/class/productlot.class.php index 3848a592f21..1e217deef48 100644 --- a/htdocs/product/stock/class/productlot.class.php +++ b/htdocs/product/stock/class/productlot.class.php @@ -501,11 +501,11 @@ class Productlot extends CommonObject /** * Return label of a given status * - * @param int $statut Status + * @param int $status Status * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto * @return string Label of status */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php index 1bd044bc985..ed42a51491b 100644 --- a/htdocs/projet/class/task.class.php +++ b/htdocs/projet/class/task.class.php @@ -1839,11 +1839,11 @@ class Task extends CommonObject /** * Return status label for an object * - * @param int $statut Id statut + * @param int $status Id status * @param integer $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto * @return string Label */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable // list of Statut of the task @@ -1862,59 +1862,59 @@ class Task extends CommonObject if ($mode == 0) { - return $langs->trans($this->statuts[$statut]); + return $langs->trans($this->statuts[$status]); } elseif ($mode == 1) { - return $langs->trans($this->statuts_short[$statut]); + return $langs->trans($this->statuts_short[$status]); } elseif ($mode == 2) { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0').' '.$langs->trans($this->statuts_short[$statut]); - elseif ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut1').' '.$langs->trans($this->statuts_short[$statut]); - elseif ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut3').' '.$langs->trans($this->statuts_short[$statut]); - elseif ($statut==3) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6').' '.$langs->trans($this->statuts_short[$statut]); - elseif ($statut==4) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6').' '.$langs->trans($this->statuts_short[$statut]); - elseif ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut5').' '.$langs->trans($this->statuts_short[$statut]); + if ($status==0) return img_picto($langs->trans($this->statuts_short[$status]), 'statut0').' '.$langs->trans($this->statuts_short[$status]); + elseif ($status==1) return img_picto($langs->trans($this->statuts_short[$status]), 'statut1').' '.$langs->trans($this->statuts_short[$status]); + elseif ($status==2) return img_picto($langs->trans($this->statuts_short[$status]), 'statut3').' '.$langs->trans($this->statuts_short[$status]); + elseif ($status==3) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6').' '.$langs->trans($this->statuts_short[$status]); + elseif ($status==4) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6').' '.$langs->trans($this->statuts_short[$status]); + elseif ($status==5) return img_picto($langs->trans($this->statuts_short[$status]), 'statut5').' '.$langs->trans($this->statuts_short[$status]); } elseif ($mode == 3) { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0'); - elseif ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut1'); - elseif ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut3'); - elseif ($statut==3) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6'); - elseif ($statut==4) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6'); - elseif ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut5'); + if ($status==0) return img_picto($langs->trans($this->statuts_short[$status]), 'statut0'); + elseif ($status==1) return img_picto($langs->trans($this->statuts_short[$status]), 'statut1'); + elseif ($status==2) return img_picto($langs->trans($this->statuts_short[$status]), 'statut3'); + elseif ($status==3) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6'); + elseif ($status==4) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6'); + elseif ($status==5) return img_picto($langs->trans($this->statuts_short[$status]), 'statut5'); } elseif ($mode == 4) { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut1').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut3').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==3) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==4) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]), 'statut5').' '.$langs->trans($this->statuts[$statut]); + if ($status==0) return img_picto($langs->trans($this->statuts_short[$status]), 'statut0').' '.$langs->trans($this->statuts[$status]); + elseif ($status==1) return img_picto($langs->trans($this->statuts_short[$status]), 'statut1').' '.$langs->trans($this->statuts[$status]); + elseif ($status==2) return img_picto($langs->trans($this->statuts_short[$status]), 'statut3').' '.$langs->trans($this->statuts[$status]); + elseif ($status==3) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6').' '.$langs->trans($this->statuts[$status]); + elseif ($status==4) return img_picto($langs->trans($this->statuts_short[$status]), 'statut6').' '.$langs->trans($this->statuts[$status]); + elseif ($status==5) return img_picto($langs->trans($this->statuts_short[$status]), 'statut5').' '.$langs->trans($this->statuts[$status]); } elseif ($mode == 5) { - /*if ($statut==0) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut0'); - elseif ($statut==1) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut1'); - elseif ($statut==2) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut3'); - elseif ($statut==3) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6'); - elseif ($statut==4) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6'); - elseif ($statut==5) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut5'); + /*if ($status==0) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut0'); + elseif ($status==1) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut1'); + elseif ($status==2) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut3'); + elseif ($status==3) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut6'); + elseif ($status==4) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut6'); + elseif ($status==5) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut5'); */ //else return $this->progress.' %'; return ' '; } elseif ($mode == 6) { - /*if ($statut==0) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut0'); - elseif ($statut==1) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut1'); - elseif ($statut==2) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut3'); - elseif ($statut==3) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6'); - elseif ($statut==4) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6'); - elseif ($statut==5) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut5'); + /*if ($status==0) return $langs->trans($this->statuts[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut0'); + elseif ($status==1) return $langs->trans($this->statuts[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut1'); + elseif ($status==2) return $langs->trans($this->statuts[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut3'); + elseif ($status==3) return $langs->trans($this->statuts[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut6'); + elseif ($status==4) return $langs->trans($this->statuts[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut6'); + elseif ($status==5) return $langs->trans($this->statuts[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut5'); */ //else return $this->progress.' %'; return ' '; diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index dd819adff0a..eae8ab9de34 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -1136,44 +1136,44 @@ class Reception extends CommonObject /** * Return label of a status * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto * @return string Label of status */ - public function LibStatut($statut, $mode) + public function LibStatut($status, $mode) { // phpcs:enable global $langs; if ($mode==0) { - if ($statut==0) return $langs->trans($this->statuts[$statut]); - elseif ($statut==1) return $langs->trans($this->statuts[$statut]); - elseif ($statut==2) return $langs->trans($this->statuts[$statut]); + if ($status==0) return $langs->trans($this->statuts[$status]); + elseif ($status==1) return $langs->trans($this->statuts[$status]); + elseif ($status==2) return $langs->trans($this->statuts[$status]); } elseif ($mode==1) { - if ($statut==0) return $langs->trans('StatusReceptionDraftShort'); - elseif ($statut==1) return $langs->trans('StatusReceptionValidatedShort'); - elseif ($statut==2) return $langs->trans('StatusReceptionProcessedShort'); + if ($status==0) return $langs->trans('StatusReceptionDraftShort'); + elseif ($status==1) return $langs->trans('StatusReceptionValidatedShort'); + elseif ($status==2) return $langs->trans('StatusReceptionProcessedShort'); } elseif ($mode == 3) { - if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]), 'statut0'); - elseif ($statut==1) return img_picto($langs->trans($this->statuts[$statut]), 'statut4'); - elseif ($statut==2) return img_picto($langs->trans('StatusReceptionProcessed'), 'statut6'); + if ($status==0) return img_picto($langs->trans($this->statuts[$status]), 'statut0'); + elseif ($status==1) return img_picto($langs->trans($this->statuts[$status]), 'statut4'); + elseif ($status==2) return img_picto($langs->trans('StatusReceptionProcessed'), 'statut6'); } elseif ($mode == 4) { - if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]), 'statut0').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==1) return img_picto($langs->trans($this->statuts[$statut]), 'statut4').' '.$langs->trans($this->statuts[$statut]); - elseif ($statut==2) return img_picto($langs->trans('StatusReceptionProcessed'), 'statut6').' '.$langs->trans('StatusReceptionProcessed'); + if ($status==0) return img_picto($langs->trans($this->statuts[$status]), 'statut0').' '.$langs->trans($this->statuts[$status]); + elseif ($status==1) return img_picto($langs->trans($this->statuts[$status]), 'statut4').' '.$langs->trans($this->statuts[$status]); + elseif ($status==2) return img_picto($langs->trans('StatusReceptionProcessed'), 'statut6').' '.$langs->trans('StatusReceptionProcessed'); } elseif ($mode == 5) { - if ($statut==0) return $langs->trans('StatusReceptionDraftShort').' '.img_picto($langs->trans($this->statuts[$statut]), 'statut0'); - elseif ($statut==1) return $langs->trans('StatusReceptionValidatedShort').' '.img_picto($langs->trans($this->statuts[$statut]), 'statut4'); - elseif ($statut==2) return $langs->trans('StatusReceptionProcessedShort').' '.img_picto($langs->trans('StatusReceptionProcessedShort'), 'statut6'); + if ($status==0) return $langs->trans('StatusReceptionDraftShort').' '.img_picto($langs->trans($this->statuts[$status]), 'statut0'); + elseif ($status==1) return $langs->trans('StatusReceptionValidatedShort').' '.img_picto($langs->trans($this->statuts[$status]), 'statut4'); + elseif ($status==2) return $langs->trans('StatusReceptionProcessedShort').' '.img_picto($langs->trans('StatusReceptionProcessedShort'), 'statut6'); } } diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 0daba74be77..9a3bce8c458 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -1169,123 +1169,123 @@ class Ticket extends CommonObject /** * Return status label of object * - * @param string $statut id statut + * @param string $status Id status * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto * @return string Label */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; if ($mode == 0) { - return $langs->trans($this->statuts[$statut]); + return $langs->trans($this->statuts[$status]); } elseif ($mode == 1) { - return $langs->trans($this->statuts_short[$statut]); + return $langs->trans($this->statuts_short[$status]); } elseif ($mode == 2) { - if ($statut == self::STATUS_NOT_READ) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + if ($status == self::STATUS_NOT_READ) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut0.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_READ) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut1.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_READ) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut1.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_ASSIGNED) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut2.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_ASSIGNED) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut2.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_IN_PROGRESS) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut3.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_IN_PROGRESS) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut3.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_NEED_MORE_INFO) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut5.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_NEED_MORE_INFO) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut5.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_WAITING) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_WAITING) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut6.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_CLOSED) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut8.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_CLOSED) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut8.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_CANCELED) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut9.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_CANCELED) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut9.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } } elseif ($mode == 3) { - if ($statut == self::STATUS_NOT_READ) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0.png@ticket'); + if ($status == self::STATUS_NOT_READ) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut0.png@ticket'); } - elseif ($statut == self::STATUS_READ) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut1.png@ticket'); + elseif ($status == self::STATUS_READ) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut1.png@ticket'); } - elseif ($statut == self::STATUS_ASSIGNED) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut2.png@ticket'); + elseif ($status == self::STATUS_ASSIGNED) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut2.png@ticket'); } - elseif ($statut == self::STATUS_IN_PROGRESS) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut3.png@ticket'); + elseif ($status == self::STATUS_IN_PROGRESS) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut3.png@ticket'); } - elseif ($statut == self::STATUS_NEED_MORE_INFO) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut5.png@ticket'); + elseif ($status == self::STATUS_NEED_MORE_INFO) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut5.png@ticket'); } - elseif ($statut == self::STATUS_WAITING) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6.png@ticket'); + elseif ($status == self::STATUS_WAITING) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut6.png@ticket'); } - elseif ($statut == self::STATUS_CLOSED) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut8.png@ticket'); + elseif ($status == self::STATUS_CLOSED) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut8.png@ticket'); } - elseif ($statut == self::STATUS_CANCELED) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut9.png@ticket'); + elseif ($status == self::STATUS_CANCELED) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut9.png@ticket'); } } elseif ($mode == 4) { - if ($statut == self::STATUS_NOT_READ) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + if ($status == self::STATUS_NOT_READ) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut0.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_READ) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut1.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_READ) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut1.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_ASSIGNED) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut2.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_ASSIGNED) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut2.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_IN_PROGRESS) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut3.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_IN_PROGRESS) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut3.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_NEED_MORE_INFO) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut5.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_NEED_MORE_INFO) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut5.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_WAITING) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_WAITING) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut6.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_CLOSED) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut8.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_CLOSED) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut8.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } - elseif ($statut == self::STATUS_CANCELED) { - return img_picto($langs->trans($this->statuts_short[$statut]), 'statut9.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]); + elseif ($status == self::STATUS_CANCELED) { + return img_picto($langs->trans($this->statuts_short[$status]), 'statut9.png@ticket') . ' ' . $langs->trans($this->statuts_short[$status]); } } elseif ($mode == 5 || $mode == 6) { - if ($statut == self::STATUS_NOT_READ) { - return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut0.png@ticket'); + if ($status == self::STATUS_NOT_READ) { + return $langs->trans($this->statuts_short[$status]) . ' ' . img_picto($langs->trans($this->statuts_short[$status]), 'statut0.png@ticket'); } - elseif ($statut == self::STATUS_READ) { - return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut1.png@ticket'); + elseif ($status == self::STATUS_READ) { + return $langs->trans($this->statuts_short[$status]) . ' ' . img_picto($langs->trans($this->statuts_short[$status]), 'statut1.png@ticket'); } - elseif ($statut == self::STATUS_ASSIGNED) { - return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut2.png@ticket'); + elseif ($status == self::STATUS_ASSIGNED) { + return $langs->trans($this->statuts_short[$status]) . ' ' . img_picto($langs->trans($this->statuts_short[$status]), 'statut2.png@ticket'); } - elseif ($statut == self::STATUS_IN_PROGRESS) { - return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut3.png@ticket'); + elseif ($status == self::STATUS_IN_PROGRESS) { + return $langs->trans($this->statuts_short[$status]) . ' ' . img_picto($langs->trans($this->statuts_short[$status]), 'statut3.png@ticket'); } - elseif ($statut == self::STATUS_NEED_MORE_INFO) { - return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut5.png@ticket'); + elseif ($status == self::STATUS_NEED_MORE_INFO) { + return $langs->trans($this->statuts_short[$status]) . ' ' . img_picto($langs->trans($this->statuts_short[$status]), 'statut5.png@ticket'); } - elseif ($statut == self::STATUS_WAITING) { - return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut6.png@ticket'); + elseif ($status == self::STATUS_WAITING) { + return $langs->trans($this->statuts_short[$status]) . ' ' . img_picto($langs->trans($this->statuts_short[$status]), 'statut6.png@ticket'); } - elseif ($statut == self::STATUS_CLOSED) { - return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut8.png@ticket'); + elseif ($status == self::STATUS_CLOSED) { + return $langs->trans($this->statuts_short[$status]) . ' ' . img_picto($langs->trans($this->statuts_short[$status]), 'statut8.png@ticket'); } - elseif ($statut == self::STATUS_CANCELED) { - return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut9.png@ticket'); + elseif ($status == self::STATUS_CANCELED) { + return $langs->trans($this->statuts_short[$status]) . ' ' . img_picto($langs->trans($this->statuts_short[$status]), 'statut9.png@ticket'); } } } @@ -2228,13 +2228,13 @@ class Ticket extends CommonObject * Get array of all contacts for a ticket * Override method of file commonobject.class.php to add phone number * - * @param int $statut Status of lines to get (-1=all) + * @param int $status Status of lines to get (-1=all) * @param string $source Source of contact: external or thirdparty (llx_socpeople) or internal (llx_user) * @param int $list 0:Return array contains all properties, 1:Return array contains just id * @param string $code Filter on this code of contact type ('SHIPPING', 'BILLING', ...) * @return array Array of contacts */ - public function listeContact($statut = -1, $source = 'external', $list = 0, $code = '') + public function listeContact($status = -1, $source = 'external', $list = 0, $code = '') { global $langs; @@ -2281,8 +2281,8 @@ class Ticket extends CommonObject } $sql .= " AND tc.active=1"; - if ($statut >= 0) { - $sql .= " AND ec.statut = '" . $statut . "'"; + if ($status >= 0) { + $sql .= " AND ec.statut = '" . $status . "'"; } $sql .= " ORDER BY t.lastname ASC"; diff --git a/htdocs/user/class/usergroup.class.php b/htdocs/user/class/usergroup.class.php index b624bdb34d9..8a6fcd60ce9 100644 --- a/htdocs/user/class/usergroup.class.php +++ b/htdocs/user/class/usergroup.class.php @@ -836,11 +836,11 @@ class UserGroup extends CommonObject /** * Renvoi le libelle d'un statut donne * - * @param int $statut Id statut + * @param int $status Id status * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto * @return string Label of status */ - public function LibStatut($statut, $mode = 0) + public function LibStatut($status, $mode = 0) { // phpcs:enable global $langs; From 941043dd67356c7d40eefa83cb995c7707f30530 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 00:17:08 +0100 Subject: [PATCH 805/980] Fix navigation on resources --- htdocs/comm/mailing/info.php | 11 +++- .../template/myobject_agenda.php | 13 ++--- htdocs/resource/agenda.php | 55 +++++++++---------- htdocs/resource/card.php | 17 +++--- htdocs/resource/document.php | 4 +- 5 files changed, 53 insertions(+), 47 deletions(-) diff --git a/htdocs/comm/mailing/info.php b/htdocs/comm/mailing/info.php index 7b270e460c8..8d15f86915d 100644 --- a/htdocs/comm/mailing/info.php +++ b/htdocs/comm/mailing/info.php @@ -57,7 +57,16 @@ if ($object->fetch($id) >= 0) $linkback = ''.$langs->trans("BackToList").''; $morehtmlright=''; - if ($object->statut == 2) $morehtmlright.=' ('.$object->countNbOfTargets('alreadysent').'/'.$object->nbemail.') '; + $nbtry = $nbok = 0; + if ($object->statut == 2 || $object->statut == 3) + { + $nbtry = $object->countNbOfTargets('alreadysent'); + $nbko = $object->countNbOfTargets('alreadysentko'); + + $morehtmlright.=' ('.$nbtry.'/'.$object->nbemail; + if ($nbko) $morehtmlright.=' - '.$nbko.' '.$langs->trans("Error"); + $morehtmlright.=')   '; + } dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', '', '', 0, '', $morehtmlright); diff --git a/htdocs/modulebuilder/template/myobject_agenda.php b/htdocs/modulebuilder/template/myobject_agenda.php index 8abb3623909..90a14061cdc 100644 --- a/htdocs/modulebuilder/template/myobject_agenda.php +++ b/htdocs/modulebuilder/template/myobject_agenda.php @@ -65,11 +65,6 @@ else } $search_agenda_label=GETPOST('search_agenda_label'); -// Security check - Protection if external user -//if ($user->societe_id > 0) access_forbidden(); -//if ($user->societe_id > 0) $socid = $user->societe_id; -//$result = restrictedArea($user, 'mymodule', $id); - $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; $sortfield = GETPOST("sortfield", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha'); @@ -79,7 +74,7 @@ $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; if (! $sortfield) $sortfield='a.datep,a.id'; -if (! $sortorder) $sortorder='DESC'; +if (! $sortorder) $sortorder='DESC,DESC'; // Initialize technical objects $object=new MyObject($db); @@ -93,13 +88,17 @@ $extrafields->fetch_name_optionals_label($object->table_element); include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mymodule->multidir_output[$object->entity] . "/" . $object->id; +// Security check - Protection if external user +//if ($user->societe_id > 0) access_forbidden(); +//if ($user->societe_id > 0) $socid = $user->societe_id; +//$result = restrictedArea($user, 'mymodule', $object->id); /* * Actions */ -$parameters=array('id'=>$socid); +$parameters=array('id'=>$id); $reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); diff --git a/htdocs/resource/agenda.php b/htdocs/resource/agenda.php index 0f2e79ef86f..303db5ec7b3 100644 --- a/htdocs/resource/agenda.php +++ b/htdocs/resource/agenda.php @@ -37,6 +37,13 @@ require_once DOL_DOCUMENT_ROOT.'/resource/class/dolresource.class.php'; // Load translation files required by the page $langs->load("companies"); +// Get parameters +$id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); +$action = GETPOST('action', 'alpha'); +$cancel = GETPOST('cancel', 'aZ09'); +$backtopage = GETPOST('backtopage', 'alpha'); + if (GETPOST('actioncode', 'array')) { $actioncode=GETPOST('actioncode', 'array', 3); @@ -48,21 +55,6 @@ else } $search_agenda_label=GETPOST('search_agenda_label'); -// Security check -$id = GETPOST('id', 'int'); -$ref = GETPOST('ref', 'alpha'); -if ($user->societe_id) $id=$user->societe_id; -// Protection if external user -if ($user->socid > 0) -{ - accessforbidden(); -} - -if( ! $user->rights->resource->read) -{ - accessforbidden(); -} - $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; $sortfield = GETPOST("sortfield", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha'); @@ -74,9 +66,20 @@ $pagenext = $page + 1; if (! $sortfield) $sortfield='a.datep,a.id'; if (! $sortorder) $sortorder='DESC,DESC'; -// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$object = new DolResource($db); +$object->fetch($id, $ref); + +// Initialize technical objects +//$object=new MyObject($db); +$extrafields = new ExtraFields($db); $hookmanager->initHooks(array('agendaresource')); +// Security check +if( ! $user->rights->resource->read) +{ + accessforbidden(); +} + /* * Actions @@ -110,10 +113,9 @@ if (empty($reshook)) */ $contactstatic = new Contact($db); - $form = new Form($db); -if ($id > 0 || $ref) +if ($object->id > 0) { require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; @@ -121,9 +123,6 @@ if ($id > 0 || $ref) $langs->load("companies"); $picto = 'resource'; - $object = new Dolresource($db); - $result = $object->fetch($id); - $title=$langs->trans("Agenda"); if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/productnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->ref." - ".$title; llxHeader('', $title); @@ -138,13 +137,15 @@ if ($id > 0 || $ref) $linkback = ''.$langs->trans("BackToList").''; + $morehtmlref='
    '; + $morehtmlref.='
    '; + $shownav = 1; if ($user->societe_id && ! in_array('resource', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; - dol_banner_tab($object, 'id', $linkback, $shownav, 'id'); + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); print '
    '; - print '
    '; print '
    '; @@ -153,11 +154,9 @@ if ($id > 0 || $ref) if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) )) { - print '
    '; - - $param='&id='.$id; - if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; - if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; + $param='&id='.$object->id.'&socid='.$socid; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); print_barre_liste($langs->trans("ActionsOnResource"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlcenter, '', 0, 1, 1); diff --git a/htdocs/resource/card.php b/htdocs/resource/card.php index 2b4092671dc..f52da4934b0 100644 --- a/htdocs/resource/card.php +++ b/htdocs/resource/card.php @@ -63,9 +63,9 @@ $extrafields->fetch_name_optionals_label($object->table_element); -/******************************************************************* - * ACTIONS - ********************************************************************/ +/* + * Actions + */ $hookmanager->initHooks(array('resource', 'resource_card','globalcard')); $parameters=array('resource_id'=>$id); @@ -211,18 +211,17 @@ if (empty($reshook)) } -/*************************************************** -* VIEW -* -* Put here all code to build page -****************************************************/ +/* + * View + */ + $title = $langs->trans($action == 'create' ? 'AddResource' : 'ResourceSingular'); llxHeader('', $title, ''); $form = new Form($db); $formresource = new FormResource($db); -if ($action == 'create' || $object->fetch($id) > 0) +if ($action == 'create' || $object->fetch($id, $ref) > 0) { if ($action == 'create') { diff --git a/htdocs/resource/document.php b/htdocs/resource/document.php index fef78e8088c..9f1b5af4322 100644 --- a/htdocs/resource/document.php +++ b/htdocs/resource/document.php @@ -82,7 +82,7 @@ $form = new Form($db); llxHeader('', $langs->trans("Resource")); -if ($object->id) +if ($object->id > 0) { $object->fetch_thirdparty(); @@ -100,7 +100,7 @@ if ($object->id) } - $linkback = '' . $langs->trans("BackToList") . ''; + $linkback = '' . $langs->trans("BackToList") . ''; $morehtmlref='
    '; From a14aab5eb1044605ed121111be484c786a14e82b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 00:18:50 +0100 Subject: [PATCH 806/980] Fix template --- htdocs/modulebuilder/template/myobject_agenda.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/modulebuilder/template/myobject_agenda.php b/htdocs/modulebuilder/template/myobject_agenda.php index 90a14061cdc..7a15ba2843a 100644 --- a/htdocs/modulebuilder/template/myobject_agenda.php +++ b/htdocs/modulebuilder/template/myobject_agenda.php @@ -125,8 +125,6 @@ if (empty($reshook)) * View */ -$contactstatic = new Contact($db); - $form = new Form($db); if ($object->id > 0) From 50f55cac35c92b7ab4f349a6f9cd3c82c40a51b0 Mon Sep 17 00:00:00 2001 From: Scrutinizer Auto-Fixer Date: Sat, 2 Nov 2019 00:17:45 +0000 Subject: [PATCH 807/980] Scrutinizer Auto-Fixes This commit consists of patches automatically generated for this project on https://scrutinizer-ci.com --- .../fourn/class/api_supplier_orders.class.php | 590 +++++++++--------- htdocs/societe/index.php | 152 ++--- htdocs/stripe/config.php | 6 +- 3 files changed, 374 insertions(+), 374 deletions(-) diff --git a/htdocs/fourn/class/api_supplier_orders.class.php b/htdocs/fourn/class/api_supplier_orders.class.php index 2ab90bcd73b..37ac4c55e9d 100644 --- a/htdocs/fourn/class/api_supplier_orders.class.php +++ b/htdocs/fourn/class/api_supplier_orders.class.php @@ -28,180 +28,180 @@ require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; */ class SupplierOrders extends DolibarrApi { - /** - * - * @var array $FIELDS Mandatory fields, checked when create and update object - */ - static $FIELDS = array( - 'socid' - ); + /** + * + * @var array $FIELDS Mandatory fields, checked when create and update object + */ + static $FIELDS = array( + 'socid' + ); - /** - * @var CommandeFournisseur $order {@type CommandeFournisseur} - */ - public $order; + /** + * @var CommandeFournisseur $order {@type CommandeFournisseur} + */ + public $order; - /** - * Constructor - */ - public function __construct() - { - global $db, $conf; - $this->db = $db; - $this->order = new CommandeFournisseur($this->db); - } + /** + * Constructor + */ + public function __construct() + { + global $db, $conf; + $this->db = $db; + $this->order = new CommandeFournisseur($this->db); + } - /** - * Get properties of a supplier order object - * - * Return an array with supplier order information - * - * @param int $id ID of supplier order - * @return array|mixed data without useless information - * - * @throws RestException - */ - public function get($id) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->commande->lire) { - throw new RestException(401); - } + /** + * Get properties of a supplier order object + * + * Return an array with supplier order information + * + * @param int $id ID of supplier order + * @return array|mixed data without useless information + * + * @throws RestException + */ + public function get($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->commande->lire) { + throw new RestException(401); + } - $result = $this->order->fetch($id); - if ( ! $result ) { - throw new RestException(404, 'Supplier order not found'); - } + $result = $this->order->fetch($id); + if ( ! $result ) { + throw new RestException(404, 'Supplier order not found'); + } - if ( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->order->id, '', 'commande')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if ( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->order->id, '', 'commande')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - $this->order->fetchObjectLinked(); - return $this->_cleanObjectDatas($this->order); - } + $this->order->fetchObjectLinked(); + return $this->_cleanObjectDatas($this->order); + } - /** - * List orders - * - * Get a list of supplier orders - * - * @param string $sortfield Sort field - * @param string $sortorder Sort order - * @param int $limit Limit for list - * @param int $page Page number - * @param string $thirdparty_ids Thirdparty ids to filter orders of (example '1' or '1,2,3') {@pattern /^[0-9,]*$/i} - * @param string $status Filter by order status : draft | validated | approved | running | received_start | received_end | cancelled | refused - * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')" - * @return array Array of order objects - * - * @throws RestException - */ - public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $status = '', $sqlfilters = '') - { - global $db, $conf; + /** + * List orders + * + * Get a list of supplier orders + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Limit for list + * @param int $page Page number + * @param string $thirdparty_ids Thirdparty ids to filter orders of (example '1' or '1,2,3') {@pattern /^[0-9,]*$/i} + * @param string $status Filter by order status : draft | validated | approved | running | received_start | received_end | cancelled | refused + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')" + * @return array Array of order objects + * + * @throws RestException + */ + public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $status = '', $sqlfilters = '') + { + global $db, $conf; - $obj_ret = array(); + $obj_ret = array(); - // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; + // case of external user, $thirdparty_ids param is ignored and replaced by user's socid + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; - // If the internal user must only see his customers, force searching by him - $search_sale = 0; - if (! DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) $search_sale = DolibarrApiAccess::$user->id; + // If the internal user must only see his customers, force searching by him + $search_sale = 0; + if (! DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) $search_sale = DolibarrApiAccess::$user->id; - $sql = "SELECT t.rowid"; - if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; // We need these fields in order to filter by sale (including the case where the user can only see his prospects) - $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as t"; + $sql = "SELECT t.rowid"; + if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; // We need these fields in order to filter by sale (including the case where the user can only see his prospects) + $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as t"; - if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale + if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale - $sql.= ' WHERE t.entity IN ('.getEntity('supplier_order').')'; - if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= " AND t.fk_soc = sc.fk_soc"; - if ($socids) $sql.= " AND t.fk_soc IN (".$socids.")"; - if ($search_sale > 0) $sql.= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale + $sql.= ' WHERE t.entity IN ('.getEntity('supplier_order').')'; + if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= " AND t.fk_soc = sc.fk_soc"; + if ($socids) $sql.= " AND t.fk_soc IN (".$socids.")"; + if ($search_sale > 0) $sql.= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale - // Filter by status - if ($status == 'draft') $sql.= " AND t.fk_statut IN (0)"; - if ($status == 'validated') $sql.= " AND t.fk_statut IN (1)"; - if ($status == 'approved') $sql.= " AND t.fk_statut IN (2)"; - if ($status == 'running') $sql.= " AND t.fk_statut IN (3)"; - if ($status == 'received_start') $sql.= " AND t.fk_statut IN (4)"; - if ($status == 'received_end') $sql.= " AND t.fk_statut IN (5)"; - if ($status == 'cancelled') $sql.= " AND t.fk_statut IN (6,7)"; - if ($status == 'refused') $sql.= " AND t.fk_statut IN (9)"; - // Insert sale filter - if ($search_sale > 0) - { - $sql .= " AND sc.fk_user = ".$search_sale; - } - // Add sql filters - if ($sqlfilters) - { - if (! DolibarrApi::_checkFilters($sqlfilters)) - { - throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); - } - $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; - $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; - } + // Filter by status + if ($status == 'draft') $sql.= " AND t.fk_statut IN (0)"; + if ($status == 'validated') $sql.= " AND t.fk_statut IN (1)"; + if ($status == 'approved') $sql.= " AND t.fk_statut IN (2)"; + if ($status == 'running') $sql.= " AND t.fk_statut IN (3)"; + if ($status == 'received_start') $sql.= " AND t.fk_statut IN (4)"; + if ($status == 'received_end') $sql.= " AND t.fk_statut IN (5)"; + if ($status == 'cancelled') $sql.= " AND t.fk_statut IN (6,7)"; + if ($status == 'refused') $sql.= " AND t.fk_statut IN (9)"; + // Insert sale filter + if ($search_sale > 0) + { + $sql .= " AND sc.fk_user = ".$search_sale; + } + // Add sql filters + if ($sqlfilters) + { + if (! DolibarrApi::_checkFilters($sqlfilters)) + { + throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); + } + $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; + $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } - $sql.= $db->order($sortfield, $sortorder); - if ($limit) { - if ($page < 0) - { - $page = 0; - } - $offset = $limit * $page; + $sql.= $db->order($sortfield, $sortorder); + if ($limit) { + if ($page < 0) + { + $page = 0; + } + $offset = $limit * $page; - $sql.= $db->plimit($limit + 1, $offset); - } + $sql.= $db->plimit($limit + 1, $offset); + } - $result = $db->query($sql); - if ($result) - { - $i = 0; - $num = $db->num_rows($result); - $min = min($num, ($limit <= 0 ? $num : $limit)); - while ($i < $min) - { - $obj = $db->fetch_object($result); - $order_static = new CommandeFournisseur($db); - if($order_static->fetch($obj->rowid)) { - $obj_ret[] = $this->_cleanObjectDatas($order_static); - } - $i++; - } - } - else { - throw new RestException(503, 'Error when retrieve supplier order list : '.$db->lasterror()); - } - if( ! count($obj_ret)) { - throw new RestException(404, 'No supplier order found'); - } - return $obj_ret; - } + $result = $db->query($sql); + if ($result) + { + $i = 0; + $num = $db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + while ($i < $min) + { + $obj = $db->fetch_object($result); + $order_static = new CommandeFournisseur($db); + if($order_static->fetch($obj->rowid)) { + $obj_ret[] = $this->_cleanObjectDatas($order_static); + } + $i++; + } + } + else { + throw new RestException(503, 'Error when retrieve supplier order list : '.$db->lasterror()); + } + if( ! count($obj_ret)) { + throw new RestException(404, 'No supplier order found'); + } + return $obj_ret; + } - /** - * Create supplier order object - * - * @param array $request_data Request datas - * @return int ID of supplier order - */ - public function post($request_data = null) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->commande->creer) { - throw new RestException(401, "Insuffisant rights"); - } - // Check mandatory fields - $result = $this->_validate($request_data); + /** + * Create supplier order object + * + * @param array $request_data Request datas + * @return int ID of supplier order + */ + public function post($request_data = null) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->commande->creer) { + throw new RestException(401, "Insuffisant rights"); + } + // Check mandatory fields + $result = $this->_validate($request_data); - foreach($request_data as $field => $value) { - $this->order->$field = $value; - } - if(! array_keys($request_data, 'date')) { - $this->order->date = dol_now(); - } - /* We keep lines as an array + foreach($request_data as $field => $value) { + $this->order->$field = $value; + } + if(! array_keys($request_data, 'date')) { + $this->order->date = dol_now(); + } + /* We keep lines as an array if (isset($request_data["lines"])) { $lines = array(); foreach ($request_data["lines"] as $line) { @@ -210,163 +210,163 @@ class SupplierOrders extends DolibarrApi $this->order->lines = $lines; }*/ - if ($this->order->create(DolibarrApiAccess::$user) < 0) { - throw new RestException(500, "Error creating order", array_merge(array($this->order->error), $this->order->errors)); - } - return $this->order->id; - } + if ($this->order->create(DolibarrApiAccess::$user) < 0) { + throw new RestException(500, "Error creating order", array_merge(array($this->order->error), $this->order->errors)); + } + return $this->order->id; + } - /** - * Update supplier order - * - * @param int $id Id of supplier order to update - * @param array $request_data Datas - * @return int - */ - public function put($id, $request_data = null) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->commande->creer) { - throw new RestException(401); - } + /** + * Update supplier order + * + * @param int $id Id of supplier order to update + * @param array $request_data Datas + * @return int + */ + public function put($id, $request_data = null) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->commande->creer) { + throw new RestException(401); + } - $result = $this->order->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier order not found'); - } + $result = $this->order->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier order not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->order->id, '', 'commande')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->order->id, '', 'commande')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - foreach($request_data as $field => $value) { - if ($field == 'id') continue; - $this->order->$field = $value; - } + foreach($request_data as $field => $value) { + if ($field == 'id') continue; + $this->order->$field = $value; + } - if($this->order->update($id, DolibarrApiAccess::$user)) - return $this->get($id); + if($this->order->update($id, DolibarrApiAccess::$user)) + return $this->get($id); - return false; - } + return false; + } - /** - * Delete supplier order - * - * @param int $id Supplier order ID - * @return type - */ - public function delete($id) - { - if (! DolibarrApiAccess::$user->rights->fournisseur->commande->supprimer) { - throw new RestException(401); - } - $result = $this->order->fetch($id); - if ( ! $result) { - throw new RestException(404, 'Supplier order not found'); - } + /** + * Delete supplier order + * + * @param int $id Supplier order ID + * @return type + */ + public function delete($id) + { + if (! DolibarrApiAccess::$user->rights->fournisseur->commande->supprimer) { + throw new RestException(401); + } + $result = $this->order->fetch($id); + if ( ! $result) { + throw new RestException(404, 'Supplier order not found'); + } - if ( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->order->id, '', 'commande')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if ( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->order->id, '', 'commande')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - if ( $this->order->delete(DolibarrApiAccess::$user) < 0) { - throw new RestException(500); - } + if ( $this->order->delete(DolibarrApiAccess::$user) < 0) { + throw new RestException(500); + } - return array( - 'success' => array( - 'code' => 200, - 'message' => 'Supplier order deleted' - ) - ); - } + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Supplier order deleted' + ) + ); + } - /** - * Validate an order - * - * @param int $id Order ID - * @param int $idwarehouse Warehouse ID - * @param int $notrigger 1=Does not execute triggers, 0= execute triggers - * - * @url POST {id}/validate - * - * @return array - * FIXME An error 403 is returned if the request has an empty body. - * Error message: "Forbidden: Content type `text/plain` is not supported." - * Workaround: send this in the body - * { - * "idwarehouse": 0, - * "notrigger": 0 - * } - */ - public function validate($id, $idwarehouse = 0, $notrigger = 0) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->commande->creer) { - throw new RestException(401); - } - $result = $this->order->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Order not found'); - } + /** + * Validate an order + * + * @param int $id Order ID + * @param int $idwarehouse Warehouse ID + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers + * + * @url POST {id}/validate + * + * @return array + * FIXME An error 403 is returned if the request has an empty body. + * Error message: "Forbidden: Content type `text/plain` is not supported." + * Workaround: send this in the body + * { + * "idwarehouse": 0, + * "notrigger": 0 + * } + */ + public function validate($id, $idwarehouse = 0, $notrigger = 0) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->commande->creer) { + throw new RestException(401); + } + $result = $this->order->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Order not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->order->id, '', 'commande')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->order->id, '', 'commande')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - $result = $this->order->valid(DolibarrApiAccess::$user, $idwarehouse, $notrigger); - if ($result == 0) { - throw new RestException(304, 'Error nothing done. May be object is already validated'); - } - if ($result < 0) { - throw new RestException(500, 'Error when validating Order: '.$this->order->error); - } + $result = $this->order->valid(DolibarrApiAccess::$user, $idwarehouse, $notrigger); + if ($result == 0) { + throw new RestException(304, 'Error nothing done. May be object is already validated'); + } + if ($result < 0) { + throw new RestException(500, 'Error when validating Order: '.$this->order->error); + } - return array( - 'success' => array( - 'code' => 200, - 'message' => 'Order validated (Ref='.$this->order->ref.')' - ) - ); - } + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Order validated (Ref='.$this->order->ref.')' + ) + ); + } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore - /** - * Clean sensible object datas - * - * @param Object $object Object to clean - * @return array Array of cleaned object properties - */ - protected function _cleanObjectDatas($object) - { - // phpcs:enable - $object = parent::_cleanObjectDatas($object); + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore + /** + * Clean sensible object datas + * + * @param Object $object Object to clean + * @return array Array of cleaned object properties + */ + protected function _cleanObjectDatas($object) + { + // phpcs:enable + $object = parent::_cleanObjectDatas($object); - unset($object->rowid); - unset($object->barcode_type); - unset($object->barcode_type_code); - unset($object->barcode_type_label); - unset($object->barcode_type_coder); + unset($object->rowid); + unset($object->barcode_type); + unset($object->barcode_type_code); + unset($object->barcode_type_label); + unset($object->barcode_type_coder); - return $object; - } + return $object; + } - /** - * Validate fields before create or update object - * - * @param array $data Datas to validate - * @return array - * - * @throws RestException - */ - private function _validate($data) - { - $order = array(); - foreach (SupplierOrders::$FIELDS as $field) { - if (!isset($data[$field])) - throw new RestException(400, "$field field missing"); - $order[$field] = $data[$field]; - } - return $order; - } + /** + * Validate fields before create or update object + * + * @param array $data Datas to validate + * @return array + * + * @throws RestException + */ + private function _validate($data) + { + $order = array(); + foreach (SupplierOrders::$FIELDS as $field) { + if (!isset($data[$field])) + throw new RestException(400, "$field field missing"); + $order[$field] = $data[$field]; + } + return $order; + } } diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php index a422e199e55..50b866ca089 100644 --- a/htdocs/societe/index.php +++ b/htdocs/societe/index.php @@ -38,10 +38,10 @@ $hookmanager->initHooks(array('thirdpartiesindex')); $langs->load("companies"); $socid = GETPOST('socid', 'int'); -if ($user->societe_id) $socid=$user->societe_id; +if ($user->societe_id) $socid = $user->societe_id; // Security check -$result=restrictedArea($user, 'societe', 0, '', '', '', ''); +$result = restrictedArea($user, 'societe', 0, '', '', '', ''); $thirdparty_static = new Societe($db); @@ -51,10 +51,10 @@ $thirdparty_static = new Societe($db); */ $transAreaType = $langs->trans("ThirdPartiesArea"); -$helpurl='EN:Module_Third_Parties|FR:Module_Tiers|ES:Módulo_Terceros'; +$helpurl = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Módulo_Terceros'; llxHeader("", $langs->trans("ThirdParties"), $helpurl); -$linkback=''; +$linkback = ''; print load_fiche_titre($transAreaType, $linkback, 'companies'); @@ -73,26 +73,26 @@ $third = array( 'supplier' => 0, 'other' =>0 ); -$total=0; +$total = 0; $sql = "SELECT s.rowid, s.client, s.fournisseur"; -$sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; -if (! $user->rights->societe->client->voir && ! $socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; -$sql.= ' WHERE s.entity IN ('.getEntity('societe').')'; -if (! $user->rights->societe->client->voir && ! $socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; -if ($socid) $sql.= " AND s.rowid = ".$socid; -if (! $user->rights->fournisseur->lire) $sql.=" AND (s.fournisseur <> 1 OR s.client <> 0)"; // client=0, fournisseur=0 must be visible +$sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; +if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; +$sql .= ' WHERE s.entity IN ('.getEntity('societe').')'; +if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id; +if ($socid) $sql .= " AND s.rowid = ".$socid; +if (!$user->rights->fournisseur->lire) $sql .= " AND (s.fournisseur <> 1 OR s.client <> 0)"; // client=0, fournisseur=0 must be visible //print $sql; $result = $db->query($sql); if ($result) { while ($objp = $db->fetch_object($result)) { - $found=0; - if (! empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_PROSPECTS) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS_STATS) && ($objp->client == 2 || $objp->client == 3)) { $found=1; $third['prospect']++; } - if (! empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS_STATS) && ($objp->client == 1 || $objp->client == 3)) { $found=1; $third['customer']++; } - if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->lire && empty($conf->global->SOCIETE_DISABLE_SUPPLIERS_STATS) && $objp->fournisseur) { $found=1; $third['supplier']++; } - if (! empty($conf->societe->enabled) && $objp->client == 0 && $objp->fournisseur == 0) { $found=1; $third['other']++; } + $found = 0; + if (!empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_PROSPECTS) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS_STATS) && ($objp->client == 2 || $objp->client == 3)) { $found = 1; $third['prospect']++; } + if (!empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS_STATS) && ($objp->client == 1 || $objp->client == 3)) { $found = 1; $third['customer']++; } + if (!empty($conf->fournisseur->enabled) && $user->rights->fournisseur->lire && empty($conf->global->SOCIETE_DISABLE_SUPPLIERS_STATS) && $objp->fournisseur) { $found = 1; $third['supplier']++; } + if (!empty($conf->societe->enabled) && $objp->client == 0 && $objp->fournisseur == 0) { $found = 1; $third['other']++; } if ($found) $total++; } } @@ -101,14 +101,14 @@ else dol_print_error($db); print '
    '; print '
    '.$langs->trans("Statistics").' - '.$langs->trans("SuppliersOrders").'
    '.$commandestatic->LibStatut($statut, 0).''.(isset($vals[$statut])?$vals[$statut]:0).''.$commandestatic->LibStatut($status, 0).''.(isset($vals[$status])?$vals[$status]:0).'
    '."\n"; print ''; -if (! empty($conf->use_javascript_ajax) && ((round($third['prospect'])?1:0)+(round($third['customer'])?1:0)+(round($third['supplier'])?1:0)+(round($third['other'])?1:0) >= 2)) +if (!empty($conf->use_javascript_ajax) && ((round($third['prospect']) ? 1 : 0) + (round($third['customer']) ? 1 : 0) + (round($third['supplier']) ? 1 : 0) + (round($third['other']) ? 1 : 0) >= 2)) { print '"; - $statstring.= ''; - $statstring.= ""; + $statstring .= ''; + $statstring .= ""; } - if (! empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS_STATS)) + if (!empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS_STATS)) { - $statstring.= ""; - $statstring.= ''; - $statstring.= ""; + $statstring .= ""; + $statstring .= ''; + $statstring .= ""; } - if (! empty($conf->fournisseur->enabled) && empty($conf->global->SOCIETE_DISABLE_SUPPLIERS_STATS) && $user->rights->fournisseur->lire) + if (!empty($conf->fournisseur->enabled) && empty($conf->global->SOCIETE_DISABLE_SUPPLIERS_STATS) && $user->rights->fournisseur->lire) { $statstring2 = ""; - $statstring2.= ''; - $statstring2.= ""; + $statstring2 .= ''; + $statstring2 .= ""; } print $statstring; print $statstring2; @@ -149,7 +149,7 @@ print ''; print '
    '.$langs->trans("Statistics").'
    '; - $dataseries=array(); - if (! empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_PROSPECTS) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS_STATS)) $dataseries[]=array($langs->trans("Prospects"), round($third['prospect'])); - if (! empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS_STATS)) $dataseries[]=array($langs->trans("Customers"), round($third['customer'])); - if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->lire && empty($conf->global->SOCIETE_DISABLE_SUPPLIERS_STATS)) $dataseries[]=array($langs->trans("Suppliers"), round($third['supplier'])); - if (! empty($conf->societe->enabled)) $dataseries[]=array($langs->trans("Others"), round($third['other'])); + $dataseries = array(); + if (!empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_PROSPECTS) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS_STATS)) $dataseries[] = array($langs->trans("Prospects"), round($third['prospect'])); + if (!empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS_STATS)) $dataseries[] = array($langs->trans("Customers"), round($third['customer'])); + if (!empty($conf->fournisseur->enabled) && $user->rights->fournisseur->lire && empty($conf->global->SOCIETE_DISABLE_SUPPLIERS_STATS)) $dataseries[] = array($langs->trans("Suppliers"), round($third['supplier'])); + if (!empty($conf->societe->enabled)) $dataseries[] = array($langs->trans("Others"), round($third['other'])); include_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php'; $dolgraph = new DolGraph(); $dolgraph->SetData($dataseries); @@ -122,23 +122,23 @@ if (! empty($conf->use_javascript_ajax) && ((round($third['prospect'])?1:0)+(rou } else { - if (! empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_PROSPECTS) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS_STATS)) + if (!empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_PROSPECTS) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS_STATS)) { $statstring = "
    '.$langs->trans("Prospects").''.round($third['prospect']).'
    '.$langs->trans("Prospects").''.round($third['prospect']).'
    '.$langs->trans("Customers").''.round($third['customer']).'
    '.$langs->trans("Customers").''.round($third['customer']).'
    '.$langs->trans("Suppliers").''.round($third['supplier']).'
    '.$langs->trans("Suppliers").''.round($third['supplier']).'
    '; print '
    '; -if (! empty($conf->categorie->enabled) && ! empty($conf->global->CATEGORY_GRAPHSTATS_ON_THIRDPARTIES)) +if (!empty($conf->categorie->enabled) && !empty($conf->global->CATEGORY_GRAPHSTATS_ON_THIRDPARTIES)) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $elementtype = 'societe'; @@ -161,41 +161,41 @@ if (! empty($conf->categorie->enabled) && ! empty($conf->global->CATEGORY_GRAPHS print ''.$langs->trans("Categories").''; print ''; $sql = "SELECT c.label, count(*) as nb"; - $sql.= " FROM ".MAIN_DB_PREFIX."categorie_societe as cs"; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie as c ON cs.fk_categorie = c.rowid"; - $sql.= " WHERE c.type = 2"; - if (! is_numeric($conf->global->CATEGORY_GRAPHSTATS_ON_THIRDPARTIES)) $sql.= " AND c.label like '".$db->escape($conf->global->CATEGORY_GRAPHSTATS_ON_THIRDPARTIES)."'"; - $sql.= " AND c.entity IN (".getEntity('category').")"; - $sql.= " GROUP BY c.label"; - $total=0; + $sql .= " FROM ".MAIN_DB_PREFIX."categorie_societe as cs"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."categorie as c ON cs.fk_categorie = c.rowid"; + $sql .= " WHERE c.type = 2"; + if (!is_numeric($conf->global->CATEGORY_GRAPHSTATS_ON_THIRDPARTIES)) $sql .= " AND c.label like '".$db->escape($conf->global->CATEGORY_GRAPHSTATS_ON_THIRDPARTIES)."'"; + $sql .= " AND c.entity IN (".getEntity('category').")"; + $sql .= " GROUP BY c.label"; + $total = 0; $result = $db->query($sql); if ($result) { $num = $db->num_rows($result); - $i=0; - if (! empty($conf->use_javascript_ajax) ) + $i = 0; + if (!empty($conf->use_javascript_ajax)) { - $dataseries=array(); - $rest=0; - $nbmax=10; + $dataseries = array(); + $rest = 0; + $nbmax = 10; while ($i < $num) { $obj = $db->fetch_object($result); if ($i < $nbmax) { - $dataseries[]=array($obj->label, round($obj->nb)); + $dataseries[] = array($obj->label, round($obj->nb)); } else { - $rest+=$obj->nb; + $rest += $obj->nb; } - $total+=$obj->nb; + $total += $obj->nb; $i++; } if ($i > $nbmax) { - $dataseries[]=array($langs->trans("Other"), round($rest)); + $dataseries[] = array($langs->trans("Other"), round($rest)); } include_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php'; $dolgraph = new DolGraph(); @@ -214,7 +214,7 @@ if (! empty($conf->categorie->enabled) && ! empty($conf->global->CATEGORY_GRAPHS $obj = $db->fetch_object($result); print ''.$obj->label.''.$obj->nb.''; - $total+=$obj->nb; + $total += $obj->nb; $i++; } } @@ -234,20 +234,20 @@ print '
    '; /* * Latest modified third parties */ -$max=15; +$max = 15; $sql = "SELECT s.rowid, s.nom as name, s.email, s.client, s.fournisseur"; -$sql.= ", s.code_client"; -$sql.= ", s.code_fournisseur"; -$sql.= ", s.logo"; -$sql.= ", s.canvas, s.tms as datem, s.status as status"; -$sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; -if (! $user->rights->societe->client->voir && ! $socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; -$sql.= ' WHERE s.entity IN ('.getEntity('societe').')'; -if (! $user->rights->societe->client->voir && ! $socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; -if ($socid) $sql.= " AND s.rowid = ".$socid; -if (! $user->rights->fournisseur->lire) $sql.=" AND (s.fournisseur != 1 OR s.client != 0)"; -$sql.= $db->order("s.tms", "DESC"); -$sql.= $db->plimit($max, 0); +$sql .= ", s.code_client"; +$sql .= ", s.code_fournisseur"; +$sql .= ", s.logo"; +$sql .= ", s.canvas, s.tms as datem, s.status as status"; +$sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; +if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; +$sql .= ' WHERE s.entity IN ('.getEntity('societe').')'; +if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id; +if ($socid) $sql .= " AND s.rowid = ".$socid; +if (!$user->rights->fournisseur->lire) $sql .= " AND (s.fournisseur != 1 OR s.client != 0)"; +$sql .= $db->order("s.tms", "DESC"); +$sql .= $db->plimit($max, 0); //print $sql; $result = $db->query($sql); @@ -274,16 +274,16 @@ if ($result) { $objp = $db->fetch_object($result); - $thirdparty_static->id=$objp->rowid; - $thirdparty_static->name=$objp->name; - $thirdparty_static->client=$objp->client; - $thirdparty_static->fournisseur=$objp->fournisseur; + $thirdparty_static->id = $objp->rowid; + $thirdparty_static->name = $objp->name; + $thirdparty_static->client = $objp->client; + $thirdparty_static->fournisseur = $objp->fournisseur; $thirdparty_static->logo = $objp->logo; - $thirdparty_static->datem=$db->jdate($objp->datem); - $thirdparty_static->status=$objp->status; + $thirdparty_static->datem = $db->jdate($objp->datem); + $thirdparty_static->status = $objp->status; $thirdparty_static->code_client = $objp->code_client; $thirdparty_static->code_fournisseur = $objp->code_fournisseur; - $thirdparty_static->canvas=$objp->canvas; + $thirdparty_static->canvas = $objp->canvas; $thirdparty_static->email = $objp->email; print ''; @@ -293,21 +293,21 @@ if ($result) print "\n"; // Type print ''; - if ($thirdparty_static->client==1 || $thirdparty_static->client==3) + if ($thirdparty_static->client == 1 || $thirdparty_static->client == 3) { - $thirdparty_static->name=$langs->trans("Customer"); + $thirdparty_static->name = $langs->trans("Customer"); print $thirdparty_static->getNomUrl(0, 'customer', 0, 1); } if ($thirdparty_static->client == 3 && empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) print " / "; - if (($thirdparty_static->client==2 || $thirdparty_static->client==3) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) + if (($thirdparty_static->client == 2 || $thirdparty_static->client == 3) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) { - $thirdparty_static->name=$langs->trans("Prospect"); + $thirdparty_static->name = $langs->trans("Prospect"); print $thirdparty_static->getNomUrl(0, 'prospect', 0, 1); } - if (! empty($conf->fournisseur->enabled) && $thirdparty_static->fournisseur) + if (!empty($conf->fournisseur->enabled) && $thirdparty_static->fournisseur) { if ($thirdparty_static->client) print " / "; - $thirdparty_static->name=$langs->trans("Supplier"); + $thirdparty_static->name = $langs->trans("Supplier"); print $thirdparty_static->getNomUrl(0, 'supplier', 0, 1); } print ''; diff --git a/htdocs/stripe/config.php b/htdocs/stripe/config.php index 84766f8e206..0226c724165 100644 --- a/htdocs/stripe/config.php +++ b/htdocs/stripe/config.php @@ -46,13 +46,13 @@ $stripearrayofkeysbyenv = array( $stripearrayofkeys = array(); if (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox', 'alpha')) { - $stripearrayofkeys = $stripearrayofkeysbyenv[0]; // Test + $stripearrayofkeys = $stripearrayofkeysbyenv[0]; // Test } else { - $stripearrayofkeys = $stripearrayofkeysbyenv[1]; // Live + $stripearrayofkeys = $stripearrayofkeysbyenv[1]; // Live } \Stripe\Stripe::setApiKey($stripearrayofkeys['secret_key']); \Stripe\Stripe::setAppInfo("Dolibarr Stripe", DOL_VERSION, "https://www.dolibarr.org"); // add dolibarr version -\Stripe\Stripe::setApiVersion(empty($conf->global->STRIPE_FORCE_VERSION)?"2019-05-16":$conf->global->STRIPE_FORCE_VERSION); // force version API +\Stripe\Stripe::setApiVersion(empty($conf->global->STRIPE_FORCE_VERSION) ? "2019-05-16" : $conf->global->STRIPE_FORCE_VERSION); // force version API From 8c90c801074e19c65a06327c417d8d1eb29ee33c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 01:30:51 +0100 Subject: [PATCH 808/980] Clean code --- htdocs/don/class/paymentdonation.class.php | 1 - htdocs/expensereport/card.php | 4 ++-- htdocs/expensereport/class/expensereport.class.php | 6 ++---- htdocs/expensereport/index.php | 1 - htdocs/loan/class/paymentloan.class.php | 2 -- 5 files changed, 4 insertions(+), 10 deletions(-) diff --git a/htdocs/don/class/paymentdonation.class.php b/htdocs/don/class/paymentdonation.class.php index 3c5404366de..dbe9702ba0c 100644 --- a/htdocs/don/class/paymentdonation.class.php +++ b/htdocs/don/class/paymentdonation.class.php @@ -633,7 +633,6 @@ class PaymentDonation extends CommonObject $result=''; - if (empty($this->ref)) $this->ref=$this->lib; $label = $langs->trans("ShowPayment").': '.$this->ref; if (!empty($this->id)) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 7a62903dfe6..0f7242442fe 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -1506,7 +1506,7 @@ if ($action == 'create') print ''; print ''.$langs->trans("ModePaiement").''; print ''; - $form->select_types_paiements(2, 'fk_c_paiement'); + $form->select_types_paiements('', 'fk_c_paiement'); print ''; print ''; } @@ -1832,7 +1832,7 @@ else { print ''; print ''.$langs->trans("ModePaiement").''; - print ''.$object->libelle_paiement.''; + print ''.$object->fk_c_paiement.''; print ''; } diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index fffde04ac3d..958a9c38e8b 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -511,7 +511,7 @@ class ExpenseReport extends CommonObject $sql.= " d.fk_user_author, d.fk_user_modif, d.fk_user_validator,"; $sql.= " d.fk_user_valid, d.fk_user_approve,"; $sql.= " d.fk_statut as status, d.fk_c_paiement, d.paid,"; - $sql.= " dp.libelle as libelle_paiement, dp.code as code_paiement"; // INNER JOIN paiement + $sql.= " dp.libelle as label_payment, dp.code as code_paiement"; // INNER JOIN paiement $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as d"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as dp ON d.fk_c_paiement = dp.id"; if ($ref) $sql.= " WHERE d.ref = '".$this->db->escape($ref)."'"; @@ -567,15 +567,13 @@ class ExpenseReport extends CommonObject $this->fk_c_paiement = $obj->fk_c_paiement; $this->paid = $obj->paid; - if ($this->fk_statut==5 || $this->fk_statut==6) + if ($this->fk_statut == self::STATUS_APPROVED || $this->fk_statut == self::STATUS_CLOSED) { $user_valid = new User($this->db); if ($this->fk_user_valid > 0) $user_valid->fetch($this->fk_user_valid); $this->user_valid_infos = dolGetFirstLastname($user_valid->firstname, $user_valid->lastname); } - $this->libelle_statut = $obj->libelle_statut; - $this->libelle_paiement = $obj->libelle_paiement; $this->code_statut = $obj->code_statut; $this->code_paiement = $obj->code_paiement; diff --git a/htdocs/expensereport/index.php b/htdocs/expensereport/index.php index aaffc878046..83d60990b4e 100644 --- a/htdocs/expensereport/index.php +++ b/htdocs/expensereport/index.php @@ -221,7 +221,6 @@ if ($result) print ''.price($obj->total_ttc).''; print ''.dol_print_date($db->jdate($obj->dm), 'day').''; print ''; - //print $obj->libelle; print $expensereportstatic->LibStatut($obj->fk_status, 3); print ''; print ''; diff --git a/htdocs/loan/class/paymentloan.class.php b/htdocs/loan/class/paymentloan.class.php index c938fe92c80..d3c497cbbae 100644 --- a/htdocs/loan/class/paymentloan.class.php +++ b/htdocs/loan/class/paymentloan.class.php @@ -545,8 +545,6 @@ class PaymentLoan extends CommonObject $result=''; - if (empty($this->ref)) $this->ref=$this->lib; - if (!empty($this->id)) { $link = ''; From 385cb1a26c927a2646946b6217d7c290e70fed47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 2 Nov 2019 09:27:06 +0100 Subject: [PATCH 809/980] doxygen Commande class --- htdocs/commande/class/commande.class.php | 57 +++++++++++++++++------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 4348b3b05a5..4735da31060 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -53,19 +53,22 @@ class Commande extends CommonOrder public $table_element='commande'; /** - * @var int Name of subtable line + * @var string Name of subtable line */ public $table_element_line = 'commandedet'; + /** + * @var string Name of class line + */ public $class_element_line = 'OrderLine'; /** - * @var int Field with ID of parent key if this field has a parent + * @var string Field name with ID of parent key if this field has a parent */ public $fk_element = 'fk_commande'; /** - * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png + * @var string String with name of icon for commande class. Here is object_order.png */ public $picto = 'order'; @@ -87,13 +90,23 @@ class Commande extends CommonOrder protected $table_ref_field = 'ref'; /** - * Client ID - * @var int + * @var int Thirparty ID */ public $socid; + /** + * @var string Thirparty ref of order + */ public $ref_client; + + /** + * @var string Internal ref for order + */ public $ref_int; + + /** + * @var int Contact ID + */ public $contactid; /** @@ -103,10 +116,9 @@ class Commande extends CommonOrder public $statut; /** - * Billed - * @var int + * @var int Status Billed or not */ - public $billed; // billed or not + public $billed; /** * @var int Draft Status of the order @@ -115,25 +127,22 @@ class Commande extends CommonOrder public $cond_reglement_code; /** - * @var int ID + * @var int bank account ID */ public $fk_account; /** - * It holds the label of the payment mode. Use it in case translation cannot be found. - * @var string + * @var string It holds the label of the payment mode. Use it in case translation cannot be found. */ public $mode_reglement; /** - * Payment mode id - * @var int + * @var int Payment mode id */ public $mode_reglement_id; /** - * Payment mode code - * @var string + * @var string Payment mode code */ public $mode_reglement_code; @@ -157,9 +166,13 @@ class Commande extends CommonOrder public $demand_reason_id; // Source reason. Why we receive order (after a phone campaign, ...) public $demand_reason_code; - public $date; // Date commande + /** + * @var int Date of order + */ + public $date; /** + * @var int Date of order * @deprecated * @see $date */ @@ -182,7 +195,14 @@ class Commande extends CommonOrder public $linked_objects=array(); + /** + * @var int User author ID + */ public $user_author_id; + + /** + * @var int User validator ID + */ public $user_valid; /** @@ -192,7 +212,7 @@ class Commande extends CommonOrder // Multicurrency /** - * @var int ID + * @var int Currency ID */ public $fk_multicurrency; @@ -202,6 +222,9 @@ class Commande extends CommonOrder public $multicurrency_total_tva; public $multicurrency_total_ttc; + /** + * @var Commande clone of order object + */ public $oldcopy; //! key of module source when order generated from a dedicated module ('cashdesk', 'takepos', ...) From 8569020e34249f384ab42cc4ce608f8141205557 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Sat, 2 Nov 2019 10:30:29 +0100 Subject: [PATCH 810/980] add some comment --- htdocs/livraison/class/livraison.class.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 1e7fdebaa64..7f886fbc1a5 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -64,7 +64,12 @@ class Livraison extends CommonObject public $ref_customer; public $date_delivery; // Date really received + + /** + * @var integer|string date_creation + */ public $date_creation; + public $date_valid; public $model_pdf; From 3ff5389c4eef08e72bcb1feeffb51687f8a7816c Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Sat, 2 Nov 2019 10:35:43 +0100 Subject: [PATCH 811/980] add some comment --- htdocs/reception/class/reception.class.php | 10 ++++++++-- htdocs/societe/class/societe.class.php | 7 ++++--- htdocs/societe/class/societeaccount.class.php | 6 ++++++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index eae8ab9de34..7663789c127 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -80,8 +80,14 @@ class Reception extends CommonObject * @var int */ public $date_reception; - public $date_creation; - public $date_valid; + + /** + * @var integer|string date_creation + */ + public $date_creation; + + + public $date_valid; public $meths; public $listmeths; // List of carriers diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index ca17077a47b..f930e79239d 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -316,11 +316,12 @@ class Societe extends CommonObject * @var string */ public $user_modification; - /** - * Date of creation - * @var string + + /** + * @var integer|string date_creation */ public $date_creation; + /** * User that created the thirdparty * @var User diff --git a/htdocs/societe/class/societeaccount.class.php b/htdocs/societe/class/societeaccount.class.php index bf94c522f68..22fd3baf7a8 100644 --- a/htdocs/societe/class/societeaccount.class.php +++ b/htdocs/societe/class/societeaccount.class.php @@ -124,7 +124,13 @@ class SocieteAccount extends CommonObject public $date_last_login; public $date_previous_login; public $note_private; + + /** + * @var integer|string date_creation + */ public $date_creation; + + public $tms; /** From dc97a54d82bc7e1145112b636a34cd8f6de368b4 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sat, 2 Nov 2019 09:39:05 +0000 Subject: [PATCH 812/980] Fixing style errors. --- htdocs/livraison/class/livraison.class.php | 8 ++++---- htdocs/reception/class/reception.class.php | 6 +++--- htdocs/societe/class/societe.class.php | 6 +++--- htdocs/societe/class/societeaccount.class.php | 6 +++--- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 7f886fbc1a5..dcf95b37ad6 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -64,12 +64,12 @@ class Livraison extends CommonObject public $ref_customer; public $date_delivery; // Date really received - - /** + + /** * @var integer|string date_creation - */ + */ public $date_creation; - + public $date_valid; public $model_pdf; diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 7663789c127..d9ba10113bb 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -80,13 +80,13 @@ class Reception extends CommonObject * @var int */ public $date_reception; - + /** * @var integer|string date_creation */ public $date_creation; - - + + public $date_valid; public $meths; diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index f930e79239d..9d2f86e5d77 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -316,12 +316,12 @@ class Societe extends CommonObject * @var string */ public $user_modification; - - /** + + /** * @var integer|string date_creation */ public $date_creation; - + /** * User that created the thirdparty * @var User diff --git a/htdocs/societe/class/societeaccount.class.php b/htdocs/societe/class/societeaccount.class.php index 22fd3baf7a8..f93dfd0ea68 100644 --- a/htdocs/societe/class/societeaccount.class.php +++ b/htdocs/societe/class/societeaccount.class.php @@ -124,13 +124,13 @@ class SocieteAccount extends CommonObject public $date_last_login; public $date_previous_login; public $note_private; - + /** * @var integer|string date_creation */ public $date_creation; - - + + public $tms; /** From 68c971a2b5db057cf8c29572f3a5b7a0a27ed235 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 11:12:57 +0100 Subject: [PATCH 813/980] All properties 'type_libelle' were renamed into 'type_label'. --- ChangeLog | 1 + htdocs/compta/charges/index.php | 8 +- htdocs/compta/index.php | 7 +- htdocs/compta/paiement/card.php | 2 +- .../compta/paiement/class/paiement.class.php | 6 +- htdocs/compta/paiement_charge.php | 2 +- htdocs/compta/payment_sc/card.php | 2 +- htdocs/compta/sociales/card.php | 2 +- .../sociales/class/chargesociales.class.php | 10 +-- .../class/paymentsocialcontribution.class.php | 6 +- htdocs/compta/sociales/list.php | 12 +-- htdocs/core/class/html.form.class.php | 10 ++- htdocs/don/class/paymentdonation.class.php | 22 ++--- htdocs/don/payment/card.php | 6 +- htdocs/don/payment/payment.php | 80 ++++++++----------- .../class/paymentexpensereport.class.php | 28 +++---- htdocs/expensereport/payment/card.php | 6 +- htdocs/expensereport/payment/payment.php | 22 ++--- htdocs/fourn/class/paiementfourn.class.php | 4 +- htdocs/fourn/paiement/card.php | 2 +- .../install/mysql/migration/10.0.0-11.0.0.sql | 2 + htdocs/langs/en_US/donations.lang | 1 + htdocs/loan/class/loanschedule.class.php | 8 +- htdocs/loan/class/paymentloan.class.php | 8 +- 24 files changed, 133 insertions(+), 124 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1fa1458c534..2c534cfff8b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -27,6 +27,7 @@ Following changes may create regressions for some external modules, but were nec * If your logo was visible on the menu bar, you must upload a new logo into 'Home-Setup-Company/Organization' to have it visible agin in menu. * All properties 'libstatut', 'labelstatut', 'labelstatus' were renamed into 'labelStatus'. * All properties 'labelstatusshort' and 'labelstatut_short' were renamed into 'labelStatusShort'. +* All properties 'type_libelle' were renamed into 'type_label'. ***** ChangeLog for 10.0.3 compared to 10.0.2 ***** IMPORTANT : This version fixes a serious bug in saving the units of weight, size, surface and volume on product card. diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php index 04c2cdd76d1..9694166590f 100644 --- a/htdocs/compta/charges/index.php +++ b/htdocs/compta/charges/index.php @@ -138,7 +138,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) print_liste_field_titre("PayedByThisPayment", $_SERVER["PHP_SELF"], "pc.amount", "", $param, 'class="right"', $sortfield, $sortorder); print "\n"; - $sql = "SELECT c.id, c.libelle as lib,"; + $sql = "SELECT c.id, c.libelle as label,"; $sql.= " cs.rowid, cs.libelle, cs.fk_type as type, cs.periode, cs.date_ech, cs.amount as total,"; $sql.= " pc.rowid as pid, pc.datep, pc.amount as totalpaye, pc.num_paiement as num_payment, pc.fk_bank,"; $sql.= " pct.code as payment_code,"; @@ -185,12 +185,12 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) // Label print ''; $socialcontrib->id=$obj->rowid; - $socialcontrib->ref=$obj->rowid; - $socialcontrib->label=$obj->libelle; + $socialcontrib->ref=$obj->label; + $socialcontrib->label=$obj->label; print $socialcontrib->getNomUrl(1, '20'); print ''; // Type - print ''.$obj->lib.''; + print ''.$obj->label.''; // Expected to pay print ''.price($obj->total).''; // Ref payment diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index fb23929f7a8..a7df3685175 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -624,12 +624,12 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) $chargestatic=new ChargeSociales($db); $sql = "SELECT c.rowid, c.amount, c.date_ech, c.paye,"; - $sql.= " cc.libelle,"; + $sql.= " cc.libelle as label,"; $sql.= " SUM(pc.amount) as sumpaid"; $sql.= " FROM (".MAIN_DB_PREFIX."c_chargesociales as cc, ".MAIN_DB_PREFIX."chargesociales as c)"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiementcharge as pc ON pc.fk_charge = c.rowid"; $sql.= " WHERE c.fk_type = cc.id"; - $sql.= " AND c.entity = ".$conf->entity; + $sql.= " AND c.entity IN (".getEntity('tax').')'; $sql.= " AND c.paye = 0"; // Add where from hooks $parameters=array(); @@ -662,7 +662,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) $chargestatic->id=$obj->rowid; $chargestatic->ref=$obj->rowid; - $chargestatic->label=$obj->libelle; + $chargestatic->label=$obj->label; $chargestatic->paye=$obj->paye; print ''; @@ -672,6 +672,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) print ''.price($obj->sumpaid).''; print ''.$chargestatic->getLibStatut(3).''; print ''; + $tot_ttc+=$obj->amount; $i++; } diff --git a/htdocs/compta/paiement/card.php b/htdocs/compta/paiement/card.php index e11da654bdd..3def70036ee 100644 --- a/htdocs/compta/paiement/card.php +++ b/htdocs/compta/paiement/card.php @@ -220,7 +220,7 @@ print $form->editfieldval("Date", 'datep', $object->date, $object, $user->rights print ''; // Payment type (VIR, LIQ, ...) -$labeltype=$langs->trans("PaymentType".$object->type_code)!=("PaymentType".$object->type_code)?$langs->trans("PaymentType".$object->type_code):$object->type_libelle; +$labeltype=$langs->trans("PaymentType".$object->type_code)!=("PaymentType".$object->type_code)?$langs->trans("PaymentType".$object->type_code):$object->type_label; print ''.$langs->trans('PaymentMode').''.$labeltype; print $object->num_paiement?' - '.$object->num_paiement:''; print ''; diff --git a/htdocs/compta/paiement/class/paiement.class.php b/htdocs/compta/paiement/class/paiement.class.php index e6d2a27087c..e4a4a275029 100644 --- a/htdocs/compta/paiement/class/paiement.class.php +++ b/htdocs/compta/paiement/class/paiement.class.php @@ -78,7 +78,7 @@ class Paiement extends CommonObject /** * @var string type libelle */ - public $type_libelle; + public $type_label; /** * @var string type code @@ -160,7 +160,7 @@ class Paiement extends CommonObject public function fetch($id, $ref = '', $fk_bank = '') { $sql = 'SELECT p.rowid, p.ref, p.datep as dp, p.amount, p.statut, p.ext_payment_id, p.ext_payment_site, p.fk_bank,'; - $sql.= ' c.code as type_code, c.libelle as type_libelle,'; + $sql.= ' c.code as type_code, c.libelle as type_label,'; $sql.= ' p.num_paiement as num_payment, p.note,'; $sql.= ' b.fk_account'; $sql.= ' FROM '.MAIN_DB_PREFIX.'paiement as p LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as c ON p.fk_paiement = c.id'; @@ -188,7 +188,7 @@ class Paiement extends CommonObject $this->montant = $obj->amount; // deprecated $this->amount = $obj->amount; $this->note = $obj->note; - $this->type_libelle = $obj->type_libelle; + $this->type_label = $obj->type_label; $this->type_code = $obj->type_code; $this->statut = $obj->statut; $this->ext_payment_id = $obj->ext_payment_id; diff --git a/htdocs/compta/paiement_charge.php b/htdocs/compta/paiement_charge.php index 6cc91072a34..e2a4bdac11f 100644 --- a/htdocs/compta/paiement_charge.php +++ b/htdocs/compta/paiement_charge.php @@ -202,7 +202,7 @@ if ($action == 'create') print ''; print ''; - print '\n"; + print '\n"; print '\n"; print '\n"; /*print '\n"; diff --git a/htdocs/compta/payment_sc/card.php b/htdocs/compta/payment_sc/card.php index 605f5cec3bc..aaff1a99c9f 100644 --- a/htdocs/compta/payment_sc/card.php +++ b/htdocs/compta/payment_sc/card.php @@ -259,7 +259,7 @@ if ($resql) print "\n"; // Type print '\n"; // Label diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index e2bf729a396..3054e64320e 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -514,7 +514,7 @@ if ($id > 0) print '
    '.$langs->trans("Ref").''.$chid.'
    '.$langs->trans("Type")."".$charge->type_libelle."
    '.$langs->trans("Type")."".$charge->type_label."
    '.$langs->trans("Period")."".dol_print_date($charge->periode, 'day')."
    '.$langs->trans("Label").''.$charge->label."
    '.$langs->trans("DateDue")."".dol_print_date($charge->date_ech,'day')."
    '; - print $socialcontrib->type_libelle; + print $socialcontrib->type_label; /*print $socialcontrib->type;*/ print "
    '; // Type - print '"; + print '"; print ""; // Period end date diff --git a/htdocs/compta/sociales/class/chargesociales.class.php b/htdocs/compta/sociales/class/chargesociales.class.php index 50474f3d52c..fe3f8267c3d 100644 --- a/htdocs/compta/sociales/class/chargesociales.class.php +++ b/htdocs/compta/sociales/class/chargesociales.class.php @@ -57,7 +57,7 @@ class ChargeSociales extends CommonObject public $date_ech; public $label; public $type; - public $type_libelle; + public $type_label; public $amount; public $paye; public $periode; @@ -136,7 +136,7 @@ class ChargeSociales extends CommonObject $this->lib = $obj->label; $this->label = $obj->label; $this->type = $obj->fk_type; - $this->type_libelle = $obj->libelle; + $this->type_label = $obj->libelle; $this->fk_account = $obj->fk_account; $this->mode_reglement_id = $obj->fk_mode_reglement; $this->mode_reglement_code = $obj->mode_reglement_code; @@ -556,8 +556,8 @@ class ChargeSociales extends CommonObject $label .= '
    '.$langs->trans('Ref') . ': ' . $this->ref; if (! empty($this->label)) $label .= '
    '.$langs->trans('Label') . ': ' . $this->label; - if (! empty($this->type_libelle)) - $label .= '
    '.$langs->trans('Type') . ': ' . $this->type_libelle; + if (! empty($this->type_label)) + $label .= '
    '.$langs->trans('Type') . ': ' . $this->type_label; $linkclose=''; if (empty($notooltip) && $user->rights->facture->lire) @@ -689,6 +689,6 @@ class ChargeSociales extends CommonObject $this->amount=100; $this->label = 'Social contribution label'; $this->type = 1; - $this->type_libelle = 'Type of social contribution'; + $this->type_label = 'Type of social contribution'; } } diff --git a/htdocs/compta/sociales/class/paymentsocialcontribution.class.php b/htdocs/compta/sociales/class/paymentsocialcontribution.class.php index e13738fd5f4..4fb2f27b53f 100644 --- a/htdocs/compta/sociales/class/paymentsocialcontribution.class.php +++ b/htdocs/compta/sociales/class/paymentsocialcontribution.class.php @@ -236,7 +236,7 @@ class PaymentSocialContribution extends CommonObject $sql.= " t.fk_bank,"; $sql.= " t.fk_user_creat,"; $sql.= " t.fk_user_modif,"; - $sql.= " pt.code as type_code, pt.libelle as type_libelle,"; + $sql.= " pt.code as type_code, pt.libelle as type_label,"; $sql.= ' b.fk_account'; $sql.= " FROM ".MAIN_DB_PREFIX."paiementcharge as t LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as pt ON t.fk_typepaiement = pt.id"; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON t.fk_bank = b.rowid'; @@ -267,7 +267,7 @@ class PaymentSocialContribution extends CommonObject $this->fk_user_modif = $obj->fk_user_modif; $this->type_code = $obj->type_code; - $this->type_libelle = $obj->type_libelle; + $this->type_label = $obj->type_label; $this->bank_account = $obj->fk_account; $this->bank_line = $obj->fk_bank; @@ -592,7 +592,7 @@ class PaymentSocialContribution extends CommonObject { $socialcontrib = new ChargeSociales($this->db); $socialcontrib->fetch($key); - $result=$acc->add_url_line($bank_line_id, $socialcontrib->id, DOL_URL_ROOT.'/compta/charges.php?id=', $socialcontrib->type_libelle.(($socialcontrib->lib && $socialcontrib->lib!=$socialcontrib->type_libelle)?' ('.$socialcontrib->lib.')':''), 'sc'); + $result=$acc->add_url_line($bank_line_id, $socialcontrib->id, DOL_URL_ROOT.'/compta/charges.php?id=', $socialcontrib->type_label.(($socialcontrib->lib && $socialcontrib->lib!=$socialcontrib->type_label)?' ('.$socialcontrib->lib.')':''), 'sc'); if ($result <= 0) dol_print_error($this->db); } } diff --git a/htdocs/compta/sociales/list.php b/htdocs/compta/sociales/list.php index c2d5c94d1a3..06e0135dd67 100644 --- a/htdocs/compta/sociales/list.php +++ b/htdocs/compta/sociales/list.php @@ -110,8 +110,8 @@ $chargesociale_static=new ChargeSociales($db); llxHeader('', $langs->trans("SocialContributions")); $sql = "SELECT cs.rowid as id, cs.fk_type as type, "; -$sql.= " cs.amount, cs.date_ech, cs.libelle, cs.paye, cs.periode,"; -$sql.= " c.libelle as type_lib,"; +$sql.= " cs.amount, cs.date_ech, cs.libelle as label, cs.paye, cs.periode,"; +$sql.= " c.libelle as type_label,"; $sql.= " SUM(pc.amount) as alreadypayed"; $sql.= " FROM ".MAIN_DB_PREFIX."c_chargesociales as c,"; $sql.= " ".MAIN_DB_PREFIX."chargesociales as cs"; @@ -261,8 +261,8 @@ if ($resql) $chargesociale_static->id=$obj->id; $chargesociale_static->ref=$obj->id; - $chargesociale_static->label=$obj->libelle; - $chargesociale_static->type_libelle=$obj->type_lib; + $chargesociale_static->label=$obj->label; + $chargesociale_static->type_label=$obj->type_label; print ''; @@ -272,10 +272,10 @@ if ($resql) print ''; // Label - print ''; + print ''; // Type - print ''; + print ''; // Date end period print ' // Amount print ''; -// Note -print ''; +// Note public +print ''; // Bank account if (! empty($conf->banque->enabled)) @@ -282,7 +282,7 @@ if (! empty($conf->global->BILL_ADD_PAYMENT_VALIDATION)) } */ -if ($_GET['action'] == '') +if (empty($action)) { if ($user->rights->don->supprimer) { diff --git a/htdocs/don/payment/payment.php b/htdocs/don/payment/payment.php index 612ea5a553b..72882a79068 100644 --- a/htdocs/don/payment/payment.php +++ b/htdocs/don/payment/payment.php @@ -39,6 +39,8 @@ if ($user->societe_id > 0) { $socid = $user->societe_id; } +$object = new Don($db); + /* * Actions @@ -59,17 +61,17 @@ if ($action == 'add_payment') if (! $_POST["paymenttype"] > 0) { - $mesg = $langs->trans("ErrorFieldRequired", $langs->transnoentities("PaymentMode")); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("PaymentMode")), null, 'errors'); $error++; } if ($datepaid == '') { - $mesg = $langs->trans("ErrorFieldRequired", $langs->transnoentities("Date")); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Date")), null, 'errors'); $error++; } if (! empty($conf->banque->enabled) && ! $_POST["accountid"] > 0) { - $mesg = $langs->trans("ErrorFieldRequired", $langs->transnoentities("AccountToCredit")); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("AccountToCredit")), null, 'errors'); $error++; } @@ -103,9 +105,9 @@ if ($action == 'add_payment') $payment->chid = $chid; $payment->datepaid = $datepaid; $payment->amounts = $amounts; // Tableau de montant - $payment->paymenttype = $_POST["paymenttype"]; - $payment->num_payment = $_POST["num_payment"]; - $payment->note = $_POST["note"]; + $payment->paymenttype = GETPOST("paymenttype", 'int'); + $payment->num_payment = GETPOST("num_payment", 'alphanohtml'); + $payment->note_public = GETPOST("note_public", 'none'); if (! $error) { @@ -143,7 +145,7 @@ if ($action == 'add_payment') } } - $_GET["action"]='create'; + $action = 'create'; } @@ -151,26 +153,32 @@ if ($action == 'add_payment') * View */ +$form=new Form($db); + llxHeader(); -$form=new Form($db); + +$sql = "SELECT sum(p.amount) as total"; +$sql.= " FROM ".MAIN_DB_PREFIX."payment_donation as p"; +$sql.= " WHERE p.fk_donation = ".$chid; +$resql = $db->query($sql); +if ($resql) +{ + $obj=$db->fetch_object($resql); + $sumpaid = $obj->total; + $db->free(); +} // Form to create donation payment -if (GETPOST('action', 'aZ09') == 'create') +if ($action == 'create') { - $don = new Don($db); - $don->fetch($chid); + $object->fetch($chid); - $total = $don->amount; + $total = $object->amount; print load_fiche_titre($langs->trans("DoPayment")); - if ($mesg) - { - print "
    $mesg
    "; - } - print ''; print ''; print ''; @@ -179,47 +187,24 @@ if (GETPOST('action', 'aZ09') == 'create') dol_fiche_head(); - print '
    '.$langs->trans("Type")."".$object->type_libelle."
    '.$langs->trans("Type")."".$object->type_label."
    '.dol_trunc($obj->libelle, 42).''.dol_trunc($obj->label, 42).''.$obj->type_lib.''.$obj->type_label.''; diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 6790ec43cae..41633f927c8 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5344,13 +5344,14 @@ class Form * @param int $disabled Disable input fields * @param int $fullday When a checkbox with this html name is on, hour and day are set with 00:00 or 23:59 * @param string $addplusone Add a link "+1 hour". Value must be name of another selectDate field. - * @param datetime $adddateof Add a link "Date of invoice" using the following date. - * @param string $openinghours Specify hour strat and hour end for the select ex 8,20 + * @param datetime $adddateof Add a link "Date of invoice" using the following date. See also $labeladddateof for the label used. + * @param string $openinghours Specify hour start and hour end for the select ex 8,20 * @param int $stepminutes Specify step for minutes between 1 and 30 + * @param string $labeladddateof Label to use for the $adddateof parameter. * @return string Html for selectDate * @see form_date(), select_month(), select_year(), select_dayofweek() */ - public function selectDate($set_time = '', $prefix = 're', $h = 0, $m = 0, $empty = 0, $form_name = "", $d = 1, $addnowlink = 0, $disabled = 0, $fullday = '', $addplusone = '', $adddateof = '', $openinghours = '', $stepminutes = 1) + public function selectDate($set_time = '', $prefix = 're', $h = 0, $m = 0, $empty = 0, $form_name = "", $d = 1, $addnowlink = 0, $disabled = 0, $fullday = '', $addplusone = '', $adddateof = '', $openinghours = '', $stepminutes = 1, $labeladddateof = '') { global $conf,$langs; @@ -5737,7 +5738,8 @@ class Form if ($conf->use_javascript_ajax && $adddateof) { $tmparray=dol_getdate($adddateof); - $retstring.=' -
    '.$langs->trans('Number').''.$object->num_payment.'
    '.$langs->trans('Amount').''.price($object->amount, 0, $outputlangs, 1, -1, -1, $conf->currency).'
    '.$langs->trans('Note').''.nl2br($object->note).'
    '.$langs->trans('Note').''.nl2br($object->note_public).'
    '; - - print ''; - - print ''; - print '\n"; - print ''; - - $sql = "SELECT sum(p.amount) as total"; - $sql.= " FROM ".MAIN_DB_PREFIX."payment_donation as p"; - $sql.= " WHERE p.fk_donation = ".$chid; - $resql = $db->query($sql); - if ($resql) - { - $obj=$db->fetch_object($resql); - $sumpaid = $obj->total; - $db->free(); - } - print ''; - print ''; - - print ''; - print "'; - print ''; + print '
    '.$langs->trans("Donation").'
    '.$langs->trans("Ref").''.$chid.'
    '.$langs->trans("Date")."".dol_print_date($don->date, 'day')."
    '.$langs->trans("Amount")."".price($don->amount, 0, $outputlangs, 1, -1, -1, $conf->currency).'
    '.$langs->trans("AlreadyPaid").''.price($sumpaid, 0, $outputlangs, 1, -1, -1, $conf->currency).'
    '.$langs->trans("RemainderToPay").''.price($total-$sumpaid, 0, $outputlangs, 1, -1, -1, $conf->currency).'
    ".$langs->trans("Payment").'
    '; print '"; print ''; print '\n"; print ''; print ''; print ''; print ''; // Number @@ -230,7 +215,7 @@ if (GETPOST('action', 'aZ09') == 'create') print ''; print ''; - print ''; + print ''; print ''; print '
    '.$langs->trans("Date").''; $datepaid = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); $datepayment=empty($conf->global->MAIN_AUTOFILL_DATE)?(empty($_POST["remonth"])?-1:$datepaid):0; - print $form->selectDate($datepayment, '', '', '', '', "add_payment", 1, 1); + print $form->selectDate($datepayment, '', 0, 0, 0, "add_payment", 1, 1, 0, '', '', $object->date, '', 1, $langs->trans("DonationDate")); print "
    '.$langs->trans("PaymentMode").''; - $form->select_types_paiements(isset($_POST["paymenttype"])?$_POST["paymenttype"]:$don->paymenttype, "paymenttype"); + $form->select_types_paiements(isset($_POST["paymenttype"])?$_POST["paymenttype"]:$object->paymenttype, "paymenttype"); print "
    '.$langs->trans('AccountToCredit').''; - $form->select_comptes(isset($_POST["accountid"])?$_POST["accountid"]:$don->accountid, "accountid", 0, '', 1); // Show open bank account list + $form->select_comptes(isset($_POST["accountid"])?$_POST["accountid"]:$object->accountid, "accountid", 0, '', 1); // Show open bank account list print '
    '.$langs->trans("Comments").'
    '; @@ -246,6 +231,7 @@ if (GETPOST('action', 'aZ09') == 'create') print ''; print ''; + print ''; print ''; print ''; print ''; @@ -257,10 +243,12 @@ if (GETPOST('action', 'aZ09') == 'create') while ($i < $num) { - $objp = $don; + $objp = $object; print ''; + print '"; + print '"; print '"; diff --git a/htdocs/expensereport/class/paymentexpensereport.class.php b/htdocs/expensereport/class/paymentexpensereport.class.php index 074250d2347..6fb4e539d9d 100644 --- a/htdocs/expensereport/class/paymentexpensereport.class.php +++ b/htdocs/expensereport/class/paymentexpensereport.class.php @@ -25,8 +25,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php'; -/** \class PaymentExpenseReport - * \brief Class to manage payments of expense report +/** + * Class to manage payments of expense report */ class PaymentExpenseReport extends CommonObject { @@ -83,9 +83,9 @@ class PaymentExpenseReport extends CommonObject */ public $fk_user_modif; - //Unknow field - public $chid; - public $total; + public $type_code; + public $type_label; + /** * Constructor @@ -124,10 +124,10 @@ class PaymentExpenseReport extends CommonObject if (isset($this->fk_typepayment)) $this->fk_typepayment=trim($this->fk_typepayment); if (isset($this->num_payment)) $this->num_payment=trim($this->num_payment); if (isset($this->note)) $this->note=trim($this->note); + if (isset($this->note_public)) $this->note_public=trim($this->note_public); if (isset($this->fk_bank)) $this->fk_bank=trim($this->fk_bank); if (isset($this->fk_user_creat)) $this->fk_user_creat=trim($this->fk_user_creat); if (isset($this->fk_user_modif)) $this->fk_user_modif=trim($this->fk_user_modif); - if (! empty($this->fk_expensereport)) $this->chid = $this->fk_expensereport; $totalamount = 0; foreach ($this->amounts as $key => $value) // How payment is dispatch @@ -148,10 +148,10 @@ class PaymentExpenseReport extends CommonObject { $sql = "INSERT INTO ".MAIN_DB_PREFIX."payment_expensereport (fk_expensereport, datec, datep, amount,"; $sql.= " fk_typepayment, num_payment, note, fk_user_creat, fk_bank)"; - $sql.= " VALUES ($this->chid, '".$this->db->idate($now)."',"; + $sql.= " VALUES ($this->fk_expensereport, '".$this->db->idate($now)."',"; $sql.= " '".$this->db->idate($this->datepaid)."',"; $sql.= " ".$totalamount.","; - $sql.= " ".$this->fk_typepayment.", '".$this->db->escape($this->num_payment)."', '".$this->db->escape($this->note)."', ".$user->id.","; + $sql.= " ".$this->fk_typepayment.", '".$this->db->escape($this->num_payment)."', '".$this->db->escape($this->note_public)."', ".$user->id.","; $sql.= " 0)"; dol_syslog(get_class($this)."::create", LOG_DEBUG); @@ -188,7 +188,6 @@ class PaymentExpenseReport extends CommonObject */ public function fetch($id) { - global $langs; $sql = "SELECT"; $sql.= " t.rowid,"; $sql.= " t.fk_expensereport,"; @@ -198,11 +197,11 @@ class PaymentExpenseReport extends CommonObject $sql.= " t.amount,"; $sql.= " t.fk_typepayment,"; $sql.= " t.num_payment,"; - $sql.= " t.note,"; + $sql.= " t.note as note_public,"; $sql.= " t.fk_bank,"; $sql.= " t.fk_user_creat,"; $sql.= " t.fk_user_modif,"; - $sql.= " pt.code as type_code, pt.libelle as type_libelle,"; + $sql.= " pt.code as type_code, pt.libelle as type_label,"; $sql.= ' b.fk_account'; $sql.= " FROM ".MAIN_DB_PREFIX."payment_expensereport as t"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as pt ON t.fk_typepayment = pt.id"; @@ -227,13 +226,13 @@ class PaymentExpenseReport extends CommonObject $this->amount = $obj->amount; $this->fk_typepayment = $obj->fk_typepayment; $this->num_payment = $obj->num_payment; - $this->note = $obj->note; + $this->note_public = $obj->note_public; $this->fk_bank = $obj->fk_bank; $this->fk_user_creat = $obj->fk_user_creat; $this->fk_user_modif = $obj->fk_user_modif; $this->type_code = $obj->type_code; - $this->type_libelle = $obj->type_libelle; + $this->type_label = $obj->type_label; $this->bank_account = $obj->fk_account; $this->bank_line = $obj->fk_bank; @@ -540,8 +539,7 @@ class PaymentExpenseReport extends CommonObject $acc->fetch($accountid); //Fix me field - $this->total = $this->amount; - $total = $this->total; + $total = $this->amount; if ($mode == 'payment_expensereport') $amount=$total; diff --git a/htdocs/expensereport/payment/card.php b/htdocs/expensereport/payment/card.php index e168c1aa5b8..99c4c81d294 100644 --- a/htdocs/expensereport/payment/card.php +++ b/htdocs/expensereport/payment/card.php @@ -162,8 +162,8 @@ print ''; -// Note -print ''; +// Note public +print ''; $disable_delete = 0; // Bank account @@ -258,7 +258,7 @@ if ($resql) print ''; // Remain to pay - print ''; + print ''; // Status print ''; diff --git a/htdocs/expensereport/payment/payment.php b/htdocs/expensereport/payment/payment.php index 8d1c568332d..fd3f725da5a 100644 --- a/htdocs/expensereport/payment/payment.php +++ b/htdocs/expensereport/payment/payment.php @@ -113,13 +113,13 @@ if ($action == 'add_payment') // Create a line of payments $payment = new PaymentExpenseReport($db); - $payment->chid = $expensereport->id; + $payment->fk_expensereport = $expensereport->id; $payment->datepaid = $datepaid; $payment->amounts = $amounts; // Tableau de montant $payment->total = $total; - $payment->fk_typepayment = $_POST["fk_typepayment"]; - $payment->num_payment = $_POST["num_payment"]; - $payment->note = $_POST["note"]; + $payment->fk_typepayment = GETPOST("fk_typepayment", 'int'); + $payment->num_payment = GETPOST("num_payment", 'alphanothtml'); + $payment->note_public = GETPOST("note_public", 'none'); if (! $error) { @@ -239,9 +239,11 @@ if ($action == 'create' || empty($action)) print '
    '.$langs->trans("Donation").''.$langs->trans("Amount").''.$langs->trans("AlreadyPaid").''.$langs->trans("RemainderToPay").'
    '.$object->getNomUrl(1)."'.price($objp->amount)."'.price($sumpaid)."
    '.$langs->trans('Numero').''.$object->num_pa // Amount print '
    '.$langs->trans('Amount').''.price($object->amount, 0, $outputlangs, 1, -1, -1, $conf->currency).'
    '.$langs->trans('Note').''.nl2br($object->note).'
    '.$langs->trans('Note').''.nl2br($object->note_public).'
    '.price($objp->amount).''.price($remaintopay).''.price($objp->total_ttc - $objp->amount).''.$expensereport->getLibStatut(4, $objp->amount).'
    '; - print '
    '; + print '
    '; - print '
    '; + dol_fiche_end(); + + dol_fiche_head(); print ''."\n"; @@ -274,14 +276,14 @@ if ($action == 'create' || empty($action)) print ''; print ''; - print ''; + print ''; print ''; print '
    '.$langs->trans("Comments").'
    '; - print '
    '; + dol_fiche_end(); - dol_fiche_end(); + print '
    '; // List of expenses ereport not already paid completely $num = 1; @@ -289,6 +291,7 @@ if ($action == 'create' || empty($action)) print ''; print ''; + print ''; print ''; print ''; print ''; @@ -304,6 +307,7 @@ if ($action == 'create' || empty($action)) print ''; + print '"; print '"; print '"; print '"; diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php index 14d09c20d6e..98fafd3609f 100644 --- a/htdocs/fourn/class/paiementfourn.class.php +++ b/htdocs/fourn/class/paiementfourn.class.php @@ -56,7 +56,7 @@ class PaiementFourn extends Paiement * Label of payment type * @var string */ - public $type_libelle; + public $type_label; /** * Code of Payment type @@ -123,7 +123,7 @@ class PaiementFourn extends Paiement $this->note = $obj->note; $this->note_private = $obj->note; $this->type_code = $obj->paiement_code; - $this->type_libelle = $obj->paiement_type; + $this->type_label = $obj->paiement_type; $this->statut = $obj->statut; $error = 1; } diff --git a/htdocs/fourn/paiement/card.php b/htdocs/fourn/paiement/card.php index 8b65d8be7c0..1d8f72d94a3 100644 --- a/htdocs/fourn/paiement/card.php +++ b/htdocs/fourn/paiement/card.php @@ -197,7 +197,7 @@ if ($result > 0) print ''; // Payment mode - $labeltype=$langs->trans("PaymentType".$object->type_code)!=("PaymentType".$object->type_code)?$langs->trans("PaymentType".$object->type_code):$object->type_libelle; + $labeltype=$langs->trans("PaymentType".$object->type_code)!=("PaymentType".$object->type_code)?$langs->trans("PaymentType".$object->type_code):$object->type_label; print ''; diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index d599f1b40ed..59cd6473e57 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -46,6 +46,8 @@ UPDATE llx_c_units SET scale = -3, active = 0 WHERE code IN ('L'); UPDATE llx_c_units SET label = 'VolumeUnitm3' WHERE code IN ('M3'); UPDATE llx_c_units SET label = 'SurfaceUnitm2' WHERE code IN ('M2'); +ALTER TABLE llx_adherent_type ADD UNIQUE INDEX uk_adherent_type_libelle (libelle, entity); + -- For v11 diff --git a/htdocs/langs/en_US/donations.lang b/htdocs/langs/en_US/donations.lang index 5edc8d62033..a810c61c8f4 100644 --- a/htdocs/langs/en_US/donations.lang +++ b/htdocs/langs/en_US/donations.lang @@ -17,6 +17,7 @@ DonationStatusPromiseNotValidatedShort=Draft DonationStatusPromiseValidatedShort=Validated DonationStatusPaidShort=Received DonationTitle=Donation receipt +DonationDate=Donation date DonationDatePayment=Payment date ValidPromess=Validate promise DonationReceipt=Donation receipt diff --git a/htdocs/loan/class/loanschedule.class.php b/htdocs/loan/class/loanschedule.class.php index c9a8fd9354e..c5335496313 100644 --- a/htdocs/loan/class/loanschedule.class.php +++ b/htdocs/loan/class/loanschedule.class.php @@ -94,6 +94,10 @@ class LoanSchedule extends CommonObject */ public $total; + public $type_code; + public $type_label; + + /** * Constructor * @@ -213,7 +217,7 @@ class LoanSchedule extends CommonObject $sql.= " t.fk_bank,"; $sql.= " t.fk_user_creat,"; $sql.= " t.fk_user_modif,"; - $sql.= " pt.code as type_code, pt.libelle as type_libelle,"; + $sql.= " pt.code as type_code, pt.libelle as type_label,"; $sql.= ' b.fk_account'; $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as t"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as pt ON t.fk_typepayment = pt.id"; @@ -245,7 +249,7 @@ class LoanSchedule extends CommonObject $this->fk_user_modif = $obj->fk_user_modif; $this->type_code = $obj->type_code; - $this->type_libelle = $obj->type_libelle; + $this->type_label = $obj->type_label; $this->bank_account = $obj->fk_account; $this->bank_line = $obj->fk_bank; diff --git a/htdocs/loan/class/paymentloan.class.php b/htdocs/loan/class/paymentloan.class.php index d3c497cbbae..eb0508c3768 100644 --- a/htdocs/loan/class/paymentloan.class.php +++ b/htdocs/loan/class/paymentloan.class.php @@ -90,6 +90,10 @@ class PaymentLoan extends CommonObject */ public $fk_user_modif; + public $type_code; + public $type_label; + + /** * Constructor * @@ -208,7 +212,7 @@ class PaymentLoan extends CommonObject $sql.= " t.fk_bank,"; $sql.= " t.fk_user_creat,"; $sql.= " t.fk_user_modif,"; - $sql.= " pt.code as type_code, pt.libelle as type_libelle,"; + $sql.= " pt.code as type_code, pt.libelle as type_label,"; $sql.= ' b.fk_account'; $sql.= " FROM ".MAIN_DB_PREFIX."payment_loan as t"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as pt ON t.fk_typepayment = pt.id"; @@ -242,7 +246,7 @@ class PaymentLoan extends CommonObject $this->fk_user_modif = $obj->fk_user_modif; $this->type_code = $obj->type_code; - $this->type_libelle = $obj->type_libelle; + $this->type_label = $obj->type_label; $this->bank_account = $obj->fk_account; $this->bank_line = $obj->fk_bank; From f9031cdbfdeb8baec98b61a02753f9fa7ed64b98 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 11:36:48 +0100 Subject: [PATCH 814/980] Clean code --- htdocs/adherents/class/subscription.class.php | 4 ++-- htdocs/adherents/htpasswd.php | 4 ++-- htdocs/contrat/class/contrat.class.php | 6 +++--- htdocs/core/class/commonobject.class.php | 6 +++--- htdocs/core/class/html.form.class.php | 20 +++++++++---------- htdocs/core/lib/project.lib.php | 10 +++++----- htdocs/don/list.php | 20 +++++++++++-------- .../class/supplier_proposal.class.php | 19 +++++++++--------- htdocs/user/class/user.class.php | 10 +++++----- 9 files changed, 52 insertions(+), 47 deletions(-) diff --git a/htdocs/adherents/class/subscription.class.php b/htdocs/adherents/class/subscription.class.php index 986649d15e2..e2fc13edadf 100644 --- a/htdocs/adherents/class/subscription.class.php +++ b/htdocs/adherents/class/subscription.class.php @@ -431,10 +431,10 @@ class Subscription extends CommonObject /** * Renvoi le libelle d'un statut donne * - * @param int $statut Id statut + * @param int $status Id status * @return string Label */ - public function LibStatut($statut) + public function LibStatut($status) { // phpcs:enable global $langs; diff --git a/htdocs/adherents/htpasswd.php b/htdocs/adherents/htpasswd.php index 2dd8c95923f..84fc6bc9824 100644 --- a/htdocs/adherents/htpasswd.php +++ b/htdocs/adherents/htpasswd.php @@ -42,7 +42,7 @@ if (empty($sortorder)) { $sortorder="ASC"; } if (empty($sortfield)) { $sortfield="d.login"; } if (! isset($statut)) { - $statut = 1 ; + $statut = 1; } if (! isset($cotis)) @@ -54,7 +54,7 @@ if (! isset($cotis)) $sql = "SELECT d.login, d.pass, d.datefin"; $sql .= " FROM ".MAIN_DB_PREFIX."adherent as d "; -$sql .= " WHERE d.statut = $statut "; +$sql .= " WHERE d.statut = ".$statut; if ($cotis==1) { $sql .= " AND datefin > '".$db->idate($now)."'"; diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 038de071863..62c3d1bd312 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -2068,10 +2068,10 @@ class Contrat extends CommonObject /** * Return list of line rowid * - * @param int $statut Status of lines to get + * @param int $status Status of lines to get * @return array|int Array of line's rowid or <0 if error */ - public function array_detail($statut = -1) + public function array_detail($status = -1) { // phpcs:enable $tab=array(); @@ -2079,7 +2079,7 @@ class Contrat extends CommonObject $sql = "SELECT cd.rowid"; $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as cd"; $sql.= " WHERE fk_contrat =".$this->id; - if ($statut >= 0) $sql.= " AND statut = '$statut'"; + if ($status >= 0) $sql.= " AND statut = ".$status; dol_syslog(get_class($this)."::array_detail()", LOG_DEBUG); $resql=$this->db->query($sql); diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index deb27817be9..ab2e7c19005 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1057,13 +1057,13 @@ abstract class CommonObject /** * Get array of all contacts for an object * - * @param int $statut Status of links to get (-1=all) + * @param int $status Status of links to get (-1=all) * @param string $source Source of contact: external or thirdparty (llx_socpeople) or internal (llx_user) * @param int $list 0:Return array contains all properties, 1:Return array contains just id * @param string $code Filter on this code of contact type ('SHIPPING', 'BILLING', ...) * @return array|int Array of contacts, -1 if error */ - public function liste_contact($statut = -1, $source = 'external', $list = 0, $code = '') + public function liste_contact($status = -1, $source = 'external', $list = 0, $code = '') { // phpcs:enable global $langs; @@ -1086,7 +1086,7 @@ abstract class CommonObject if ($source == 'internal') $sql.= " AND tc.source = 'internal'"; if ($source == 'external' || $source == 'thirdparty') $sql.= " AND tc.source = 'external'"; $sql.= " AND tc.active=1"; - if ($statut >= 0) $sql.= " AND ec.statut = '".$statut."'"; + if ($status >= 0) $sql.= " AND ec.statut = ".$status; $sql.=" ORDER BY t.lastname ASC"; dol_syslog(get_class($this)."::liste_contact", LOG_DEBUG); diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 41633f927c8..4c057b3bdb6 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -3765,7 +3765,7 @@ class Form * * @param string $selected Id account pre-selected * @param string $htmlname Name of select zone - * @param int $statut Status of searched accounts (0=open, 1=closed, 2=both) + * @param int $status Status of searched accounts (0=open, 1=closed, 2=both) * @param string $filtre To filter list * @param int $useempty 1=Add an empty value in list, 2=Add an empty value in list only if there is more than 2 entries. * @param string $moreattrib To add more attribute on select @@ -3773,7 +3773,7 @@ class Form * @param string $morecss More CSS * @return int <0 if error, Num of bank account found if OK (0, 1, 2, ...) */ - public function select_comptes($selected = '', $htmlname = 'accountid', $statut = 0, $filtre = '', $useempty = 0, $moreattrib = '', $showcurrency = 0, $morecss = '') + public function select_comptes($selected = '', $htmlname = 'accountid', $status = 0, $filtre = '', $useempty = 0, $moreattrib = '', $showcurrency = 0, $morecss = '') { // phpcs:enable global $langs, $conf; @@ -3784,7 +3784,7 @@ class Form $sql = "SELECT rowid, label, bank, clos as status, currency_code"; $sql.= " FROM ".MAIN_DB_PREFIX."bank_account"; $sql.= " WHERE entity IN (".getEntity('bank_account').")"; - if ($statut != 2) $sql.= " AND clos = '".$statut."'"; + if ($status != 2) $sql.= " AND clos = ".(int) $status; if ($filtre) $sql.=" AND ".$filtre; $sql.= " ORDER BY label"; @@ -3815,7 +3815,7 @@ class Form } print trim($obj->label); if ($showcurrency) print ' ('.$obj->currency_code.')'; - if ($statut == 2 && $obj->status == 1) print ' ('.$langs->trans("Closed").')'; + if ($status == 2 && $obj->status == 1) print ' ('.$langs->trans("Closed").')'; print ''; $i++; } @@ -3823,7 +3823,7 @@ class Form } else { - if ($statut == 0) print ''.$langs->trans("NoActiveBankAccountDefined").''; + if ($status == 0) print ''.$langs->trans("NoActiveBankAccountDefined").''; else print ''.$langs->trans("NoBankAccountFound").''; } } @@ -3839,13 +3839,13 @@ class Form * * @param string $selected Id establishment pre-selected * @param string $htmlname Name of select zone - * @param int $statut Status of searched establishment (0=open, 1=closed, 2=both) + * @param int $status Status of searched establishment (0=open, 1=closed, 2=both) * @param string $filtre To filter list * @param int $useempty 1=Add an empty value in list, 2=Add an empty value in list only if there is more than 2 entries. * @param string $moreattrib To add more attribute on select * @return int <0 if error, Num of establishment found if OK (0, 1, 2, ...) */ - public function selectEstablishments($selected = '', $htmlname = 'entity', $statut = 0, $filtre = '', $useempty = 0, $moreattrib = '') + public function selectEstablishments($selected = '', $htmlname = 'entity', $status = 0, $filtre = '', $useempty = 0, $moreattrib = '') { // phpcs:enable global $langs, $conf; @@ -3856,7 +3856,7 @@ class Form $sql = "SELECT rowid, name, fk_country, status, entity"; $sql.= " FROM ".MAIN_DB_PREFIX."establishment"; $sql.= " WHERE 1=1"; - if ($statut != 2) $sql.= " AND status = '".$statut."'"; + if ($status != 2) $sql.= " AND status = ".(int) $status; if ($filtre) $sql.=" AND ".$filtre; $sql.= " ORDER BY name"; @@ -3886,7 +3886,7 @@ class Form print ''; $i++; } @@ -3894,7 +3894,7 @@ class Form } else { - if ($statut == 0) print ''.$langs->trans("NoActiveEstablishmentDefined").''; + if ($status == 0) print ''.$langs->trans("NoActiveEstablishmentDefined").''; else print ''.$langs->trans("NoEstablishmentFound").''; } } diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index a177b3f13c0..825142d1385 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -1749,12 +1749,12 @@ function searchTaskInChild(&$inc, $parent, &$lines, &$taskrole) * @param int $socid Id thirdparty * @param int $projectsListId Id of project I have permission on * @param int $mytasks Limited to task I am contact to - * @param int $statut -1=No filter on statut, 0 or 1 = Filter on status + * @param int $status -1=No filter on statut, 0 or 1 = Filter on status * @param array $listofoppstatus List of opportunity status * @param array $hiddenfields List of info to not show ('projectlabel', 'declaredprogress', '...', ) * @return void */ -function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks = 0, $statut = -1, $listofoppstatus = array(), $hiddenfields = array()) +function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks = 0, $status = -1, $listofoppstatus = array(), $hiddenfields = array()) { global $langs,$conf,$user,$bc; @@ -1768,7 +1768,7 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks $project_year_filter=0; $title=$langs->trans("Projects"); - if (strcmp($statut, '') && $statut >= 0) $title=$langs->trans("Projects").' '.$langs->trans($projectstatic->statuts_long[$statut]); + if (strcmp($status, '') && $status >= 0) $title=$langs->trans("Projects").' '.$langs->trans($projectstatic->statuts_long[$status]); $arrayidtypeofcontact=array(); @@ -1797,9 +1797,9 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks $sql.= " AND ec.fk_c_type_contact = ctc.rowid"; // Replace the 2 lines with ec.fk_c_type_contact in $arrayidtypeofcontact $sql.= " AND ctc.element = 'project_task'"; } - if ($statut >= 0) + if ($status >= 0) { - $sql.= " AND p.fk_statut = ".$statut; + $sql.= " AND p.fk_statut = ".(int) $status; } if (!empty($conf->global->PROJECT_LIMIT_YEAR_RANGE)) { diff --git a/htdocs/don/list.php b/htdocs/don/list.php index 7d20dc93032..4e9d86af3f8 100644 --- a/htdocs/don/list.php +++ b/htdocs/don/list.php @@ -43,7 +43,7 @@ $pagenext = $page + 1; if (! $sortorder) $sortorder="DESC"; if (! $sortfield) $sortfield="d.datedon"; -$statut=(GETPOST("statut", 'intcomma')!='')?GETPOST("statut", 'intcomma'):"-1"; +$search_status=(GETPOST("search_status", 'intcomma') != '') ? GETPOST("search_status", 'intcomma') : "-1"; $search_all=trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml')); $search_ref=GETPOST('search_ref', 'alpha'); $search_company=GETPOST('search_company', 'alpha'); @@ -87,13 +87,13 @@ $donationstatic=new Don($db); // Genere requete de liste des dons $sql = "SELECT d.rowid, d.datedon, d.fk_soc as socid, d.firstname, d.lastname, d.societe,"; -$sql.= " d.amount, d.fk_statut as statut, "; +$sql.= " d.amount, d.fk_statut as status,"; $sql.= " p.rowid as pid, p.ref, p.title, p.public"; $sql.= " FROM ".MAIN_DB_PREFIX."don as d LEFT JOIN ".MAIN_DB_PREFIX."projet AS p"; $sql.= " ON p.rowid = d.fk_projet WHERE d.entity IN (".getEntity('donation').")"; -if ($statut != '' && $statut != '-1') +if ($search_status != '' && $search_status != '-1') { - $sql .= " AND d.fk_statut IN (".$db->escape($statut).")"; + $sql .= " AND d.fk_statut IN (".$db->escape($search_status).")"; } if (trim($search_ref) != '') { @@ -135,9 +135,13 @@ if ($resql) $num = $db->num_rows($resql); $i = 0; - $param = '&statut='.$statut; - //if ($page > 0) $param.= '&page='.$page; - if ($optioncss != '') $param.='&optioncss='.$optioncss; + $param = ''; + if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); + if ($search_status && $search_status != -1) $param .= '&search_status='.urlencode($search_status); + if ($search_ref) $param .= '&search_ref='.urlencode($search_ref); + if ($search_company) $param .= '&search_company='.urlencode($search_company); + if ($search_name) $param .= '&search_name='.urlencode($search_name); + if ($search_amount) $param .= '&search_amount='.urlencode($search_amount); $newcardbutton=''; if ($user->rights->don->creer) @@ -257,7 +261,7 @@ if ($resql) print "\n"; } print ''; - print ''; + print ''; print ''; print ""; $i++; diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index aa78324ad37..6af681750cc 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -1698,22 +1698,22 @@ class SupplierProposal extends CommonObject * Close the askprice * * @param User $user Object user that close - * @param int $statut Statut + * @param int $status Status * @param string $note Comment * @return int <0 if KO, >0 if OK */ - public function cloture($user, $statut, $note) + public function cloture($user, $status, $note) { global $langs,$conf; - $this->statut = $statut; + $this->statut = $status; $error=0; $now=dol_now(); $this->db->begin(); $sql = "UPDATE ".MAIN_DB_PREFIX."supplier_proposal"; - $sql.= " SET fk_statut = ".$statut.", note_private = '".$this->db->escape($note)."', date_cloture='".$this->db->idate($now)."', fk_user_cloture=".$user->id; + $sql.= " SET fk_statut = ".$status.", note_private = '".$this->db->escape($note)."', date_cloture='".$this->db->idate($now)."', fk_user_cloture=".$user->id; $sql.= " WHERE rowid = ".$this->id; $resql=$this->db->query($sql); @@ -1722,7 +1722,7 @@ class SupplierProposal extends CommonObject $modelpdf=$conf->global->SUPPLIER_PROPOSAL_ADDON_PDF_ODT_CLOSED?$conf->global->SUPPLIER_PROPOSAL_ADDON_PDF_ODT_CLOSED:$this->modelpdf; $trigger_name='SUPPLIER_PROPOSAL_CLOSE_REFUSED'; - if ($statut == 2) + if ($status == 2) { $trigger_name='SUPPLIER_PROPOSAL_CLOSE_SIGNED'; $modelpdf=$conf->global->SUPPLIER_PROPOSAL_ADDON_PDF_ODT_TOBILL?$conf->global->SUPPLIER_PROPOSAL_ADDON_PDF_ODT_TOBILL:$this->modelpdf; @@ -1732,7 +1732,7 @@ class SupplierProposal extends CommonObject $result = $this->updateOrCreatePriceFournisseur($user); } } - if ($statut == 4) + if ($status == 4) { $trigger_name='SUPPLIER_PROPOSAL_CLASSIFY_BILLED'; } @@ -2258,15 +2258,16 @@ class SupplierProposal extends CommonObject if ($resql) { $label = $labelShort = ''; + $status = ''; if ($mode == 'opened') { $delay_warning=$conf->supplier_proposal->cloture->warning_delay; - $statut = self::STATUS_VALIDATED; + $status = self::STATUS_VALIDATED; $label = $langs->trans("SupplierProposalsToClose"); $labelShort = $langs->trans("ToAcceptRefuse"); } if ($mode == 'signed') { $delay_warning=$conf->supplier_proposal->facturation->warning_delay; - $statut = self::STATUS_SIGNED; + $status = self::STATUS_SIGNED; $label = $langs->trans("SupplierProposalsToProcess"); // May be billed or ordered $labelShort = $langs->trans("ToClose"); } @@ -2275,7 +2276,7 @@ class SupplierProposal extends CommonObject $response->warning_delay = $delay_warning/60/60/24; $response->label = $label; $response->labelShort = $labelShort; - $response->url = DOL_URL_ROOT.'/supplier_proposal/list.php?viewstatut='.$statut; + $response->url = DOL_URL_ROOT.'/supplier_proposal/list.php?viewstatut='.$status; $response->img = img_object('', "propal"); // This assignment in condition is not a bug. It allows walking the results. diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 6baffc74a73..c34a9f1c7d0 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -954,22 +954,22 @@ class User extends CommonObject /** * Change status of a user * - * @param int $statut Status to set + * @param int $status Status to set * @return int <0 if KO, 0 if nothing is done, >0 if OK */ - public function setstatus($statut) + public function setstatus($status) { global $conf,$langs,$user; $error=0; // Check parameters - if ($this->statut == $statut) return 0; - else $this->statut = $statut; + if ($this->statut == $status) return 0; + else $this->statut = $status; $this->db->begin(); - // Deactivate user + // Save in database $sql = "UPDATE ".MAIN_DB_PREFIX."user"; $sql.= " SET statut = ".$this->statut; $sql.= " WHERE rowid = ".$this->id; From e191dd7cc015ed3495d5a27bab94ad96405d71b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 1 Nov 2019 16:13:40 +0100 Subject: [PATCH 815/980] $key is overwriting a variable from outer foreach loop --- htdocs/admin/notification.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/notification.php b/htdocs/admin/notification.php index 3c7ce730d03..6ba0d5673e2 100644 --- a/htdocs/admin/notification.php +++ b/htdocs/admin/notification.php @@ -238,7 +238,7 @@ foreach($listofnotifiedevents as $notifiedevent) $s=''; // Do not use type="email" here, we must be able to enter a list of email with , separator. $arrayemail=explode(',', $value); $showwarning=0; - foreach($arrayemail as $key=>$valuedet) + foreach($arrayemail as $keydet => $valuedet) { $valuedet=trim($valuedet); if (! empty($valuedet) && ! isValidEmail($valuedet, 1)) $showwarning++; From 37f4ebb1b2a54b9a411fe456cf056028dfe94246 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 11:56:01 +0100 Subject: [PATCH 816/980] Update xcal.lib.php --- htdocs/core/lib/xcal.lib.php | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php index d1679555c99..6d9fd4dab22 100644 --- a/htdocs/core/lib/xcal.lib.php +++ b/htdocs/core/lib/xcal.lib.php @@ -112,6 +112,41 @@ function build_calfile($format, $title, $desc, $events_array, $outputfile) $category = format_cal($format, $category); $location = format_cal($format, $location); + // Output the vCard/iCal VEVENT object + /* + Example from Google ical export for a 1 hour event: + BEGIN:VEVENT + DTSTART:20101103T120000Z + DTEND:20101103T130000Z + DTSTAMP:20101121T144902Z + UID:4eilllcsq8r1p87ncg7vc8dbpk@google.com + CREATED:20101121T144657Z + DESCRIPTION: + LAST-MODIFIED:20101121T144707Z + LOCATION: + SEQUENCE:0 + STATUS:CONFIRMED + SUMMARY:Tâche 1 heure + TRANSP:OPAQUE + END:VEVENT + + Example from Google ical export for a 1 day event: + BEGIN:VEVENT + DTSTART;VALUE=DATE:20101102 + DTEND;VALUE=DATE:20101103 + DTSTAMP:20101121T144902Z + UID:d09t43kcf1qgapu9efsmmo1m6k@google.com + CREATED:20101121T144607Z + DESCRIPTION: + LAST-MODIFIED:20101121T144607Z + LOCATION: + SEQUENCE:0 + STATUS:CONFIRMED + SUMMARY:Tâche 1 jour + TRANSP:TRANSPARENT + END:VEVENT + */ + if ($type === "event") { fwrite($calfileh, "BEGIN:VEVENT\n"); From b43d06db3714ba04b762a5338b73df64991ed424 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sat, 2 Nov 2019 10:55:24 +0000 Subject: [PATCH 817/980] Fixing style errors. --- htdocs/core/lib/xcal.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php index 6d9fd4dab22..7e7cbd9672e 100644 --- a/htdocs/core/lib/xcal.lib.php +++ b/htdocs/core/lib/xcal.lib.php @@ -129,7 +129,7 @@ function build_calfile($format, $title, $desc, $events_array, $outputfile) SUMMARY:Tâche 1 heure TRANSP:OPAQUE END:VEVENT - + Example from Google ical export for a 1 day event: BEGIN:VEVENT DTSTART;VALUE=DATE:20101102 @@ -146,7 +146,7 @@ function build_calfile($format, $title, $desc, $events_array, $outputfile) TRANSP:TRANSPARENT END:VEVENT */ - + if ($type === "event") { fwrite($calfileh, "BEGIN:VEVENT\n"); From 6744f10ff2e20d9a9eaa3499d91cdb1bc05f05c2 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sat, 2 Nov 2019 11:00:43 +0000 Subject: [PATCH 818/980] Fixing style errors. --- htdocs/livraison/class/livraison.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 6218fec7732..c962d1d352e 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -73,7 +73,7 @@ class Livraison extends CommonObject public $date_valid; public $model_pdf; - + /** * Constructor * From 45c77b4560bb5e2bc63dfd1296f4178f561324c0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 12:59:38 +0100 Subject: [PATCH 819/980] Renaming some libelle into label --- htdocs/accountancy/journal/bankjournal.php | 6 ++-- htdocs/admin/barcode.php | 4 +-- htdocs/comm/action/class/actioncomm.class.php | 5 ++- htdocs/comm/action/index.php | 12 +++---- htdocs/comm/action/pertype.php | 4 +-- htdocs/comm/action/peruser.php | 4 +-- htdocs/comm/propal/class/propal.class.php | 6 ++-- htdocs/compta/bank/treso.php | 2 +- htdocs/compta/facture/class/facture.class.php | 4 +-- htdocs/compta/index.php | 5 ++- htdocs/compta/journal/purchasesjournal.php | 4 +-- .../compta/paiement/class/cpaiement.class.php | 25 +++++++++----- htdocs/compta/payment_sc/card.php | 4 +-- htdocs/compta/sociales/card.php | 6 ++-- htdocs/compta/sociales/document.php | 4 +-- htdocs/compta/sociales/payments.php | 14 ++++---- htdocs/contact/consumption.php | 30 ++++++++-------- htdocs/core/lib/functions2.lib.php | 8 ++--- .../core/modules/mailings/fraise.modules.php | 4 +-- .../stock/doc/pdf_standard.modules.php | 8 ++--- .../stock/doc/pdf_stdmovement.modules.php | 10 +++--- htdocs/expedition/card.php | 4 +-- htdocs/expedition/class/expedition.class.php | 11 +++--- .../class/paymentexpensereport.class.php | 2 +- htdocs/fichinter/class/fichinterrec.class.php | 3 +- htdocs/fourn/card.php | 7 ++-- .../class/fournisseur.commande.class.php | 12 +++---- .../fourn/class/fournisseur.facture.class.php | 1 + htdocs/fourn/commande/orderstoinvoice.php | 9 ++--- htdocs/fourn/facture/card.php | 13 +++---- htdocs/install/repair.php | 4 +-- htdocs/livraison/card.php | 2 +- htdocs/product/class/product.class.php | 6 ++-- htdocs/product/stats/facture_fournisseur.php | 5 +-- htdocs/product/stock/class/entrepot.class.php | 34 +++++++++++-------- htdocs/product/stock/movement_card.php | 5 +-- htdocs/product/stock/movement_list.php | 2 +- htdocs/public/members/new.php | 1 - htdocs/societe/societecontact.php | 2 ++ .../class/supplier_proposal.class.php | 4 +-- htdocs/takepos/admin/terminal.php | 8 ++--- htdocs/ticket/class/ticket.class.php | 4 +-- htdocs/user/class/user.class.php | 18 ++++++---- htdocs/user/group/perms.php | 4 +-- htdocs/user/perms.php | 4 +-- .../webservices/server_productorservice.php | 5 ++- .../webservices/server_supplier_invoice.php | 8 ++--- 47 files changed, 187 insertions(+), 160 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 7063f7fd53e..f75fa48f544 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -323,11 +323,11 @@ if ($result) { if (preg_match('/^\((.*)\)$/i', $links[$key]['label'], $reg)) { if ($reg[1] == 'socialcontribution') $reg[1] = 'SocialContribution'; - $chargestatic->lib = $langs->trans($reg[1]); + $chargestatic->label = $langs->trans($reg[1]); } else { - $chargestatic->lib = $links[$key]['label']; + $chargestatic->label = $links[$key]['label']; } - $chargestatic->ref = $chargestatic->lib; + $chargestatic->ref = $chargestatic->label; $tabpay[$obj->rowid]["soclib"] = $chargestatic->getNomUrl(1, 30); $tabpay[$obj->rowid]["paymentscid"] = $chargestatic->id; diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php index 57031a9822f..a209a5f5590 100644 --- a/htdocs/admin/barcode.php +++ b/htdocs/admin/barcode.php @@ -208,7 +208,7 @@ print ''; print ''; print "\n"; -$sql = "SELECT rowid, code as encoding, libelle, coder, example"; +$sql = "SELECT rowid, code as encoding, libelle as label, coder, example"; $sql.= " FROM ".MAIN_DB_PREFIX."c_barcode_type"; $sql.= " WHERE entity = ".$conf->entity; $sql.= " ORDER BY code"; @@ -225,7 +225,7 @@ if ($resql) $obj = $db->fetch_object($resql); print ''; - print ''; + print ''; $i++; } $db->free($resql); diff --git a/htdocs/compta/journal/purchasesjournal.php b/htdocs/compta/journal/purchasesjournal.php index 55f5c82a72a..1d7a1c1d406 100644 --- a/htdocs/compta/journal/purchasesjournal.php +++ b/htdocs/compta/journal/purchasesjournal.php @@ -100,7 +100,7 @@ $p = explode(":", $conf->global->MAIN_INFO_SOCIETE_COUNTRY); $idpays = $p[0]; -$sql = "SELECT f.rowid, f.ref_supplier, f.type, f.datef, f.libelle,"; +$sql = "SELECT f.rowid, f.ref_supplier, f.type, f.datef, f.libelle as label,"; $sql.= " fd.total_ttc, fd.tva_tx, fd.total_ht, fd.tva as total_tva, fd.product_type, fd.localtax1_tx, fd.localtax2_tx, fd.total_localtax1, fd.total_localtax2,"; $sql.= " s.rowid as socid, s.nom as name, s.code_compta_fournisseur,"; $sql.= " p.rowid as pid, p.ref as ref, p.accountancy_code_buy,"; @@ -158,7 +158,7 @@ if ($result) $tabfac[$obj->rowid]["date"] = $obj->datef; $tabfac[$obj->rowid]["ref"] = $obj->ref_supplier; $tabfac[$obj->rowid]["type"] = $obj->type; - $tabfac[$obj->rowid]["lib"] = $obj->libelle; + $tabfac[$obj->rowid]["lib"] = $obj->label; $tabttc[$obj->rowid][$compta_soc] += $obj->total_ttc; $tabht[$obj->rowid][$compta_prod] += $obj->total_ht; if ($obj->recuperableonly != 1) $tabtva[$obj->rowid][$compta_tva] += $obj->total_tva; diff --git a/htdocs/compta/paiement/class/cpaiement.class.php b/htdocs/compta/paiement/class/cpaiement.class.php index 37614f7e36e..4363f39216f 100644 --- a/htdocs/compta/paiement/class/cpaiement.class.php +++ b/htdocs/compta/paiement/class/cpaiement.class.php @@ -41,7 +41,14 @@ class Cpaiement public $table_element = 'c_paiement'; public $code; + + /** + * @deprecated + * @see $label + */ public $libelle; + public $label; + public $type; public $active; public $accountancy_code; @@ -80,6 +87,9 @@ class Cpaiement if (isset($this->libelle)) { $this->libelle = trim($this->libelle); } + if (isset($this->label)) { + $this->label = trim($this->label); + } if (isset($this->type)) { $this->type = trim($this->type); } @@ -100,7 +110,6 @@ class Cpaiement // Insert request $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '('; - $sql.= 'entity,'; $sql.= 'code,'; $sql.= 'libelle,'; @@ -108,10 +117,7 @@ class Cpaiement $sql.= 'active,'; $sql.= 'accountancy_code,'; $sql.= 'module'; - - $sql .= ') VALUES ('; - $sql .= ' '.(! isset($this->entity)?getEntity('c_paiement'):$this->entity).','; $sql .= ' '.(! isset($this->code)?'NULL':"'".$this->db->escape($this->code)."'").','; $sql .= ' '.(! isset($this->libelle)?'NULL':"'".$this->db->escape($this->libelle)."'").','; @@ -119,8 +125,6 @@ class Cpaiement $sql .= ' '.(! isset($this->active)?'NULL':$this->active).','; $sql .= ' '.(! isset($this->accountancy_code)?'NULL':"'".$this->db->escape($this->accountancy_code)."'").','; $sql .= ' '.(! isset($this->module)?'NULL':"'".$this->db->escape($this->module)."'"); - - $sql .= ')'; $this->db->begin(); @@ -173,7 +177,7 @@ class Cpaiement $sql = 'SELECT'; $sql .= ' t.id,'; $sql .= " t.code,"; - $sql .= " t.libelle,"; + $sql .= " t.libelle as label,"; $sql .= " t.type,"; $sql .= " t.active,"; $sql .= " t.accountancy_code,"; @@ -195,7 +199,8 @@ class Cpaiement $this->id = $obj->id; $this->code = $obj->code; - $this->libelle = $obj->libelle; + $this->libelle = $obj->label; + $this->label = $obj->label; $this->type = $obj->type; $this->active = $obj->active; $this->accountancy_code = $obj->accountancy_code; @@ -238,6 +243,9 @@ class Cpaiement if (isset($this->libelle)) { $this->libelle = trim($this->libelle); } + if (isset($this->label)) { + $this->label = trim($this->label); + } if (isset($this->type)) { $this->type = trim($this->type); } @@ -361,6 +369,7 @@ class Cpaiement $this->code = ''; $this->libelle = ''; + $this->label = ''; $this->type = ''; $this->active = ''; $this->accountancy_code = ''; diff --git a/htdocs/compta/payment_sc/card.php b/htdocs/compta/payment_sc/card.php index aaff1a99c9f..ebfad45bb67 100644 --- a/htdocs/compta/payment_sc/card.php +++ b/htdocs/compta/payment_sc/card.php @@ -221,7 +221,7 @@ dol_fiche_end(); */ $disable_delete = 0; -$sql = 'SELECT f.rowid as scid, f.libelle, f.paye, f.amount as sc_amount, pf.amount, pc.libelle as sc_type'; +$sql = 'SELECT f.rowid as scid, f.libelle as label, f.paye, f.amount as sc_amount, pf.amount, pc.libelle as sc_type'; $sql.= ' FROM '.MAIN_DB_PREFIX.'paiementcharge as pf,'.MAIN_DB_PREFIX.'chargesociales as f, '.MAIN_DB_PREFIX.'c_chargesociales as pc'; $sql.= ' WHERE pf.fk_charge = f.rowid AND f.fk_type = pc.id'; $sql.= ' AND f.entity = '.$conf->entity; @@ -263,7 +263,7 @@ if ($resql) /*print $socialcontrib->type;*/ print "\n"; // Label - print ''; + print ''; // Expected to pay print ''; // Status diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index 3054e64320e..79b0e97b8b1 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -167,7 +167,7 @@ if ($action == 'add' && $user->rights->tax->charges->creer) else { $object->type = $actioncode; - $object->lib = GETPOST('label'); + $object->label = GETPOST('label', 'alpha'); $object->date_ech = $dateech; $object->periode = $dateperiod; $object->amount = $amount; @@ -464,8 +464,8 @@ if ($id > 0) $morehtmlref='
    '; // Ref customer - $morehtmlref.=$form->editfieldkey("Label", 'lib', $object->lib, $object, $user->rights->tax->charges->creer, 'string', '', 0, 1); - $morehtmlref.=$form->editfieldval("Label", 'lib', $object->lib, $object, $user->rights->tax->charges->creer, 'string', '', null, null, '', 1); + $morehtmlref.=$form->editfieldkey("Label", 'lib', $object->label, $object, $user->rights->tax->charges->creer, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("Label", 'lib', $object->label, $object, $user->rights->tax->charges->creer, 'string', '', null, null, '', 1); // Project if (! empty($conf->projet->enabled)) { diff --git a/htdocs/compta/sociales/document.php b/htdocs/compta/sociales/document.php index b3fb1cf697b..dfdca9cdf6a 100644 --- a/htdocs/compta/sociales/document.php +++ b/htdocs/compta/sociales/document.php @@ -108,8 +108,8 @@ if ($object->id) $morehtmlref='
    '; // Label of social contribution - $morehtmlref.=$form->editfieldkey("Label", 'lib', $object->lib, $object, $user->rights->tax->charges->creer, 'string', '', 0, 1); - $morehtmlref.=$form->editfieldval("Label", 'lib', $object->lib, $object, $user->rights->tax->charges->creer, 'string', '', null, null, '', 1); + $morehtmlref.=$form->editfieldkey("Label", 'lib', $object->label, $object, $user->rights->tax->charges->creer, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("Label", 'lib', $object->label, $object, $user->rights->tax->charges->creer, 'string', '', null, null, '', 1); // Project if (! empty($conf->projet->enabled)) { diff --git a/htdocs/compta/sociales/payments.php b/htdocs/compta/sociales/payments.php index 461cf6d8330..96a64a76bd5 100644 --- a/htdocs/compta/sociales/payments.php +++ b/htdocs/compta/sociales/payments.php @@ -126,8 +126,8 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) print_liste_field_titre("PayedByThisPayment", $_SERVER["PHP_SELF"], "pc.amount", "", $param, 'class="right"', $sortfield, $sortorder); print "
    \n"; - $sql = "SELECT c.id, c.libelle as lib,"; - $sql.= " cs.rowid, cs.libelle, cs.fk_type as type, cs.periode, cs.date_ech, cs.amount as total,"; + $sql = "SELECT c.id, c.libelle as type_label,"; + $sql.= " cs.rowid, cs.libelle as label, cs.fk_type as type, cs.periode, cs.date_ech, cs.amount as total,"; $sql.= " pc.rowid as pid, pc.datep, pc.amount as totalpaye, pc.num_paiement as num_payment,"; $sql.= " pct.code as payment_code"; $sql.= " FROM ".MAIN_DB_PREFIX."c_chargesociales as c,"; @@ -162,10 +162,12 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) while ($i < min($num, $limit)) { $obj = $db->fetch_object($resql); - print ''; - // Ref payment + $payment_sc_static->id=$obj->pid; $payment_sc_static->ref=$obj->pid; + + print ''; + // Ref payment print '\n"; // Date payment print ''; @@ -177,11 +179,11 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) print ''; // Type - print ''; + print ''; // Date $date=$obj->periode; if (empty($date)) $date=$obj->date_ech; diff --git a/htdocs/contact/consumption.php b/htdocs/contact/consumption.php index 00817ee5799..56427347dd4 100644 --- a/htdocs/contact/consumption.php +++ b/htdocs/contact/consumption.php @@ -170,7 +170,7 @@ if ($type_element == 'fichinter') { // Customer : show products from invoices require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php'; $documentstatic=new Fichinter($db); - $sql_select = 'SELECT f.rowid as doc_id, f.ref as doc_number, \'1\' as doc_type, f.datec as dateprint, f.fk_statut as status, tc.libelle, '; + $sql_select = 'SELECT f.rowid as doc_id, f.ref as doc_number, \'1\' as doc_type, f.datec as dateprint, f.fk_statut as status, tc.libelle as type_contact_label, '; $tables_from = MAIN_DB_PREFIX.'fichinterdet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'fichinter as f ON d.fk_fichinter=f.rowid'; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid AND ec.fk_socpeople='.$object->id; @@ -183,7 +183,7 @@ elseif ($type_element == 'invoice') { // Customer : show products from invoices require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $documentstatic=new Facture($db); - $sql_select = 'SELECT f.rowid as doc_id, f.ref as doc_number, f.type as doc_type, f.datef as dateprint, f.fk_statut as status, f.paye as paid, tc.libelle, '; + $sql_select = 'SELECT f.rowid as doc_id, f.ref as doc_number, f.type as doc_type, f.datef as dateprint, f.fk_statut as status, f.paye as paid, tc.libelle as type_contact_label, '; $tables_from = MAIN_DB_PREFIX.'facturedet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture as f ON d.fk_facture=f.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; @@ -198,7 +198,7 @@ elseif ($type_element == 'propal') { require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; $documentstatic=new Propal($db); - $sql_select = 'SELECT c.rowid as doc_id, c.ref as doc_number, \'1\' as doc_type, c.datep as dateprint, c.fk_statut as status, tc.libelle, '; + $sql_select = 'SELECT c.rowid as doc_id, c.ref as doc_number, \'1\' as doc_type, c.datep as dateprint, c.fk_statut as status, tc.libelle as type_contact_label, '; $tables_from = MAIN_DB_PREFIX.'propaldet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'propal as c ON d.fk_propal=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; @@ -213,7 +213,7 @@ elseif ($type_element == 'order') { require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; $documentstatic=new Commande($db); - $sql_select = 'SELECT c.rowid as doc_id, c.ref as doc_number, \'1\' as doc_type, c.date_commande as dateprint, c.fk_statut as status, tc.libelle, '; + $sql_select = 'SELECT c.rowid as doc_id, c.ref as doc_number, \'1\' as doc_type, c.date_commande as dateprint, c.fk_statut as status, tc.libelle as type_contact_label, '; $tables_from = MAIN_DB_PREFIX.'commandedet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'commande as c ON d.fk_commande=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; @@ -228,7 +228,7 @@ elseif ($type_element == 'supplier_invoice') { // Supplier : Show products from invoices. require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; $documentstatic=new FactureFournisseur($db); - $sql_select = 'SELECT f.rowid as doc_id, f.ref as doc_number, \'1\' as doc_type, f.datef as dateprint, f.fk_statut as status, f.paye as paid, tc.libelle, '; + $sql_select = 'SELECT f.rowid as doc_id, f.ref as doc_number, \'1\' as doc_type, f.datef as dateprint, f.fk_statut as status, f.paye as paid, tc.libelle as type_contact_label, '; $tables_from = MAIN_DB_PREFIX.'facture_fourn_det d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture_fourn as f ON d.fk_facture_fourn=f.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; @@ -256,7 +256,7 @@ elseif ($type_element == 'supplier_order') { // Supplier : Show products from orders. require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; $documentstatic=new CommandeFournisseur($db); - $sql_select = 'SELECT c.rowid as doc_id, c.ref as doc_number, \'1\' as doc_type, c.date_valid as dateprint, c.fk_statut as status, tc.libelle, '; + $sql_select = 'SELECT c.rowid as doc_id, c.ref as doc_number, \'1\' as doc_type, c.date_valid as dateprint, c.fk_statut as status, tc.libelle as type_contact_label, '; $tables_from = MAIN_DB_PREFIX.'commande_fournisseurdet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'commande_fournisseur as c ON d.fk_commande=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; @@ -272,7 +272,7 @@ elseif ($type_element == 'contract') require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; $documentstatic=new Contrat($db); $documentstaticline=new ContratLigne($db); - $sql_select = 'SELECT c.rowid as doc_id, c.ref as doc_number, \'1\' as doc_type, c.date_contrat as dateprint, d.statut as status, tc.libelle, '; + $sql_select = 'SELECT c.rowid as doc_id, c.ref as doc_number, \'1\' as doc_type, c.date_contrat as dateprint, d.statut as status, tc.libelle as type_contact_label, '; $tables_from = MAIN_DB_PREFIX.'contratdet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'contrat as c ON d.fk_contrat=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; @@ -344,14 +344,14 @@ if ($sql_select) $num = $db->num_rows($resql); - $param="&socid=".$socid."&type_element=".$type_element; - if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; - if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; + $param="&socid=".urlencode($socid)."&type_element=".urlencode($type_element); + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); if ($sprod_fulldescr) $param.= "&sprod_fulldescr=".urlencode($sprod_fulldescr); if ($sref) $param.= "&sref=".urlencode($sref); - if ($month) $param.= "&month=".$month; - if ($year) $param.= "&year=".$year; - if ($optioncss != '') $param.='&optioncss='.$optioncss; + if ($month) $param.= "&month=".urlencode($month); + if ($year) $param.= "&year=".urlencode($year); + if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); print_barre_liste($langs->trans('ProductsIntoElements').' '.$typeElementString.' '.$button, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $totalnboflines, '', 0, '', '', $limit); @@ -408,6 +408,7 @@ if ($sql_select) $documentstatic->statut=$objp->status; $documentstatic->status=$objp->status; $documentstatic->paye=$objp->paid; + $documentstatic->paid=$objp->paid; if (is_object($documentstaticline)) $documentstaticline->statut=$objp->status; @@ -573,8 +574,7 @@ if ($sql_select) */ print ''; - //print ''; - print ''; + print ''; // Type of contact label print ''; $total_qty+=$objp->prod_qty; diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 30eba9867b8..07f058f2fe2 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -1617,7 +1617,7 @@ function getListOfModels($db, $type, $maxfilenamelength = 0) $found=0; $dirtoscan=''; - $sql = "SELECT nom as id, nom as lib, libelle as label, description as description"; + $sql = "SELECT nom as id, nom as doc_template_name, libelle as label, description as description"; $sql.= " FROM ".MAIN_DB_PREFIX."document_model"; $sql.= " WHERE type = '".$type."'"; $sql.= " AND entity IN (0,".$conf->entity.")"; @@ -1677,18 +1677,18 @@ function getListOfModels($db, $type, $maxfilenamelength = 0) } else { - if ($type == 'member' && $obj->lib == 'standard') // Special case, if member template, we add variant per format + if ($type == 'member' && $obj->doc_template_name == 'standard') // Special case, if member template, we add variant per format { global $_Avery_Labels; include_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; foreach($_Avery_Labels as $key => $val) { - $liste[$obj->id.':'.$key]=($obj->label?$obj->label:$obj->lib).' '.$val['name']; + $liste[$obj->id.':'.$key]=($obj->label?$obj->label:$obj->doc_template_name).' '.$val['name']; } } else // Common usage { - $liste[$obj->id]=$obj->label?$obj->label:$obj->lib; + $liste[$obj->id]=$obj->label?$obj->label:$obj->doc_template_name; } } $i++; diff --git a/htdocs/core/modules/mailings/fraise.modules.php b/htdocs/core/modules/mailings/fraise.modules.php index 25ffcb717fd..43d6ae08213 100644 --- a/htdocs/core/modules/mailings/fraise.modules.php +++ b/htdocs/core/modules/mailings/fraise.modules.php @@ -129,7 +129,7 @@ class mailing_fraise extends MailingTargets $s.=' '; $s.=$langs->trans("Type").': '; $s.=''; } } @@ -1548,7 +1548,7 @@ if ($action == 'create') { $warehouseObject=new Entrepot($db); $warehouseObject->fetch($warehouse_selected_id); - print img_warning().' '.$langs->trans("NoProductToShipFoundIntoStock", $warehouseObject->libelle); + print img_warning().' '.$langs->trans("NoProductToShipFoundIntoStock", $warehouseObject->label); } else { diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index e4f6f06b5a0..6d8a2e74319 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -1777,7 +1777,8 @@ class Expedition extends CommonObject { $line=new ExpeditionLigne($this->db); $line->desc=$langs->trans("Description")." ".$xnbp; - $line->libelle=$langs->trans("Description")." ".$xnbp; + $line->libelle=$langs->trans("Description")." ".$xnbp; // deprecated + $line->label=$langs->trans("Description")." ".$xnbp; $line->qty=10; $line->qty_asked=5; $line->qty_shipped=4; @@ -1836,7 +1837,7 @@ class Expedition extends CommonObject global $langs; $this->meths = array(); - $sql = "SELECT em.rowid, em.code, em.libelle"; + $sql = "SELECT em.rowid, em.code, em.libelle as label"; $sql.= " FROM ".MAIN_DB_PREFIX."c_shipment_mode as em"; $sql.= " WHERE em.active = 1"; $sql.= " ORDER BY em.libelle ASC"; @@ -1847,7 +1848,7 @@ class Expedition extends CommonObject while ($obj = $this->db->fetch_object($resql)) { $label=$langs->trans('SendingMethod'.$obj->code); - $this->meths[$obj->rowid] = ($label != 'SendingMethod'.$obj->code?$label:$obj->libelle); + $this->meths[$obj->rowid] = ($label != 'SendingMethod'.$obj->code?$label:$obj->label); } } } @@ -1867,7 +1868,7 @@ class Expedition extends CommonObject $this->listmeths = array(); $i=0; - $sql = "SELECT em.rowid, em.code, em.libelle, em.description, em.tracking, em.active"; + $sql = "SELECT em.rowid, em.code, em.libelle as label, em.description, em.tracking, em.active"; $sql.= " FROM ".MAIN_DB_PREFIX."c_shipment_mode as em"; if ($id!='') $sql.= " WHERE em.rowid=".$id; @@ -1879,7 +1880,7 @@ class Expedition extends CommonObject $this->listmeths[$i]['rowid'] = $obj->rowid; $this->listmeths[$i]['code'] = $obj->code; $label=$langs->trans('SendingMethod'.$obj->code); - $this->listmeths[$i]['libelle'] = ($label != 'SendingMethod'.$obj->code?$label:$obj->libelle); + $this->listmeths[$i]['libelle'] = ($label != 'SendingMethod'.$obj->code?$label:$obj->label); $this->listmeths[$i]['description'] = $obj->description; $this->listmeths[$i]['tracking'] = $obj->tracking; $this->listmeths[$i]['active'] = $obj->active; diff --git a/htdocs/expensereport/class/paymentexpensereport.class.php b/htdocs/expensereport/class/paymentexpensereport.class.php index 6fb4e539d9d..156bd329d49 100644 --- a/htdocs/expensereport/class/paymentexpensereport.class.php +++ b/htdocs/expensereport/class/paymentexpensereport.class.php @@ -663,7 +663,7 @@ class PaymentExpenseReport extends CommonObject $result=''; - if (empty($this->ref)) $this->ref=$this->lib; + if (empty($this->ref)) $this->ref=$this->label; $label = $langs->trans("ShowPayment").': '.$this->ref; if (!empty($this->id)) diff --git a/htdocs/fichinter/class/fichinterrec.class.php b/htdocs/fichinter/class/fichinterrec.class.php index f88653e70eb..2e3fd9ef1c8 100644 --- a/htdocs/fichinter/class/fichinterrec.class.php +++ b/htdocs/fichinter/class/fichinterrec.class.php @@ -342,12 +342,11 @@ class FichinterRec extends Fichinter $objp = $this->db->fetch_object($result); $line = new FichinterLigne($this->db); - $line->rowid = $objp->rowid; + $line->id = $objp->rowid; $line->label = $objp->custom_label; // Label line $line->desc = $objp->description; // Description line $line->product_type = $objp->product_type; // Type of line $line->product_ref = $objp->product_ref; // Ref product - $line->libelle = $objp->product_label; // deprecated $line->product_label = $objp->product_label; // Label product $line->product_desc = $objp->product_desc; // Description product $line->fk_product_type = $objp->fk_product_type; // Type of product diff --git a/htdocs/fourn/card.php b/htdocs/fourn/card.php index de31ae1b624..f3535d3cd1c 100644 --- a/htdocs/fourn/card.php +++ b/htdocs/fourn/card.php @@ -706,7 +706,7 @@ if ($object->id > 0) if ($user->rights->fournisseur->facture->lire) { // TODO move to DAO class - $sql = 'SELECT f.rowid,f.libelle,f.ref,f.ref_supplier,f.fk_statut,f.datef as df, f.total_ht, f.total_tva, f.total_ttc as amount,f.paye,'; + $sql = 'SELECT f.rowid, f.libelle as label, f.ref, f.ref_supplier, f.fk_statut, f.datef as df, f.total_ht, f.total_tva, f.total_ttc as amount,f.paye,'; $sql.= ' SUM(pf.amount) as am'; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn as f'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'paiementfourn_facturefourn as pf ON f.rowid=pf.fk_facturefourn'; @@ -741,13 +741,14 @@ if ($object->id > 0) $facturestatic->id=$obj->rowid; $facturestatic->ref=($obj->ref?$obj->ref:$obj->rowid); $facturestatic->ref_supplier = $obj->ref_supplier; - $facturestatic->libelle = $obj->libelle; + $facturestatic->libelle = $obj->label; // deprecated + $facturestatic->label = $obj->label; $facturestatic->total_ht = $obj->total_ht; $facturestatic->total_tva = $obj->total_tva; $facturestatic->total_ttc = $obj->total_ttc; print $facturestatic->getNomUrl(1); print $obj->ref_supplier?' - '.$obj->ref_supplier:''; - print ($obj->libelle?' - ':'').dol_trunc($obj->libelle, 14); + print ($obj->label?' - ':'').dol_trunc($obj->label, 14); print ''; print ''; print ''; diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index a6d4751169e..bbed35887b0 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -439,7 +439,7 @@ class CommandeFournisseur extends CommonOrder $line->fk_product = $objp->fk_product; - $line->libelle = $objp->product_label; + $line->libelle = $objp->product_label; // deprecated $line->product_label = $objp->product_label; $line->product_desc = $objp->product_desc; @@ -2349,17 +2349,17 @@ class CommandeFournisseur extends CommonOrder for ($i = 0; $i < $num; $i++) { $prod = new Product($this->db); - $libelle = ''; + $label = ''; $ref = ''; if ($prod->fetch($comclient->lines[$i]->fk_product) > 0) { - $libelle = $prod->libelle; - $ref = $prod->ref; + $label = $prod->label; + $ref = $prod->ref; } $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseurdet"; - $sql .= " (fk_commande,label,description,fk_product, price, qty, tva_tx, localtax1_tx, localtax2_tx, remise_percent, subprice, remise, ref)"; - $sql .= " VALUES (".$idc.", '" . $this->db->escape($libelle) . "','" . $this->db->escape($comclient->lines[$i]->desc) . "'"; + $sql .= " (fk_commande, label, description, fk_product, price, qty, tva_tx, localtax1_tx, localtax2_tx, remise_percent, subprice, remise, ref)"; + $sql .= " VALUES (".$idc.", '" . $this->db->escape($label) . "','" . $this->db->escape($comclient->lines[$i]->desc) . "'"; $sql .= ",".$comclient->lines[$i]->fk_product.",'".price2num($comclient->lines[$i]->price)."'"; $sql .= ", '".$comclient->lines[$i]->qty."', ".$comclient->lines[$i]->tva_tx.", ".$comclient->lines[$i]->localtax1_tx.", ".$comclient->lines[$i]->localtax2_tx.", ".$comclient->lines[$i]->remise_percent; $sql .= ", '".price2num($comclient->lines[$i]->subprice)."','0','".$ref."');"; diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 0e28c5302ce..d22d6b6b4aa 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -637,6 +637,7 @@ class FactureFournisseur extends CommonInvoice $this->libelle = $obj->label; // deprecated $this->label = $obj->label; $this->paye = $obj->paye; + $this->paid = $obj->paye; $this->amount = $obj->amount; $this->remise = $obj->remise; $this->close_code = $obj->close_code; diff --git a/htdocs/fourn/commande/orderstoinvoice.php b/htdocs/fourn/commande/orderstoinvoice.php index f1b0d3995eb..6b546a04e91 100644 --- a/htdocs/fourn/commande/orderstoinvoice.php +++ b/htdocs/fourn/commande/orderstoinvoice.php @@ -158,17 +158,18 @@ if (($action == 'create' || $action == 'add') && ! $error) { $datefacture = dol_mktime(date("h"), date("M"), 0, date("m"), date("d"), date("Y")); } if (! $error) { - $object->ref = GETPOST('ref'); - $object->ref_supplier = GETPOST('ref_supplier'); + $object->ref = GETPOST('ref', 'nohtml'); + $object->ref_supplier = GETPOST('ref_supplier', 'alpha'); $object->socid = GETPOST('socid', 'int'); - $object->libelle = GETPOST('libelle'); + $object->libelle = (GETPOSTISSET('libelle') ? GETPOST('libelle', 'nohtml') : GETPOST('label', 'nohtml')); + $object->label = (GETPOSTISSET('libelle') ? GETPOST('libelle', 'nohtml') : GETPOST('label', 'nohtml')); $object->date = $datefacture; $object->date_echeance = $datedue; $object->note_public = GETPOST('note_public', 'none'); $object->note_private = GETPOST('note_private', 'none'); $object->cond_reglement_id = GETPOST('cond_reglement_id'); $object->mode_reglement_id = GETPOST('mode_reglement_id'); - $projectid = GETPOST('projectid'); + $projectid = GETPOST('projectid', 'int'); if ($projectid > 0) $object->fk_project = $projectid; diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 0949b85bd7d..cef40f089e1 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -636,10 +636,10 @@ if (empty($reshook)) $result = $object->fetch(GETPOST('fac_replacement'), 'int'); $object->fetch_thirdparty(); - $object->ref = GETPOST('ref'); + $object->ref = GETPOST('ref', 'nohtml'); $object->ref_supplier = GETPOST('ref_supplier', 'alpha'); $object->socid = GETPOST('socid', 'int'); - $object->libelle = GETPOST('label'); + $object->libelle = GETPOST('label', 'nohtml'); $object->date = $datefacture; $object->date_echeance = $datedue; $object->note_public = GETPOST('note_public', 'none'); @@ -700,10 +700,11 @@ if (empty($reshook)) $tmpproject = GETPOST('projectid', 'int'); // Creation facture - $object->ref = $_POST['ref']; - $object->ref_supplier = $_POST['ref_supplier']; - $object->socid = $_POST['socid']; - $object->libelle = $_POST['label']; + $object->ref = GETPOST('ref', 'nohtml'); + $object->ref_supplier = GETPOST('ref_supplier', 'nohtml'); + $object->socid = GETPOST('socid', 'int'); + $object->libelle = GETPOST('label', 'nohtml'); + $object->label = GETPOST('label', 'nohtml'); $object->date = $datefacture; $object->date_echeance = $datedue; $object->note_public = GETPOST('note_public', 'none'); diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php index 517b5843f30..b46e9713983 100644 --- a/htdocs/install/repair.php +++ b/htdocs/install/repair.php @@ -1297,7 +1297,7 @@ if ($ok && GETPOST('clean_perm_table', 'alpha')) { $listofmods.=($listofmods?',':'')."'".$val."'"; } - $sql = 'SELECT id, libelle, module from '.MAIN_DB_PREFIX.'rights_def WHERE module not in ('.$listofmods.') AND id > 100000'; + $sql = 'SELECT id, libelle as label, module from '.MAIN_DB_PREFIX.'rights_def WHERE module not in ('.$listofmods.') AND id > 100000'; $resql = $db->query($sql); if ($resql) { @@ -1310,7 +1310,7 @@ if ($ok && GETPOST('clean_perm_table', 'alpha')) $obj=$db->fetch_object($resql); if ($obj->id > 0) { - print ''; - print ''; + print ''; print ''; } diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 5243e84e4de..45990a4f2a5 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -2094,7 +2094,7 @@ class Product extends CommonObject $this->id = $obj->rowid; $this->ref = $obj->ref; $this->ref_ext = $obj->ref_ext; - $this->label = $obj->label; + $this->label = $obj->label; $this->description = $obj->description; $this->url = $obj->url; $this->note_private = $obj->note_private; @@ -4461,9 +4461,9 @@ class Product extends CommonObject /** - * Retourne le libelle du finished du produit + * Retour label of nature of product * - * @return string Libelle + * @return string Label */ public function getLibFinished() { diff --git a/htdocs/product/stats/facture_fournisseur.php b/htdocs/product/stats/facture_fournisseur.php index 78ee704293d..5891942079a 100644 --- a/htdocs/product/stats/facture_fournisseur.php +++ b/htdocs/product/stats/facture_fournisseur.php @@ -127,7 +127,7 @@ if ($id > 0 || ! empty($ref)) if ($user->rights->fournisseur->facture->lire) { $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client, d.rowid, d.total_ht as line_total_ht,"; - $sql .= " f.rowid as facid, f.ref, f.ref_supplier, f.datef, f.libelle, f.total_ht, f.total_ttc, f.total_tva, f.paye, f.fk_statut as statut, d.qty"; + $sql .= " f.rowid as facid, f.ref, f.ref_supplier, f.datef, f.libelle as label, f.total_ht, f.total_ttc, f.total_tva, f.paye, f.fk_statut as statut, d.qty"; if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", sc.fk_soc, sc.fk_user "; $sql .= " FROM " . MAIN_DB_PREFIX . "societe as s"; @@ -221,7 +221,8 @@ if ($id > 0 || ! empty($ref)) $supplierinvoicestatic->id = $objp->facid; $supplierinvoicestatic->ref = $objp->ref; $supplierinvoicestatic->ref_supplier = $objp->ref_supplier; - $supplierinvoicestatic->libelle = $objp->libelle; + $supplierinvoicestatic->libelle = $objp->label; + $supplierinvoicestatic->label = $objp->label; $supplierinvoicestatic->total_ht = $objp->total_ht; $supplierinvoicestatic->total_ttc = $objp->total_ttc; $supplierinvoicestatic->total_tva = $objp->total_tva; diff --git a/htdocs/product/stock/class/entrepot.class.php b/htdocs/product/stock/class/entrepot.class.php index 35b433c5a28..70aea5d0e9b 100644 --- a/htdocs/product/stock/class/entrepot.class.php +++ b/htdocs/product/stock/class/entrepot.class.php @@ -48,22 +48,13 @@ class Entrepot extends CommonObject public $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe /** - * Warehouse closed, inactive + * @var string Label + * @deprecated */ - const STATUS_CLOSED = 0; - - /** - * Warehouse open and operations for customer shipping, supplier dispatch, internal stock transfers/corrections allowed. - */ - const STATUS_OPEN_ALL = 1; - - /** - * Warehouse open and operations for stock transfers/corrections allowed (not for customer shipping and supplier dispatch). - */ - const STATUS_OPEN_INTERNAL = 2; - public $libelle; + public $label; + /** * @var string description */ @@ -118,6 +109,21 @@ class Entrepot extends CommonObject 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), ); + /** + * Warehouse closed, inactive + */ + const STATUS_CLOSED = 0; + + /** + * Warehouse open and operations for customer shipping, supplier dispatch, internal stock transfers/corrections allowed. + */ + const STATUS_OPEN_ALL = 1; + + /** + * Warehouse open and operations for stock transfers/corrections allowed (not for customer shipping and supplier dispatch). + */ + const STATUS_OPEN_INTERNAL = 2; + /** * Constructor @@ -443,7 +449,7 @@ class Entrepot extends CommonObject $this->id = $obj->rowid; $this->fk_parent = $obj->fk_parent; $this->ref = $obj->label; - $this->label = $obj->label; // deprecated + $this->label = $obj->label; $this->libelle = $obj->label; // deprecated $this->description = $obj->description; $this->statut = $obj->statut; diff --git a/htdocs/product/stock/movement_card.php b/htdocs/product/stock/movement_card.php index b04b8b8a220..86380c5d72f 100644 --- a/htdocs/product/stock/movement_card.php +++ b/htdocs/product/stock/movement_card.php @@ -444,7 +444,7 @@ $formproduct=new FormProduct($db); if (!empty($conf->projet->enabled)) $formproject=new FormProjets($db); $sql = "SELECT p.rowid, p.ref as product_ref, p.label as produit, p.tobatch, p.fk_product_type as type, p.entity,"; -$sql.= " e.ref as stock, e.rowid as entrepot_id, e.lieu,"; +$sql.= " e.ref as warehouse_ref, e.rowid as entrepot_id, e.lieu,"; $sql.= " m.rowid as mid, m.value as qty, m.datem, m.fk_user_author, m.label, m.inventorycode, m.fk_origin, m.origintype,"; $sql.= " m.batch, m.price,"; $sql.= " m.type_mouvement,"; @@ -978,7 +978,8 @@ if ($resql) $productlot->sellby= $objp->sellby; $warehousestatic->id=$objp->entrepot_id; - $warehousestatic->libelle=$objp->stock; + $warehousestatic->libelle=$objp->warehouse_ref; // deprecated + $warehousestatic->label=$objp->warehouse_ref; $warehousestatic->lieu=$objp->lieu; $arrayofuniqueproduct[$objp->rowid]=$objp->produit; diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index 5303fa78a6c..57122db7e46 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -986,7 +986,7 @@ if ($resql) $warehousestatic->id=$objp->entrepot_id; $warehousestatic->ref=$objp->warehouse_ref; - $warehousestatic->libelle=$objp->warehouse_ref; + $warehousestatic->libelle=$objp->warehouse_ref; // deprecated $warehousestatic->label=$objp->warehouse_ref; $warehousestatic->lieu=$objp->lieu; $warehousestatic->fk_parent = $objp->fk_parent; diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index 5fd655f73ac..7cd935c4d2c 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -560,7 +560,6 @@ if (empty($conf->global->MEMBER_NEWFORM_FORCETYPE)) else { $adht->fetch($conf->global->MEMBER_NEWFORM_FORCETYPE); - //print $adht->libelle; print ''; } // Moral/Physic attribute diff --git a/htdocs/societe/societecontact.php b/htdocs/societe/societecontact.php index db18a1bf6af..7f531498e2f 100644 --- a/htdocs/societe/societecontact.php +++ b/htdocs/societe/societecontact.php @@ -301,6 +301,8 @@ if ($id > 0 || ! empty($ref)) // Type $membertypestatic->id=$objp->type_id; $membertypestatic->libelle=$objp->type; + $membertypestatic->label=$objp->type; + print ''; diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 6af681750cc..27269dbaac2 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -1364,9 +1364,9 @@ class SupplierProposal extends CommonObject $line->fk_product = $objp->fk_product; - $line->ref = $objp->product_ref; // TODO deprecated + $line->ref = $objp->product_ref; // deprecated $line->product_ref = $objp->product_ref; - $line->libelle = $objp->product_label; // TODO deprecated + $line->libelle = $objp->product_label; // deprecated $line->product_label = $objp->product_label; $line->product_desc = $objp->product_desc; // Description produit $line->fk_product_type = $objp->fk_product_type; diff --git a/htdocs/takepos/admin/terminal.php b/htdocs/takepos/admin/terminal.php index b009d01659b..167735e901d 100644 --- a/htdocs/takepos/admin/terminal.php +++ b/htdocs/takepos/admin/terminal.php @@ -45,14 +45,14 @@ $langs->loadLangs(array("admin", "cashdesk")); global $db; -$sql = "SELECT code, libelle FROM ".MAIN_DB_PREFIX."c_paiement"; +$sql = "SELECT code, libelle as label FROM ".MAIN_DB_PREFIX."c_paiement"; $sql.= " WHERE entity IN (".getEntity('c_paiement').")"; $sql.= " AND active = 1"; $sql.= " ORDER BY libelle"; $resql = $db->query($sql); $paiements = array(); -if($resql){ - while ($obj = $db->fetch_object($resql)){ +if ($resql) { + while ($obj = $db->fetch_object($resql)) { array_push($paiements, $obj); } } @@ -152,7 +152,7 @@ if (! empty($conf->banque->enabled)) foreach($paiements as $modep) { if (in_array($modep->code, array('LIQ', 'CB', 'CHQ'))) continue; // Already managed before $name="CASHDESK_ID_BANKACCOUNT_".$modep->code.$terminaltouse; - print ''; + print ''; print ''; print ''; - $sql = "SELECT r.id, r.libelle, r.module"; + $sql = "SELECT r.id, r.libelle as label, r.module"; $sql.= " FROM ".MAIN_DB_PREFIX."rights_def as r"; $sql.= " WHERE r.libelle NOT LIKE 'tou%'"; // On ignore droits "tous" $sql.= " AND r.entity = " . $entity; @@ -330,7 +330,7 @@ if ($object->id > 0) print ''; } - $perm_libelle=($conf->global->MAIN_USE_ADVANCED_PERMS && ($langs->trans("PermissionAdvanced".$obj->id)!=("PermissionAdvanced".$obj->id))?$langs->trans("PermissionAdvanced".$obj->id):(($langs->trans("Permission".$obj->id)!=("Permission".$obj->id))?$langs->trans("Permission".$obj->id):$langs->trans($obj->libelle))); + $perm_libelle=($conf->global->MAIN_USE_ADVANCED_PERMS && ($langs->trans("PermissionAdvanced".$obj->id)!=("PermissionAdvanced".$obj->id))?$langs->trans("PermissionAdvanced".$obj->id):(($langs->trans("Permission".$obj->id)!=("Permission".$obj->id))?$langs->trans("Permission".$obj->id):$langs->trans($obj->label))); print ''; print ''; diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php index a49c3e930b0..d85adf12a3e 100644 --- a/htdocs/user/perms.php +++ b/htdocs/user/perms.php @@ -283,7 +283,7 @@ print ''; print ''."\n"; //print "xx".$conf->global->MAIN_USE_ADVANCED_PERMS; -$sql = "SELECT r.id, r.libelle, r.module, r.module_position"; +$sql = "SELECT r.id, r.libelle as label, r.module, r.module_position"; $sql.= " FROM ".MAIN_DB_PREFIX."rights_def as r"; $sql.= " WHERE r.libelle NOT LIKE 'tou%'"; // On ignore droits "tous" $sql.= " AND r.entity = " . $entity; @@ -421,7 +421,7 @@ if ($result) } // Label - $permlabel=($conf->global->MAIN_USE_ADVANCED_PERMS && ($langs->trans("PermissionAdvanced".$obj->id)!=("PermissionAdvanced".$obj->id))?$langs->trans("PermissionAdvanced".$obj->id):(($langs->trans("Permission".$obj->id)!=("Permission".$obj->id))?$langs->trans("Permission".$obj->id):$langs->trans($obj->libelle))); + $permlabel=($conf->global->MAIN_USE_ADVANCED_PERMS && ($langs->trans("PermissionAdvanced".$obj->id)!=("PermissionAdvanced".$obj->id))?$langs->trans("PermissionAdvanced".$obj->id):(($langs->trans("Permission".$obj->id)!=("Permission".$obj->id))?$langs->trans("Permission".$obj->id):$langs->trans($obj->label))); print ''; print ''."\n"; diff --git a/htdocs/webservices/server_productorservice.php b/htdocs/webservices/server_productorservice.php index f2fed8f1bca..b66b0db4bcd 100644 --- a/htdocs/webservices/server_productorservice.php +++ b/htdocs/webservices/server_productorservice.php @@ -518,10 +518,10 @@ function createProductOrService($authentication, $product) $newobject->ref=$product['ref']; $newobject->ref_ext=$product['ref_ext']; $newobject->type=$product['type']; - $newobject->libelle=$product['label']; // @deprecated $newobject->label=$product['label']; $newobject->description=$product['description']; - $newobject->note=$product['note']; + $newobject->note_public=$product['note_public']; + $newobject->note_private=$product['note_private']; $newobject->status=$product['status_tosell']; $newobject->status_buy=$product['status_tobuy']; $newobject->price=$product['price_net']; @@ -692,7 +692,6 @@ function updateProductOrService($authentication, $product) if (isset($product['ref'])) $newobject->ref=$product['ref']; if (isset($product['ref_ext'])) $newobject->ref_ext=$product['ref_ext']; $newobject->type=$product['type']; - $newobject->libelle=$product['label']; // @deprecated $newobject->label=$product['label']; $newobject->description=$product['description']; $newobject->note=$product['note']; diff --git a/htdocs/webservices/server_supplier_invoice.php b/htdocs/webservices/server_supplier_invoice.php index 1873a8a9f5c..d738bca19f3 100644 --- a/htdocs/webservices/server_supplier_invoice.php +++ b/htdocs/webservices/server_supplier_invoice.php @@ -290,8 +290,8 @@ function getSupplierInvoice($authentication, $id = '', $ref = '', $ref_ext = '') 'date_modification'=>dol_print_date($invoice->tms, 'dayhourrfc'), 'date_invoice'=>dol_print_date($invoice->date, 'dayhourrfc'), 'date_term'=>dol_print_date($invoice->date_echeance, 'dayhourrfc'), - 'label'=>$invoice->libelle, - 'paid'=>$invoice->paye, + 'label'=>$invoice->label, + 'paid'=>$invoice->paid, 'note_private'=>$invoice->note_private, 'note_public'=>$invoice->note_public, 'close_code'=>$invoice->close_code, @@ -422,8 +422,8 @@ function getSupplierInvoicesForThirdParty($authentication, $idthirdparty) 'date_modification'=>dol_print_date($invoice->tms, 'dayhourrfc'), 'date_invoice'=>dol_print_date($invoice->date, 'dayhourrfc'), 'date_term'=>dol_print_date($invoice->date_echeance, 'dayhourrfc'), - 'label'=>$invoice->libelle, - 'paid'=>$invoice->paye, + 'label'=>$invoice->label, + 'paid'=>$invoice->paid, 'note_private'=>$invoice->note_private, 'note_public'=>$invoice->note_public, 'close_code'=>$invoice->close_code, From 378d0b07812d058f1bc263b686722011f134ddd4 Mon Sep 17 00:00:00 2001 From: wdammak <26695620+wdammak@users.noreply.github.com> Date: Sat, 2 Nov 2019 13:18:48 +0100 Subject: [PATCH 820/980] Update upgrade2.php --- htdocs/install/upgrade2.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 428ed169022..ece176a4c11 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -64,7 +64,10 @@ $error = 0; // Ne fonctionne que si on est pas en safe_mode. $err=error_reporting(); error_reporting(0); -//@set_time_limit(300); +if (! empty($conf->global->MAIN_OVERRIDE_TIME_LIMIT)) + @set_time_limit((int)$conf->global->MAIN_OVERRIDE_TIME_LIMIT); +else + @set_time_limit(300); error_reporting($err); $setuplang=GETPOST("selectlang", 'aZ09', 3)?GETPOST("selectlang", 'aZ09', 3):'auto'; From 01d8c3bffde890f1017af8d9b003c81f5bcd8811 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sat, 2 Nov 2019 12:20:32 +0000 Subject: [PATCH 821/980] Fixing style errors. --- htdocs/install/upgrade2.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index ece176a4c11..38207f85ccc 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -65,7 +65,7 @@ $error = 0; $err=error_reporting(); error_reporting(0); if (! empty($conf->global->MAIN_OVERRIDE_TIME_LIMIT)) - @set_time_limit((int)$conf->global->MAIN_OVERRIDE_TIME_LIMIT); + @set_time_limit((int) $conf->global->MAIN_OVERRIDE_TIME_LIMIT); else @set_time_limit(300); error_reporting($err); From 9e69b12847af42ad2a829e9450939145cb04ada1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 13:37:30 +0100 Subject: [PATCH 822/980] FIX #12281 --- htdocs/product/class/product.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 45990a4f2a5..9c4cebb74aa 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -2087,7 +2087,10 @@ class Product extends CommonObject } $resql = $this->db->query($sql); - if ($resql ) { + if ($resql) { + + unset($this->oldcopy); + if ($this->db->num_rows($resql) > 0) { $obj = $this->db->fetch_object($resql); From a971943832e8879875c3e369a2b25ed95f56d001 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 13:45:27 +0100 Subject: [PATCH 823/980] Update upgrade2.php --- htdocs/install/upgrade2.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 38207f85ccc..0787c84762b 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -67,7 +67,7 @@ error_reporting(0); if (! empty($conf->global->MAIN_OVERRIDE_TIME_LIMIT)) @set_time_limit((int) $conf->global->MAIN_OVERRIDE_TIME_LIMIT); else - @set_time_limit(300); + @set_time_limit(600); error_reporting($err); $setuplang=GETPOST("selectlang", 'aZ09', 3)?GETPOST("selectlang", 'aZ09', 3):'auto'; From 74473edb0caa49c32b95ac3abac2f04fa3c6c101 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 13:52:24 +0100 Subject: [PATCH 824/980] Update index.php --- htdocs/api/index.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/htdocs/api/index.php b/htdocs/api/index.php index 613580785a5..6a081a87a20 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -38,9 +38,6 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page is p if (! empty($_SERVER['HTTP_DOLAPIENTITY'])) define("DOLENTITY", (int) $_SERVER['HTTP_DOLAPIENTITY']); -// Fix for NGINX -$url = (isset($_SERVER['SCRIPT_URI']) && $_SERVER["SCRIPT_URI"] !== null) ? $_SERVER["SCRIPT_URI"] : $_SERVER['PHP_SELF']; - $res=0; if (! $res && file_exists("../main.inc.php")) $res=include '../main.inc.php'; if (! $res) die("Include of main fails"); @@ -58,7 +55,13 @@ require_once DOL_DOCUMENT_ROOT.'/api/class/api_access.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; - +$url = $_SERVER['PHP_SELF']; +// Fix for some NGINX setups (this should not be required even with NGINX, however setup of NGINX are often mysterious and this may help is such cases) +if (! empty($conf->global->MAIN_NGINX_FIX)) +{ + $url = (isset($_SERVER['SCRIPT_URI']) && $_SERVER["SCRIPT_URI"] !== null) ? $_SERVER["SCRIPT_URI"] : $_SERVER['PHP_SELF']; +} + // Enable and test if module Api is enabled if (empty($conf->global->MAIN_MODULE_API)) { From 03bd6e4db3c992644a17dc231ab75863063beaa5 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sat, 2 Nov 2019 12:51:45 +0000 Subject: [PATCH 825/980] Fixing style errors. --- htdocs/api/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/api/index.php b/htdocs/api/index.php index 6a081a87a20..7a9ef9ad24d 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -61,7 +61,7 @@ if (! empty($conf->global->MAIN_NGINX_FIX)) { $url = (isset($_SERVER['SCRIPT_URI']) && $_SERVER["SCRIPT_URI"] !== null) ? $_SERVER["SCRIPT_URI"] : $_SERVER['PHP_SELF']; } - + // Enable and test if module Api is enabled if (empty($conf->global->MAIN_MODULE_API)) { From 1b5ca2418b42cdd40bac11cddda2d86712aef383 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 14:08:39 +0100 Subject: [PATCH 826/980] Fix delete of object --- htdocs/modulebuilder/index.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 7fffdfcd50d..3879efa2030 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -1208,7 +1208,6 @@ if ($dirins && $action == 'confirm_deleteobject' && $objectname) 'myobject_document.php'=>strtolower($objectname).'_document.php', 'myobject_agenda.php'=>strtolower($objectname).'_agenda.php', 'myobject_list.php'=>strtolower($objectname).'_list.php', - 'lib/mymodule.lib.php'=>'lib/'.strtolower($module).'.lib.php', 'lib/mymodule_myobject.lib.php'=>'lib/'.strtolower($module).'_'.strtolower($objectname).'.lib.php', 'test/phpunit/MyObjectTest.php'=>'test/phpunit/'.strtolower($objectname).'Test.php', 'sql/llx_mymodule_myobject.sql'=>'sql/llx_'.strtolower($module).'_'.strtolower($objectname).'.sql', From 1cc9954f61ff4695ab1760b7ab3def19b8ec3291 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 14:20:43 +0100 Subject: [PATCH 827/980] Clean api from bad vars --- htdocs/api/class/api.class.php | 1 + htdocs/societe/class/api_thirdparties.class.php | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php index 0d054402b7a..9582d20992f 100644 --- a/htdocs/api/class/api.class.php +++ b/htdocs/api/class/api.class.php @@ -146,6 +146,7 @@ class DolibarrApi unset($object->skip_update_total); unset($object->context); + unset($object->next_prev_filter); // Remove the $oldcopy property because it is not supported by the JSON // encoder. The following error is generated when trying to serialize diff --git a/htdocs/societe/class/api_thirdparties.class.php b/htdocs/societe/class/api_thirdparties.class.php index 91825fa0d2b..9041586d3df 100644 --- a/htdocs/societe/class/api_thirdparties.class.php +++ b/htdocs/societe/class/api_thirdparties.class.php @@ -1676,6 +1676,12 @@ class Thirdparties extends DolibarrApi $object = parent::_cleanObjectDatas($object); unset($object->nom); // ->name already defined and nom deprecated + unset($object->name_bis); // ->name_alias already defined + unset($object->note); // ->note_private and note_public already defined + unset($object->departement); + unset($object->departement_code); + unset($object->pays); + unset($object->particulier); unset($object->total_ht); unset($object->total_tva); @@ -1686,6 +1692,8 @@ class Thirdparties extends DolibarrApi unset($object->lines); unset($object->thirdparty); + unset($object->fk_delivery_address); // deprecated feature + return $object; } From c9a620d1a60a99aed0f977e17553b02aac442c7c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 14:25:52 +0100 Subject: [PATCH 828/980] Renamed property of thirdparty "statut_commercial" into "status_prospect_label" --- ChangeLog | 1 + htdocs/societe/class/societe.class.php | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2c534cfff8b..2d398c83535 100644 --- a/ChangeLog +++ b/ChangeLog @@ -28,6 +28,7 @@ Following changes may create regressions for some external modules, but were nec * All properties 'libstatut', 'labelstatut', 'labelstatus' were renamed into 'labelStatus'. * All properties 'labelstatusshort' and 'labelstatut_short' were renamed into 'labelStatusShort'. * All properties 'type_libelle' were renamed into 'type_label'. +* Renamed property of thirdparty "statut_commercial" into "status_prospect_label" ***** ChangeLog for 10.0.3 compared to 10.0.2 ***** IMPORTANT : This version fixes a serious bug in saving the units of weight, size, surface and volume on product card. diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 4615290a03d..9ba0bdcfd12 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -399,9 +399,16 @@ class Societe extends CommonObject */ public $note_public; - //! code statut prospect + /** + * Status prospect id + * @var int + */ public $stcomm_id; - public $statut_commercial; + /** + * Status prospect label + * @var int + */ + public $status_prospect_label; /** * Assigned price level @@ -1354,9 +1361,9 @@ class Societe extends CommonObject $this->state = ($obj->state!='-'?$obj->state:''); $transcode=$langs->trans('StatusProspect'.$obj->fk_stcomm); - $libelle=($transcode!='StatusProspect'.$obj->fk_stcomm?$transcode:$obj->stcomm); - $this->stcomm_id = $obj->fk_stcomm; // id statut commercial - $this->statut_commercial = $libelle; // libelle statut commercial + $label = ($transcode!='StatusProspect'.$obj->fk_stcomm ? $transcode : $obj->stcomm); + $this->stcomm_id = $obj->fk_stcomm; // id status prospect + $this->status_prospect_label = $label; // label status prospect $this->email = $obj->email; $this->skype = $obj->skype; From c03fabb7893361014e7d29fd61d148ad251160f9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 14:26:27 +0100 Subject: [PATCH 829/980] Clean var --- htdocs/societe/class/api_thirdparties.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/societe/class/api_thirdparties.class.php b/htdocs/societe/class/api_thirdparties.class.php index 9041586d3df..42fae860666 100644 --- a/htdocs/societe/class/api_thirdparties.class.php +++ b/htdocs/societe/class/api_thirdparties.class.php @@ -1682,6 +1682,7 @@ class Thirdparties extends DolibarrApi unset($object->departement_code); unset($object->pays); unset($object->particulier); + unset($object->prefix_comm); unset($object->total_ht); unset($object->total_tva); From b873541c24c24295f5f3c9ff7a053ba6e5dbfdd9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 14:32:25 +0100 Subject: [PATCH 830/980] Load foreign key id into lines --- htdocs/fichinter/class/fichinter.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index ac0b7609520..380204c2b0d 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -1317,7 +1317,7 @@ class Fichinter extends CommonObject // phpcs:enable $this->lines = array(); - $sql = 'SELECT rowid, description, duree, date, rang'; + $sql = 'SELECT rowid, fk_fichinter, description, duree, date, rang'; $sql.= ' FROM '.MAIN_DB_PREFIX.'fichinterdet'; $sql.=' WHERE fk_fichinter = '.$this->id .' ORDER BY rang ASC, date ASC' ; @@ -1333,6 +1333,7 @@ class Fichinter extends CommonObject $line = new FichinterLigne($this->db); $line->id = $objp->rowid; + $line->fk_fichinter = $objp->fk_fichinter; $line->desc = $objp->description; $line->duration = $objp->duree; //For invoicing we calculing hours From b958997268b4c89b4710d4c293941414d2a71894 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 14:49:26 +0100 Subject: [PATCH 831/980] Clean code of APIs --- htdocs/api/class/api.class.php | 1 + htdocs/bom/class/api_boms.class.php | 47 +++++++++++++++- .../template/class/api_mymodule.class.php | 56 ++++++++++++++++--- 3 files changed, 94 insertions(+), 10 deletions(-) diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php index 9582d20992f..6bc8a6a4ff5 100644 --- a/htdocs/api/class/api.class.php +++ b/htdocs/api/class/api.class.php @@ -127,6 +127,7 @@ class DolibarrApi unset($object->timespent_withhour); unset($object->timespent_fk_user); unset($object->timespent_note); + unset($object->fk_delivery_address); unset($object->statuts); unset($object->statuts_short); diff --git a/htdocs/bom/class/api_boms.class.php b/htdocs/bom/class/api_boms.class.php index 40d53bff787..6b629fd2852 100644 --- a/htdocs/bom/class/api_boms.class.php +++ b/htdocs/bom/class/api_boms.class.php @@ -281,12 +281,53 @@ class Boms extends DolibarrApi // phpcs:enable $object = parent::_cleanObjectDatas($object); - /*unset($object->note); - unset($object->address); + unset($object->rowid); + unset($object->canvas); + + unset($object->name); + unset($object->lastname); + unset($object->firstname); + unset($object->civility_id); + unset($object->statut); + unset($object->state); + unset($object->state_id); + unset($object->state_code); + unset($object->region); + unset($object->region_code); + unset($object->country); + unset($object->country_id); + unset($object->country_code); unset($object->barcode_type); unset($object->barcode_type_code); unset($object->barcode_type_label); - unset($object->barcode_type_coder);*/ + unset($object->barcode_type_coder); + unset($object->total_ht); + unset($object->total_tva); + unset($object->total_localtax1); + unset($object->total_localtax2); + unset($object->total_ttc); + unset($object->fk_account); + unset($object->comments); + unset($object->note); + unset($object->mode_reglement_id); + unset($object->cond_reglement_id); + unset($object->cond_reglement); + unset($object->shipping_method_id); + unset($object->fk_incoterms); + unset($object->label_incoterms); + unset($object->location_incoterms); + + // If object has lines, remove $db property + if (isset($object->lines) && is_array($object->lines) && count($object->lines) > 0) { + $nboflines = count($object->lines); + for ($i=0; $i < $nboflines; $i++) + { + $this->_cleanObjectDatas($object->lines[$i]); + + unset($object->lines[$i]->lines); + unset($object->lines[$i]->note); + } + } return $object; } diff --git a/htdocs/modulebuilder/template/class/api_mymodule.class.php b/htdocs/modulebuilder/template/class/api_mymodule.class.php index 2cfcd269b62..d7a810ac2cd 100644 --- a/htdocs/modulebuilder/template/class/api_mymodule.class.php +++ b/htdocs/modulebuilder/template/class/api_mymodule.class.php @@ -290,14 +290,56 @@ class MyModuleApi extends DolibarrApi protected function _cleanObjectDatas($object) { // phpcs:enable - $object = parent::_cleanObjectDatas($object); + $object = parent::_cleanObjectDatas($object); - /*unset($object->note); - unset($object->address); - unset($object->barcode_type); - unset($object->barcode_type_code); - unset($object->barcode_type_label); - unset($object->barcode_type_coder);*/ + unset($object->rowid); + unset($object->canvas); + + /*unset($object->name); + unset($object->lastname); + unset($object->firstname); + unset($object->civility_id); + unset($object->statut); + unset($object->state); + unset($object->state_id); + unset($object->state_code); + unset($object->region); + unset($object->region_code); + unset($object->country); + unset($object->country_id); + unset($object->country_code); + unset($object->barcode_type); + unset($object->barcode_type_code); + unset($object->barcode_type_label); + unset($object->barcode_type_coder); + unset($object->total_ht); + unset($object->total_tva); + unset($object->total_localtax1); + unset($object->total_localtax2); + unset($object->total_ttc); + unset($object->fk_account); + unset($object->comments); + unset($object->note); + unset($object->mode_reglement_id); + unset($object->cond_reglement_id); + unset($object->cond_reglement); + unset($object->shipping_method_id); + unset($object->fk_incoterms); + unset($object->label_incoterms); + unset($object->location_incoterms); + */ + + // If object has lines, remove $db property + if (isset($object->lines) && is_array($object->lines) && count($object->lines) > 0) { + $nboflines = count($object->lines); + for ($i=0; $i < $nboflines; $i++) + { + $this->_cleanObjectDatas($object->lines[$i]); + + unset($object->lines[$i]->lines); + unset($object->lines[$i]->note); + } + } return $object; } From 93f3b1d2db8531e5a850cf67a2c5efa13ca95808 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 15:05:14 +0100 Subject: [PATCH 832/980] Clean APIs --- htdocs/api/class/api.class.php | 5 +++++ htdocs/comm/action/class/api_agendaevents.class.php | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php index 6bc8a6a4ff5..f4c9076fbd9 100644 --- a/htdocs/api/class/api.class.php +++ b/htdocs/api/class/api.class.php @@ -102,6 +102,7 @@ class DolibarrApi unset($object->isextrafieldmanaged); unset($object->ismultientitymanaged); unset($object->restrictiononfksoc); + unset($object->table_rowid); // Remove linkedObjects. We should already have linkedObjectIds that avoid huge responses unset($object->linkedObjects); @@ -149,6 +150,10 @@ class DolibarrApi unset($object->context); unset($object->next_prev_filter); + if ($object->table_element != 'ticket') { + unset($object->comments); + } + // Remove the $oldcopy property because it is not supported by the JSON // encoder. The following error is generated when trying to serialize // it: "Error encoding/decoding JSON: Type is not supported" diff --git a/htdocs/comm/action/class/api_agendaevents.class.php b/htdocs/comm/action/class/api_agendaevents.class.php index 652e0d80966..f3fa2cd47c1 100644 --- a/htdocs/comm/action/class/api_agendaevents.class.php +++ b/htdocs/comm/action/class/api_agendaevents.class.php @@ -338,6 +338,7 @@ class AgendaEvents extends DolibarrApi // phpcs:enable $object = parent::_cleanObjectDatas($object); + unset($object->note); // alreaydy into note_private unset($object->usermod); unset($object->libelle); unset($object->context); @@ -350,6 +351,11 @@ class AgendaEvents extends DolibarrApi unset($object->origin_id); unset($object->ref_ext); unset($object->statut); + unset($object->state_code); + unset($object->state_id); + unset($object->state); + unset($object->region); + unset($object->region_code); unset($object->country); unset($object->country_id); unset($object->country_code); @@ -378,6 +384,9 @@ class AgendaEvents extends DolibarrApi unset($object->contact); unset($object->societe); + unset($object->actions); + unset($object->lines); + return $object; } } From 13c42913d9feb3892f784b455731aeb04f75c593 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 15:20:35 +0100 Subject: [PATCH 833/980] Trans --- htdocs/user/class/user.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 5610ef88857..76d4d431561 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -2943,7 +2943,7 @@ class User extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Reconstruit l'arborescence hierarchique des users sous la forme d'un tableau + * Build the hierarchy/tree of users into an array. * Set and return this->users that is an array sorted according to tree with arrays of: * id = id user * lastname From adf5953693ae867994933f8d672c456068e13c04 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 15:27:17 +0100 Subject: [PATCH 834/980] Doc --- htdocs/categories/class/categorie.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index c8244bc307e..f184f1b433f 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -1018,11 +1018,11 @@ class Categorie extends CommonObject * fulllabel = nom avec chemin complet de la categorie * fullpath = chemin complet compose des id * - * @param string $type Type of categories ('customer', 'supplier', 'contact', 'product', 'member') or (0, 1, 2, ...). + * @param string $type Type of categories ('customer', 'supplier', 'contact', 'product', 'member', ...) * @param int|string|array $markafterid Keep only or removed all categories including the leaf $markafterid in category tree (exclude) or Keep only of category is inside the leaf starting with this id. * $markafterid can be an : * - int (id of category) - * - string (categories ids seprated by comma) + * - string (categories ids separated by comma) * - array (list of categories ids) * @param int $include [=0] Removed or 1=Keep only * @return array|int Array of categories. this->cats and this->motherof are set, -1 on error From ec9ce1721b3cdab675fafa73634ebaa90bdf08d6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 17:18:34 +0100 Subject: [PATCH 835/980] Last recent versions of migration at top --- htdocs/install/check.php | 32 +++++++++++++++++--------------- htdocs/install/default.css | 3 +++ 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/htdocs/install/check.php b/htdocs/install/check.php index 8b11814c33b..27df27f8c1c 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -389,7 +389,7 @@ else // Show title if (! empty($conf->global->MAIN_VERSION_LAST_UPGRADE) || ! empty($conf->global->MAIN_VERSION_LAST_INSTALL)) { - print $langs->trans("VersionLastUpgrade").': '.(empty($conf->global->MAIN_VERSION_LAST_UPGRADE)?$conf->global->MAIN_VERSION_LAST_INSTALL:$conf->global->MAIN_VERSION_LAST_UPGRADE).'
    '; + print $langs->trans("VersionLastUpgrade").': '.(empty($conf->global->MAIN_VERSION_LAST_UPGRADE)?$conf->global->MAIN_VERSION_LAST_INSTALL:$conf->global->MAIN_VERSION_LAST_UPGRADE).' - '; print $langs->trans("VersionProgram").': '.DOL_VERSION.''; //print ' '.img_warning($langs->trans("RunningUpdateProcessMayBeRequired")); print '
    '; @@ -397,18 +397,17 @@ else } else print "
    \n"; - print $langs->trans("InstallEasy")." "; - print $langs->trans("ChooseYourSetupMode"); - - print '
    '; + //print $langs->trans("InstallEasy")." "; + print '

    '.$langs->trans("ChooseYourSetupMode").'...

    '; $foundrecommandedchoice=0; $available_choices = array(); $notavailable_choices = array(); - // Show first install line - $choice = "\n".'
    '."\n"; + $choice .= ''; $choice .= ''; + $choice .= ''."\n"; $choice .= ''."\n"; + $positionkey = ($foundrecommandedchoice ? 999 : 0); if ($allowinstall) { - $available_choices[] = $choice; + $available_choices[$positionkey] = $choice; } else { - $notavailable_choices[] = $choice; + $notavailable_choices[$positionkey] = $choice; } // Show upgrade lines @@ -508,7 +508,8 @@ else } } - $choice .= "\n".''; + $choice .= "\n".''."\n"; + $choice .= ''; $choice .= ''; $choice .= ''."\n"; if ($allowupgrade) { - $available_choices[] = $choice; + $available_choices[$count] = $choice; } else { - $notavailable_choices[] = $choice; + $notavailable_choices[$count] = $choice; } } @@ -570,6 +571,7 @@ else } // Array of install choices + krsort($available_choices, SORT_NATURAL); print"\n"; print '
    '.$langs->trans("ExpenseReport").''.$langs->trans("Amount").''.$langs->trans("AlreadyPaid").''.$langs->trans("RemainderToPay").'
    '.$expensereport->getNomUrl(1)."'.price($objp->total_ttc)."'.price($sumpaid)."'.price($objp->total_ttc - $sumpaid)."
    '.$langs->trans('PaymentMode').''.$labeltype; print $object->num_paiement?' - '.$object->num_paiement:''; print '
    '.price($objp->amount).''.$donationstatic->LibStatut($objp->statut, 5).''.$donationstatic->LibStatut($objp->status, 5).'
    '.$langs->trans("Example").''.$langs->trans("CodeBarGenerator").'
    '; - print $obj->libelle; + print $obj->label; print "\n"; print $langs->trans('BarcodeDesc'.$obj->encoding); //print "L'EAN se compose de 8 caracteres, 7 chiffres plus une cle de controle.
    "; diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 8432ba786a1..b1b4fc83be8 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1344,7 +1344,6 @@ class ActionComm extends CommonObject $linkstart = ''; $linkend = ''; } - //print 'rrr'.$this->libelle.'rrr'.$this->label.'rrr'.$withpicto; if ($withpicto == 2) { @@ -1463,7 +1462,7 @@ class ActionComm extends CommonObject $sql.= " a.priority, a.fulldayevent, a.location, a.punctual, a.transparency,"; $sql.= " u.firstname, u.lastname, u.email,"; $sql.= " s.nom as socname,"; - $sql.= " c.id as type_id, c.code as type_code, c.libelle"; + $sql.= " c.id as type_id, c.code as type_code, c.libelle as type_label"; $sql.= " FROM (".MAIN_DB_PREFIX."c_actioncomm as c, ".MAIN_DB_PREFIX."actioncomm as a)"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on u.rowid = a.fk_user_author"; // Link to get author of event for export $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on s.rowid = a.fk_soc"; @@ -1568,7 +1567,7 @@ class ActionComm extends CommonObject $event['location']=$obj->location; $event['transparency']=(($obj->transparency > 0)?'OPAQUE':'TRANSPARENT'); // OPAQUE (busy) or TRANSPARENT (not busy) $event['punctual']=$obj->punctual; - $event['category']=$obj->libelle; // libelle type action + $event['category']=$obj->type_label; $event['email']=$obj->email; // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index 569b57ca552..3b2e334e2ef 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -614,7 +614,7 @@ if ($resql) $event->type_label=$obj->type_label; $event->type_color=$obj->type_color; - $event->libelle=$obj->label; + $event->libelle=$obj->label; // deprecated $event->label=$obj->label; $event->percentage=$obj->percent; $event->authorid=$obj->fk_user_author; // user id of creator @@ -720,7 +720,7 @@ if ($showbirthday) $event->datep=dol_mktime(0, 0, 0, $datearray['mon'], $datearray['mday'], $year, true); // For full day events, date are also GMT but they wont but converted during output $event->datef=$event->datep; $event->type_code='BIRTHDAY'; - $event->libelle=$langs->trans("Birthday").' '.dolGetFirstLastname($obj->firstname, $obj->lastname); + $event->label=$langs->trans("Birthday").' '.dolGetFirstLastname($obj->firstname, $obj->lastname); $event->percentage=100; $event->fulldayevent=1; @@ -949,9 +949,9 @@ if (count($listofextcals)) $event->datef=$dateend+$usertime; $event->type_code="ICALEVENT"; - if($icalevent['SUMMARY']) $event->libelle=$icalevent['SUMMARY']; - elseif($icalevent['DESCRIPTION']) $event->libelle=dol_nl2br($icalevent['DESCRIPTION'], 1); - else $event->libelle = $langs->trans("ExtSiteNoLabel"); + if($icalevent['SUMMARY']) $event->label=$icalevent['SUMMARY']; + elseif($icalevent['DESCRIPTION']) $event->label=dol_nl2br($icalevent['DESCRIPTION'], 1); + else $event->label = $langs->trans("ExtSiteNoLabel"); $event->date_start_in_calendar=$event->datep; @@ -1554,7 +1554,7 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa // Show title $titletoshow = $daterange; - $titletoshow.=($titletoshow?' ':'').$event->libelle; + $titletoshow.=($titletoshow?' ':'').($event->label?$event->label:$event->libelle); if ($event->type_code == 'ICALEVENT') print $titletoshow; else diff --git a/htdocs/comm/action/pertype.php b/htdocs/comm/action/pertype.php index 286863c7dc6..15d98465e3c 100644 --- a/htdocs/comm/action/pertype.php +++ b/htdocs/comm/action/pertype.php @@ -616,12 +616,12 @@ $typeofevents=array(); // Load array of colors by type $colorsbytype=array(); $labelbytype=array(); -$sql="SELECT code, color, libelle FROM ".MAIN_DB_PREFIX."c_actioncomm"; +$sql="SELECT code, color, libelle as label FROM ".MAIN_DB_PREFIX."c_actioncomm ORDER BY position"; $resql=$db->query($sql); while ($obj = $db->fetch_object($resql)) { $colorsbytype[$obj->code]=$obj->color; - $labelbytype[$obj->code]=$obj->libelle; + $labelbytype[$obj->code]=$obj->label; } // Loop on each user to show calendar diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index ce577de78bd..fe125820daf 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -752,12 +752,12 @@ while($currentdaytoshow<$lastdaytoshow) { // Load array of colors by type $colorsbytype=array(); $labelbytype=array(); - $sql="SELECT code, color, libelle FROM ".MAIN_DB_PREFIX."c_actioncomm ORDER BY position"; + $sql="SELECT code, color, libelle as label FROM ".MAIN_DB_PREFIX."c_actioncomm ORDER BY position"; $resql=$db->query($sql); while ($obj = $db->fetch_object($resql)) { $colorsbytype[$obj->code]=$obj->color; - $labelbytype[$obj->code]=$obj->libelle; + $labelbytype[$obj->code]=$obj->label; } // Loop on each user to show calendar diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 7b9b29ce100..cac784ba8f9 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1695,13 +1695,13 @@ class Propal extends CommonObject $line->fk_product = $objp->fk_product; - $line->ref = $objp->product_ref; // TODO deprecated + $line->ref = $objp->product_ref; // deprecated $line->product_ref = $objp->product_ref; - $line->libelle = $objp->product_label; // TODO deprecated + $line->libelle = $objp->product_label; // deprecated $line->product_label = $objp->product_label; $line->product_desc = $objp->product_desc; // Description produit $line->product_tobatch = $objp->product_tobatch; - $line->fk_product_type = $objp->fk_product_type; // TODO deprecated + $line->fk_product_type = $objp->fk_product_type; // deprecated $line->fk_unit = $objp->fk_unit; $line->weight = $objp->weight; $line->weight_units = $objp->weight_units; diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index cec68cf2c3a..a9294474115 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -258,7 +258,7 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) { $socialcontribstatic->ref=$obj->ref; $socialcontribstatic->id=$obj->objid; - $socialcontribstatic->lib=$obj->type; + $socialcontribstatic->label=$obj->type; $ref = $socialcontribstatic->getNomUrl(1, 24); $totalpayment = -1*$socialcontribstatic->getSommePaiement(); // Payment already done diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 8859578e94b..20459641d66 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -1127,7 +1127,7 @@ class Facture extends CommonInvoice { $line = new FactureLigne($this->db); - $line->libelle = $object->lines[$i]->libelle; + $line->libelle = $object->lines[$i]->libelle; // deprecated $line->label = $object->lines[$i]->label; $line->desc = $object->lines[$i]->desc; $line->subprice = $object->lines[$i]->subprice; @@ -1551,7 +1551,7 @@ class Facture extends CommonInvoice $line->product_type = $objp->product_type; // Type of line $line->ref = $objp->product_ref; // Ref product $line->product_ref = $objp->product_ref; // Ref product - $line->libelle = $objp->product_label; // TODO deprecated + $line->libelle = $objp->product_label; // deprecated $line->product_label = $objp->product_label; // Label product $line->product_desc = $objp->product_desc; // Description product $line->fk_product_type = $objp->fk_product_type; // Type of product diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index a7df3685175..dc8a610f908 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -958,7 +958,7 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- { $facstatic=new FactureFournisseur($db); - $sql = "SELECT ff.rowid, ff.ref, ff.fk_statut, ff.libelle, ff.total_ht, ff.total_tva, ff.total_ttc, ff.paye"; + $sql = "SELECT ff.rowid, ff.ref, ff.fk_statut, ff.libelle as label, ff.total_ht, ff.total_tva, ff.total_ttc, ff.paye"; $sql.= ", ff.date_lim_reglement"; $sql.= ", s.nom as name"; $sql.= ", s.rowid as socid, s.email"; @@ -1075,9 +1075,8 @@ if ($resql) { $obj = $db->fetch_object($resql); - print '
    '.dol_print_date($db->jdate($obj->da), "day").''.$obj->libelle.' '.$obj->label.'
    '.$obj->label.'
    '.$objp->libelle.''.$objp->label.''.price($objp->sc_amount).'
    '.$payment_sc_static->getNomUrl(1)."'.dol_print_date($db->jdate($obj->datep), 'day').''; $socialcontrib->id=$obj->rowid; $socialcontrib->ref=$obj->rowid; - $socialcontrib->label=$obj->libelle; + $socialcontrib->label=$obj->label; print $socialcontrib->getNomUrl(1, '20'); print ''.$obj->lib.''.$obj->type_label.''.$prodreftxt.''.$objp->libelle.''.$objp->type_contact_label.''.$objp->prod_qty.''; - print img_warning().' '.$langs->trans("NoProductToShipFoundIntoStock", $staticwarehouse->libelle); + print img_warning().' '.$langs->trans("NoProductToShipFoundIntoStock", $staticwarehouse->label); print '
    '.dol_print_date($db->jdate($obj->df), 'day').''.price($obj->amount).'
    Found line with id '.$obj->id.', label "'.$obj->libelle.'" of module "'.$obj->module.'" to delete'; + print '
    Found line with id '.$obj->id.', label "'.$obj->label.'" of module "'.$obj->module.'" to delete'; if (GETPOST('clean_perm_table', 'alpha') == 'confirmed') { $sqldelete = 'DELETE FROM '.MAIN_DB_PREFIX.'rights_def WHERE id = '.$obj->id; diff --git a/htdocs/livraison/card.php b/htdocs/livraison/card.php index bf407b8fc90..2da7bd3fae6 100644 --- a/htdocs/livraison/card.php +++ b/htdocs/livraison/card.php @@ -559,7 +559,7 @@ else $entrepot = new Entrepot($db); $entrepot->fetch($object->entrepot_id); print '
    '.$langs->trans("Warehouse").''.$entrepot->libelle.''.$entrepot->label.'
    '; print $membertypestatic->getNomUrl(1, 32); print '
    '.$langs->trans("CashDeskBankAccountFor").' '.$langs->trans($modep->libelle).'
    '.$langs->trans("CashDeskBankAccountFor").' '.$langs->trans($modep->label).''; if (! empty($conf->global->$name)) $atleastonefound++; $cour=preg_match('/^LIQ.*/', $modep->code)?2:1; diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 9a3bce8c458..494d6b351b8 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -2258,7 +2258,7 @@ class Ticket extends CommonObject $sql .= ", t.phone as phone, t.phone_mobile as phone_mobile, t.phone_perso as phone_perso"; } - $sql .= ", tc.source, tc.element, tc.code, tc.libelle"; + $sql .= ", tc.source, tc.element, tc.code, tc.libelle as type_contact_label"; $sql .= " FROM " . MAIN_DB_PREFIX . "c_type_contact tc"; $sql .= ", " . MAIN_DB_PREFIX . "element_contact ec"; if ($source == 'internal') { @@ -2296,7 +2296,7 @@ class Ticket extends CommonObject if (!$list) { $transkey = "TypeContact_" . $obj->element . "_" . $obj->source . "_" . $obj->code; - $libelle_type = ($langs->trans($transkey) != $transkey ? $langs->trans($transkey) : $obj->libelle); + $libelle_type = ($langs->trans($transkey) != $transkey ? $langs->trans($transkey) : $obj->type_contact_label); $tab[$i] = array( 'source' => $obj->source, 'socid' => $obj->socid, diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index c34a9f1c7d0..5610ef88857 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -258,7 +258,7 @@ class User extends CommonObject $sql = "SELECT u.rowid, u.lastname, u.firstname, u.employee, u.gender, u.birth, u.email, u.personal_email, u.job, u.skype, u.twitter, u.facebook, u.linkedin,"; $sql.= " u.signature, u.office_phone, u.office_fax, u.user_mobile, u.personal_mobile,"; $sql.= " u.address, u.zip, u.town, u.fk_state as state_id, u.fk_country as country_id,"; - $sql.= " u.admin, u.login, u.note,"; + $sql.= " u.admin, u.login, u.note as note_private, u.note_public,"; $sql.= " u.pass, u.pass_crypted, u.pass_temp, u.api_key,"; $sql.= " u.fk_soc, u.fk_socpeople, u.fk_member, u.fk_user, u.ldap_sid, u.fk_user_expense_validator, u.fk_user_holiday_validator,"; $sql.= " u.statut, u.lang, u.entity,"; @@ -374,7 +374,9 @@ class User extends CommonObject $this->job = $obj->job; $this->signature = $obj->signature; $this->admin = $obj->admin; - $this->note = $obj->note; + $this->note_public = $obj->note_public; + $this->note_private = $obj->note_private; + $this->note = $obj->note_private; $this->statut = $obj->statut; $this->photo = $obj->photo; $this->openid = $obj->openid; @@ -1222,7 +1224,8 @@ class User extends CommonObject require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php'; $langs->load("stocks"); $entrepot = new Entrepot($this->db); - $entrepot->libelle = $langs->trans("PersonalStock", $this->getFullName($langs)); + $entrepot->label = $langs->trans("PersonalStock", $this->getFullName($langs)); + $entrepot->libelle = $entrepot->label; // For backward compatibility $entrepot->description = $langs->trans("ThisWarehouseIsPersonalStock", $this->getFullName($langs)); $entrepot->statut = 1; $entrepot->country_id = $mysoc->country_id; @@ -1515,7 +1518,8 @@ class User extends CommonObject $this->job = trim($this->job); $this->signature = trim($this->signature); - $this->note = trim($this->note); + $this->note_public = trim($this->note_public); + $this->note_private = trim($this->note_private); $this->openid = trim(empty($this->openid)?'':$this->openid); // Avoid warning $this->admin = $this->admin?$this->admin:0; $this->address = empty($this->address)?'':$this->address; @@ -1574,7 +1578,8 @@ class User extends CommonObject $sql.= ", color = '".$this->db->escape($this->color)."'"; $sql.= ", dateemployment=".(strval($this->dateemployment)!='' ? "'".$this->db->idate($this->dateemployment)."'" : 'null'); $sql.= ", dateemploymentend=".(strval($this->dateemploymentend)!='' ? "'".$this->db->idate($this->dateemploymentend)."'" : 'null'); - $sql.= ", note = '".$this->db->escape($this->note)."'"; + $sql.= ", note = '".$this->db->escape($this->note_private)."'"; + $sql.= ", note_public = '".$this->db->escape($this->note_public)."'"; $sql.= ", photo = ".($this->photo?"'".$this->db->escape($this->photo)."'":"null"); $sql.= ", openid = ".($this->openid?"'".$this->db->escape($this->openid)."'":"null"); $sql.= ", fk_user = ".($this->fk_user > 0?"'".$this->db->escape($this->fk_user)."'":"null"); @@ -2692,7 +2697,8 @@ class User extends CommonObject $this->lastname='DOLIBARR'; $this->firstname='SPECIMEN'; $this->gender='man'; - $this->note='This is a note'; + $this->note_public='This is a note public'; + $this->note_private='This is a note private'; $this->email='email@specimen.com'; $this->personal_email='personalemail@specimen.com'; $this->skype='skypepseudo'; diff --git a/htdocs/user/group/perms.php b/htdocs/user/group/perms.php index 258cb42388d..32118e05b7b 100644 --- a/htdocs/user/group/perms.php +++ b/htdocs/user/group/perms.php @@ -243,7 +243,7 @@ if ($object->id > 0) print ''.$langs->trans("Permissions").'
     '.$perm_libelle. '
    '.$langs->trans("Permissions").'
    '.$permlabel.'
    '.$langs->trans("FreshInstall").''; + // Show line of first install choice + $choice = '
    '.$langs->trans("FreshInstall").''; $choice .= ''; $choice .= $langs->trans("FreshInstallDesc"); @@ -429,15 +428,16 @@ else } else { - $choice .= $langs->trans("InstallNotAllowed"); + $choice .= ($foundrecommandedchoice ? '' : '').$langs->trans("InstallNotAllowed").($foundrecommandedchoice ? '' : ''); } - $choice .= '
    '.$langs->trans("Upgrade").'
    '.$newversionfrom.$newversionfrombis.' -> '.$newversionto.'
    '; $choice .= $langs->trans("UpgradeDesc"); @@ -541,7 +542,7 @@ else } if ($disabled) { - $choice .= ''.$langs->trans("NotAvailable").''; + $choice .= ''.$langs->trans("NotYetAvailable").''; } else { @@ -556,9 +557,9 @@ else $choice .= '
    '; foreach ($available_choices as $choice) { diff --git a/htdocs/install/default.css b/htdocs/install/default.css index 0e1e23f8f2c..7a3bb7b3290 100644 --- a/htdocs/install/default.css +++ b/htdocs/install/default.css @@ -82,6 +82,9 @@ div.soustitre { .minwidth400imp { min-width: 400px !important; } .minwidth500imp { min-width: 500px !important; } +tr.trlineforchoice { + height: 4em; +} /* Force values for small screen 570 */ @media only screen and (max-width: 570px) From 89f1904793f82ee4410de8509a393cc2c45b6673 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 17:26:26 +0100 Subject: [PATCH 836/980] Finish removing of ->attribute_label --- htdocs/commande/list.php | 2 +- htdocs/compta/bank/bankentries_list.php | 5 +++-- htdocs/compta/facture/list.php | 5 ++--- htdocs/core/class/extrafields.class.php | 3 ++- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index df596b6d52f..5f9906b58dc 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -268,7 +268,7 @@ $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typ $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)"; if (! empty($search_categ_cus)) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_societe as cc ON s.rowid = cc.fk_soc"; // We'll need this table joined to the select in order to filter by categ $sql.= ', '.MAIN_DB_PREFIX.'commande as c'; -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."commande_extrafields as ef on (c.rowid = ef.fk_object)"; +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."commande_extrafields as ef on (c.rowid = ef.fk_object)"; if ($sall || $search_product_category > 0) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'commandedet as pd ON c.rowid=pd.fk_commande'; if ($search_product_category > 0) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie_product as cp ON cp.fk_product=pd.fk_product'; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."projet as p ON p.rowid = c.fk_projet"; diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index d2b998be2d9..773ee1e9255 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -1065,9 +1065,10 @@ if ($resql) } } // Extra fields - if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) + $element = 'banktransaction'; + if (is_array($extrafields->attributes[$element]['label']) && count($extrafields->attributes[$element]['label'])) { - foreach($extrafields->attribute_label as $key => $val) + foreach($extrafields->attributes[$element]['label'] as $key => $val) { if (! empty($arrayfields["ef.".$key]['checked'])) { diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index ae24277a896..74c27c1e467 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -512,9 +512,8 @@ if (! $sall) $sql.= " p.rowid, p.ref, p.title"; if ($search_categ_cus) $sql .= ", cc.fk_categorie, cc.fk_soc"; // Add fields from extrafields - foreach ($extrafields->attribute_label as $key => $val) //prevent error with sql_mode=only_full_group_by - { - $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key : ''); + 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 : ''); } } else diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 67693b83c6b..83734acd36e 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1586,7 +1586,7 @@ class ExtraFields * @param string $key Key of attribute * @param string $value Value to show * @param string $moreparam To add more parameters on html input tag (only checkbox use html input for output rendering) - * @param string $extrafieldsobjectkey If defined (for example $object->table_element), use the new method to get extrafields data + * @param string $extrafieldsobjectkey If defined (for example $object->table_element), function uses the new method to get extrafields data * @return string Formated value */ public function showOutputField($key, $value, $moreparam = '', $extrafieldsobjectkey = '') @@ -1611,6 +1611,7 @@ class ExtraFields } else // Old usage { + //dol_syslog("Warning: parameter 'extrafieldsobjectkey' is missing", LOG_WARNING); $label=$this->attribute_label[$key]; $type=$this->attribute_type[$key]; $size=$this->attribute_size[$key]; From d51d0634232a11a9b75a70b6c184a0d36ad7a2b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 2 Nov 2019 17:34:27 +0100 Subject: [PATCH 837/980] css --- htdocs/imports/index.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/imports/index.php b/htdocs/imports/index.php index 2ce0139f517..7f9c113b10f 100644 --- a/htdocs/imports/index.php +++ b/htdocs/imports/index.php @@ -54,6 +54,7 @@ print '
    '; // List of import set /* +print '
    '; print '
    '; print ''; print ''; @@ -84,6 +85,7 @@ else print ''; } print '
    '.$langs->trans("Module").'
    '.$langs->trans("NoImportableData").'
    '; +print '
    '; print '
    '; */ @@ -107,6 +109,7 @@ print '
    '; // List of available import format +print '
    '; print ''; print ''; print ''; @@ -130,6 +133,7 @@ foreach($liste as $key) } print '
    '.$langs->trans("AvailableFormats").'
    '; +print '
    '; //print '
    '; From bdcc33c19462f48ec88544aecc702259aa955b19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 2 Nov 2019 17:36:54 +0100 Subject: [PATCH 838/980] css --- htdocs/expensereport/index.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/expensereport/index.php b/htdocs/expensereport/index.php index e893fdf43f4..c849a5c62f9 100644 --- a/htdocs/expensereport/index.php +++ b/htdocs/expensereport/index.php @@ -115,7 +115,7 @@ print load_fiche_titre($langs->trans("ExpensesArea")); print '
    '; - +print '
    '; print ''; print ''; print ''; @@ -152,6 +152,7 @@ print ''; print '
    '.$langs->trans("Statistics").''.price($totalsum, 1, $langs, 0, 0, 0, $con print '
    '; +print '
    '; @@ -189,7 +190,8 @@ if ($result) $i = 0; - print ''; + print '
    '; + print '
    '; print ''; print ''; print ''; @@ -232,7 +234,7 @@ if ($result) { print ''; } - print '
    '.$langs->trans("BoxTitleLastModifiedExpenses", min($max, $num)).''.$langs->trans("AmountHT").'
    '.$langs->trans("None").'

    '; + print '

    '; } else dol_print_error($db); From 6f82c212a02e429fdb16cf285d69539667064721 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 17:38:19 +0100 Subject: [PATCH 839/980] Finished migration to the new architecture of extrafields --- htdocs/admin/mails_senderprofile_list.php | 2 +- htdocs/asset/list.php | 2 +- htdocs/compta/paiement/list.php | 4 ---- htdocs/core/class/commondocgenerator.class.php | 6 +++--- htdocs/core/tpl/advtarget.tpl.php | 8 ++++---- htdocs/product/stock/productlot_list.php | 4 +++- htdocs/reception/list.php | 2 +- htdocs/resource/list.php | 2 +- htdocs/societe/website.php | 8 -------- 9 files changed, 14 insertions(+), 24 deletions(-) diff --git a/htdocs/admin/mails_senderprofile_list.php b/htdocs/admin/mails_senderprofile_list.php index adb54c7434f..eb432b0dc72 100644 --- a/htdocs/admin/mails_senderprofile_list.php +++ b/htdocs/admin/mails_senderprofile_list.php @@ -393,7 +393,7 @@ print ''."\n"; // Detect if we need a fetch on each output line $needToFetchEachLine=0; -foreach ($extrafields->attribute_computed as $key => $val) +foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) { if (preg_match('/\$object/', $val)) $needToFetchEachLine++; // There is at least one compute field that use $object } diff --git a/htdocs/asset/list.php b/htdocs/asset/list.php index 697f3becd9b..8ea4f46c89d 100644 --- a/htdocs/asset/list.php +++ b/htdocs/asset/list.php @@ -407,7 +407,7 @@ print ''."\n"; // Detect if we need a fetch on each output line $needToFetchEachLine=0; -foreach ($extrafields->attribute_computed as $key => $val) +foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) { if (preg_match('/\$object/', $val)) $needToFetchEachLine++; // There is at least one compute field that use $object } diff --git a/htdocs/compta/paiement/list.php b/htdocs/compta/paiement/list.php index 7913d1f8dea..7faa2727ae4 100644 --- a/htdocs/compta/paiement/list.php +++ b/htdocs/compta/paiement/list.php @@ -117,8 +117,6 @@ if (GETPOST("orphelins", "alpha")) $sql = "SELECT p.rowid, p.ref, p.datep as dp, p.amount,"; $sql.= " p.statut, p.num_paiement,"; $sql.= " c.code as paiement_code"; - // Add fields for extrafields - foreach ($extrafields->attribute_list as $key => $val) $sql.=",ef.".$key.' as options_'.$key; // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook @@ -139,8 +137,6 @@ else $sql.= " c.code as paiement_code,"; $sql.= " ba.rowid as bid, ba.ref as bref, ba.label as blabel, ba.number, ba.account_number as account_number, ba.fk_accountancy_journal as accountancy_journal,"; $sql.= " s.rowid as socid, s.nom as name, s.email"; - // Add fields for extrafields - foreach ($extrafields->attribute_list as $key => $val) $sql.=",ef.".$key.' as options_'.$key; // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index 9b3304560d9..6a9bc0c9f29 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -596,7 +596,7 @@ abstract class CommonDocGenerator $line->fetch_optionals(); $resarray = $this->fill_substitutionarray_with_extrafields($line, $resarray, $extrafields, $array_key, $outputlangs); - + // Check if the current line belongs to a supplier order if (get_class($line) == 'CommandeFournisseurLigne') { @@ -606,7 +606,7 @@ abstract class CommonDocGenerator $columns = ""; foreach ($extralabels as $key => $value) $columns .= "$key, "; - + if ($columns != "") { $columns = substr($columns, 0, strlen($columns) - 2); @@ -843,7 +843,7 @@ abstract class CommonDocGenerator $id = $object->array_options['options_'.$key]; if ($id != "") { - $param = $extrafields->attribute_param[$key]; + $param = $extrafields->attributes[$object->table_element]['param'][$key]; $param_list=array_keys($param['options']); // $param_list='ObjectName:classPath' $InfoFieldList = explode(":", $param_list[0]); $classname=$InfoFieldList[0]; diff --git a/htdocs/core/tpl/advtarget.tpl.php b/htdocs/core/tpl/advtarget.tpl.php index d1b1dfe1093..976b571081e 100644 --- a/htdocs/core/tpl/advtarget.tpl.php +++ b/htdocs/core/tpl/advtarget.tpl.php @@ -302,10 +302,10 @@ if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) { ); print '' . "\n"; } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'select')) { - print $formadvtargetemaling->advMultiselectarray('options_' . $key, $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key]); + print $formadvtargetemaling->advMultiselectarray('options_' . $key, $extrafields->attributes[$key]['param']['options'], $array_query['options_' . $key]); print '' . "\n"; } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'sellist')) { - print $formadvtargetemaling->advMultiselectarraySelllist('options_' . $key, $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key]); + print $formadvtargetemaling->advMultiselectarraySelllist('options_' . $key, $extrafields->attributes[$key]['param']['options'], $array_query['options_' . $key]); print '' . "\n"; } else { print ''; @@ -499,10 +499,10 @@ if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) { ); print ''; + print ''; + print ''; + print ''; + print ''; + print '
    '; } else { print '
    '; diff --git a/htdocs/core/class/dolreceiptprinter.class.php b/htdocs/core/class/dolreceiptprinter.class.php index ef529f39d9a..1f9ea78bf95 100644 --- a/htdocs/core/class/dolreceiptprinter.class.php +++ b/htdocs/core/class/dolreceiptprinter.class.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2015-2019 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 @@ -91,13 +91,19 @@ * */ -require_once DOL_DOCUMENT_ROOT .'/includes/mike42/escpos-php/Escpos.php'; +require_once DOL_DOCUMENT_ROOT .'/includes/mike42/escpos-php/autoload.php'; +use Mike42\Escpos\PrintConnectors\FilePrintConnector; +use Mike42\Escpos\PrintConnectors\NetworkPrintConnector; +use Mike42\Escpos\PrintConnectors\WindowsPrintConnector; +use Mike42\Escpos\CapabilityProfile; +use Mike42\Escpos\Printer; +use Mike42\Escpos\EscposImage; /** * Class to manage Receipt Printers */ -class dolReceiptPrinter extends Escpos +class dolReceiptPrinter extends Printer { const CONNECTOR_DUMMY = 1; const CONNECTOR_FILE_PRINT = 2; @@ -423,6 +429,29 @@ class dolReceiptPrinter extends Escpos return $error; } + /** + * Function to add a printer template in db + * + * @param string $name Template name + * @param int $template Template + * @return int 0 if OK; >0 if KO + */ + public function addTemplate($name, $template) + { + global $conf; + $error = 0; + $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'printer_receipt_template'; + $sql.= ' (name, template, entity) VALUES ("'.$this->db->escape($name).'"'; + $sql.= ', "'.$this->db->escape($template).'", '.$conf->entity.')'; + $resql = $this->db->query($sql); + if (! $resql) { + $error++; + $this->errors[] = $this->db->lasterror; + } + return $error; + } + + /** * Function to Update a printer template in db * @@ -458,16 +487,17 @@ class dolReceiptPrinter extends Escpos { global $conf; $error = 0; - $img = new EscposImage(DOL_DOCUMENT_ROOT .'/theme/common/dolibarr_logo_bw.png'); + $img = EscposImage::load(DOL_DOCUMENT_ROOT .'/theme/common/dolibarr_logo_bw.png'); + //$this->profile = CapabilityProfile::load("TM-T88IV"); $ret = $this->initPrinter($printerid); if ($ret>0) { setEventMessages($this->error, $this->errors, 'errors'); } else { try { - $this->printer->graphics($img); + $this->printer->bitImage($img); $this->printer->text("Hello World!\n"); - $testStr = "Testing 123"; - $this->printer->qrCode($testStr); + $testStr = "1234567890"; + $this->printer->barcode($testStr); $this->printer->text("Most simple example\n"); $this->printer->feed(); $this->printer->cut(); @@ -687,7 +717,7 @@ class dolReceiptPrinter extends Escpos $this->connector = 'CONNECTOR_UNKNOWN'; break; } - $this->printer = new Escpos($this->connector); + $this->printer = new Printer($this->connector, $this->profile); } catch (Exception $e) { $this->errors[] = $e->getMessage(); $error++; diff --git a/htdocs/includes/mike42/escpos-php/.coveralls.yml b/htdocs/includes/mike42/escpos-php/.coveralls.yml new file mode 100644 index 00000000000..b33373af905 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/.coveralls.yml @@ -0,0 +1,4 @@ +service_name: travis-ci +coverage_clover: build/logs/clover.xml +json_path: build/logs/coveralls-upload.json + diff --git a/htdocs/includes/mike42/escpos-php/.gitignore b/htdocs/includes/mike42/escpos-php/.gitignore index 0e8fc4a31ee..8632f891ad4 100644 --- a/htdocs/includes/mike42/escpos-php/.gitignore +++ b/htdocs/includes/mike42/escpos-php/.gitignore @@ -10,3 +10,7 @@ doc/doxygen_sqlite3.db # composer files vendor/ + +# other build files +build/* +*.phar diff --git a/htdocs/includes/mike42/escpos-php/.travis.yml b/htdocs/includes/mike42/escpos-php/.travis.yml new file mode 100644 index 00000000000..04ffb6523b6 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/.travis.yml @@ -0,0 +1,46 @@ +--- +dist: trusty +sudo: required + +language: php + +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 + - 7.2 + - nightly + - hhvm-3.21 + - hhvm-nightly + +matrix: + allow_failures: + - php: nightly + - php: hhvm-nightly + +before_install: + - sudo apt-get -qq update + - sudo apt-get install -y imagemagick ghostscript + +install: + - composer install + +before_script: + # Install 'imagick' plugin + - bash -c 'if [[ $TRAVIS_PHP_VERSION != hhvm* ]]; then printf "\n" | pecl install imagick; fi' + # Directory for coverage report + - mkdir -p build/logs/ + +script: + # Check code style + - php vendor/bin/phpcs --standard=psr2 src/ -n + # Run tests + - php vendor/bin/phpunit --coverage-clover build/logs/clover.xml + +after_success: + # Upload coverage statistics to coveralls service after test + - wget -c -nc https://github.com/satooshi/php-coveralls/releases/download/v1.0.1/coveralls.phar + - php coveralls.phar -v +... diff --git a/htdocs/includes/mike42/escpos-php/CONTRIBUTING.md b/htdocs/includes/mike42/escpos-php/CONTRIBUTING.md new file mode 100644 index 00000000000..326e1d093ac --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/CONTRIBUTING.md @@ -0,0 +1,65 @@ +# How to contribute + +This project is open to many different types of contribution. You can help with improving the documentation and examples, sharing your insights on the issue tracker, adding fixes to the code, providing test cases, or just [writing about your hardware setup that you use](https://github.com/mike42/escpos-php/issues/new). + +## Issue tracker + +Open issues of all sorts are tracked on the [issue tracker](https://github.com/mike42/escpos-php/issues). Please check [the FAQ](https://github.com/mike42/escpos-php/blob/development/doc/FAQ.md) before you post, and practice good [bug tracker etiquette](https://bugzilla.mozilla.org/page.cgi?id=etiquette.html) to keep it running smoothly. + +Issues are [loosely categorised](https://github.com/mike42/escpos-php/labels), and will stay open while there is still something that can be resolved. + +Anybody may add to the discussion on the bug tracker. Just be sure to add new questions as separate issues, and to avoid commenting on closed issues. + +## Submitting changes + +Code changes may be submitted as a "[pull request](https://help.github.com/articles/about-pull-requests/)" at [mike42/escpos-php](https://github.com/mike42/escpos-php). The description should include some information about how the change improves the library. + +The project is MIT-licensed (see [LICENSE.md](https://github.com/mike42/escpos-php/blob/development/LICENSE.md) for details). You are not required to assign copyright in order to submit changes, but you do need to agree for your code to be distributed under this license in order for it to be accepted. + +### Documentation changes + +The official documentaton is also located in the main repository, under the [doc/](https://github.com/mike42/escpos-php/tree/development/doc) folder. + +You are welcome to post any suggested improvements as pull requests. + +### Release process + +Once a pull request is accepted, it usually appears in a release a few days later. + +Branches: + +- "development" is the most recent code, possibly containing unreleased fixes +- "master" contains the most recently released code (old versions are not maintained). + +The release process for your changes is: + +- Changes are submitted via pull request to the shared "development" branch. +- A new release is staged on the "master" branch via another pull request, and then tagged. + +## Code style + +This project uses the [PSR-2 standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md) for all PHP source code. + +## Testing and CI + +The tests are executed on [Travis CI](https://travis-ci.org/mike42/escpos-php) over PHP 5.4, 5.5, 5.6, 7.0, 7.1 and 7.2, plus the latest LTS version of HHVM, 3.21. Older versions of PHP are not supported in current releases. + +For development, it's suggested that you load `imagick`, `gd` and `Xdebug` PHP exensions, and install `composer`. + +Fetch a copy of this code and load dependencies with composer: + + git clone https://github.com/mike42/escpos-php + cd escpos-php/ + composer install + +Execute unit tests via `phpunit`: + + php vendor/bin/phpunit --coverage-text + +Code style can be checked via [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer): + + php vendor/bin/phpcs --standard=psr2 src/ -n + +The developer docs are built with [doxygen](https://github.com/doxygen/doxygen). Re-build them to check for documentation warnings: + + make -C doc clean && make -C doc diff --git a/htdocs/includes/mike42/escpos-php/CONTRIBUTORS.md b/htdocs/includes/mike42/escpos-php/CONTRIBUTORS.md new file mode 100644 index 00000000000..12f3acf95a5 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/CONTRIBUTORS.md @@ -0,0 +1,25 @@ +# escpos-php contributors + +This file contains a list of people who have made contributions of +code which appear in the public repository of escpos-php. + +Main repository: [mike42/escpos-php](https://github.com/mike42/escpos-php) ([online contributor list](https://github.com/mike42/escpos-php/graphs/contributors)) + +- [Michael Billington](https://github.com/mike42) +- [Alif Maulana El Fattah Nataly](https://github.com/alif25r) +- [Mareks Sudniks](https://github.com/marech) +- [matiasgaston](https://github.com/matiasgaston) +- [Mike Stivala](https://github.com/brndwgn) +- [Nicholas Long](https://github.com/longsview) +- [Evandro Araújo](https://github.com/evsar3) + +Via fork: [wdoyle/EpsonESCPOS-PHP](https://github.com/wdoyle/EpsonESCPOS-PHP): + +- [Warren Doyle](https://github.com/wdoyle) + +Via fork: [ronisaha/php-esc-pos](https://github.com/ronisaha/php-esc-pos): + +- [Roni Saha](https://github.com/ronisaha) +- [Gergely Radics](https://github.com/Gerifield) +- [vharo](https://github.com/vharo) + diff --git a/htdocs/includes/mike42/escpos-php/Escpos.php b/htdocs/includes/mike42/escpos-php/Escpos.php deleted file mode 100644 index b8568260738..00000000000 --- a/htdocs/includes/mike42/escpos-php/Escpos.php +++ /dev/null @@ -1,853 +0,0 @@ -, - * incorporating modifications by: - * - Roni Saha - * - Gergely Radics - * - Warren Doyle - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * This class generates ESC/POS printer control commands for compatible printers. - * See README.md for a summary of compatible printers and supported commands, and - * basic usage. - * - * See example/demo.php for a detailed print-out demonstrating the range of commands - * implemented in this project. - * - * Note that some functions have not been implemented: - * - Set paper sensors - * - Select print colour - * - * Please direct feature requests, bug reports and contributions to escpos-php - * on Github: - * - https://github.com/mike42/escpos-php - */ -require_once(dirname(__FILE__) . "/src/EscposImage.php"); -require_once(dirname(__FILE__) . "/src/PrintBuffer.php"); -require_once(dirname(__FILE__) . "/src/EscposPrintBuffer.php"); -require_once(dirname(__FILE__) . "/src/PrintConnector.php"); -require_once(dirname(__FILE__) . "/src/WindowsPrintConnector.php"); -require_once(dirname(__FILE__) . "/src/FilePrintConnector.php"); -require_once(dirname(__FILE__) . "/src/NetworkPrintConnector.php"); -require_once(dirname(__FILE__) . "/src/AbstractCapabilityProfile.php"); -require_once(dirname(__FILE__) . "/src/DefaultCapabilityProfile.php"); -require_once(dirname(__FILE__) . "/src/SimpleCapabilityProfile.php"); -require_once(dirname(__FILE__) . "/src/EposTepCapabilityProfile.php"); -require_once(dirname(__FILE__) . "/src/StarCapabilityProfile.php"); -require_once(dirname(__FILE__) . "/src/P822DCapabilityProfile.php"); -require_once(dirname(__FILE__) . "/src/CodePage.php"); -require_once(dirname(__FILE__) . "/src/ImagePrintBuffer.php"); - -class Escpos { - /* ASCII codes */ - const NUL = "\x00"; - const LF = "\x0a"; - const ESC = "\x1b"; - const FS = "\x1c"; - const FF = "\x0c"; - const GS = "\x1d"; - const DLE = "\x10"; - const EOT = "\x04"; - - /* Barcode types */ - const BARCODE_UPCA = 65; - const BARCODE_UPCE = 66; - const BARCODE_JAN13 = 67; - const BARCODE_JAN8 = 68; - const BARCODE_CODE39 = 69; - const BARCODE_ITF = 70; - const BARCODE_CODABAR = 71; - const BARCODE_CODE93 = 72; - const BARCODE_CODE128 = 73; - - /* Barcode HRI (human-readable interpretation) text position */ - const BARCODE_TEXT_NONE = 0; - const BARCODE_TEXT_ABOVE = 1; - const BARCODE_TEXT_BELOW = 2; - - /* Cut types */ - const CUT_FULL = 65; - const CUT_PARTIAL = 66; - - /* Fonts */ - const FONT_A = 0; - const FONT_B = 1; - const FONT_C = 2; - - /* Image sizing options */ - const IMG_DEFAULT = 0; - const IMG_DOUBLE_WIDTH = 1; - const IMG_DOUBLE_HEIGHT = 2; - - /* Justifications */ - const JUSTIFY_LEFT = 0; - const JUSTIFY_CENTER = 1; - const JUSTIFY_RIGHT = 2; - - /* Print mode constants */ - const MODE_FONT_A = 0; - const MODE_FONT_B = 1; - const MODE_EMPHASIZED = 8; - const MODE_DOUBLE_HEIGHT = 16; - const MODE_DOUBLE_WIDTH = 32; - const MODE_UNDERLINE = 128; - - /* QR code error correction levels */ - const QR_ECLEVEL_L = 0; - const QR_ECLEVEL_M = 1; - const QR_ECLEVEL_Q = 2; - const QR_ECLEVEL_H = 3; - - /* QR code models */ - const QR_MODEL_1 = 1; - const QR_MODEL_2 = 2; - const QR_MICRO = 3; - - /* Printer statuses */ - const STATUS_PRINTER = 1; - const STATUS_OFFLINE_CAUSE = 2; - const STATUS_ERROR_CAUSE = 3; - const STATUS_PAPER_ROLL = 4; - const STATUS_INK_A = 7; - const STATUS_INK_B = 6; - const STATUS_PEELER = 8; - - /* Underline */ - const UNDERLINE_NONE = 0; - const UNDERLINE_SINGLE = 1; - const UNDERLINE_DOUBLE = 2; - - /** - * @var PrintBuffer The printer's output buffer. - */ - private $buffer; - - /** - * @var PrintConnector - * @CHANGE - */ - protected $connector; - // private $connector; - - /** - * @var AbstractCapabilityProfile - */ - private $profile; - - /** - * @var int Current character code table - */ - private $characterTable; - - /** - * Construct a new print object - * - * @param PrintConnector $connector The PrintConnector to send data to. If not set, output is sent to standard output. - * @param AbstractCapabilityProfile $profile Supported features of this printer. If not set, the DefaultCapabilityProfile will be used, which is suitable for Epson printers. - * @throws InvalidArgumentException - */ - function __construct(PrintConnector $connector = null, AbstractCapabilityProfile $profile = null) { - if(is_null($connector)) { - if(php_sapi_name() == 'cli') { - $connector = new FilePrintConnector("php://stdout"); - } else { - throw new InvalidArgumentException("Argument passed to Escpos::__construct() must implement interface PrintConnector, null given."); - } - } - /* Set connector */ - $this -> connector = $connector; - - /* Set capability profile */ - if($profile === null) { - $profile = DefaultCapabilityProfile::getInstance(); - } - $this -> profile = $profile; - /* Set buffer */ - $buffer = new EscposPrintBuffer(); - $this -> buffer = null; - $this -> setPrintBuffer($buffer); - $this -> initialize(); - } - - /** - * Print a barcode. - * - * @param string $content The information to encode. - * @param int $type The barcode standard to output. If not specified, `Escpos::BARCODE_CODE39` will be used. Note that some barcode formats only support specific lengths or sets of characters. - * @throws InvalidArgumentException Where the length or characters used in $content is invalid for the requested barcode format. - */ - function barcode($content, $type = self::BARCODE_CODE39) { - /* Validate input */ - self::validateInteger($type, 65, 73, __FUNCTION__, "Barcode type"); - $len = strlen($content); - switch($type) { - case self::BARCODE_UPCA: - self::validateInteger($len, 11, 12, __FUNCTION__, "UPCA barcode content length"); - self::validateStringRegex($content, __FUNCTION__, "/^[0-9]{11,12}$/", "UPCA barcode content"); - break; - case self::BARCODE_UPCE: - self::validateIntegerMulti($len, array(array(6, 8), array(11, 12)), __FUNCTION__, "UPCE barcode content length"); - self::validateStringRegex($content, __FUNCTION__, "/^([0-9]{6,8}|[0-9]{11,12})$/", "UPCE barcode content"); - break; - case self::BARCODE_JAN13: - self::validateInteger($len, 12, 13, __FUNCTION__, "JAN13 barcode content length"); - self::validateStringRegex($content, __FUNCTION__, "/^[0-9]{12,13}$/", "JAN13 barcode content"); - break; - case self::BARCODE_JAN8: - self::validateInteger($len, 7, 8, __FUNCTION__, "JAN8 barcode content length"); - self::validateStringRegex($content, __FUNCTION__, "/^[0-9]{7,8}$/", "JAN8 barcode content"); - break; - case self::BARCODE_CODE39: - self::validateInteger($len, 1, 255, __FUNCTION__, "CODE39 barcode content length"); // 255 is a limitation of the "function b" command, not the barcode format. - self::validateStringRegex($content, __FUNCTION__, "/^([0-9A-Z \$\%\+\-\.\/]+|\*[0-9A-Z \$\%\+\-\.\/]+\*)$/", "CODE39 barcode content"); - break; - case self::BARCODE_ITF: - self::validateInteger($len, 2, 255, __FUNCTION__, "ITF barcode content length"); // 255 is a limitation of the "function b" command, not the barcode format. - self::validateStringRegex($content, __FUNCTION__, "/^([0-9]{2})+$/", "ITF barcode content"); - break; - case self::BARCODE_CODABAR: - self::validateInteger($len, 1, 255, __FUNCTION__, "Codabar barcode content length"); // 255 is a limitation of the "function b" command, not the barcode format. - self::validateStringRegex($content, __FUNCTION__, "/^[A-Da-d][0-9\$\+\-\.\/\:]+[A-Da-d]$/", "Codabar barcode content"); - break; - case self::BARCODE_CODE93: - self::validateInteger($len, 1, 255, __FUNCTION__, "Code93 barcode content length"); // 255 is a limitation of the "function b" command, not the barcode format. - self::validateStringRegex($content, __FUNCTION__, "/^[\\x00-\\x7F]+$/", "Code93 barcode content"); - break; - case self::BARCODE_CODE128: - self::validateInteger($len, 1, 255, __FUNCTION__, "Code128 barcode content length"); // 255 is a limitation of the "function b" command, not the barcode format. - // The CODE128 encoder is quite complex, so only a very basic header-check is applied here. - self::validateStringRegex($content, __FUNCTION__, "/^\{[A-C][\\x00-\\x7F]+$/", "Code128 barcode content"); - break; - } - if(!$this -> profile -> getSupportsBarcodeB()) { - // A simpler barcode command which supports fewer codes - self::validateInteger($type, 65, 71, __FUNCTION__); - $this -> connector -> write(self::GS . "k" . chr($type - 65) . $content . self::NUL); - return; - } - // More advanced function B, used in preference - $this -> connector -> write(self::GS . "k" . chr($type) . chr(strlen($content)) . $content); - } - - /** - * Print an image, using the older "bit image" command. This creates padding on the right of the image, - * if its width is not divisible by 8. - * - * Should only be used if your printer does not support the graphics() command. - * - * @param EscposImage $img The image to print - * @param EscposImage $size Size modifier for the image. - */ - function bitImage(EscposImage $img, $size = self::IMG_DEFAULT) { - self::validateInteger($size, 0, 3, __FUNCTION__); - $header = self::dataHeader(array($img -> getWidthBytes(), $img -> getHeight()), true); - $this -> connector -> write(self::GS . "v0" . chr($size) . $header); - $this -> connector -> write($img -> toRasterFormat()); - } - - /** - * Close the underlying buffer. With some connectors, the - * job will not actually be sent to the printer until this is called. - */ - function close() { - $this -> connector -> finalize(); - } - - /** - * Cut the paper. - * - * @param int $mode Cut mode, either Escpos::CUT_FULL or Escpos::CUT_PARTIAL. If not specified, `Escpos::CUT_FULL` will be used. - * @param int $lines Number of lines to feed - */ - function cut($mode = self::CUT_FULL, $lines = 3) { - // TODO validation on cut() inputs - $this -> connector -> write(self::GS . "V" . chr($mode) . chr($lines)); - } - - /** - * Print and feed line / Print and feed n lines. - * - * @param int $lines Number of lines to feed - */ - function feed($lines = 1) { - self::validateInteger($lines, 1, 255, __FUNCTION__); - if($lines <= 1) { - $this -> connector -> write(self::LF); - } else { - $this -> connector -> write(self::ESC . "d" . chr($lines)); - } - } - - /** - * Some printers require a form feed to release the paper. On most printers, this - * command is only useful in page mode, which is not implemented in this driver. - */ - function feedForm() { - $this -> connector -> write(self::FF); - } - - /** - * Print and reverse feed n lines. - * - * @param int $lines number of lines to feed. If not specified, 1 line will be fed. - */ - function feedReverse($lines = 1) { - self::validateInteger($lines, 1, 255, __FUNCTION__); - $this -> connector -> write(self::ESC . "e" . chr($lines)); - } - - /** - * @return number - */ - function getCharacterTable() { - return $this -> characterTable; - } - - /** - * @return PrintBuffer - */ - function getPrintBuffer() { - return $this -> buffer; - } - - /** - * @return PrintConnector - */ - function getPrintConnector() { - return $this -> connector; - } - - /** - * @return AbstractCapabilityProfile - */ - function getPrinterCapabilityProfile() { - return $this -> profile; - } - - /** - * @param int $type The type of status to request - * @return stdClass Class containing requested status, or null if either no status was received, or your print connector is unable to read from the printer. - */ - function getPrinterStatus($type = self::STATUS_PRINTER) { - self::validateIntegerMulti($type, array(array(1, 4), array(6, 8)), __FUNCTION__); - // Determine which flags we are looking for - $statusFlags = array( - self::STATUS_PRINTER => array( - 4 => "pulseHigh", // connector pin 3, see pulse(). - 8 => "offline", - 32 => "waitingForOnlineRecovery", - 64 => "feedButtonPressed" - ), - self::STATUS_OFFLINE_CAUSE => array( - 4 => "coverOpen", - 8 => "paperManualFeed", - 32 => "paperEnd", - 64 => "errorOccurred" - ), - self::STATUS_ERROR_CAUSE => array( - 4 => "recoverableError", - 8 => "autocutterError", - 32 => "unrecoverableError", - 64 => "autorecoverableError" - ), - self::STATUS_PAPER_ROLL => array( - 4 => "paperNearEnd", - 32 => "paperNotPresent" - ), - self::STATUS_INK_A => array( - 4 => "inkNearEnd", - 8 => "inkEnd", - 32 => "inkNotPresent", - 64 => "cleaning" - ), - self::STATUS_INK_B => array( - 4 => "inkNearEnd", - 8 => "inkEnd", - 32 => "inkNotPresent" - ), - self::STATUS_PEELER => array( - 4 => "labelWaitingForRemoval", - 32 => "labelPaperNotDetected" - ) - ); - $flags = $statusFlags[$type]; - // Clear any previous statuses which haven't been read yet - $f = $this -> connector -> read(1); - // Make request - $reqC = chr($type); - switch($type) { - // Special cases: These are two-character requests - case self::STATUS_INK_A: - $reqC = chr(7) . chr(1); - break; - case self::STATUS_INK_B: - $reqC = chr(7) . chr(2); - break; - case self::STATUS_PEELER: - $reqC = chr(8) . chr(3); - break; - } - $this -> connector -> write(self::DLE . self::EOT . $reqC); - // Wait for single-character response - $f = $this -> connector -> read(1); - $i = 0; - while($f === false && $i < 50000) { - usleep(100); - $f = $this -> connector -> read(1); - $i++; - } - if($f === false) { - // Timeout - return null; - } - $ret = new stdClass(); - foreach($flags as $num => $name) { - $ret -> $name = (ord($f) & $num) != 0; - } - return $ret; - } - - /** - * Print an image to the printer. - * - * Size modifiers are: - * - IMG_DEFAULT (leave image at original size) - * - IMG_DOUBLE_WIDTH - * - IMG_DOUBLE_HEIGHT - * - * See the example/ folder for detailed examples. - * - * The function bitImage() takes the same parameters, and can be used if - * your printer doesn't support the newer graphics commands. - * - * @param EscposImage $img The image to print. - * @param int $size Output size modifier for the image. - */ - function graphics(EscposImage $img, $size = self::IMG_DEFAULT) { - self::validateInteger($size, 0, 3, __FUNCTION__); - $imgHeader = self::dataHeader(array($img -> getWidth(), $img -> getHeight()), true); - $tone = '0'; - $colors = '1'; - $xm = (($size & self::IMG_DOUBLE_WIDTH) == self::IMG_DOUBLE_WIDTH) ? chr(2) : chr(1); - $ym = (($size & self::IMG_DOUBLE_HEIGHT) == self::IMG_DOUBLE_HEIGHT) ? chr(2) : chr(1); - $header = $tone . $xm . $ym . $colors . $imgHeader; - $this -> wrapperSendGraphicsData('0', 'p', $header . $img -> toRasterFormat()); - $this -> wrapperSendGraphicsData('0', '2'); - } - - /** - * Initialize printer. This resets formatting back to the defaults. - */ - function initialize() { - $this -> connector -> write(self::ESC . "@"); - $this -> characterTable = 0; - } - - /** - * Generate a pulse, for opening a cash drawer if one is connected. - * The default settings should open an Epson drawer. - * - * @param int $pin 0 or 1, for pin 2 or pin 5 kick-out connector respectively. - * @param int $on_ms pulse ON time, in milliseconds. - * @param int $off_ms pulse OFF time, in milliseconds. - */ - function pulse($pin = 0, $on_ms = 120, $off_ms = 240) { - self::validateInteger($pin, 0, 1, __FUNCTION__); - self::validateInteger($on_ms, 1, 511, __FUNCTION__); - self::validateInteger($off_ms, 1, 511, __FUNCTION__); - $this -> connector -> write(self::ESC . "p" . chr($pin + 48) . chr($on_ms / 2) . chr($off_ms / 2)); - } - - /** - * Print the given data as a QR code on the printer. - * - * @param string $content The content of the code. Numeric data will be more efficiently compacted. - * @param int $ec Error-correction level to use. One of Escpos::QR_ECLEVEL_L (default), Escpos::QR_ECLEVEL_M, Escpos::QR_ECLEVEL_Q or Escpos::QR_ECLEVEL_H. Higher error correction results in a less compact code. - * @param int $size Pixel size to use. Must be 1-16 (default 3) - * @param int $model QR code model to use. Must be one of Escpos::QR_MODEL_1, Escpos::QR_MODEL_2 (default) or Escpos::QR_MICRO (not supported by all printers). - */ - function qrCode($content, $ec = self::QR_ECLEVEL_L, $size = 3, $model = self::QR_MODEL_2) { - self::validateString($content, __FUNCTION__); - self::validateInteger($ec, 0, 3, __FUNCTION__); - self::validateInteger($size, 1, 16, __FUNCTION__); - self::validateInteger($model, 1, 3, __FUNCTION__); - if($content == "") { - return; - } - if(!$this -> profile -> getSupportsQrCode()) { - // TODO use software rendering via phpqrcode instead - throw new Exception("QR codes are not supported on your printer."); - } - $cn = '1'; // Code type for QR code - // Select model: 1, 2 or micro. - $this -> wrapperSend2dCodeData(chr(65), $cn, chr(48 + $model) . chr(0)); - // Set dot size. - $this -> wrapperSend2dCodeData(chr(67), $cn, chr($size)); - // Set error correction level: L, M, Q, or H - $this -> wrapperSend2dCodeData(chr(69), $cn, chr(48 + $ec)); - // Send content & print - $this -> wrapperSend2dCodeData(chr(80), $cn, $content, '0'); - $this -> wrapperSend2dCodeData(chr(81), $cn, '', '0'); - } - - /** - * Switch character table (code page) manually. Used in conjunction with textRaw() to - * print special characters which can't be encoded automatically. - * - * @param int $table The table to select. Available code tables are model-specific. - */ - function selectCharacterTable($table = 0) { - self::validateInteger($table, 0, 255, __FUNCTION__); - $supported = $this -> profile -> getSupportedCodePages(); - if(!isset($supported[$table])) { - throw new InvalidArgumentException("There is no code table $table allowed by this printer's capability profile."); - } - $this -> characterTable = $table; - if($this -> profile -> getSupportsStarCommands()) { - /* Not an ESC/POS command: STAR printers stash all the extra code pages under a different command. */ - $this -> connector -> write(self::ESC . self::GS . "t" . chr($table)); - return; - } - $this -> connector -> write(self::ESC . "t" . chr($table)); - } - - /** - * Select print mode(s). - * - * Several MODE_* constants can be OR'd together passed to this function's `$mode` argument. The valid modes are: - * - MODE_FONT_A - * - MODE_FONT_B - * - MODE_EMPHASIZED - * - MODE_DOUBLE_HEIGHT - * - MODE_DOUBLE_WIDTH - * - MODE_UNDERLINE - * - * @param int $mode The mode to use. Default is Escpos::MODE_FONT_A, with no special formatting. This has a similar effect to running initialize(). - */ - function selectPrintMode($mode = self::MODE_FONT_A) { - $allModes = self::MODE_FONT_B | self::MODE_EMPHASIZED | self::MODE_DOUBLE_HEIGHT | self::MODE_DOUBLE_WIDTH | self::MODE_UNDERLINE; - if(!is_integer($mode) || $mode < 0 || ($mode & $allModes) != $mode) { - throw new InvalidArgumentException("Invalid mode"); - } - - $this -> connector -> write(self::ESC . "!" . chr($mode)); - } - - /** - * Set barcode height. - * - * @param int $height Height in dots. If not specified, 8 will be used. - */ - function setBarcodeHeight($height = 8) { - self::validateInteger($height, 1, 255, __FUNCTION__); - $this -> connector -> write(self::GS . "h" . chr($height)); - } - - - /** - * Set the position for the Human Readable Interpretation (HRI) of barcode characters. - * - * @param position $position. Use Escpos::BARCODE_TEXT_NONE to hide the text (default), or any combination of Escpos::BARCODE_TEXT_TOP and Escpos::BARCODE_TEXT_BOTTOM flags to display the text. - */ - function setBarcodeTextPosition($position = self::BARCODE_TEXT_NONE) { - self::validateInteger($position, 0, 3, __FUNCTION__, "Barcode text position"); - $this -> connector -> write(self::GS . "H" . chr($position)); - } - - /** - * Turn double-strike mode on/off. - * - * @param boolean $on true for double strike, false for no double strike - */ - function setDoubleStrike($on = true) { - self::validateBoolean($on, __FUNCTION__); - $this -> connector -> write(self::ESC . "G". ($on ? chr(1) : chr(0))); - } - - /** - * Turn emphasized mode on/off. - * - * @param boolean $on true for emphasis, false for no emphasis - */ - function setEmphasis($on = true) { - self::validateBoolean($on, __FUNCTION__); - $this -> connector -> write(self::ESC . "E". ($on ? chr(1) : chr(0))); - } - - /** - * Select font. Most printers have two fonts (Fonts A and B), and some have a third (Font C). - * - * @param int $font The font to use. Must be either Escpos::FONT_A, Escpos::FONT_B, or Escpos::FONT_C. - */ - function setFont($font = self::FONT_A) { - self::validateInteger($font, 0, 2, __FUNCTION__); - $this -> connector -> write(self::ESC . "M" . chr($font)); - } - - /** - * Select justification. - * - * @param int $justification One of Escpos::JUSTIFY_LEFT, Escpos::JUSTIFY_CENTER, or Escpos::JUSTIFY_RIGHT. - */ - function setJustification($justification = self::JUSTIFY_LEFT) { - self::validateInteger($justification, 0, 2, __FUNCTION__); - $this -> connector -> write(self::ESC . "a" . chr($justification)); - } - - /** - * Attach a different print buffer to the printer. Buffers are responsible for handling text output to the printer. - * - * @param PrintBuffer $buffer The buffer to use. - * @throws InvalidArgumentException Where the buffer is already attached to a different printer. - */ - function setPrintBuffer(PrintBuffer $buffer) { - if($buffer === $this -> buffer) { - return; - } - if($buffer -> getPrinter() != null) { - throw new InvalidArgumentException("This buffer is already attached to a printer."); - } - if($this -> buffer !== null) { - $this -> buffer -> setPrinter(null); - } - $this -> buffer = $buffer; - $this -> buffer -> setPrinter($this); - } - - /** - * Set black/white reverse mode on or off. In this mode, text is printed white on a black background. - * - * @param boolean $on True to enable, false to disable. - */ - function setReverseColors($on = true) { - self::validateBoolean($on, __FUNCTION__); - $this -> connector -> write(self::GS . "B" . ($on ? chr(1) : chr(0))); - } - - /** - * Set the size of text, as a multiple of the normal size. - * - * @param int $widthMultiplier Multiple of the regular height to use (range 1 - 8) - * @param int $heightMultiplier Multiple of the regular height to use (range 1 - 8) - */ - function setTextSize($widthMultiplier, $heightMultiplier) { - self::validateInteger($widthMultiplier, 1, 8, __FUNCTION__); - self::validateInteger($heightMultiplier, 1, 8, __FUNCTION__); - $c = pow(2,4) * ($widthMultiplier - 1) + ($heightMultiplier - 1); - $this -> connector -> write(self::GS . "!" . chr($c)); - } - - /** - * Set underline for printed text. - * - * Argument can be true/false, or one of UNDERLINE_NONE, - * UNDERLINE_SINGLE or UNDERLINE_DOUBLE. - * - * @param int $underline Either true/false, or one of Escpos::UNDERLINE_NONE, Escpos::UNDERLINE_SINGLE or Escpos::UNDERLINE_DOUBLE. Defaults to Escpos::UNDERLINE_SINGLE. - */ - function setUnderline($underline = self::UNDERLINE_SINGLE) { - /* Map true/false to underline constants */ - if($underline === true) { - $underline = self::UNDERLINE_SINGLE; - } else if($underline === false) { - $underline = self::UNDERLINE_NONE; - } - /* Set the underline */ - self::validateInteger($underline, 0, 2, __FUNCTION__); - $this -> connector -> write(self::ESC . "-". chr($underline)); - } - - /** - * Add text to the buffer. - * - * Text should either be followed by a line-break, or feed() should be called - * after this to clear the print buffer. - * - * @param string $str Text to print - */ - function text($str = "") { - self::validateString($str, __FUNCTION__); - $this -> buffer -> writeText((string)$str); - } - - /** - * Add text to the buffer without attempting to interpret chararacter codes. - * - * Text should either be followed by a line-break, or feed() should be called - * after this to clear the print buffer. - * - * @param string $str Text to print - */ - function textRaw($str = "") { - self::validateString($str, __FUNCTION__); - $this -> buffer -> writeTextRaw((string)$str); - } - - /** - * Wrapper for GS ( k, to calculate and send correct data length. - * - * @param string $fn Function to use - * @param string $cn Output code type. Affects available data - * @param string $data Data to send. - * @param string $m Modifier/variant for function. Often '0' where used. - * @throws InvalidArgumentException Where the input lengths are bad. - */ - private function wrapperSend2dCodeData($fn, $cn, $data = '', $m = '') { - if(strlen($m) > 1 || strlen($cn) != 1 || strlen($fn) != 1) { - throw new InvalidArgumentException("wrapperSend2dCodeData: cn and fn must be one character each."); - } - $header = $this -> intLowHigh(strlen($data) + strlen($m) + 2, 2); - $this -> connector -> write(self::GS . "(k" . $header . $cn . $fn . $m . $data); - } - - /** - * Wrapper for GS ( L, to calculate and send correct data length. - * - * @param string $m Modifier/variant for function. Usually '0'. - * @param string $fn Function number to use, as character. - * @param string $data Data to send. - * @throws InvalidArgumentException Where the input lengths are bad. - */ - private function wrapperSendGraphicsData($m, $fn, $data = '') { - if(strlen($m) != 1 || strlen($fn) != 1) { - throw new InvalidArgumentException("wrapperSendGraphicsData: m and fn must be one character each."); - } - $header = $this -> intLowHigh(strlen($data) + 2, 2); - $this -> connector -> write(self::GS . "(L" . $header . $m . $fn . $data); - } - - /** - * Convert widths and heights to characters. Used before sending graphics to set the size. - * - * @param array $inputs - * @param boolean $long True to use 4 bytes, false to use 2 - * @return string - */ - private static function dataHeader(array $inputs, $long = true) { - $outp = array(); - foreach($inputs as $input) { - if($long) { - $outp[] = Escpos::intLowHigh($input, 2); - } else { - self::validateInteger($input, 0 , 255, __FUNCTION__); - $outp[] = chr($input); - } - } - return implode("", $outp); - } - - /** - * Generate two characters for a number: In lower and higher parts, or more parts as needed. - * @param int $int Input number - * @param int $length The number of bytes to output (1 - 4). - */ - private static function intLowHigh($input, $length) { - $maxInput = (256 << ($length * 8) - 1); - self::validateInteger($length, 1, 4, __FUNCTION__); - self::validateInteger($input, 0, $maxInput, __FUNCTION__); - $outp = ""; - for($i = 0; $i < $length; $i++) { - $outp .= chr($input % 256); - $input = (int)($input / 256); - } - return $outp; - } - - /** - * Throw an exception if the argument given is not a boolean - * - * @param boolean $test the input to test - * @param string $source the name of the function calling this - */ - protected static function validateBoolean($test, $source) { - if(!($test === true || $test === false)) { - throw new InvalidArgumentException("Argument to $source must be a boolean"); - } - } - - /** - * Throw an exception if the argument given is not an integer within the specified range - * - * @param int $test the input to test - * @param int $min the minimum allowable value (inclusive) - * @param int $max the maximum allowable value (inclusive) - * @param string $source the name of the function calling this - * @param string $argument the name of the invalid parameter - */ - protected static function validateInteger($test, $min, $max, $source, $argument = "Argument") { - self::validateIntegerMulti($test, array(array($min, $max)), $source, $argument); - } - - /** - * Throw an exception if the argument given is not an integer within one of the specified ranges - * - * @param int $test the input to test - * @param arrray $ranges array of two-item min/max ranges. - * @param string $source the name of the function calling this - * @param string $source the name of the function calling this - * @param string $argument the name of the invalid parameter - */ - protected static function validateIntegerMulti($test, array $ranges, $source, $argument = "Argument") { - if(!is_integer($test)) { - throw new InvalidArgumentException("$argument given to $source must be a number, but '$test' was given."); - } - $match = false; - foreach($ranges as $range) { - $match |= $test >= $range[0] && $test <= $range[1]; - } - if(!$match) { - // Put together a good error "range 1-2 or 4-6" - $rangeStr = "range "; - for($i = 0; $i < count($ranges); $i++) { - $rangeStr .= $ranges[$i][0] . "-" . $ranges[$i][1]; - if($i == count($ranges) - 1) { - continue; - } else if($i == count($ranges) - 2) { - $rangeStr .= " or "; - } else { - $rangeStr .= ", "; - } - } - throw new InvalidArgumentException("$argument given to $source must be in $rangeStr, but $test was given."); - } - } - - /** - * Throw an exception if the argument given can't be cast to a string - * - * @param string $test the input to test - * @param string $source the name of the function calling this - * @param string $argument the name of the invalid parameter - */ - protected static function validateString($test, $source, $argument = "Argument") { - if (is_object($test) && !method_exists($test, '__toString')) { - throw new InvalidArgumentException("$argument to $source must be a string"); - } - } - - protected static function validateStringRegex($test, $source, $regex, $argument = "Argument") { - if(preg_match($regex, $test) === 0) { - throw new InvalidArgumentException("$argument given to $source is invalid. It should match regex '$regex', but '$test' was given."); - } - } -} diff --git a/htdocs/includes/mike42/escpos-php/LICENSE.md b/htdocs/includes/mike42/escpos-php/LICENSE.md index a0bebf6920b..0e04f34f84f 100644 --- a/htdocs/includes/mike42/escpos-php/LICENSE.md +++ b/htdocs/includes/mike42/escpos-php/LICENSE.md @@ -1,11 +1,7 @@ -escpos-php, a Thermal receipt printer library, for use with -ESC/POS compatible printers. +MIT License -Copyright (c) 2014-15 Michael Billington , -incorporating modifications by: -- Roni Saha -- Gergely Radics -- Warren Doyle +Copyright (c) 2014-2016 Michael Billington, incorporating modifications by others. +See CONTRIBUTORS.md for a full list. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -13,10 +9,10 @@ in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -24,4 +20,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/htdocs/includes/mike42/escpos-php/README.md b/htdocs/includes/mike42/escpos-php/README.md index 43798bb0852..c5bb5c91337 100644 --- a/htdocs/includes/mike42/escpos-php/README.md +++ b/htdocs/includes/mike42/escpos-php/README.md @@ -1,73 +1,14 @@ -ESC/POS Print Driver for PHP -============================ +# ESC/POS Print Driver for PHP +[![Build Status](https://travis-ci.org/mike42/escpos-php.svg?branch=master)](https://travis-ci.org/mike42/escpos-php) [![Latest Stable Version](https://poser.pugx.org/mike42/escpos-php/v/stable)](https://packagist.org/packages/mike42/escpos-php) +[![Total Downloads](https://poser.pugx.org/mike42/escpos-php/downloads)](https://packagist.org/packages/mike42/escpos-php) +[![License](https://poser.pugx.org/mike42/escpos-php/license)](https://packagist.org/packages/mike42/escpos-php) +[![Coverage Status](https://coveralls.io/repos/github/mike42/escpos-php/badge.svg?branch=development)](https://coveralls.io/github/mike42/escpos-php?branch=development) + This project implements a subset of Epson's ESC/POS protocol for thermal receipt printers. It allows you to generate and print receipts with basic formatting, cutting, and barcodes on a compatible printer. The library was developed to add drop-in support for receipt printing to any PHP app, including web-based point-of-sale (POS) applications. -Basic usage ------------ -A "hello world" receipt can be generated easily (Call this `hello-world.php`): -```php - text("Hello World!\n"); -$printer -> cut(); -$printer -> close(); -``` -This would be printed as: -``` -# Networked printer -php hello-world.php | nc 10.x.x.x. 9100 -# Local printer -php hello-world.php > /dev/... -# Windows local printer -php hello-world.php > foo.txt -net use LPT1 \\server\printer -copy foo.txt LPT1 -del foo.txt -``` - -From your web app, you could pass the output directly to a socket if your printer is networked: -```php - text("Hello World!\n"); -$printer -> cut(); -$printer -> close(); -``` - -Or to a local printer: -```php - text("Hello World!\n"); -$printer -> cut(); -$printer -> close(); -``` - -### Basic workflow -The library should be initialised with a PrintConnector, which will pass on the data to your printer. -Use the table under "Compatibility", or the examples below to choose the appropriate connector for your -platform & interface. If no connector is specified, then standard output is used. - -When you have finished using the print object, call `close()` to finalize any data transfers. - -### Tips & examples -On Linux, your printer device file will be somewhere like `/dev/lp0` (parallel), `/dev/usb/lp1` (USB), `/dev/ttyUSB0` (USB-Serial), `/dev/ttyS0` (serial). - -On Windows, the device files will be along the lines of `LPT1` (parallel) or `COM1` (serial). Use the `WindowsPrintConnector` to tap into system printing on Windows (eg. [Windows USB](https://github.com/mike42/escpos-php/tree/master/example/interface/windows-usb.php), [SMB](https://github.com/mike42/escpos-php/tree/master/example/interface/smb.php) or [Windows LPT](https://github.com/mike42/escpos-php/tree/master/example/interface/windows-lpt.php)) - this submits print jobs via a queue rather than communicating directly with the printer. - -A complete real-world receipt can be found in the code of [Auth](https://github.com/mike42/Auth) in [ReceiptPrinter.php](https://github.com/mike42/Auth/blob/master/lib/misc/ReceiptPrinter.php). It includes justification, boldness, and a barcode. - -Other examples are located in the [example/](https://github.com/mike42/escpos-php/blob/master/example/) directory. - -Compatibility -------------- +## Compatibility ### Interfaces and operating systems This driver is known to work with the following OS/interface combinations: @@ -115,43 +56,276 @@ This driver is known to work with the following OS/interface combinations: + + + + + +
    ' . "\n"; } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'select')) { - print $formadvtargetemaling->advMultiselectarray('options_' . $key . '_cnct', $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key . '_cnct']); + print $formadvtargetemaling->advMultiselectarray('options_' . $key . '_cnct', $extrafields->attributes[$key]['param']['options'], $array_query['options_' . $key . '_cnct']); print '' . "\n"; } elseif (($extrafields->attributes[$elementtype]['type'][$key] == 'sellist')) { - print $formadvtargetemaling->advMultiselectarraySelllist('options_' . $key . '_cnct', $extrafields->attribute_param[$key]['options'], $array_query['options_' . $key . '_cnct']); + print $formadvtargetemaling->advMultiselectarraySelllist('options_' . $key . '_cnct', $extrafields->attributes[$key]['param']['options'], $array_query['options_' . $key . '_cnct']); print '' . "\n"; } else { print ''; diff --git a/htdocs/product/stock/productlot_list.php b/htdocs/product/stock/productlot_list.php index fd2a7c70c13..3be66f6acfe 100644 --- a/htdocs/product/stock/productlot_list.php +++ b/htdocs/product/stock/productlot_list.php @@ -216,7 +216,9 @@ $sql.= " p.ref as product_ref,"; $sql.= " p.label as product_label,"; $sql.= " p.tobatch"; // Add fields for extrafields -foreach ($extrafields->attribute_list as $key => $val) $sql.=",ef.".$key.' as options_'.$key; +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.', ' : ''); +} // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook diff --git a/htdocs/reception/list.php b/htdocs/reception/list.php index a7d7c51b7b1..a2d2f494fc3 100644 --- a/htdocs/reception/list.php +++ b/htdocs/reception/list.php @@ -473,7 +473,7 @@ foreach ($search_array_options as $key => $val) { $crit=$val; $tmpkey=preg_replace('/search_options_/', '', $key); - $typ=$extrafields->attribute_type[$tmpkey]; + $typ=$extrafields->attributes[$object->table_element]['type'][$tmpkey]; $mode=0; if (in_array($typ, array('int','double','real'))) $mode=1; // Search on a numeric if (in_array($typ, array('sellist')) && $crit != '0' && $crit != '-1') $mode=2; // Search on a foreign key int diff --git a/htdocs/resource/list.php b/htdocs/resource/list.php index 0f003f05eb6..ae1b4ffb7f7 100644 --- a/htdocs/resource/list.php +++ b/htdocs/resource/list.php @@ -71,7 +71,7 @@ foreach ($search_array_options as $key => $val) { $crit=$val; $tmpkey=preg_replace('/search_options_/', '', $key); - $typ=$extrafields->attribute_type[$tmpkey]; + $typ=$extrafields->attributes[$object->table_element]['type'][$tmpkey]; if ($val != '') { $param.='&search_options_'.$tmpkey.'='.urlencode($val); } diff --git a/htdocs/societe/website.php b/htdocs/societe/website.php index 6878ea8ed44..5e199722961 100644 --- a/htdocs/societe/website.php +++ b/htdocs/societe/website.php @@ -428,14 +428,6 @@ print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], "", '', '', print ''."\n"; -// Detect if we need a fetch on each output line -$needToFetchEachLine=0; -foreach ($extrafields->attribute_computed as $key => $val) -{ - if (preg_match('/\$object/', $val)) $needToFetchEachLine++; // There is at least one compute field that use $object -} - - // Detect if we need a fetch on each output line $needToFetchEachLine=0; if (is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0) From 2ee002fc80fb55aae12bda6db280dbd112e4d170 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 17:44:58 +0100 Subject: [PATCH 840/980] Fix trans --- htdocs/core/class/dolreceiptprinter.class.php | 3 +-- htdocs/langs/en_US/receiptprinter.lang | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/dolreceiptprinter.class.php b/htdocs/core/class/dolreceiptprinter.class.php index 61f02e0fa83..ef529f39d9a 100644 --- a/htdocs/core/class/dolreceiptprinter.class.php +++ b/htdocs/core/class/dolreceiptprinter.class.php @@ -1,6 +1,5 @@ +/* Copyright (C) 2015-2018 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 diff --git a/htdocs/langs/en_US/receiptprinter.lang b/htdocs/langs/en_US/receiptprinter.lang index 756461488cc..aa61848fc9d 100644 --- a/htdocs/langs/en_US/receiptprinter.lang +++ b/htdocs/langs/en_US/receiptprinter.lang @@ -26,7 +26,7 @@ PROFILE_P822D=P822D Profile PROFILE_STAR=Star Profile PROFILE_DEFAULT_HELP=Default Profile suitable for Epson printers PROFILE_SIMPLE_HELP=Simple Profile No Graphics -PROFILE_EPOSTEP_HELP=Epos Tep Profile Help +PROFILE_EPOSTEP_HELP=Epos Tep Profile PROFILE_P822D_HELP=P822D Profile No Graphics PROFILE_STAR_HELP=Star Profile DOL_ALIGN_LEFT=Left align text From 4a564cc05de3b40e1ff0acfee4a5111111dd5004 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 2 Nov 2019 18:10:01 +0100 Subject: [PATCH 841/980] Update product.class.php --- htdocs/product/class/product.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index de14a5621a2..4d8afaad9aa 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -2093,7 +2093,6 @@ class Product extends CommonObject $resql = $this->db->query($sql); if ($resql) { - unset($this->oldcopy); if ($this->db->num_rows($resql) > 0) { From 534f8712a3d95a1f7d446bc612ce9e5661605b77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 2 Nov 2019 18:11:18 +0100 Subject: [PATCH 842/980] Update fournisseurs.php --- htdocs/product/fournisseurs.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index f0bedbcd7f5..e1940864dd0 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -269,7 +269,6 @@ if (empty($reshook)) $resql = $db->query("SELECT * FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields WHERE fk_object = " . $object->product_fourn_price_id); // Insert a new extrafields row, if none exists if ($db->num_rows($resql) != 1) { - $sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields (fk_object, "; foreach ($extrafield_values as $key => $value) { $sql .= str_replace('options_', '', $key) . ', '; @@ -291,7 +290,7 @@ if (empty($reshook)) // Execute the sql command from above $db->query($sql); - + $newprice = price2num(GETPOST("price", "alpha")); if ($conf->multicurrency->enabled) From 3e2d89dc027d27ceee7b47603ee6677181d7a15d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 2 Nov 2019 18:16:09 +0100 Subject: [PATCH 843/980] Update ticket.lib.php --- htdocs/core/lib/ticket.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index e89e9a79194..a85d8bad2d7 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -834,7 +834,7 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no $filePath = DOL_DATA_ROOT . '/'. $doc->filepath . '/'. $doc->filename; $mime = dol_mimetype($filePath); $file = $actionstatic->id.'/'.$doc->filename; - $thumb = $actionstatic->id.'/thumbs/'.substr($doc->filename, 0, strrpos($doc->filename,'.')).'_mini'.substr($doc->filename, strrpos($doc->filename,'.')); + $thumb = $actionstatic->id.'/thumbs/'.substr($doc->filename, 0, strrpos($doc->filename, '.')).'_mini'.substr($doc->filename, strrpos($doc->filename, '.')); $doclink = dol_buildpath('document.php', 1).'?modulepart=actions&attachment=0&file='.urlencode($file).'&entity='.$conf->entity; $viewlink = dol_buildpath('viewimage.php', 1).'?modulepart=actions&file='.urlencode($thumb).'&entity='.$conf->entity; @@ -881,7 +881,7 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no /** - * @var $object ActionComm + * @var ActionComm $object ActionComm * @return array */ function getTicketActionCommEcmList($object) From ab7c300f4396f366de3aff5fc7d0977ab53663ec Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 2 Nov 2019 20:50:25 +0100 Subject: [PATCH 844/980] NEW Can change supplier when cloning a Purchase Order --- htdocs/commande/card.php | 8 ++---- .../class/fournisseur.commande.class.php | 26 +++++++++++++++++-- htdocs/fourn/commande/card.php | 7 +++-- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 7fd0d7326c4..1b7636c70f9 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -2057,12 +2057,8 @@ if ($action == 'create' && $usercancreate) if ($action == 'clone') { // Create an array for form $formquestion = array( - // 'text' => $langs->trans("ConfirmClone"), - // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => - // 1), - // array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' - // => 1), - array('type' => 'other','name' => 'socid','label' => $langs->trans("SelectThirdParty"),'value' => $form->select_company(GETPOST('socid', 'int'), 'socid', '(s.client=1 OR s.client=3)'))); + array('type' => 'other','name' => 'socid','label' => $langs->trans("SelectThirdParty"),'value' => $form->select_company(GETPOST('socid', 'int'), 'socid', '(s.client=1 OR s.client=3)')) + ); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneOrder', $object->ref), 'confirm_clone', $formquestion, 'yes', 1); } diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 96d56d98fdf..ab5f2204c83 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1393,19 +1393,41 @@ class CommandeFournisseur extends CommonOrder * Load an object from its id and create a new one in database * * @param User $user User making the clone + * @param int $socid Id of thirdparty * @return int New id of clone */ - public function createFromClone(User $user) + public function createFromClone(User $user, $socid = 0) { - global $hookmanager; + global $conf, $user,$hookmanager; $error=0; $this->db->begin(); + // get lines so they will be clone + foreach($this->lines as $line) + $line->fetch_optionals(); + // Load source object $objFrom = clone $this; + // Change socid if needed + if (! empty($socid) && $socid != $this->socid) + { + $objsoc = new Societe($this->db); + + if ($objsoc->fetch($socid)>0) + { + $this->socid = $objsoc->id; + $this->cond_reglement_id = (! empty($objsoc->cond_reglement_id) ? $objsoc->cond_reglement_id : 0); + $this->mode_reglement_id = (! empty($objsoc->mode_reglement_id) ? $objsoc->mode_reglement_id : 0); + $this->fk_project = 0; + $this->fk_delivery_address = 0; + } + + // TODO Change product price if multi-prices + } + $this->id=0; $this->statut=self::STATUS_DRAFT; diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 2475b251f56..af9dbac8c0b 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -963,7 +963,9 @@ if (empty($reshook)) { if ($object->id > 0) { - $result=$object->createFromClone($user); + $orig = clone $object; + + $result=$object->createFromClone($user, $socid); if ($result > 0) { header("Location: ".$_SERVER['PHP_SELF'].'?id='.$result); @@ -972,6 +974,7 @@ if (empty($reshook)) else { setEventMessages($object->error, $object->errors, 'errors'); + $object = $orig; $action=''; } } @@ -1789,7 +1792,7 @@ elseif (! empty($object->id)) { // Create an array for form $formquestion=array( - //array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1) + array('type' => 'other','name' => 'socid','label' => $langs->trans("SelectThirdParty"),'value' => $form->select_company(GETPOST('socid', 'int'), 'socid', '(s.fournisseur=1)')) ); // Paiement incomplet. On demande si motif = escompte ou autre $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneOrder', $object->ref), 'confirm_clone', $formquestion, 'yes', 1); From 59b30b9cecd49d19e014a5a386b1ba3610227f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 2 Nov 2019 21:15:48 +0100 Subject: [PATCH 845/980] wip ticket printer --- htdocs/admin/receiptprinter.php | 54 +- htdocs/core/class/dolreceiptprinter.class.php | 46 +- .../includes/mike42/escpos-php/.coveralls.yml | 4 + htdocs/includes/mike42/escpos-php/.gitignore | 4 + htdocs/includes/mike42/escpos-php/.travis.yml | 46 + .../mike42/escpos-php/CONTRIBUTING.md | 65 + .../mike42/escpos-php/CONTRIBUTORS.md | 25 + htdocs/includes/mike42/escpos-php/Escpos.php | 853 -------- htdocs/includes/mike42/escpos-php/LICENSE.md | 15 +- htdocs/includes/mike42/escpos-php/README.md | 451 ++++- .../includes/mike42/escpos-php/autoload.php | 26 + .../includes/mike42/escpos-php/composer.json | 70 +- .../includes/mike42/escpos-php/composer.lock | 615 ++++-- htdocs/includes/mike42/escpos-php/doc/FAQ.md | 142 ++ .../includes/mike42/escpos-php/doc/Makefile | 19 +- .../doc/{escpos.conf => escpos.doxyfile} | 18 +- .../mike42/escpos-php/example/README.md | 2 +- .../mike42/escpos-php/example/barcode.php | 366 ++-- .../mike42/escpos-php/example/bit-image.php | 50 +- .../character-encodings-with-images.php | 88 +- .../example/character-encodings.php | 74 +- .../escpos-php/example/character-tables.php | 94 +- .../escpos-php/example/customer-display.php | 51 + .../mike42/escpos-php/example/demo.php | 154 +- .../mike42/escpos-php/example/graphics.php | 52 +- .../escpos-php/example/interface/cups.php | 19 + .../escpos-php/example/interface/ethernet.php | 28 +- .../example/interface/linux-usb.php | 32 +- .../escpos-php/example/interface/smb.php | 69 +- .../example/interface/windows-lpt.php | 37 +- .../example/interface/windows-usb.php | 40 +- .../example/margins-and-spacing.php | 48 + .../mike42/escpos-php/example/pdf417-code.php | 95 + .../escpos-php/example/print-from-html.php | 105 +- .../escpos-php/example/print-from-pdf.php | 55 +- .../mike42/escpos-php/example/qr-code.php | 87 +- .../escpos-php/example/rawbt-receipt.html | 76 + .../escpos-php/example/rawbt-receipt.php | 145 ++ .../escpos-php/example/receipt-with-logo.php | 82 +- .../character-encoding-test-strings.inc | 44 +- .../example/resources/document.html | 40 + .../escpos-php/example/resources/document.z | Bin 20320 -> 18900 bytes .../example/resources/rawbtlogo.png | Bin 0 -> 1358 bytes .../escpos-php/example/resources/tulips.png | Bin 0 -> 379443 bytes .../example/specific/123-code128-barcode.php | 21 + .../example/specific/141-custom-command.php | 55 + .../example/specific/148-data-uri.php | 35 + .../example/specific/235-get-data.php | 28 + .../specific/29-latvian-star-tup592.php | 14 +- .../32-german-tm-t20-ii-custom-command.php | 15 +- .../specific/33-spanish-seypos-prp-300.php | 11 +- .../example/specific/37-chinese.php | 24 + .../example/specific/39-currency-symbols.php | 56 +- .../specific/44-pound-symbol-star-tsp650.php | 10 +- .../example/specific/50-P-822D-greek.php | 9 +- .../example/specific/54-gfx-sidebyside.php | 72 +- .../specific/6-arabic-epos-tep-220m.php | 55 +- .../example/specific/62-greek-symbol-swap.php | 15 + .../example/specific/68-redblack.php | 21 + .../example/specific/97-dithering.php | 28 + .../mike42/escpos-php/example/text-size.php | 39 +- htdocs/includes/mike42/escpos-php/phpunit.xml | 21 + .../src/AbstractCapabilityProfile.php | 61 - .../mike42/escpos-php/src/CodePage.php | 181 -- .../src/DefaultCapabilityProfile.php | 103 - .../escpos-php/src/DummyPrintConnector.php | 78 - .../src/EposTepCapabilityProfile.php | 4 - .../mike42/escpos-php/src/EscposImage.php | 405 ---- .../escpos-php/src/EscposPrintBuffer.php | 304 --- .../escpos-php/src/FilePrintConnector.php | 80 - .../escpos-php/src/ImagePrintBuffer.php | 99 - .../src/Mike42/Escpos/CapabilityProfile.php | 348 ++++ .../DefaultCapabilityProfile.php | 22 + .../EposTepCapabilityProfile.php | 22 + .../P822DCapabilityProfile.php | 22 + .../SimpleCapabilityProfile.php | 22 + .../StarCapabilityProfile.php | 22 + .../escpos-php/src/Mike42/Escpos/CodePage.php | 181 ++ .../Escpos/Devices/AuresCustomerDisplay.php | 150 ++ .../src/Mike42/Escpos/EscposImage.php | 460 +++++ .../src/Mike42/Escpos/GdEscposImage.php | 86 + .../src/Mike42/Escpos/ImagickEscposImage.php | 273 +++ .../src/Mike42/Escpos/NativeEscposImage.php | 24 + .../Escpos/PrintBuffers/EscposPrintBuffer.php | 300 +++ .../Escpos/PrintBuffers/ImagePrintBuffer.php | 135 ++ .../Escpos/PrintBuffers/PrintBuffer.php | 63 + .../cache/Characters-OCD-300.ser.z | Bin 0 -> 6934 bytes .../PrintBuffers/cache/Characters-P822D.ser.z | Bin 0 -> 12251 bytes .../cache/Characters-POS-5890.ser.z | Bin 0 -> 12537 bytes .../cache/Characters-SP2000.ser.z | Bin 0 -> 9267 bytes .../cache/Characters-TEP-200M.ser.z | Bin 0 -> 13740 bytes .../cache/Characters-default.ser.z | Bin 0 -> 13740 bytes .../cache/Characters-simple.ser.z | Bin 0 -> 1099 bytes .../PrintConnectors/ApiPrintConnector.php | 102 + .../PrintConnectors/CupsPrintConnector.php | 182 ++ .../PrintConnectors/DummyPrintConnector.php | 78 + .../PrintConnectors/FilePrintConnector.php | 82 + .../PrintConnectors/NetworkPrintConnector.php | 41 + .../Escpos/PrintConnectors/PrintConnector.php | 47 + .../PrintConnectors/RawbtPrintConnector.php | 81 + .../PrintConnectors/UriPrintConnector.php | 44 + .../PrintConnectors/WindowsPrintConnector.php | 391 ++++ .../escpos-php/src/Mike42/Escpos/Printer.php | 1217 ++++++++++++ .../Mike42/Escpos/resources/capabilities.json | 1760 +++++++++++++++++ .../escpos-php/src/NetworkPrintConnector.php | 39 - .../escpos-php/src/P822DCapabilityProfile.php | 90 - .../mike42/escpos-php/src/PrintBuffer.php | 75 - .../mike42/escpos-php/src/PrintConnector.php | 56 - .../src/SimpleCapabilityProfile.php | 17 - .../escpos-php/src/StarCapabilityProfile.php | 82 - .../escpos-php/src/WindowsPrintConnector.php | 356 ---- ...Characters-DefaultCapabilityProfile.ser.gz | Bin 12928 -> 0 bytes .../Characters-SimpleCapabilityProfile.ser.gz | Bin 1116 -> 0 bytes .../Characters-StarCapabilityProfile.ser.gz | Bin 9416 -> 0 bytes .../mike42/escpos-php/test/bootstrap.php | 47 +- .../test/integration/ExampleTest.php | 303 +-- .../integration/resources/output/barcode.bin | Bin 2342 -> 2667 bytes .../resources/output/character-encodings.bin | Bin 1780 -> 1930 bytes .../resources/output/character-tables.bin | Bin 8174 -> 7969 bytes .../resources/output/interface.bin | 2 - .../resources/output/margins-and-spacing.bin | Bin 0 -> 339 bytes .../resources/output/pdf417-code.bin | Bin 0 -> 2366 bytes .../resources/output/print-from-pdf.bin.z | Bin 17081 -> 0 bytes .../mike42/escpos-php/test/phpunit.xml | 16 - .../unit/AbstractCapabilityProfileTest.php | 69 - .../test/unit/AuresCustomerDisplayTest.php | 76 + .../test/unit/CapabilityProfileTest.php | 59 + .../escpos-php/test/unit/CodePageTest.php | 63 + .../test/unit/CupsPrintConnectorTest.php | 36 + .../escpos-php/test/unit/EscposImageTest.php | 245 +-- .../test/unit/EscposPrintBufferTest.php | 288 +-- .../escpos-php/test/unit/EscposTest.php | 1760 ++++++++++------- .../test/unit/FilePrintConnectorTest.php | 26 + .../test/unit/GdEscposImageTest.php | 101 + .../test/unit/ImagickEscposImageTest.php | 142 ++ .../test/unit/LegacyCapabilityProfileTest.php | 79 + .../test/unit/UriPrintConnectorTest.php | 59 + .../test/unit/WindowsPrintConnectorTest.php | 542 ++--- .../test/unit/resources/black_white_tall.png | Bin 0 -> 162 bytes .../escpos-php/test/unit/resources/demo.php | 21 +- 140 files changed, 11495 insertions(+), 5539 deletions(-) create mode 100644 htdocs/includes/mike42/escpos-php/.coveralls.yml create mode 100644 htdocs/includes/mike42/escpos-php/.travis.yml create mode 100644 htdocs/includes/mike42/escpos-php/CONTRIBUTING.md create mode 100644 htdocs/includes/mike42/escpos-php/CONTRIBUTORS.md delete mode 100644 htdocs/includes/mike42/escpos-php/Escpos.php create mode 100644 htdocs/includes/mike42/escpos-php/autoload.php create mode 100644 htdocs/includes/mike42/escpos-php/doc/FAQ.md rename htdocs/includes/mike42/escpos-php/doc/{escpos.conf => escpos.doxyfile} (99%) create mode 100644 htdocs/includes/mike42/escpos-php/example/customer-display.php create mode 100644 htdocs/includes/mike42/escpos-php/example/interface/cups.php create mode 100644 htdocs/includes/mike42/escpos-php/example/margins-and-spacing.php create mode 100644 htdocs/includes/mike42/escpos-php/example/pdf417-code.php create mode 100644 htdocs/includes/mike42/escpos-php/example/rawbt-receipt.html create mode 100644 htdocs/includes/mike42/escpos-php/example/rawbt-receipt.php create mode 100644 htdocs/includes/mike42/escpos-php/example/resources/document.html create mode 100644 htdocs/includes/mike42/escpos-php/example/resources/rawbtlogo.png create mode 100644 htdocs/includes/mike42/escpos-php/example/resources/tulips.png create mode 100644 htdocs/includes/mike42/escpos-php/example/specific/123-code128-barcode.php create mode 100644 htdocs/includes/mike42/escpos-php/example/specific/141-custom-command.php create mode 100644 htdocs/includes/mike42/escpos-php/example/specific/148-data-uri.php create mode 100644 htdocs/includes/mike42/escpos-php/example/specific/235-get-data.php create mode 100644 htdocs/includes/mike42/escpos-php/example/specific/37-chinese.php create mode 100644 htdocs/includes/mike42/escpos-php/example/specific/62-greek-symbol-swap.php create mode 100644 htdocs/includes/mike42/escpos-php/example/specific/68-redblack.php create mode 100644 htdocs/includes/mike42/escpos-php/example/specific/97-dithering.php create mode 100644 htdocs/includes/mike42/escpos-php/phpunit.xml delete mode 100644 htdocs/includes/mike42/escpos-php/src/AbstractCapabilityProfile.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/CodePage.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/DefaultCapabilityProfile.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/DummyPrintConnector.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/EposTepCapabilityProfile.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/EscposImage.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/EscposPrintBuffer.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/FilePrintConnector.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/ImagePrintBuffer.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfile.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/DefaultCapabilityProfile.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/EposTepCapabilityProfile.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/P822DCapabilityProfile.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/SimpleCapabilityProfile.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/StarCapabilityProfile.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CodePage.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Devices/AuresCustomerDisplay.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/EscposImage.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/NativeEscposImage.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/PrintBuffer.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-OCD-300.ser.z create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-P822D.ser.z create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-POS-5890.ser.z create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-SP2000.ser.z create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-TEP-200M.ser.z create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-default.ser.z create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-simple.ser.z create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/ApiPrintConnector.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/NetworkPrintConnector.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/PrintConnector.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/RawbtPrintConnector.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/UriPrintConnector.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/WindowsPrintConnector.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php create mode 100644 htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/resources/capabilities.json delete mode 100644 htdocs/includes/mike42/escpos-php/src/NetworkPrintConnector.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/P822DCapabilityProfile.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/PrintBuffer.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/PrintConnector.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/SimpleCapabilityProfile.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/StarCapabilityProfile.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/WindowsPrintConnector.php delete mode 100644 htdocs/includes/mike42/escpos-php/src/cache/Characters-DefaultCapabilityProfile.ser.gz delete mode 100644 htdocs/includes/mike42/escpos-php/src/cache/Characters-SimpleCapabilityProfile.ser.gz delete mode 100644 htdocs/includes/mike42/escpos-php/src/cache/Characters-StarCapabilityProfile.ser.gz delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/interface.bin create mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/margins-and-spacing.bin create mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/pdf417-code.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/print-from-pdf.bin.z delete mode 100644 htdocs/includes/mike42/escpos-php/test/phpunit.xml delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/AbstractCapabilityProfileTest.php create mode 100644 htdocs/includes/mike42/escpos-php/test/unit/AuresCustomerDisplayTest.php create mode 100644 htdocs/includes/mike42/escpos-php/test/unit/CapabilityProfileTest.php create mode 100644 htdocs/includes/mike42/escpos-php/test/unit/CodePageTest.php create mode 100644 htdocs/includes/mike42/escpos-php/test/unit/CupsPrintConnectorTest.php create mode 100644 htdocs/includes/mike42/escpos-php/test/unit/FilePrintConnectorTest.php create mode 100644 htdocs/includes/mike42/escpos-php/test/unit/GdEscposImageTest.php create mode 100644 htdocs/includes/mike42/escpos-php/test/unit/ImagickEscposImageTest.php create mode 100644 htdocs/includes/mike42/escpos-php/test/unit/LegacyCapabilityProfileTest.php create mode 100644 htdocs/includes/mike42/escpos-php/test/unit/UriPrintConnectorTest.php create mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/black_white_tall.png diff --git a/htdocs/admin/receiptprinter.php b/htdocs/admin/receiptprinter.php index 6184bebd97f..42b0ecb9ea9 100644 --- a/htdocs/admin/receiptprinter.php +++ b/htdocs/admin/receiptprinter.php @@ -166,6 +166,24 @@ if ($action == 'testprinter' && $user->admin) { $action = ''; } +if ($action == 'testtemplate' && $user->admin) { + $error=0; + // if (empty($printerid)) { + // $error++; + // setEventMessages($langs->trans("PrinterIdEmpty"), null, 'errors'); + // } + + // if (! $error) { + // // test + // $ret = $printer->sendTestToPrinter($printerid); + // if ($ret == 0) { + setEventMessages($langs->trans("TestTemplateToPrinter", $printername), null); + // } else { + // setEventMessages($printer->error, $printer->errors, 'errors'); + // } + // } + $action = ''; +} if ($action == 'updatetemplate' && $user->admin) { $error=0; @@ -190,6 +208,29 @@ if ($action == 'updatetemplate' && $user->admin) { $action = ''; } +if ($action == 'addtemplate' && $user->admin) { + $error=0; + $db->begin(); + if (empty($templatename)) { + $error++; + setEventMessages($langs->trans("TemplateNameEmpty"), null, 'errors'); + } + + if (! $error) { + $result= $printer->addTemplate($templatename, $template); + if ($result > 0) $error++; + + if (! $error) { + $db->commit(); + setEventMessages($langs->trans("TemplateAdded", $templatename), null); + } else { + $db->rollback(); + dol_print_error($db); + } + } + $action = ''; +} + /* * View @@ -345,7 +386,7 @@ if ($mode == 'template' && $user->admin) { dol_fiche_head($head, $mode, $langs->trans("ModuleSetup"), 0, 'technic'); print $langs->trans("ReceiptPrinterTemplateDesc")."

    \n"; - print '
    '."\n"; + print '
    '."\n"; print ''; print ''; print ''; @@ -359,8 +400,7 @@ if ($mode == 'template' && $user->admin) { setEventMessages($printer->error, $printer->errors, 'errors'); } else { $max = count($printer->listprinterstemplates); - for ($line=0; $line < $max; $line++) - { + for ($line=0; $line < $max; $line++) { print ''; if ($action=='edittemplate' && $printer->listprinterstemplates[$line]['rowid']==$templateid) { print ''; @@ -392,6 +432,14 @@ if ($mode == 'template' && $user->admin) { print '
    '.$langs->trans("Name").''.$langs->trans("Template").'
    '; if ($action!='edittemplate') { + print ''; + print '
    '; + print 'No Yes
    CUPS hostedYesYesNo
    ### Printers Many thermal receipt printers support ESC/POS to some degree. This driver has been known to work with: +- 3nStar RPT-008 +- Approx APPPOS80AM +- AURES ODP-333 +- AURES ODP-500 +- Bematech-4200-TH +- Bematech LR2000E +- Birch PRP-085III +- Bixolon SRP-350III +- Bixolon SRP-350Plus +- Black Copper BC-85AC +- CHD TH-305N +- Citizen CBM1000-II +- Citizen CT-S310II +- Dapper-Geyi Q583P +- Daruma DR800 +- DR-MP200 (manufacturer unknown) - EPOS TEP 220M +- Elgin i9 +- Epson EU-T332C +- Epson FX-890 (requires `feedForm()` to release paper). +- Epson TM-T20 +- Epson TM-T20II +- Epson TM-T70 +- Epson TM-T70II +- Epson TM-T81 +- Epson TM-T82II +- Epson TM-T88II - Epson TM-T88III - Epson TM-T88IV -- Epson TM-T70 -- Epson TM-T82II -- Epson TM-T20 -- Epson TM-T70II +- Epson TM-T88V - Epson TM-U220 -- Epson FX-890 (requires `feedForm()` to release paper). -- Okipos 80 Plus III +- Epson TM-U295 (requires `release()` to release slip). +- Epson TM-U590 and TM-U590P +- Equal (EQ-IT-001) POS-58 +- Everycom EC-58 +- Excelvan HOP-E200 +- Excelvan HOP-E58 +- Excelvan HOP-E801 +- Gainscha GP-2120TF +- Gainscha GP-5890x (Also marketed as EC Line 5890x) +- Gainscha GP-U80300I (Also marketed as gprinter GP-U80300I) +- gprinter GP-U80160I +- HOIN HOP-H58 +- Ithaca iTherm 28 +- Hasar HTP 250 +- Metapace T-1 +- Metapace T-25 +- Nexa PX700 +- Nyear NP100 +- OKI RT322 +- OKI 80 Plus III +- Orient BTP-R580 - P-822D +- P85A-401 (make unknown) +- Partner Tech RP320 +- POSLIGNE ODP200H-III-G +- QPOS Q58M +- Rongta RP326US +- Rongta RP58-U +- Rongta RP80USE +- SAM4S GIANT-100DB +- Senor TP-100 +- Sewoo SLK-TS400 +- SEYPOS PRP-96 - SEYPOS PRP-300 (Also marketed as TYSSO PRP-300) +- SNBC BTP-R880NPIII +- Solux SX-TP-88300 +- Sicar POS-80 +- Silicon SP-201 / RP80USE +- SPRT SP-POS88V +- Star BSC10 +- Star TSP100 ECO +- Star TSP100III FuturePRNT - Star TSP-650 - Star TUP-592 +- TVS RP45 Shoppe +- Venus V248T +- Xeumior SM-8330 +- Xprinter F-900 +- Xprinter XP-365B +- Xprinter XP-58 Series +- Xprinter XP-80C +- Xprinter XP-90 +- XPrinter XP-Q20011 - Xprinter XP-Q800 -- Zijang NT-58H -- Zijang ZJ-5870 -- Zijang ZJ-5890T (Marketed as POS 5890T) +- Zjiang NT-58H +- Zjiang ZJ-5870 +- Zjiang ZJ-5890 (Also sold as POS-5890 by many vendors; ZJ-5890K, ZJ-5890T also work). +- Zjiang ZJ-8220 (Also marketed as Excelvan ZJ-8220) +- Zjiang ZJ-8250 -If you use any other printer with this code, please let me know so I can add it to the list. +If you use any other printer with this code, please [let us know](https://github.com/mike42/escpos-php/issues/new) so that it can be added to the list. -Available methods ------------------ +## Basic usage -### __construct(PrintConnector $connector, AbstractCapabilityProfile $profile) +### Include the library + +#### Composer +If you are using composer, then add `mike42/escpos-php` as a dependency: + +```bash +composer require mike42/escpos-php +``` + +In this case, you would include composer's auto-loader at the top of your source files: + +```php + text("Hello World!\n"); +$printer -> cut(); +$printer -> close(); +``` + +Some examples are below for common interfaces. + +Communicate with a printer with an Ethernet interface using `netcat`: + +```bash +php hello-world.php | nc 10.x.x.x. 9100 +``` + +A USB local printer connected with `usblp` on Linux has a device file (Includes USB-parallel interfaces): + +```bash +php hello-world.php > /dev/usb/lp0 +``` + +A computer installed into the local `cups` server is accessed through `lp` or `lpr`: + +```bash +php hello-world.php > foo.txt +lpr -o raw -H localhost -P printer foo.txt +``` + +A local or networked printer on a Windows computer is mapped in to a file, and generally requires you to share the printer first: + +``` +php hello-world.php > foo.txt +net use LPT1 \\server\printer +copy foo.txt LPT1 +del foo.txt +``` + +If you have troubles at this point, then you should consult your OS and printer system documentation to try to find a working print command. + +### Using a PrintConnector + +To print receipts from PHP, use the most applicable [PrintConnector](https://github.com/mike42/escpos-php/tree/master/src/Mike42/Escpos/PrintConnectors) for your setup. The connector simply provides the plumbing to get data to the printer. + +For example, a `NetworkPrintConnector` accepts an IP address and port: + +```php +use Mike42\Escpos\PrintConnectors\NetworkPrintConnector; +use Mike42\Escpos\Printer; +$connector = new NetworkPrintConnector("10.x.x.x", 9100); +$printer = new Printer($connector); +try { + // ... Print stuff +} finally { + $printer -> close(); +} +``` + +While a serial printer might use: +```php +use Mike42\Escpos\PrintConnectors\FilePrintConnector; +use Mike42\Escpos\Printer; +$connector = new FilePrintConnector("/dev/ttyS0"); +$printer = new Printer($connector); +``` + +For each OS/interface combination that's supported, there are examples in the compatibility section of how a `PrintConnector` would be constructed. If you can't get a `PrintConnector` to work, then be sure to include the working print command in bug. + +### Using a CapabilityProfile + +Support for commands and code pages varies between printer vendors and models. By default, the driver will accept UTF-8, and output commands that are suitable for Epson TM-series printers. + +When trying out a new brand of printer, it's a good idea to use the "simple" `CapabilityProfile`, which instructs the driver to avoid the use of advanced features (generally simpler image handling, ASCII-only text). + +```php +use Mike42\Escpos\PrintConnectors\WindowsPrintConnector; +use Mike42\Escpos\CapabilityProfile; +$profile = CapabilityProfile::load("simple"); +$connector = new WindowsPrintConnector("smb://computer/printer"); +$printer = new Printer($connector, $profile); +``` + +As another example, Star-branded printers use different commands: + +```php +use Mike42\Escpos\PrintConnectors\WindowsPrintConnector; +use Mike42\Escpos\CapabilityProfile; +$profile = CapabilityProfile::load("SP2000") +$connector = new WindowsPrintConnector("smb://computer/printer"); +$printer = new Printer($connector, $profile); +``` + +For a list of available profiles, or to have support for your printer improved, please see the upstream [receipt-print-hq/escpos-printer-db](https://github.com/receipt-print-hq/escpos-printer-db) project. + +### Tips & examples +On Linux, your printer device file will be somewhere like `/dev/lp0` (parallel), `/dev/usb/lp1` (USB), `/dev/ttyUSB0` (USB-Serial), `/dev/ttyS0` (serial). + +On Windows, the device files will be along the lines of `LPT1` (parallel) or `COM1` (serial). Use the `WindowsPrintConnector` to tap into system printing on Windows (eg. [Windows USB](https://github.com/mike42/escpos-php/tree/master/example/interface/windows-usb.php), [SMB](https://github.com/mike42/escpos-php/tree/master/example/interface/smb.php) or [Windows LPT](https://github.com/mike42/escpos-php/tree/master/example/interface/windows-lpt.php)) - this submits print jobs via a queue rather than communicating directly with the printer. + +A complete real-world receipt can be found in the code of [Auth](https://github.com/mike42/Auth) in [ReceiptPrinter.php](https://github.com/mike42/Auth/blob/master/lib/misc/ReceiptPrinter.php). It includes justification, boldness, and a barcode. + +Other examples are located in the [example/](https://github.com/mike42/escpos-php/blob/master/example/) directory. + +## Available methods + +### __construct(PrintConnector $connector, CapabilityProfile $profile) Construct new print object. Parameters: -- `PrintConnector $connector`: The PrintConnector to send data to. If not set, output is sent to standard output. -- `AbstractCapabilityProfile $profile` Supported features of this printer. If not set, the DefaultCapabilityProfile will be used, which is suitable for Epson printers. +- `PrintConnector $connector`: The PrintConnector to send data to. +- `CapabilityProfile $profile` Supported features of this printer. If not set, the "default" CapabilityProfile will be used, which is suitable for Epson printers. -See [example/interface/]("https://github.com/mike42/escpos-php/tree/master/example/interface/) for ways to open connections for different platforms and interfaces. +See [example/interface/](https://github.com/mike42/escpos-php/tree/master/example/interface/) for ways to open connections for different platforms and interfaces. ### barcode($content, $type) Print a barcode. @@ -159,7 +333,7 @@ Print a barcode. Parameters: - `string $content`: The information to encode. -- `int $type`: The barcode standard to output. If not specified, `Escpos::BARCODE_CODE39` will be used. +- `int $type`: The barcode standard to output. If not specified, `Printer::BARCODE_CODE39` will be used. Currently supported barcode standards are (depending on your printer): @@ -181,7 +355,7 @@ Cut the paper. Parameters: -- `int $mode`: Cut mode, either `Escpos::CUT_FULL` or `Escpos::CUT_PARTIAL`. If not specified, `Escpos::CUT_FULL` will be used. +- `int $mode`: Cut mode, either `Printer::CUT_FULL` or `Printer::CUT_PARTIAL`. If not specified, `Printer::CUT_FULL` will be used. - `int $lines`: Number of lines to feed before cutting. If not specified, 3 will be used. ### feed($lines) @@ -219,17 +393,29 @@ A minimal example: ```php graphics($img); ``` See the [example/](https://github.com/mike42/escpos-php/blob/master/example/) folder for detailed examples. -The function [bitImage()](#bitimageescposimage-image-size) takes the same parameters, and can be used if your printer doesn't support the newer graphics commands. +The function [bitImage()](#bitimageescposimage-image-size) takes the same parameters, and can be used if your printer doesn't support the newer graphics commands. As an additional fallback, the `bitImageColumnFormat()` function is also provided. ### initialize() Initialize printer. This resets formatting back to the defaults. +### pdf417Code($content, $width, $heightMultiplier, $dataColumnCount, $ec, $options) +Print a two-dimensional data code using the PDF417 standard. + +Parameters: + +- `string $content`: Text or numbers to store in the code +- `number $width`: Width of a module (pixel) in the printed code. Default is 3 dots. +- `number $heightMultiplier`: Multiplier for height of a module. Default is 3 times the width. +- `number $dataColumnCount`: Number of data columns to use. 0 (default) is to auto-calculate. Smaller numbers will result in a narrower code, making larger pixel sizes possible. Larger numbers require smaller pixel sizes. +- `real $ec`: Error correction ratio, from 0.01 to 4.00. Default is 0.10 (10%). +- `number $options`: Standard code `Printer::PDF417_STANDARD` with start/end bars, or truncated code `Printer::PDF417_TRUNCATED` with start bars only. + ### pulse($pin, $on_ms, $off_ms) Generate a pulse, for opening a cash drawer if one is connected. The default settings (0, 120, 240) should open an Epson drawer. @@ -243,16 +429,16 @@ Parameters: Print the given data as a QR code on the printer. - `string $content`: The content of the code. Numeric data will be more efficiently compacted. -- `int $ec` Error-correction level to use. One of `Escpos::QR_ECLEVEL_L` (default), `Escpos::QR_ECLEVEL_M`, `Escpos::QR_ECLEVEL_Q` or `Escpos::QR_ECLEVEL_H`. Higher error correction results in a less compact code. +- `int $ec` Error-correction level to use. One of `Printer::QR_ECLEVEL_L` (default), `Printer::QR_ECLEVEL_M`, `Printer::QR_ECLEVEL_Q` or `Printer::QR_ECLEVEL_H`. Higher error correction results in a less compact code. - `int $size`: Pixel size to use. Must be 1-16 (default 3) -- `int $model`: QR code model to use. Must be one of `Escpos::QR_MODEL_1`, `Escpos::QR_MODEL_2` (default) or `Escpos::QR_MICRO` (not supported by all printers). +- `int $model`: QR code model to use. Must be one of `Printer::QR_MODEL_1`, `Printer::QR_MODEL_2` (default) or `Printer::QR_MICRO` (not supported by all printers). ### selectPrintMode($mode) Select print mode(s). Parameters: -- `int $mode`: The mode to use. Default is `Escpos::MODE_FONT_A`, with no special formatting. This has a similar effect to running `initialize()`. +- `int $mode`: The mode to use. Default is `Printer::MODE_FONT_A`, with no special formatting. This has a similar effect to running `initialize()`. Several MODE_* constants can be OR'd together passed to this function's `$mode` argument. The valid modes are: @@ -270,6 +456,20 @@ Parameters: - `int $height`: Height in dots. If not specified, 8 will be used. +### setBarcodeWidth($width) +Set barcode bar width. + +Parameters: + +- `int $width`: Bar width in dots. If not specified, 3 will be used. Values above 6 appear to have no effect. + +### setColor($color) +Select print color - on printers that support multiple colors. + +Parameters: + +- `int $color`: Color to use. Must be either `Printer::COLOR_1` (default), or `Printer::COLOR_2` + ### setDoubleStrike($on) Turn double-strike mode on/off. @@ -289,14 +489,40 @@ Select font. Most printers have two fonts (Fonts A and B), and some have a third Parameters: -- `int $font`: The font to use. Must be either `Escpos::FONT_A`, `Escpos::FONT_B`, or `Escpos::FONT_C`. +- `int $font`: The font to use. Must be either `Printer::FONT_A`, `Printer::FONT_B`, or `Printer::FONT_C`. ### setJustification($justification) Select justification. Parameters: -- `int $justification`: One of `Escpos::JUSTIFY_LEFT`, `Escpos::JUSTIFY_CENTER`, or `Escpos::JUSTIFY_RIGHT`. +- `int $justification`: One of `Printer::JUSTIFY_LEFT`, `Printer::JUSTIFY_CENTER`, or `Printer::JUSTIFY_RIGHT`. + +### setLineSpacing($height) + +Set the height of the line. + +Some printers will allow you to overlap lines with a smaller line feed. + +Parameters: + +- `int $height`: The height of each line, in dots. If not set, the printer will reset to its default line spacing. + +### setPrintLeftMargin($margin) + +Set print area left margin. Reset to default with `Printer::initialize()`. + +Parameters: + +- `int $margin`: The left margin to set on to the print area, in dots. + +### setPrintWidth($width) + +Set print area width. This can be used to add a right margin to the print area. Reset to default with `Printer::initialize()`. + +Parameters: + +- `int $width`: The width of the page print area, in dots. ### setReverseColors($on) Set black/white reverse mode on or off. In this mode, text is printed white on a black background. @@ -318,7 +544,7 @@ Set underline for printed text. Parameters: -- `int $underline`: Either `true`/`false`, or one of `Escpos::UNDERLINE_NONE`, `Escpos::UNDERLINE_SINGLE` or `Escpos::UNDERLINE_DOUBLE`. Defaults to `Escpos::UNDERLINE_SINGLE`. +- `int $underline`: Either `true`/`false`, or one of `Printer::UNDERLINE_NONE`, `Printer::UNDERLINE_SINGLE` or `Printer::UNDERLINE_DOUBLE`. Defaults to `Printer::UNDERLINE_SINGLE`. ### text($str) Add text to the buffer. Text should either be followed by a line-break, or `feed()` should be called after this. @@ -327,26 +553,37 @@ Parameters: - `string $str`: The string to print. -Further notes -------------- +# Further notes Posts I've written up for people who are learning how to use receipt printers: -* [What is ESC/POS, and how do I use it?](http://mike.bitrevision.com/blog/what-is-escpos-and-how-do-i-use-it), which documents the output of test.php. -* [Setting up an Epson receipt printer](http://mike.bitrevision.com/blog/2014-20-26-setting-up-an-epson-receipt-printer) -* [Getting a USB receipt printer working on Linux](http://mike.bitrevision.com/blog/2015-03-getting-a-usb-receipt-printer-working-on-linux) +* [What is ESC/POS, and how do I use it?](https://mike42.me/blog/what-is-escpos-and-how-do-i-use-it), which documents the output of `example/demo.php`. +* [Setting up an Epson receipt printer](https://mike42.me/blog/2014-20-26-setting-up-an-epson-receipt-printer) +* [Getting a USB receipt printer working on Linux](https://mike42.me/blog/2015-03-getting-a-usb-receipt-printer-working-on-linux) -Other versions --------------- -Some forks of this project have been developed by others for specific use cases. Improvements from the following projects have been incorporated into escpos-php: +# Development -- [wdoyle/EpsonESCPOS-PHP](https://github.com/wdoyle/EpsonESCPOS-PHP) -- [ronisaha/php-esc-pos](https://github.com/ronisaha/php-esc-pos) +This code is MIT licensed, and you are encouraged to contribute any modifications back to the project. -Vendor documentation --------------------- -Epson notes that not all of its printers support all ESC/POS features, and includes a table in their documentation: +For development, it's suggested that you load `imagick`, `gd` and `Xdebug` PHP exensions, and install `composer`. -* [FAQ about ESC/POS from Epson](http://content.epson.de/fileadmin/content/files/RSD/downloads/escpos.pdf) +The tests are executed on [Travis CI](https://travis-ci.org/mike42/escpos-php) over PHP 5.4, 5.5, 5.6, 7.0, 7.1 and 7.2, plus the latest LTS version of HHVM, 3.21. Older versions of PHP are not supported in current releases. -Note that many printers produced by other vendors use the same standard, and are compatible by varying degrees. +Fetch a copy of this code and load dependencies with composer: + git clone https://github.com/mike42/escpos-php + cd escpos-php/ + composer install + +Execute unit tests via `phpunit`: + + php vendor/bin/phpunit --coverage-text + +This project uses the PSR-2 standard, which can be checked via [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer): + + php vendor/bin/phpcs --standard=psr2 src/ -n + +The developer docs are build with [doxygen](https://github.com/doxygen/doxygen). Re-build them to check for documentation warnings: + + make -C doc clean && make -C doc + +Pull requests and bug reports welcome. diff --git a/htdocs/includes/mike42/escpos-php/autoload.php b/htdocs/includes/mike42/escpos-php/autoload.php new file mode 100644 index 00000000000..7779486b824 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/autoload.php @@ -0,0 +1,26 @@ +=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "4.5.*" - } + "name": "mike42/escpos-php", + "type": "library", + "description": "PHP receipt printer library for use with ESC/POS-compatible thermal and impact printers", + "homepage": "https://github.com/mike42/escpos-php", + "keywords": ["receipt", "print", "escpos", "ESC-POS", "driver"], + "license": "MIT", + "authors": [ + { + "name": "Michael Billington", + "email": "michael.billington@gmail.com" + } + ], + "config": { + "platform": { + "php": "5.4.0" + } + }, + "require": { + "php": ">=5.4.0", + "ext-mbstring": "*" + }, + "suggest": { + "guzzlehttp/guzzle": "Allows the use of the ApiConnector to send print jobs over HTTP.", + "ext-imagick": "Will be used for image printing if present. Required for PDF printing or use of custom fonts.", + "ext-gd": "Used for image printing if present." + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "squizlabs/php_codesniffer": "^3.2", + "guzzlehttp/guzzle": "^5.3" + }, + "autoload": { + "psr-4": { + "Mike42\\": "src/Mike42" + } + } } diff --git a/htdocs/includes/mike42/escpos-php/composer.lock b/htdocs/includes/mike42/escpos-php/composer.lock index ab6911c281d..d46bbc79312 100644 --- a/htdocs/includes/mike42/escpos-php/composer.lock +++ b/htdocs/includes/mike42/escpos-php/composer.lock @@ -1,24 +1,24 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "fd25f2b816df83dabf03fe7259ad4018", + "content-hash": "0094775b67f67bc65c1ff4aebb0fd065", "packages": [], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.0.4", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119" + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { @@ -29,7 +29,7 @@ "ext-pdo": "*", "ext-phar": "*", "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "2.0.*@ALPHA" + "squizlabs/php_codesniffer": "~2.0" }, "type": "library", "extra": { @@ -38,8 +38,8 @@ } }, "autoload": { - "psr-0": { - "Doctrine\\Instantiator\\": "src" + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", @@ -59,7 +59,161 @@ "constructor", "instantiate" ], - "time": "2014-10-13 12:58:55" + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "5.3.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f9acb4761844317e626a32259205bec1f1bc60d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f9acb4761844317e626a32259205bec1f1bc60d2", + "reference": "f9acb4761844317e626a32259205bec1f1bc60d2", + "shasum": "" + }, + "require": { + "guzzlehttp/ringphp": "^1.1", + "php": ">=5.4.0", + "react/promise": "^2.2" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-01-15T07:18:01+00:00" + }, + { + "name": "guzzlehttp/ringphp", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/RingPHP.git", + "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/dbbb91d7f6c191e5e405e900e3102ac7f261bc0b", + "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b", + "shasum": "" + }, + "require": { + "guzzlehttp/streams": "~3.0", + "php": ">=5.4.0", + "react/promise": "~2.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-curl": "Guzzle will use specific adapters if cURL is present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Ring\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", + "time": "2015-05-20T03:37:09+00:00" + }, + { + "name": "guzzlehttp/streams", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/streams.git", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple abstraction over streams of data", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "Guzzle", + "stream" + ], + "time": "2014-10-12T19:18:40+00:00" }, { "name": "phpdocumentor/reflection-docblock", @@ -108,34 +262,37 @@ "email": "mike.vanriel@naenius.com" } ], - "time": "2015-02-03 12:10:50" + "time": "2015-02-03T12:10:50+00:00" }, { "name": "phpspec/prophecy", - "version": "1.4.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5" + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5", - "reference": "8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", - "phpdocumentor/reflection-docblock": "~2.0", - "sebastian/comparator": "~1.1" + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "phpspec/phpspec": "~2.0" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8 || ^5.6.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { @@ -168,20 +325,20 @@ "spy", "stub" ], - "time": "2015-03-27 19:31:25" + "time": "2017-03-02T20:05:34+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "2.0.15", + "version": "2.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "34cc484af1ca149188d0d9e91412191e398e0b67" + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/34cc484af1ca149188d0d9e91412191e398e0b67", - "reference": "34cc484af1ca149188d0d9e91412191e398e0b67", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", "shasum": "" }, "require": { @@ -189,7 +346,7 @@ "phpunit/php-file-iterator": "~1.3", "phpunit/php-text-template": "~1.2", "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "~1.0", + "sebastian/environment": "^1.3.2", "sebastian/version": "~1.0" }, "require-dev": { @@ -204,7 +361,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.2.x-dev" } }, "autoload": { @@ -230,35 +387,37 @@ "testing", "xunit" ], - "time": "2015-01-24 10:06:35" + "time": "2015-10-06T15:47:00+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.3.4", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, "autoload": { "classmap": [ - "File/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], @@ -275,20 +434,20 @@ "filesystem", "iterator" ], - "time": "2013-10-10 15:34:57" + "time": "2016-10-03T07:40:28+00:00" }, { "name": "phpunit/php-text-template", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a" + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { @@ -297,20 +456,17 @@ "type": "library", "autoload": { "classmap": [ - "Text/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -319,35 +475,40 @@ "keywords": [ "template" ], - "time": "2014-01-30 17:20:04" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", - "version": "1.0.5", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "classmap": [ - "PHP/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], @@ -363,20 +524,20 @@ "keywords": [ "timer" ], - "time": "2013-08-02 07:42:54" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", - "version": "1.4.0", + "version": "1.4.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "db32c18eba00b121c145575fcbcd4d4d24e6db74" + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/db32c18eba00b121c145575fcbcd4d4d24e6db74", - "reference": "db32c18eba00b121c145575fcbcd4d4d24e6db74", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", "shasum": "" }, "require": { @@ -412,20 +573,20 @@ "keywords": [ "tokenizer" ], - "time": "2015-01-17 09:51:32" + "time": "2017-02-27T10:12:30+00:00" }, { "name": "phpunit/phpunit", - "version": "4.5.1", + "version": "4.8.36", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d6429b0995b24a2d9dfe5587ee3a7071c1161af4" + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d6429b0995b24a2d9dfe5587ee3a7071c1161af4", - "reference": "d6429b0995b24a2d9dfe5587ee3a7071c1161af4", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", "shasum": "" }, "require": { @@ -435,19 +596,19 @@ "ext-reflection": "*", "ext-spl": "*", "php": ">=5.3.3", - "phpspec/prophecy": "~1.3,>=1.3.1", - "phpunit/php-code-coverage": "~2.0,>=2.0.11", - "phpunit/php-file-iterator": "~1.3.2", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0.2", + "phpunit/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.1", - "sebastian/environment": "~1.2", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", "sebastian/exporter": "~1.2", "sebastian/global-state": "~1.0", "sebastian/version": "~1.0", - "symfony/yaml": "~2.0" + "symfony/yaml": "~2.1|~3.0" }, "suggest": { "phpunit/php-invoker": "~1.1" @@ -458,7 +619,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.5.x-dev" + "dev-master": "4.8.x-dev" } }, "autoload": { @@ -484,26 +645,27 @@ "testing", "xunit" ], - "time": "2015-03-29 09:24:05" + "time": "2017-06-21T08:07:12+00:00" }, { "name": "phpunit/phpunit-mock-objects", - "version": "2.3.1", + "version": "2.3.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "74ffb87f527f24616f72460e54b595f508dccb5c" + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/74ffb87f527f24616f72460e54b595f508dccb5c", - "reference": "74ffb87f527f24616f72460e54b595f508dccb5c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", "shasum": "" }, "require": { - "doctrine/instantiator": "~1.0,>=1.0.2", + "doctrine/instantiator": "^1.0.2", "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2" + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" }, "require-dev": { "phpunit/phpunit": "~4.4" @@ -539,26 +701,72 @@ "mock", "xunit" ], - "time": "2015-04-02 05:36:41" + "time": "2015-10-02T06:51:40+00:00" }, { - "name": "sebastian/comparator", - "version": "1.1.1", + "name": "react/promise", + "version": "v2.5.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e" + "url": "https://github.com/reactphp/promise.git", + "reference": "62785ae604c8d69725d693eb370e1d67e94c4053" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e", + "url": "https://api.github.com/repos/reactphp/promise/zipball/62785ae604c8d69725d693eb370e1d67e94c4053", + "reference": "62785ae604c8d69725d693eb370e1d67e94c4053", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "time": "2017-03-25T12:08:31+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", "shasum": "" }, "require": { "php": ">=5.3.3", "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" + "sebastian/exporter": "~1.2 || ~2.0" }, "require-dev": { "phpunit/phpunit": "~4.4" @@ -566,7 +774,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -603,32 +811,32 @@ "compare", "equality" ], - "time": "2015-01-29 16:28:08" + "time": "2017-01-29T09:50:25+00:00" }, { "name": "sebastian/diff", - "version": "1.3.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "~4.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -651,31 +859,31 @@ } ], "description": "Diff implementation", - "homepage": "http://www.github.com/sebastianbergmann/diff", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ "diff" ], - "time": "2015-02-22 15:13:53" + "time": "2015-12-08T07:14:41+00:00" }, { "name": "sebastian/environment", - "version": "1.2.2", + "version": "1.3.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e" + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^4.8 || ^5.0" }, "type": "library", "extra": { @@ -705,20 +913,20 @@ "environment", "hhvm" ], - "time": "2015-01-01 10:01:08" + "time": "2016-08-18T05:49:44+00:00" }, { "name": "sebastian/exporter", - "version": "1.2.0", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "84839970d05254c73cde183a721c7af13aede943" + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943", - "reference": "84839970d05254c73cde183a721c7af13aede943", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", "shasum": "" }, "require": { @@ -726,12 +934,13 @@ "sebastian/recursion-context": "~1.0" }, "require-dev": { + "ext-mbstring": "*", "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -771,20 +980,20 @@ "export", "exporter" ], - "time": "2015-01-27 07:23:06" + "time": "2016-06-17T09:04:28+00:00" }, { "name": "sebastian/global-state", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01" + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", "shasum": "" }, "require": { @@ -822,20 +1031,20 @@ "keywords": [ "global state" ], - "time": "2014-10-06 09:23:50" + "time": "2015-10-12T03:26:01+00:00" }, { "name": "sebastian/recursion-context", - "version": "1.0.0", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252" + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", "shasum": "" }, "require": { @@ -875,20 +1084,20 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-01-24 09:48:32" + "time": "2016-10-03T07:41:43+00:00" }, { "name": "sebastian/version", - "version": "1.0.5", + "version": "1.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4" + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", - "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", "shasum": "" }, "type": "library", @@ -910,39 +1119,100 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-02-24 06:35:25" + "time": "2015-06-21T13:59:46+00:00" }, { - "name": "symfony/yaml", - "version": "v2.6.6", - "target-dir": "Symfony/Component/Yaml", + "name": "squizlabs/php_codesniffer", + "version": "3.2.3", "source": { "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "174f009ed36379a801109955fc5a71a49fe62dd4" + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "4842476c434e375f9d3182ff7b89059583aa8b27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/174f009ed36379a801109955fc5a71a49fe62dd4", - "reference": "174f009ed36379a801109955fc5a71a49fe62dd4", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/4842476c434e375f9d3182ff7b89059583aa8b27", + "reference": "4842476c434e375f9d3182ff7b89059583aa8b27", "shasum": "" }, "require": { - "php": ">=5.3.3" + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2018-02-20T21:35:23+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "bb4ec47e8e109c1c1172145732d0aa468d967cd0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/bb4ec47e8e109c1c1172145732d0aa468d967cd0", + "reference": "bb4ec47e8e109c1c1172145732d0aa468d967cd0", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.8-dev" } }, "autoload": { - "psr-0": { - "Symfony\\Component\\Yaml\\": "" - } + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -950,17 +1220,66 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2017-02-21T08:33:48+00:00" + }, + { + "name": "symfony/yaml", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "2a7bab3c16f6f452c47818fdd08f3b1e49ffcf7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2a7bab3c16f6f452c47818fdd08f3b1e49ffcf7d", + "reference": "2a7bab3c16f6f452c47818fdd08f3b1e49ffcf7d", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony Yaml Component", - "homepage": "http://symfony.com", - "time": "2015-03-30 15:54:10" + "homepage": "https://symfony.com", + "time": "2017-03-01T18:13:50+00:00" } ], "aliases": [], @@ -969,7 +1288,11 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=5.3.0" + "php": ">=5.4.0", + "ext-mbstring": "*" }, - "platform-dev": [] + "platform-dev": [], + "platform-overrides": { + "php": "5.4.0" + } } diff --git a/htdocs/includes/mike42/escpos-php/doc/FAQ.md b/htdocs/includes/mike42/escpos-php/doc/FAQ.md new file mode 100644 index 00000000000..6b7a6247bca --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/doc/FAQ.md @@ -0,0 +1,142 @@ +# Frequently Asked Questions (FAQ) + +## Can I print to File Format X with this? + +If you are trying to generate XPS, PDF or DOCX or HTML files from PHP, then you are most likely in the wrong place. + +The purpose of this driver it to generate binary ESC/POS code, which is understood by many embedded thermal receipt and impact printers. + +## I have Printer X. Can I use this driver? + +If the printer understands ESC/POS, and you know how to get raw binary data to it, then yes. Otherwise, no. + +The [list of printers that are known to work](https://github.com/mike42/escpos-php/blob/development/README.md#printers) is crowd-sourced. We appreciate it when developers try out the driver, then [file information on the bug tracker](https://github.com/mike42/escpos-php/issues/new) with some information about which features worked on their model of printer. + +To see how well your printer works, first check that it supports ESC/POS, then begin by attempting to send the text "Hello World" to your printer on the command-line, from the computer that will run PHP. + +Once you solve this, [try to do the same from PHP](https://github.com/mike42/escpos-php/blob/development/README.md#basic-usage) using the default profile. Further details are in the [README](https://github.com/mike42/escpos-php/blob/development/README.md) file. + +## Can you add support for Printer X? + +Features vary between printers, so we collaborate on an ESC/POS printer compatibility database to collect known differences: [receipt-print-hq/escpos-printer-db](https://github.com/receipt-print-hq/escpos-printer-db). + +If you encounter garbage output when you try to print images or special characters, then please submit a test page and a link to vendor documentation to the `escpos-printer-db` project, so that support can be improved for future versions. + +## I have a printer that does not understand ESC/POS. Can I use this driver? + +No. The purpose of this driver it to generate binary ESC/POS code. If your printer doesn't understand that, then this code wont be much use to you. + +Some printers do have an emulation mode for ESC/POS. The vendor docs will tell if this is the case, and how to enable it. + +## Why do I get this error when I try to print? + +Start by testing that you can send text to your printer outside of escpos-php. The examples linked to in the README are commented with some commands to get you started. + +Generally, initial setup problems seem to have one of these causes: + +1. You are writing to the wrong place. Writing to `LPT1` does not output to parallel port on Linux, and `/dev/ttyS0` is not a serial printer on Windows. +2. The printer has not been set up to accept printing the way you expect. This means permissions on Linux, network printers being configured, and shared printers having user accounts and firewalls set up correctly on the print server. +3. Your printer actually doesn't work (rare but possible). + +To be clear, these are not escpos-php issues: No amount of PHP code can set up your printer for you. Instead, the driver relies on developers determining how their setup is going to work before using a connector to transport data to their printer. + +Once you have a working command to send text to your printer (from the PHP server), you are ready to use escpos-php. You can try to use a PrintConnector now, based on your operating system and printer interface. A table is located in the README to help you select the right one. + +The connectors are- + +- `FilePrintConnector` and `NetworkPrintConnector` directly use files or network sockets. +- `WindowsPrintConnector` and `CupsPrintConnector` tie in with Windows and Unix system printing. +- `DummyPrintConnector` does not connect to a real printer, and can be used to save ESC/POS receipts to a database, for example. + +At this point, you might find that the way you would like to print is not supported by escpos-php. You can post your printing command as a feature request on the issue tracker. + +Lastly, you may run in to the final common trap: + +4. Your PHP is not running with the same sort of permissions as your login account. Again, no amount of PHP code can fix this. For example, on LAMP, your `www-data` user needs to be in the `lp` group, while on WAMP, `Local Service` account may run in to problems. SELinux and firewalls are also worth a look. + +When printing fails, you can expect a PHP Exception that explains what went wrong. They are all clues: + +- `Warning: copy(\\pc\printer): failed to open stream: Permission denied` +- `/dev/usb/lp0: Permission denied` +- `User name or password is incorrect` + +Ensure that while you are developing, you configure PHP to show error messages, so that you can see these problems. + +Please file a bug if you think that there is a specific situation which escpos-php could provide better error messages for. + +## Can I print over the network? + +Certainly, as long as your printer is available over the network. + +- `NetworkPrintConnector` will speak directly to an Ethernet-connected printer on port 9100. + +For USB or Serial printers, you need to install the printer on a computer and then share it, so that it becomes network-accessible. + +- `WindowsPrintConnector` will connect to Windows shared printers from Windows or Linux (Linux users will need Samba). +- `CupsPrintConnector` will connect to CUPS-shared printers from Linux or Mac. + +Always start by testing your shared printer setup outside of escpos-php. The examples linked to in the README are commented with some example commands to get you started. Typically, networks, firewalls and permissions need to be set up. + +Once you have a working command to send text to your printer (from the PHP server), you are ready to use escpos-php. + +If you have any issues at this stage, please ask on the issue tracker, and include the commands that you used to verify your setup. + +## Can I print from my server on the Internet? + +Since PHP is a server-side language, escpos-php is a server-side print library. The driver is able to transport data between a server and a printer in a few different ways, all of them server-side. For example, you may print to a USB printer *connected to the server running PHP*, or an Ethernet printer *on a network accessible to the server*. + +Many developers dream of having an application that is hosted on the public Internet, with POS terminals accessing it, and printing via a web browser. Because the webserver cannot see the printer in this sort of setup, a server-side print driver is not much use. + +Because of this, there are no cut-and-paste recipes available, but here are two top-level approaches you could take: + +1. Architect your application so that the server can see your printer +2. Use an application which runs client-side to deliver print data instead + +### Option 1: Allow the server to print + +Server-side printing is viable if the server can get to the printer. Here are some ways it could work: + +- Run your server on the LAN instead, and read the section above about printing over the network +- Set up a VPN so that your cloud-hosted server can also access the LAN +- Expose the printer via some other secure tunnel to the server, via SSH or TLS + +Please do your own research to determine how these may apply to your setup- the escpos-php issue tracker is not a place where you should be requesting network support. + +### Option 2: Use client software to print + +If you aren't able to set up some network infrastructure to implement the above, then you cannot use a server-side print driver. + +Here are some browser-based printing tools which you may like to consider instead. + +- Use system printing with a vendor driver, and some good `@media print` CSS +- [Chrome Raw Print](https://github.com/receipt-print-hq/chrome-raw-print) app +- [qz](https://qz.io/) +- [ePOS-Device SDK for JavaScript](https://reference.epson-biz.com/modules/ref_epos_device_js_en/index.php?content_id=139). Requires network interface card that supports ePOS (UB-E04/R04) + +Please direct queries about client-side printing products to the appropriate project. + +## Why is image printing slow? + +Three things tend to slow down the image processing: + +1. Slow PHP code +2. Data link +3. The printer itself + +First, ensure you have the Imagick plugin loaded. The driver will avoid a slower image processing implementation once you've got it. + +Next, connect over a faster interface. Serial printers have a low bit-rate, and the printer spends a lot of time waiting for data. If you have USB or Ethernet, then use it (note: storing graphics to the printer memory is not currently implemented). + +Lastly, the printer will go faster if you use less pixels. Since images are two-dimensional, scaling down by 50% removes 75% of the pixels. The driver can then print at a half the density, so that your lower resolution image appears the same size when printed. + +## How can I get the status of the printer? + +This feature is not implemented, but a solution for some Epson printers is planned. + +Only `FilePrintConnector` or `NetworkPrintConnector` will support reading from the printer, ensure that you migrate to those if you would like these features. + +## How do I produce this complex layout? + +ESC/POS "page mode" is not currently supported, which would allow some printers to render some more complex layouts natively + +Since the output is raster anyway, it is suggested that you render your output to an image and print that instead. The driver supports PDF printing via Imagick, and an example that uses `wkhtmltoimage` is available in the repository. diff --git a/htdocs/includes/mike42/escpos-php/doc/Makefile b/htdocs/includes/mike42/escpos-php/doc/Makefile index fed323f0cff..4e01c2ac0a1 100644 --- a/htdocs/includes/mike42/escpos-php/doc/Makefile +++ b/htdocs/includes/mike42/escpos-php/doc/Makefile @@ -1,9 +1,20 @@ -html: ../Escpos.php escpos.conf - doxygen escpos.conf +html: escpos.doxyfile + # Compile + doxygen escpos.doxyfile + # Filter out warnings on README.md- doxygen cannot handle image links that + # are used there: [![Caption](https://example.com/target)](https://example.com/image) + sed -i '/README.md\:/d' warnings.log + # Show warnings log + cat warnings.log + # Return failure if there were any doc warnings + [ ! -s warnings.log ] latex: html # Do nothing -clean: - rm --preserve-root -Rf html latex doxygen_sqlite3.db +xml: html + xsltproc xml/combine.xslt xml/index.xml > all.xml + +clean: + rm --preserve-root -Rf html latex xml doxygen_sqlite3.db all.xml warnings.log diff --git a/htdocs/includes/mike42/escpos-php/doc/escpos.conf b/htdocs/includes/mike42/escpos-php/doc/escpos.doxyfile similarity index 99% rename from htdocs/includes/mike42/escpos-php/doc/escpos.conf rename to htdocs/includes/mike42/escpos-php/doc/escpos.doxyfile index 54ea2874aa5..0c48656e15b 100644 --- a/htdocs/includes/mike42/escpos-php/doc/escpos.conf +++ b/htdocs/includes/mike42/escpos-php/doc/escpos.doxyfile @@ -20,7 +20,7 @@ # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See https://www.gnu.org/software/libiconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv # for the list of possible encodings. # The default value is: UTF-8. @@ -51,7 +51,7 @@ PROJECT_BRIEF = # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo # to the output directory. -PROJECT_LOGO = ../example/images/escpos-php-small.png +PROJECT_LOGO = ../example/resources/escpos-php-small.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is @@ -741,7 +741,7 @@ WARN_FORMAT = "$file:$line: $text" # messages should be written. If left blank the output is written to standard # error (stderr). -WARN_LOGFILE = +WARN_LOGFILE = warnings.log #--------------------------------------------------------------------------- # Configuration options related to the input files @@ -753,12 +753,12 @@ WARN_LOGFILE = # spaces. # Note: If this tag is empty the current directory is searched. -INPUT = ../Escpos.php ../src/ ../README.md +INPUT = ../src ../README.md ./ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: https://www.gnu.org/software/libiconv) for the list of +# documentation (see: http://www.gnu.org/software/libiconv) for the list of # possible encodings. # The default value is: UTF-8. @@ -773,13 +773,13 @@ INPUT_ENCODING = UTF-8 # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, # *.qsf, *.as and *.js. -FILE_PATTERNS = +FILE_PATTERNS = *.php *.md # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. -RECURSIVE = NO +RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a @@ -950,7 +950,7 @@ SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system -# (see https://www.gnu.org/software/global/global.html). You will need version +# (see http://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: @@ -1820,7 +1820,7 @@ MAN_LINKS = NO # captures the structure of the code including all documentation. # The default value is: NO. -GENERATE_XML = NO +GENERATE_XML = YES # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of diff --git a/htdocs/includes/mike42/escpos-php/example/README.md b/htdocs/includes/mike42/escpos-php/example/README.md index 68b0dc77e7c..e59e6c095e4 100644 --- a/htdocs/includes/mike42/escpos-php/example/README.md +++ b/htdocs/includes/mike42/escpos-php/example/README.md @@ -23,4 +23,4 @@ Each example prints to standard output, so either edit the print connector, or r - `print-from-html.php` - Runs `wkhtmltoimage` to convert HTML to an image, and then prints the image. (This is very slow) - `character-tables.php` - Prints a compact character code table for each available character set. Used to debug incorrect output from `character-encodings.php`. - `print-from-pdf.php` - Loads a PDF and prints each page in a few different ways (very slow as well) - +- `rawbt-receipt` (.php & .html) - Demonstration of Back and Front for integration between the site and the Android application “RawBT - Printer Driver for Android” diff --git a/htdocs/includes/mike42/escpos-php/example/barcode.php b/htdocs/includes/mike42/escpos-php/example/barcode.php index 5475b76c19d..d3ef9f2f44a 100644 --- a/htdocs/includes/mike42/escpos-php/example/barcode.php +++ b/htdocs/includes/mike42/escpos-php/example/barcode.php @@ -1,181 +1,207 @@ setBarcodeHeight ( 40 ); +require __DIR__ . '/../autoload.php'; +use Mike42\Escpos\Printer; +use Mike42\Escpos\PrintConnectors\FilePrintConnector; + +$connector = new FilePrintConnector("php://stdout"); +$printer = new Printer($connector); + +/* Height and width */ +$printer->selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_DOUBLE_WIDTH); +$printer->text("Height and bar width\n"); +$printer->selectPrintMode(); +$heights = array(1, 2, 4, 8, 16, 32); +$widths = array(1, 2, 3, 4, 5, 6, 7, 8); +$printer -> text("Default look\n"); +$printer->barcode("ABC", Printer::BARCODE_CODE39); + +foreach($heights as $height) { + $printer -> text("\nHeight $height\n"); + $printer->setBarcodeHeight($height); + $printer->barcode("ABC", Printer::BARCODE_CODE39); +} +foreach($widths as $width) { + $printer -> text("\nWidth $width\n"); + $printer->setBarcodeWidth($width); + $printer->barcode("ABC", Printer::BARCODE_CODE39); +} +$printer->feed(); +// Set to something sensible for the rest of the examples +$printer->setBarcodeHeight(40); +$printer->setBarcodeWidth(2); /* Text position */ -$printer->selectPrintMode ( Escpos::MODE_DOUBLE_HEIGHT | Escpos::MODE_DOUBLE_WIDTH ); -$printer->text ( "Text position\n" ); -$printer->selectPrintMode (); +$printer->selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_DOUBLE_WIDTH); +$printer->text("Text position\n"); +$printer->selectPrintMode(); $hri = array ( - Escpos::BARCODE_TEXT_NONE => "No text", - Escpos::BARCODE_TEXT_ABOVE => "Above", - Escpos::BARCODE_TEXT_BELOW => "Below", - Escpos::BARCODE_TEXT_ABOVE | Escpos::BARCODE_TEXT_BELOW => "Both" + Printer::BARCODE_TEXT_NONE => "No text", + Printer::BARCODE_TEXT_ABOVE => "Above", + Printer::BARCODE_TEXT_BELOW => "Below", + Printer::BARCODE_TEXT_ABOVE | Printer::BARCODE_TEXT_BELOW => "Both" ); -foreach ( $hri as $position => $caption ) { - $printer->text ( $caption . "\n" ); - $printer->setBarcodeTextPosition ( $position ); - $printer->barcode ( "012345678901", Escpos::BARCODE_JAN13 ); - $printer->feed (); +foreach ($hri as $position => $caption) { + $printer->text($caption . "\n"); + $printer->setBarcodeTextPosition($position); + $printer->barcode("012345678901", Printer::BARCODE_JAN13); + $printer->feed(); } /* Barcode types */ $standards = array ( - Escpos::BARCODE_UPCA => array ( - "title" => "UPC-A", - "caption" => "Fixed-length numeric product barcodes.", - "example" => array ( - array ( - "caption" => "12 char numeric including (wrong) check digit.", - "content" => "012345678901" - ), - array ( - "caption" => "Send 11 chars to add check digit automatically.", - "content" => "01234567890" - ) - ) - ), - Escpos::BARCODE_UPCE => array ( - "title" => "UPC-E", - "caption" => "Fixed-length numeric compact product barcodes.", - "example" => array ( - array ( - "caption" => "6 char numeric - auto check digit & NSC", - "content" => "123456" - ), - array ( - "caption" => "7 char numeric - auto check digit", - "content" => "0123456" - ), - array ( - "caption" => "8 char numeric", - "content" => "01234567" - ), - array ( - "caption" => "11 char numeric - auto check digit", - "content" => "01234567890" - ), - array ( - "caption" => "12 char numeric including (wrong) check digit", - "content" => "012345678901" - ) - ) - ), - Escpos::BARCODE_JAN13 => array ( - "title" => "JAN13/EAN13", - "caption" => "Fixed-length numeric barcodes.", - "example" => array ( - array ( - "caption" => "12 char numeric - auto check digit", - "content" => "012345678901" - ), - array ( - "caption" => "13 char numeric including (wrong) check digit", - "content" => "0123456789012" - ) - ) - ), - Escpos::BARCODE_JAN8 => array ( - "title" => "JAN8/EAN8", - "caption" => "Fixed-length numeric barcodes.", - "example" => array ( - array ( - "caption" => "7 char numeric - auto check digit", - "content" => "0123456" - ), - array ( - "caption" => "8 char numeric including (wrong) check digit", - "content" => "01234567" - ) - ) - ), - Escpos::BARCODE_CODE39 => array ( - "title" => "Code39", - "caption" => "Variable length alphanumeric w/ some special chars.", - "example" => array ( - array ( - "caption" => "Text, numbers, spaces", - "content" => "ABC 012" - ), - array ( - "caption" => "Special characters", - "content" => "$%+-./" - ), - array ( - "caption" => "Extra char (*) Used as start/stop", - "content" => "*TEXT*" - ) - ) - ), - Escpos::BARCODE_ITF => array ( - "title" => "ITF", - "caption" => "Variable length numeric w/even number of digits,\nas they are encoded in pairs.", - "example" => array ( - array ( - "caption" => "Numeric- even number of digits", - "content" => "0123456789" - ) - ) - ), - Escpos::BARCODE_CODABAR => array ( - "title" => "Codabar", - "caption" => "Varaible length numeric with some allowable\nextra characters. ABCD/abcd must be used as\nstart/stop characters (one at the start, one\nat the end) to distinguish between barcode\napplications.", - "example" => array ( - array ( - "caption" => "Numeric w/ A A start/stop. ", - "content" => "A012345A" - ), - array ( - "caption" => "Extra allowable characters", - "content" => "A012$+-./:A" - ) - ) - ), - Escpos::BARCODE_CODE93 => array ( - "title" => "Code93", - "caption" => "Variable length- any ASCII is available", - "example" => array ( - array ( - "caption" => "Text", - "content" => "012abcd" - ) - ) - ), - Escpos::BARCODE_CODE128 => array ( - "title" => "Code128", - "caption" => "Variable length- any ASCII is available", - "example" => array ( - array ( - "caption" => "Code set A uppercase & symbols", - "content" => "{A" . "012ABCD" - ), - array ( - "caption" => "Code set B general text", - "content" => "{B" . "012ABCDabcd" - ), - array ( - "caption" => "Code set C compact numbers\n Sending chr(21) chr(32) chr(43)", - "content" => "{C" . chr ( 21 ) . chr ( 32 ) . chr ( 43 ) - ) - ) - ) + Printer::BARCODE_UPCA => array ( + "title" => "UPC-A", + "caption" => "Fixed-length numeric product barcodes.", + "example" => array ( + array ( + "caption" => "12 char numeric including (wrong) check digit.", + "content" => "012345678901" + ), + array ( + "caption" => "Send 11 chars to add check digit automatically.", + "content" => "01234567890" + ) + ) + ), + Printer::BARCODE_UPCE => array ( + "title" => "UPC-E", + "caption" => "Fixed-length numeric compact product barcodes.", + "example" => array ( + array ( + "caption" => "6 char numeric - auto check digit & NSC", + "content" => "123456" + ), + array ( + "caption" => "7 char numeric - auto check digit", + "content" => "0123456" + ), + array ( + "caption" => "8 char numeric", + "content" => "01234567" + ), + array ( + "caption" => "11 char numeric - auto check digit", + "content" => "01234567890" + ), + array ( + "caption" => "12 char numeric including (wrong) check digit", + "content" => "012345678901" + ) + ) + ), + Printer::BARCODE_JAN13 => array ( + "title" => "JAN13/EAN13", + "caption" => "Fixed-length numeric barcodes.", + "example" => array ( + array ( + "caption" => "12 char numeric - auto check digit", + "content" => "012345678901" + ), + array ( + "caption" => "13 char numeric including (wrong) check digit", + "content" => "0123456789012" + ) + ) + ), + Printer::BARCODE_JAN8 => array ( + "title" => "JAN8/EAN8", + "caption" => "Fixed-length numeric barcodes.", + "example" => array ( + array ( + "caption" => "7 char numeric - auto check digit", + "content" => "0123456" + ), + array ( + "caption" => "8 char numeric including (wrong) check digit", + "content" => "01234567" + ) + ) + ), + Printer::BARCODE_CODE39 => array ( + "title" => "Code39", + "caption" => "Variable length alphanumeric w/ some special chars.", + "example" => array ( + array ( + "caption" => "Text, numbers, spaces", + "content" => "ABC 012" + ), + array ( + "caption" => "Special characters", + "content" => "$%+-./" + ), + array ( + "caption" => "Extra char (*) Used as start/stop", + "content" => "*TEXT*" + ) + ) + ), + Printer::BARCODE_ITF => array ( + "title" => "ITF", + "caption" => "Variable length numeric w/even number of digits,\nas they are encoded in pairs.", + "example" => array ( + array ( + "caption" => "Numeric- even number of digits", + "content" => "0123456789" + ) + ) + ), + Printer::BARCODE_CODABAR => array ( + "title" => "Codabar", + "caption" => "Varaible length numeric with some allowable\nextra characters. ABCD/abcd must be used as\nstart/stop characters (one at the start, one\nat the end) to distinguish between barcode\napplications.", + "example" => array ( + array ( + "caption" => "Numeric w/ A A start/stop. ", + "content" => "A012345A" + ), + array ( + "caption" => "Extra allowable characters", + "content" => "A012$+-./:A" + ) + ) + ), + Printer::BARCODE_CODE93 => array ( + "title" => "Code93", + "caption" => "Variable length- any ASCII is available", + "example" => array ( + array ( + "caption" => "Text", + "content" => "012abcd" + ) + ) + ), + Printer::BARCODE_CODE128 => array ( + "title" => "Code128", + "caption" => "Variable length- any ASCII is available", + "example" => array ( + array ( + "caption" => "Code set A uppercase & symbols", + "content" => "{A" . "012ABCD" + ), + array ( + "caption" => "Code set B general text", + "content" => "{B" . "012ABCDabcd" + ), + array ( + "caption" => "Code set C compact numbers\n Sending chr(21) chr(32) chr(43)", + "content" => "{C" . chr(21) . chr(32) . chr(43) + ) + ) + ) ); -$printer->setBarcodeTextPosition ( Escpos::BARCODE_TEXT_BELOW ); -foreach ( $standards as $type => $standard ) { - $printer->selectPrintMode ( Escpos::MODE_DOUBLE_HEIGHT | Escpos::MODE_DOUBLE_WIDTH ); - $printer->text ( $standard ["title"] . "\n" ); - $printer->selectPrintMode (); - $printer->text ( $standard ["caption"] . "\n\n" ); - foreach ( $standard ["example"] as $id => $barcode ) { - $printer->setEmphasis ( true ); - $printer->text ( $barcode ["caption"] . "\n" ); - $printer->setEmphasis ( false ); - $printer->text ( "Content: " . $barcode ["content"] . "\n" ); - $printer->barcode ( $barcode ["content"], $type ); - $printer->feed (); - } +$printer->setBarcodeTextPosition(Printer::BARCODE_TEXT_BELOW); +foreach ($standards as $type => $standard) { + $printer->selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_DOUBLE_WIDTH); + $printer->text($standard ["title"] . "\n"); + $printer->selectPrintMode(); + $printer->text($standard ["caption"] . "\n\n"); + foreach ($standard ["example"] as $id => $barcode) { + $printer->setEmphasis(true); + $printer->text($barcode ["caption"] . "\n"); + $printer->setEmphasis(false); + $printer->text("Content: " . $barcode ["content"] . "\n"); + $printer->barcode($barcode ["content"], $type); + $printer->feed(); + } } -$printer->cut (); -$printer->close (); - +$printer->cut(); +$printer->close(); diff --git a/htdocs/includes/mike42/escpos-php/example/bit-image.php b/htdocs/includes/mike42/escpos-php/example/bit-image.php index f3a4054d98f..befebf80b9f 100644 --- a/htdocs/includes/mike42/escpos-php/example/bit-image.php +++ b/htdocs/includes/mike42/escpos-php/example/bit-image.php @@ -1,32 +1,36 @@ text("These example images are printed with the older\nbit image print command. You should only use\n\$p -> bitImage() if \$p -> graphics() does not\nwork on your printer.\n\n"); - - $printer -> bitImage($tux); - $printer -> text("Regular Tux (bit image).\n"); - $printer -> feed(); - - $printer -> bitImage($tux, Escpos::IMG_DOUBLE_WIDTH); - $printer -> text("Wide Tux (bit image).\n"); - $printer -> feed(); - - $printer -> bitImage($tux, Escpos::IMG_DOUBLE_HEIGHT); - $printer -> text("Tall Tux (bit image).\n"); - $printer -> feed(); - - $printer -> bitImage($tux, Escpos::IMG_DOUBLE_WIDTH | Escpos::IMG_DOUBLE_HEIGHT); - $printer -> text("Large Tux in correct proportion (bit image).\n"); -} catch(Exception $e) { - /* Images not supported on your PHP, or image file not found */ - $printer -> text($e -> getMessage() . "\n"); + $printer -> text("These example images are printed with the older\nbit image print command. You should only use\n\$p -> bitImage() if \$p -> graphics() does not\nwork on your printer.\n\n"); + + $printer -> bitImage($tux); + $printer -> text("Regular Tux (bit image).\n"); + $printer -> feed(); + + $printer -> bitImage($tux, Printer::IMG_DOUBLE_WIDTH); + $printer -> text("Wide Tux (bit image).\n"); + $printer -> feed(); + + $printer -> bitImage($tux, Printer::IMG_DOUBLE_HEIGHT); + $printer -> text("Tall Tux (bit image).\n"); + $printer -> feed(); + + $printer -> bitImage($tux, Printer::IMG_DOUBLE_WIDTH | Printer::IMG_DOUBLE_HEIGHT); + $printer -> text("Large Tux in correct proportion (bit image).\n"); +} catch (Exception $e) { + /* Images not supported on your PHP, or image file not found */ + $printer -> text($e -> getMessage() . "\n"); } $printer -> cut(); $printer -> close(); -?> diff --git a/htdocs/includes/mike42/escpos-php/example/character-encodings-with-images.php b/htdocs/includes/mike42/escpos-php/example/character-encodings-with-images.php index a98bdbc96ae..bc99c2f1872 100644 --- a/htdocs/includes/mike42/escpos-php/example/character-encodings-with-images.php +++ b/htdocs/includes/mike42/escpos-php/example/character-encodings-with-images.php @@ -1,12 +1,17 @@ selectPrintMode(Escpos::MODE_DOUBLE_HEIGHT | Escpos::MODE_EMPHASIZED | Escpos::MODE_DOUBLE_WIDTH); - $printer -> text("Implemented languages\n"); - $printer -> selectPrintMode(); - foreach($inputsOk as $label => $str) { - $printer -> setEmphasis(true); - $printer -> text($label . ":\n"); - $printer -> setEmphasis(false); - foreach($buffers as $buffer) { - $printer -> setPrintBuffer($buffer); - $printer -> text($str); - } - $printer -> setPrintBuffer($buffers[0]); - } - $printer -> feed(); - - $printer -> selectPrintMode(Escpos::MODE_DOUBLE_HEIGHT | Escpos::MODE_EMPHASIZED | Escpos::MODE_DOUBLE_WIDTH); - $printer -> text("Works in progress\n"); - $printer -> selectPrintMode(); - foreach($inputsNotOk as $label => $str) { - $printer -> setEmphasis(true); - $printer -> text($label . ":\n"); - $printer -> setEmphasis(false); - foreach($buffers as $buffer) { - $printer -> setPrintBuffer($buffer); - $printer -> text($str); - } - $printer -> setPrintBuffer($buffers[0]); - } - $printer -> cut(); + /* Print a series of receipts containing i18n example strings */ + $printer = new Printer($connector, $profile); + $printer -> selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_EMPHASIZED | Printer::MODE_DOUBLE_WIDTH); + $printer -> text("Implemented languages\n"); + $printer -> selectPrintMode(); + foreach ($inputsOk as $label => $str) { + $printer -> setEmphasis(true); + $printer -> text($label . ":\n"); + $printer -> setEmphasis(false); + foreach ($buffers as $buffer) { + $printer -> setPrintBuffer($buffer); + $printer -> text($str); + } + $printer -> setPrintBuffer($buffers[0]); + } + $printer -> feed(); + + $printer -> selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_EMPHASIZED | Printer::MODE_DOUBLE_WIDTH); + $printer -> text("Works in progress\n"); + $printer -> selectPrintMode(); + foreach ($inputsNotOk as $label => $str) { + $printer -> setEmphasis(true); + $printer -> text($label . ":\n"); + $printer -> setEmphasis(false); + foreach ($buffers as $buffer) { + $printer -> setPrintBuffer($buffer); + $printer -> text($str); + } + $printer -> setPrintBuffer($buffers[0]); + } + $printer -> cut(); - /* Close printer */ - $printer -> close(); -} catch(Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; + /* Close printer */ + $printer -> close(); +} catch (Exception $e) { + echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; } - diff --git a/htdocs/includes/mike42/escpos-php/example/character-encodings.php b/htdocs/includes/mike42/escpos-php/example/character-encodings.php index 8a42ecd0847..a38e99fb9ea 100644 --- a/htdocs/includes/mike42/escpos-php/example/character-encodings.php +++ b/htdocs/includes/mike42/escpos-php/example/character-encodings.php @@ -1,58 +1,60 @@ selectPrintMode(Escpos::MODE_DOUBLE_HEIGHT | Escpos::MODE_EMPHASIZED | Escpos::MODE_DOUBLE_WIDTH); - $printer -> text("Implemented languages\n"); - $printer -> selectPrintMode(); - foreach($inputsOk as $label => $str) { - $printer -> setEmphasis(true); - $printer -> text($label . ":\n"); - $printer -> setEmphasis(false); - $printer -> text($str); - } - $printer -> feed(); - - $printer -> selectPrintMode(Escpos::MODE_DOUBLE_HEIGHT | Escpos::MODE_EMPHASIZED | Escpos::MODE_DOUBLE_WIDTH); - $printer -> text("Works in progress\n"); - $printer -> selectPrintMode(); - foreach($inputsNotOk as $label => $str) { - $printer -> setEmphasis(true); - $printer -> text($label . ":\n"); - $printer -> setEmphasis(false); - $printer -> text($str); - } - $printer -> cut(); + // Enter connector and capability profile (to match your printer) + $connector = new FilePrintConnector("php://stdout"); + $profile = CapabilityProfile::load("default"); + + /* Print a series of receipts containing i18n example strings */ + $printer = new Printer($connector, $profile); + $printer -> selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_EMPHASIZED | Printer::MODE_DOUBLE_WIDTH); + $printer -> text("Implemented languages\n"); + $printer -> selectPrintMode(); + foreach ($inputsOk as $label => $str) { + $printer -> setEmphasis(true); + $printer -> text($label . ":\n"); + $printer -> setEmphasis(false); + $printer -> text($str); + } + $printer -> feed(); + + $printer -> selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_EMPHASIZED | Printer::MODE_DOUBLE_WIDTH); + $printer -> text("Works in progress\n"); + $printer -> selectPrintMode(); + foreach ($inputsNotOk as $label => $str) { + $printer -> setEmphasis(true); + $printer -> text($label . ":\n"); + $printer -> setEmphasis(false); + $printer -> text($str); + } + $printer -> cut(); - /* Close printer */ - $printer -> close(); -} catch(Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; + /* Close printer */ + $printer -> close(); +} catch (Exception $e) { + echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; } - diff --git a/htdocs/includes/mike42/escpos-php/example/character-tables.php b/htdocs/includes/mike42/escpos-php/example/character-tables.php index 1ce2c5c9f1e..d2ab8bbcfa1 100644 --- a/htdocs/includes/mike42/escpos-php/example/character-tables.php +++ b/htdocs/includes/mike42/escpos-php/example/character-tables.php @@ -4,68 +4,72 @@ * for debugging character-encoding issues: If your printer does not work with * a built-in capability profile, you need to check its documentation for * supported code pages. - * + * * These are then loaded into a capability profile, which maps code page * numbers to iconv encoding names on your particular printer. This script * will print all configured code pages, so that you can check that the chosen * iconv encoding name matches the actual code page contents. - * + * * If this is correctly set up for your printer, then the driver will try its * best to map UTF-8 text into these code pages for you, allowing you to accept * arbitrary input from a database, without worrying about encoding it for the printer. */ -require_once(dirname(__FILE__) . "/../Escpos.php"); +require __DIR__ . '/../autoload.php'; +use Mike42\Escpos\Printer; +use Mike42\Escpos\PrintConnectors\FilePrintConnector; +use Mike42\Escpos\CapabilityProfile; // Enter connector and capability profile (to match your printer) $connector = new FilePrintConnector("php://stdout"); -$profile = DefaultCapabilityProfile::getInstance(); +$profile = CapabilityProfile::load("default"); $verbose = false; // Skip tables which iconv wont convert to (ie, only print characters available with UTF-8 input) /* Print a series of receipts containing i18n example strings - Code below shouldn't need changing */ -$printer = new Escpos($connector, $profile); -$codePages = $profile -> getSupportedCodePages(); +$printer = new Mike42\Escpos\Printer($connector, $profile); +$codePages = $profile -> getCodePages(); $first = true; // Print larger table for first code-page. -foreach($codePages as $table => $name) { - /* Change printer code page */ - $printer -> selectCharacterTable(255); - $printer -> selectCharacterTable($table); - /* Select & print a label for it */ - $label = $name; - if($name === false) { - $label= " (not matched to iconv table)"; - } - $printer -> setEmphasis(true); - $printer -> textRaw("Table $table: $label\n"); - $printer -> setEmphasis(false); - if($name === false && !$verbose) { - continue; // Skip non-recognised - } - /* Print a table of available characters (first table is larger than subsequent ones */ - if($first) { - $first = false; - compactCharTable($printer, 1, true); - } else { - compactCharTable($printer); - } +foreach ($codePages as $table => $page) { + /* Change printer code page */ + $printer -> selectCharacterTable(255); + $printer -> selectCharacterTable($table); + /* Select & print a label for it */ + $label = $page -> getId(); + if (!$page -> isEncodable()) { + $label= " (not supported)"; + } + $printer -> setEmphasis(true); + $printer -> textRaw("Table $table: $label\n"); + $printer -> setEmphasis(false); + if (!$page -> isEncodable() && !$verbose) { + continue; // Skip non-recognised + } + /* Print a table of available characters (first table is larger than subsequent ones */ + if ($first) { + $first = false; + compactCharTable($printer, 1, true); + } else { + compactCharTable($printer); + } } $printer -> cut(); $printer -> close(); -function compactCharTable($printer, $start = 4, $header = false) { - /* Output a compact character table for the current encoding */ - $chars = str_repeat(' ', 256); - for($i = 0; $i < 255; $i++) { - $chars[$i] = ($i > 32 && $i != 127) ? chr($i) : ' '; - } - if($header) { - $printer -> setEmphasis(true); - $printer -> textRaw(" 0123456789ABCDEF0123456789ABCDEF\n"); - $printer -> setEmphasis(false); - } - for($y = $start; $y < 8; $y++) { - $printer -> setEmphasis(true); - $printer -> textRaw(strtoupper(dechex($y * 2)) . " "); - $printer -> setEmphasis(false); - $printer -> textRaw(substr($chars, $y * 32, 32) . "\n"); - } +function compactCharTable($printer, $start = 4, $header = false) +{ + /* Output a compact character table for the current encoding */ + $chars = str_repeat(' ', 256); + for ($i = 0; $i < 255; $i++) { + $chars[$i] = ($i > 32 && $i != 127) ? chr($i) : ' '; + } + if ($header) { + $printer -> setEmphasis(true); + $printer -> textRaw(" 0123456789ABCDEF0123456789ABCDEF\n"); + $printer -> setEmphasis(false); + } + for ($y = $start; $y < 8; $y++) { + $printer -> setEmphasis(true); + $printer -> textRaw(strtoupper(dechex($y * 2)) . " "); + $printer -> setEmphasis(false); + $printer -> textRaw(substr($chars, $y * 32, 32) . "\n"); + } } diff --git a/htdocs/includes/mike42/escpos-php/example/customer-display.php b/htdocs/includes/mike42/escpos-php/example/customer-display.php new file mode 100644 index 00000000000..47947789540 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/customer-display.php @@ -0,0 +1,51 @@ + feed(); + $display -> text($line); + usleep(500000); +} + +// Finish by showing "Hello World" +$display -> clear(); +$display -> text("Hello World\n"); + +// Dont forget to close the device +$display -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/demo.php b/htdocs/includes/mike42/escpos-php/example/demo.php index 1c99e5cc880..f0e357ed431 100644 --- a/htdocs/includes/mike42/escpos-php/example/demo.php +++ b/htdocs/includes/mike42/escpos-php/example/demo.php @@ -8,8 +8,13 @@ * * @author Michael Billington */ -require_once(dirname(__FILE__) . "/../Escpos.php"); -$printer = new Escpos(); +require __DIR__ . '/../autoload.php'; +use Mike42\Escpos\Printer; +use Mike42\Escpos\PrintConnectors\FilePrintConnector; +use Mike42\Escpos\EscposImage; + +$connector = new FilePrintConnector("php://stdout"); +$printer = new Printer($connector); /* Initialize */ $printer -> initialize(); @@ -29,132 +34,132 @@ $printer -> cut(); /* Font modes */ $modes = array( - Escpos::MODE_FONT_B, - Escpos::MODE_EMPHASIZED, - Escpos::MODE_DOUBLE_HEIGHT, - Escpos::MODE_DOUBLE_WIDTH, - Escpos::MODE_UNDERLINE); -for($i = 0; $i < pow(2, count($modes)); $i++) { - $bits = str_pad(decbin($i), count($modes), "0", STR_PAD_LEFT); - $mode = 0; - for($j = 0; $j < strlen($bits); $j++) { - if(substr($bits, $j, 1) == "1") { - $mode |= $modes[$j]; - } - } - $printer -> selectPrintMode($mode); - $printer -> text("ABCDEFGHIJabcdefghijk\n"); + Printer::MODE_FONT_B, + Printer::MODE_EMPHASIZED, + Printer::MODE_DOUBLE_HEIGHT, + Printer::MODE_DOUBLE_WIDTH, + Printer::MODE_UNDERLINE); +for ($i = 0; $i < pow(2, count($modes)); $i++) { + $bits = str_pad(decbin($i), count($modes), "0", STR_PAD_LEFT); + $mode = 0; + for ($j = 0; $j < strlen($bits); $j++) { + if (substr($bits, $j, 1) == "1") { + $mode |= $modes[$j]; + } + } + $printer -> selectPrintMode($mode); + $printer -> text("ABCDEFGHIJabcdefghijk\n"); } $printer -> selectPrintMode(); // Reset $printer -> cut(); /* Underline */ -for($i = 0; $i < 3; $i++) { - $printer -> setUnderline($i); - $printer -> text("The quick brown fox jumps over the lazy dog\n"); +for ($i = 0; $i < 3; $i++) { + $printer -> setUnderline($i); + $printer -> text("The quick brown fox jumps over the lazy dog\n"); } $printer -> setUnderline(0); // Reset $printer -> cut(); /* Cuts */ $printer -> text("Partial cut\n(not available on all printers)\n"); -$printer -> cut(Escpos::CUT_PARTIAL); +$printer -> cut(Printer::CUT_PARTIAL); $printer -> text("Full cut\n"); -$printer -> cut(Escpos::CUT_FULL); +$printer -> cut(Printer::CUT_FULL); /* Emphasis */ -for($i = 0; $i < 2; $i++) { - $printer -> setEmphasis($i == 1); - $printer -> text("The quick brown fox jumps over the lazy dog\n"); +for ($i = 0; $i < 2; $i++) { + $printer -> setEmphasis($i == 1); + $printer -> text("The quick brown fox jumps over the lazy dog\n"); } $printer -> setEmphasis(false); // Reset $printer -> cut(); /* Double-strike (looks basically the same as emphasis) */ -for($i = 0; $i < 2; $i++) { - $printer -> setDoubleStrike($i == 1); - $printer -> text("The quick brown fox jumps over the lazy dog\n"); +for ($i = 0; $i < 2; $i++) { + $printer -> setDoubleStrike($i == 1); + $printer -> text("The quick brown fox jumps over the lazy dog\n"); } $printer -> setDoubleStrike(false); $printer -> cut(); /* Fonts (many printers do not have a 'Font C') */ $fonts = array( - Escpos::FONT_A, - Escpos::FONT_B, - Escpos::FONT_C); -for($i = 0; $i < count($fonts); $i++) { - $printer -> setFont($fonts[$i]); - $printer -> text("The quick brown fox jumps over the lazy dog\n"); + Printer::FONT_A, + Printer::FONT_B, + Printer::FONT_C); +for ($i = 0; $i < count($fonts); $i++) { + $printer -> setFont($fonts[$i]); + $printer -> text("The quick brown fox jumps over the lazy dog\n"); } $printer -> setFont(); // Reset $printer -> cut(); /* Justification */ $justification = array( - Escpos::JUSTIFY_LEFT, - Escpos::JUSTIFY_CENTER, - Escpos::JUSTIFY_RIGHT); -for($i = 0; $i < count($justification); $i++) { - $printer -> setJustification($justification[$i]); - $printer -> text("A man a plan a canal panama\n"); + Printer::JUSTIFY_LEFT, + Printer::JUSTIFY_CENTER, + Printer::JUSTIFY_RIGHT); +for ($i = 0; $i < count($justification); $i++) { + $printer -> setJustification($justification[$i]); + $printer -> text("A man a plan a canal panama\n"); } $printer -> setJustification(); // Reset $printer -> cut(); /* Barcodes - see barcode.php for more detail */ $printer -> setBarcodeHeight(80); -$printer->setBarcodeTextPosition ( Escpos::BARCODE_TEXT_BELOW ); +$printer->setBarcodeTextPosition(Printer::BARCODE_TEXT_BELOW); $printer -> barcode("9876"); $printer -> feed(); $printer -> cut(); /* Graphics - this demo will not work on some non-Epson printers */ try { - $logo = new EscposImage("resources/escpos-php.png"); - $imgModes = array( - Escpos::IMG_DEFAULT, - Escpos::IMG_DOUBLE_WIDTH, - Escpos::IMG_DOUBLE_HEIGHT, - Escpos::IMG_DOUBLE_WIDTH | Escpos::IMG_DOUBLE_HEIGHT - ); - foreach($imgModes as $mode) { - $printer -> graphics($logo, $mode); - } -} catch(Exception $e) { - /* Images not supported on your PHP, or image file not found */ - $printer -> text($e -> getMessage() . "\n"); + $logo = EscposImage::load("resources/escpos-php.png", false); + $imgModes = array( + Printer::IMG_DEFAULT, + Printer::IMG_DOUBLE_WIDTH, + Printer::IMG_DOUBLE_HEIGHT, + Printer::IMG_DOUBLE_WIDTH | Printer::IMG_DOUBLE_HEIGHT + ); + foreach ($imgModes as $mode) { + $printer -> graphics($logo, $mode); + } +} catch (Exception $e) { + /* Images not supported on your PHP, or image file not found */ + $printer -> text($e -> getMessage() . "\n"); } $printer -> cut(); /* Bit image */ try { - $logo = new EscposImage("resources/escpos-php.png"); - $imgModes = array( - Escpos::IMG_DEFAULT, - Escpos::IMG_DOUBLE_WIDTH, - Escpos::IMG_DOUBLE_HEIGHT, - Escpos::IMG_DOUBLE_WIDTH | Escpos::IMG_DOUBLE_HEIGHT - ); - foreach($imgModes as $mode) { - $printer -> bitImage($logo, $mode); - } -} catch(Exception $e) { - /* Images not supported on your PHP, or image file not found */ - $printer -> text($e -> getMessage() . "\n"); + $logo = EscposImage::load("resources/escpos-php.png", false); + $imgModes = array( + Printer::IMG_DEFAULT, + Printer::IMG_DOUBLE_WIDTH, + Printer::IMG_DOUBLE_HEIGHT, + Printer::IMG_DOUBLE_WIDTH | Printer::IMG_DOUBLE_HEIGHT + ); + foreach ($imgModes as $mode) { + $printer -> bitImage($logo, $mode); + } +} catch (Exception $e) { + /* Images not supported on your PHP, or image file not found */ + $printer -> text($e -> getMessage() . "\n"); } $printer -> cut(); /* QR Code - see also the more in-depth demo at qr-code.php */ $testStr = "Testing 123"; $models = array( - Escpos::QR_MODEL_1 => "QR Model 1", - Escpos::QR_MODEL_2 => "QR Model 2 (default)", - Escpos::QR_MICRO => "Micro QR code\n(not supported on all printers)"); -foreach($models as $model => $name) { - $printer -> qrCode($testStr, Escpos::QR_ECLEVEL_L, 3, $model); - $printer -> text("$name\n"); - $printer -> feed(); + Printer::QR_MODEL_1 => "QR Model 1", + Printer::QR_MODEL_2 => "QR Model 2 (default)", + Printer::QR_MICRO => "Micro QR code\n(not supported on all printers)"); +foreach ($models as $model => $name) { + $printer -> qrCode($testStr, Printer::QR_ECLEVEL_L, 3, $model); + $printer -> text("$name\n"); + $printer -> feed(); } $printer -> cut(); @@ -164,4 +169,3 @@ $printer -> pulse(); /* Always close the printer! On some PrintConnectors, no actual * data is sent until the printer is closed. */ $printer -> close(); -?> diff --git a/htdocs/includes/mike42/escpos-php/example/graphics.php b/htdocs/includes/mike42/escpos-php/example/graphics.php index 7650b6b9a08..49b02b9b0d9 100644 --- a/htdocs/includes/mike42/escpos-php/example/graphics.php +++ b/htdocs/includes/mike42/escpos-php/example/graphics.php @@ -1,32 +1,36 @@ graphics($tux); - $printer -> text("Regular Tux.\n"); - $printer -> feed(); - - $printer -> graphics($tux, Escpos::IMG_DOUBLE_WIDTH); - $printer -> text("Wide Tux.\n"); - $printer -> feed(); - - $printer -> graphics($tux, Escpos::IMG_DOUBLE_HEIGHT); - $printer -> text("Tall Tux.\n"); - $printer -> feed(); - - $printer -> graphics($tux, Escpos::IMG_DOUBLE_WIDTH | Escpos::IMG_DOUBLE_HEIGHT); - $printer -> text("Large Tux in correct proportion.\n"); - - $printer -> cut(); -} catch(Exception $e) { - /* Images not supported on your PHP, or image file not found */ - $printer -> text($e -> getMessage() . "\n"); + $tux = EscposImage::load("resources/tux.png", false); + + $printer -> graphics($tux); + $printer -> text("Regular Tux.\n"); + $printer -> feed(); + + $printer -> graphics($tux, Printer::IMG_DOUBLE_WIDTH); + $printer -> text("Wide Tux.\n"); + $printer -> feed(); + + $printer -> graphics($tux, Printer::IMG_DOUBLE_HEIGHT); + $printer -> text("Tall Tux.\n"); + $printer -> feed(); + + $printer -> graphics($tux, Printer::IMG_DOUBLE_WIDTH | Printer::IMG_DOUBLE_HEIGHT); + $printer -> text("Large Tux in correct proportion.\n"); + + $printer -> cut(); +} catch (Exception $e) { + /* Images not supported on your PHP, or image file not found */ + $printer -> text($e -> getMessage() . "\n"); } $printer -> close(); -?> diff --git a/htdocs/includes/mike42/escpos-php/example/interface/cups.php b/htdocs/includes/mike42/escpos-php/example/interface/cups.php new file mode 100644 index 00000000000..8b65ab3d4d9 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/interface/cups.php @@ -0,0 +1,19 @@ + text("Hello World!\n"); + $printer -> cut(); + + /* Close printer */ + $printer -> close(); +} catch (Exception $e) { + echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; +} diff --git a/htdocs/includes/mike42/escpos-php/example/interface/ethernet.php b/htdocs/includes/mike42/escpos-php/example/interface/ethernet.php index bfea443903c..129af5ce3aa 100644 --- a/htdocs/includes/mike42/escpos-php/example/interface/ethernet.php +++ b/htdocs/includes/mike42/escpos-php/example/interface/ethernet.php @@ -1,22 +1,22 @@ text("Hello World!\n"); - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch(Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; + $connector = new NetworkPrintConnector("10.x.x.x", 9100); + + /* Print a "Hello world" receipt" */ + $printer = new Printer($connector); + $printer -> text("Hello World!\n"); + $printer -> cut(); + + /* Close printer */ + $printer -> close(); +} catch (Exception $e) { + echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; } - diff --git a/htdocs/includes/mike42/escpos-php/example/interface/linux-usb.php b/htdocs/includes/mike42/escpos-php/example/interface/linux-usb.php index 9e1d96b91c0..2b390f658b2 100644 --- a/htdocs/includes/mike42/escpos-php/example/interface/linux-usb.php +++ b/htdocs/includes/mike42/escpos-php/example/interface/linux-usb.php @@ -1,6 +1,8 @@ text("Hello World!\n"); - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch(Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; + /* Print a "Hello world" receipt" */ + $printer = new Printer($connector); + $printer -> text("Hello World!\n"); + $printer -> cut(); + + /* Close printer */ + $printer -> close(); +} catch (Exception $e) { + echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; } - diff --git a/htdocs/includes/mike42/escpos-php/example/interface/smb.php b/htdocs/includes/mike42/escpos-php/example/interface/smb.php index 40988f553ee..fac54b342d1 100644 --- a/htdocs/includes/mike42/escpos-php/example/interface/smb.php +++ b/htdocs/includes/mike42/escpos-php/example/interface/smb.php @@ -1,51 +1,52 @@ testfile + * echo "Hello World" > testfile * ## If you need authentication, use "net use" to hook up the printer: - * # net use "\\computername\Receipt Printer" /user:Guest - * # net use "\\computername\Receipt Printer" /user:Bob secret - * # net use "\\computername\Receipt Printer" /user:workgroup\Bob secret - * copy testfile "\\computername\Receipt Printer" - * del testfile - * + * # net use "\\computername\Receipt Printer" /user:Guest + * # net use "\\computername\Receipt Printer" /user:Bob secret + * # net use "\\computername\Receipt Printer" /user:workgroup\Bob secret + * copy testfile "\\computername\Receipt Printer" + * del testfile + * * GNU/Linux: - * # No authentication - * echo "Hello World" | smbclient "//computername/Receipt Printer" -c "print -" -N - * # Guest login - * echo "Hello World" | smbclient "//computername/Receipt Printer" -U Guest -c "print -" -N + * # No authentication + * echo "Hello World" | smbclient "//computername/Receipt Printer" -c "print -" -N + * # Guest login + * echo "Hello World" | smbclient "//computername/Receipt Printer" -U Guest -c "print -" -N * # Basic username/password - * echo "Hello World" | smbclient "//computername/Receipt Printer" secret -U "Bob" -c "print -" - * # Including domain name - * echo "Hello World" | smbclient "//computername/Receipt Printer" secret -U "workgroup\\Bob" -c "print -" + * echo "Hello World" | smbclient "//computername/Receipt Printer" secret -U "Bob" -c "print -" + * # Including domain name + * echo "Hello World" | smbclient "//computername/Receipt Printer" secret -U "workgroup\\Bob" -c "print -" */ try { - // Enter the share name for your printer here, as a smb:// url format - $connector = null; - //$connector = new WindowsPrintConnector("smb://computername/Receipt Printer"); - //$connector = new WindowsPrintConnector("smb://Guest@computername/Receipt Printer"); - //$connector = new WindowsPrintConnector("smb://FooUser:secret@computername/workgroup/Receipt Printer"); - //$connector = new WindowsPrintConnector("smb://User:secret@computername/Receipt Printer"); - - /* Print a "Hello world" receipt" */ - $printer = new Escpos($connector); - $printer -> text("Hello World!\n"); - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch(Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; + // Enter the share name for your printer here, as a smb:// url format + $connector = new WindowsPrintConnector("smb://computername/Receipt Printer"); + //$connector = new WindowsPrintConnector("smb://Guest@computername/Receipt Printer"); + //$connector = new WindowsPrintConnector("smb://FooUser:secret@computername/workgroup/Receipt Printer"); + //$connector = new WindowsPrintConnector("smb://User:secret@computername/Receipt Printer"); + + /* Print a "Hello world" receipt" */ + $printer = new Printer($connector); + $printer -> text("Hello World!\n"); + $printer -> cut(); + + /* Close printer */ + $printer -> close(); +} catch (Exception $e) { + echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; } diff --git a/htdocs/includes/mike42/escpos-php/example/interface/windows-lpt.php b/htdocs/includes/mike42/escpos-php/example/interface/windows-lpt.php index 76294425cdc..e8fef286bd8 100644 --- a/htdocs/includes/mike42/escpos-php/example/interface/windows-lpt.php +++ b/htdocs/includes/mike42/escpos-php/example/interface/windows-lpt.php @@ -1,30 +1,31 @@ LPT1 + * echo "Hello World" > LPT1 */ try { - $connector = null; - //$connector = new WindowsPrintConnector("LPT1"); - - // A FilePrintConnector will also work, but on non-Windows systems, writes - // to an actual file called 'LPT1' rather than giving a useful error. - // $connector = new FilePrintConnector("LPT1"); + $connector = new WindowsPrintConnector("LPT1"); + + // A FilePrintConnector will also work, but on non-Windows systems, writes + // to an actual file called 'LPT1' rather than giving a useful error. + // $connector = new FilePrintConnector("LPT1"); - /* Print a "Hello world" receipt" */ - $printer = new Escpos($connector); - $printer -> text("Hello World!\n"); - $printer -> cut(); + /* Print a "Hello world" receipt" */ + $printer = new Printer($connector); + $printer -> text("Hello World!\n"); + $printer -> cut(); - /* Close printer */ - $printer -> close(); -} catch(Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; + /* Close printer */ + $printer -> close(); +} catch (Exception $e) { + echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; } diff --git a/htdocs/includes/mike42/escpos-php/example/interface/windows-usb.php b/htdocs/includes/mike42/escpos-php/example/interface/windows-usb.php index d4b550e2f93..79776994231 100644 --- a/htdocs/includes/mike42/escpos-php/example/interface/windows-usb.php +++ b/htdocs/includes/mike42/escpos-php/example/interface/windows-usb.php @@ -1,32 +1,34 @@ testfile - * copy testfile "\\%COMPUTERNAME%\Receipt Printer" - * del testfile + * + * echo "Hello World" > testfile + * copy testfile "\\%COMPUTERNAME%\Receipt Printer" + * del testfile */ try { - // Enter the share name for your USB printer here - $connector = null; - //$connector = new WindowsPrintConnector("Receipt Printer"); + // Enter the share name for your USB printer here + $connector = null; + //$connector = new WindowsPrintConnector("Receipt Printer"); - /* Print a "Hello world" receipt" */ - $printer = new Escpos($connector); - $printer -> text("Hello World!\n"); - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch(Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; + /* Print a "Hello world" receipt" */ + $printer = new Printer($connector); + $printer -> text("Hello World!\n"); + $printer -> cut(); + + /* Close printer */ + $printer -> close(); +} catch (Exception $e) { + echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; } diff --git a/htdocs/includes/mike42/escpos-php/example/margins-and-spacing.php b/htdocs/includes/mike42/escpos-php/example/margins-and-spacing.php new file mode 100644 index 00000000000..296a7b0bc73 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/margins-and-spacing.php @@ -0,0 +1,48 @@ + setEmphasis(true); +$printer -> text("Line spacing\n"); +$printer -> setEmphasis(false); +foreach(array(16, 32, 64, 128, 255) as $spacing) { + $printer -> setLineSpacing($spacing); + $printer -> text("Spacing $spacing: The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n"); +} +$printer -> setLineSpacing(); // Back to default +*/ + +/* Stuff around with left margin */ +$printer -> setEmphasis(true); +$printer -> text("Left margin\n"); +$printer -> setEmphasis(false); +$printer -> text("Default left\n"); +foreach(array(1, 2, 4, 8, 16, 32, 64, 128, 256, 512) as $margin) { + $printer -> setPrintLeftMargin($margin); + $printer -> text("left margin $margin\n"); +} +/* Reset left */ +$printer -> setPrintLeftMargin(0); + +/* Stuff around with page width */ +$printer -> setEmphasis(true); +$printer -> text("Page width\n"); +$printer -> setEmphasis(false); +$printer -> setJustification(Printer::JUSTIFY_RIGHT); +$printer -> text("Default width\n"); +foreach(array(512, 256, 128, 64) as $width) { + $printer -> setPrintWidth($width); + $printer -> text("page width $width\n"); +} + +/* Printer shutdown */ +$printer -> cut(); +$printer -> close(); + diff --git a/htdocs/includes/mike42/escpos-php/example/pdf417-code.php b/htdocs/includes/mike42/escpos-php/example/pdf417-code.php new file mode 100644 index 00000000000..6735ae6ee4d --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/pdf417-code.php @@ -0,0 +1,95 @@ + pdf417Code($testStr); +$printer -> text("Most simple example\n"); +$printer -> feed(); + +// Demo that alignment is the same as text +$printer -> setJustification(Printer::JUSTIFY_CENTER); +$printer -> pdf417Code($testStr, 3, 3, 2); +$printer -> text("Same content, narrow and centred\n"); +$printer -> setJustification(); +$printer -> feed(); + +// Demo of error correction +title($printer, "Error correction\n"); +$ec = array(0.1, 0.5, 1.0, 2.0, 4.0); +foreach ($ec as $level) { + $printer -> pdf417Code($testStr, 3, 3, 0, $level); + $printer -> text("Error correction ratio $level\n"); + $printer -> feed(); +} + +// Change size +title($printer, "Pixel size\n"); +$sizes = array( + 2 => "(minimum)", + 3 => "(default)", + 4 => "", + 8 => "(maximum)"); +foreach ($sizes as $size => $label) { + $printer -> pdf417Code($testStr, $size); + $printer -> text("Module width $size dots $label\n"); + $printer -> feed(); +} + +// Change height +title($printer, "Height multiplier\n"); +$sizes = array( + 2 => "(minimum)", + 3 => "(default)", + 4 => "", + 8 => "(maximum)"); +foreach ($sizes as $size => $label) { + $printer -> pdf417Code($testStr, 3, $size); + $printer -> text("Height multiplier $size $label\n"); + $printer -> feed(); +} + +// Chage data column count +title($printer, "Data column count\n"); +$columnCounts = array( + 0 => "(auto, default)", + 1 => "", + 2 => "", + 3 => "", + 4 => "", + 5 => "", + 30 => "(maximum, doesnt fit!)"); +foreach ($columnCounts as $columnCount => $label) { + $printer -> pdf417Code($testStr, 3, 3, $columnCount); + $printer -> text("Column count $columnCount $label\n"); + $printer -> feed(); +} + +// Change options +title($printer, "Options\n"); +$models = array( + Printer::PDF417_STANDARD => "Standard", + Printer::PDF417_TRUNCATED => "Truncated"); +foreach ($models as $model => $name) { + $printer -> pdf417Code($testStr, 3, 3, 0, 0.10, $model); + $printer -> text("$name\n"); + $printer -> feed(); +} + +// Cut & close +$printer -> cut(); +$printer -> close(); + +function title(Printer $printer, $str) +{ + $printer -> selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_DOUBLE_WIDTH); + $printer -> text($str); + $printer -> selectPrintMode(); +} diff --git a/htdocs/includes/mike42/escpos-php/example/print-from-html.php b/htdocs/includes/mike42/escpos-php/example/print-from-html.php index f0751d7a4ae..640132e11b0 100644 --- a/htdocs/includes/mike42/escpos-php/example/print-from-html.php +++ b/htdocs/includes/mike42/escpos-php/example/print-from-html.php @@ -1,11 +1,20 @@ 225 below) and printing w/ Escpos::IMG_DOUBLE_WIDTH | Escpos::IMG_DOUBLE_HEIGHT */ try { - /* Set up command */ - $source = "http://en.m.wikipedia.org/wiki/ESC/P"; - $width = 550; - $dest = tempnam(sys_get_temp_dir(), 'escpos') . ".png"; - $cmd = sprintf("wkhtmltoimage -n -q --width %s %s %s", - escapeshellarg($width), - escapeshellarg($source), - escapeshellarg($dest)); - - /* Run wkhtmltoimage */ - ob_start(); - system($cmd); // Can also use popen() for better control of process - $outp = ob_get_contents(); - ob_end_clean(); - if(!file_exists($dest)) { - throw new Exception("Command $cmd failed: $outp"); - } + /* Set up command */ + $source = __DIR__ . "/resources/document.html"; + $width = 550; + $dest = tempnam(sys_get_temp_dir(), 'escpos') . ".png"; + $command = sprintf( + "xvfb-run wkhtmltoimage -n -q --width %s %s %s", + escapeshellarg($width), + escapeshellarg($source), + escapeshellarg($dest) + ); - /* Load up the image */ - try { - $img = new EscposImage($dest); - } catch(Exception $e) { - unlink($dest); - throw $e; - } - unlink($dest); + /* Test for dependencies */ + foreach (array("xvfb-run", "wkhtmltoimage") as $cmd) { + $testCmd = sprintf("which %s", escapeshellarg($cmd)); + exec($testCmd, $testOut, $testStatus); + if ($testStatus != 0) { + throw new Exception("You require $cmd but it could not be found"); + } + } - /* Print it */ - $printer = new Escpos(); // Add connector for your printer here. - $printer -> bitImage($img); // bitImage() seems to allow larger images than graphics() on the TM-T20. - $printer -> cut(); - $printer -> close(); -} catch(Exception $e) { - echo $e -> getMessage(); + + /* Run wkhtmltoimage */ + $descriptors = array( + 1 => array("pipe", "w"), + 2 => array("pipe", "w"), + ); + $process = proc_open($command, $descriptors, $fd); + if (is_resource($process)) { + /* Read stdout */ + $outputStr = stream_get_contents($fd[1]); + fclose($fd[1]); + /* Read stderr */ + $errorStr = stream_get_contents($fd[2]); + fclose($fd[2]); + /* Finish up */ + $retval = proc_close($process); + if ($retval != 0) { + throw new Exception("Command $cmd failed: $outputStr $errorStr"); + } + } else { + throw new Exception("Command '$cmd' failed to start."); + } + + /* Load up the image */ + try { + $img = EscposImage::load($dest); + } catch (Exception $e) { + unlink($dest); + throw $e; + } + unlink($dest); + + /* Print it */ + $printer -> bitImage($img); // bitImage() seems to allow larger images than graphics() on the TM-T20. bitImageColumnFormat() is another option. + $printer -> cut(); +} catch (Exception $e) { + echo $e -> getMessage(); +} finally { + $printer -> close(); } - diff --git a/htdocs/includes/mike42/escpos-php/example/print-from-pdf.php b/htdocs/includes/mike42/escpos-php/example/print-from-pdf.php index ba6a4c67a96..23469e8a00f 100644 --- a/htdocs/includes/mike42/escpos-php/example/print-from-pdf.php +++ b/htdocs/includes/mike42/escpos-php/example/print-from-pdf.php @@ -1,5 +1,9 @@ graphics($page); - } - $printer -> cut(); - $printer -> close(); -} catch(Exception $e) { - /* + $pages = ImagickEscposImage::loadPdf($pdf); + foreach ($pages as $page) { + $printer -> graphics($page); + } + $printer -> cut(); +} catch (Exception $e) { + /* * loadPdf() throws exceptions if files or not found, or you don't have the * imagick extension to read PDF's */ - echo $e -> getMessage() . "\n"; - exit(0); + echo $e -> getMessage() . "\n"; +} finally { + $printer -> close(); } @@ -33,11 +38,12 @@ try { * * Reduce the page width further if necessary: if it extends past the printing area, your prints will be very slow. */ -$printer = new Escpos(); +$connector = new FilePrintConnector("php://stdout"); +$printer = new Printer($connector); $pdf = 'resources/document.pdf'; -$pages = EscposImage::loadPdf($pdf, 260); -foreach($pages as $page) { - $printer -> graphics($page, Escpos::IMG_DOUBLE_HEIGHT | Escpos::IMG_DOUBLE_WIDTH); +$pages = ImagickEscposImage::loadPdf($pdf, 260); +foreach ($pages as $page) { + $printer -> graphics($page, Printer::IMG_DOUBLE_HEIGHT | Printer::IMG_DOUBLE_WIDTH); } $printer -> cut(); $printer -> close(); @@ -51,21 +57,22 @@ $printer -> close(); * * [1]After printing, the pixels are loaded and formatted for the print command you used, so even a raspberry pi can print complex PDF's quickly. */ -$printer = new Escpos(); +$connector = new FilePrintConnector("php://stdout"); +$printer = new Printer($connector); $pdf = 'resources/document.pdf'; $ser = 'resources/document.z'; -if(!file_exists($ser)) { - $pages = EscposImage::loadPdf($pdf); +if (!file_exists($ser)) { + $pages = ImagickEscposImage::loadPdf($pdf); } else { - $pages = unserialize(gzuncompress(file_get_contents($ser))); + $pages = unserialize(gzuncompress(file_get_contents($ser))); } -foreach($pages as $page) { - $printer -> graphics($page); +foreach ($pages as $page) { + $printer -> graphics($page); } $printer -> cut(); $printer -> close(); -if(!file_exists($ser)) { - file_put_contents($ser, gzcompress(serialize($pages))); +if (!file_exists($ser)) { + file_put_contents($ser, gzcompress(serialize($pages))); } diff --git a/htdocs/includes/mike42/escpos-php/example/qr-code.php b/htdocs/includes/mike42/escpos-php/example/qr-code.php index dbf21aaedf4..f57c2b8270d 100644 --- a/htdocs/includes/mike42/escpos-php/example/qr-code.php +++ b/htdocs/includes/mike42/escpos-php/example/qr-code.php @@ -1,7 +1,11 @@ text("Most simple example\n"); $printer -> feed(); // Demo that alignment is the same as text -$printer -> setJustification(Escpos::JUSTIFY_CENTER); +$printer -> setJustification(Printer::JUSTIFY_CENTER); $printer -> qrCode($testStr); $printer -> text("Same example, centred\n"); $printer -> setJustification(); $printer -> feed(); - + // Demo of numeric data being packed more densly title($printer, "Data encoding\n"); $test = array( - "Numeric" => "0123456789012345678901234567890123456789", - "Alphanumeric" => "abcdefghijklmnopqrstuvwxyzabcdefghijklmn", - "Binary" => str_repeat("\0", 40)); -foreach($test as $type => $data) { - $printer -> qrCode($data); - $printer -> text("$type\n"); - $printer -> feed(); + "Numeric" => "0123456789012345678901234567890123456789", + "Alphanumeric" => "abcdefghijklmnopqrstuvwxyzabcdefghijklmn", + "Binary" => str_repeat("\0", 40)); +foreach ($test as $type => $data) { + $printer -> qrCode($data); + $printer -> text("$type\n"); + $printer -> feed(); } // Demo of error correction title($printer, "Error correction\n"); $ec = array( - Escpos::QR_ECLEVEL_L => "L", - Escpos::QR_ECLEVEL_M => "M", - Escpos::QR_ECLEVEL_Q => "Q", - Escpos::QR_ECLEVEL_H => "H"); -foreach($ec as $level => $name) { - $printer -> qrCode($testStr, $level); - $printer -> text("Error correction $name\n"); - $printer -> feed(); + Printer::QR_ECLEVEL_L => "L", + Printer::QR_ECLEVEL_M => "M", + Printer::QR_ECLEVEL_Q => "Q", + Printer::QR_ECLEVEL_H => "H"); +foreach ($ec as $level => $name) { + $printer -> qrCode($testStr, $level); + $printer -> text("Error correction $name\n"); + $printer -> feed(); } // Change size title($printer, "Pixel size\n"); $sizes = array( - 1 => "(minimum)", - 2 => "", - 3 => "(default)", - 4 => "", - 5 => "", - 10 => "", - 16 => "(maximum)"); -foreach($sizes as $size => $label) { - $printer -> qrCode($testStr, Escpos::QR_ECLEVEL_L, $size); - $printer -> text("Pixel size $size $label\n"); - $printer -> feed(); + 1 => "(minimum)", + 2 => "", + 3 => "(default)", + 4 => "", + 5 => "", + 10 => "", + 16 => "(maximum)"); +foreach ($sizes as $size => $label) { + $printer -> qrCode($testStr, Printer::QR_ECLEVEL_L, $size); + $printer -> text("Pixel size $size $label\n"); + $printer -> feed(); } // Change model title($printer, "QR model\n"); $models = array( - Escpos::QR_MODEL_1 => "QR Model 1", - Escpos::QR_MODEL_2 => "QR Model 2 (default)", - Escpos::QR_MICRO => "Micro QR code\n(not supported on all printers)"); -foreach($models as $model => $name) { - $printer -> qrCode($testStr, Escpos::QR_ECLEVEL_L, 3, $model); - $printer -> text("$name\n"); - $printer -> feed(); + Printer::QR_MODEL_1 => "QR Model 1", + Printer::QR_MODEL_2 => "QR Model 2 (default)", + Printer::QR_MICRO => "Micro QR code\n(not supported on all printers)"); +foreach ($models as $model => $name) { + $printer -> qrCode($testStr, Printer::QR_ECLEVEL_L, 3, $model); + $printer -> text("$name\n"); + $printer -> feed(); } // Cut & close $printer -> cut(); $printer -> close(); -function title(Escpos $printer, $str) { - $printer -> selectPrintMode(Escpos::MODE_DOUBLE_HEIGHT | Escpos::MODE_DOUBLE_WIDTH); - $printer -> text($str); - $printer -> selectPrintMode(); +function title(Printer $printer, $str) +{ + $printer -> selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_DOUBLE_WIDTH); + $printer -> text($str); + $printer -> selectPrintMode(); } diff --git a/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.html b/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.html new file mode 100644 index 00000000000..c3d307a94d1 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.html @@ -0,0 +1,76 @@ + + + + + RawBT Integration Demo + + + + + + + +black & white picture +

    RawBT Integration Demo

    +
    +
    +    window.location.href = ajax_backend_data;
    +
    +
    +
    + + +

    Visit RawBT site

    + + diff --git a/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.php b/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.php new file mode 100644 index 00000000000..45a4e8fcde2 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.php @@ -0,0 +1,145 @@ +getSupportsGraphics()) { + $printer->graphics($logo); + } + if ($profile->getSupportsBitImageRaster() && !$profile->getSupportsGraphics()) { + $printer->bitImage($logo); + } + + /* Name of shop */ + $printer->setJustification(Printer::JUSTIFY_CENTER); + $printer->selectPrintMode(Printer::MODE_DOUBLE_WIDTH); + $printer->text("ExampleMart Ltd.\n"); + $printer->selectPrintMode(); + $printer->text("Shop No. 42.\n"); + $printer->feed(); + + + /* Title of receipt */ + $printer->setEmphasis(true); + $printer->text("SALES INVOICE\n"); + $printer->setEmphasis(false); + + /* Items */ + $printer->setJustification(Printer::JUSTIFY_LEFT); + $printer->setEmphasis(true); + $printer->text(new item('', '$')); + $printer->setEmphasis(false); + foreach ($items as $item) { + $printer->text($item->getAsString(32)); // for 58mm Font A + } + $printer->setEmphasis(true); + $printer->text($subtotal->getAsString(32)); + $printer->setEmphasis(false); + $printer->feed(); + + /* Tax and total */ + $printer->text($tax->getAsString(32)); + $printer->selectPrintMode(Printer::MODE_DOUBLE_WIDTH); + $printer->text($total->getAsString(32)); + $printer->selectPrintMode(); + + /* Footer */ + $printer->feed(2); + $printer->setJustification(Printer::JUSTIFY_CENTER); + $printer->text("Thank you for shopping\n"); + $printer->text("at ExampleMart\n"); + $printer->text("For trading hours,\n"); + $printer->text("please visit example.com\n"); + $printer->feed(2); + $printer->text($date . "\n"); + + /* Barcode Default look */ + + $printer->barcode("ABC", Printer::BARCODE_CODE39); + $printer->feed(); + $printer->feed(); + + +// Demo that alignment QRcode is the same as text + $printer2 = new Printer($connector); // dirty printer profile hack !! + $printer2->setJustification(Printer::JUSTIFY_CENTER); + $printer2->qrCode("https://rawbt.ru/mike42", Printer::QR_ECLEVEL_M, 8); + $printer2->text("rawbt.ru/mike42\n"); + $printer2->setJustification(); + $printer2->feed(); + + + /* Cut the receipt and open the cash drawer */ + $printer->cut(); + $printer->pulse(); + +} catch (Exception $e) { + echo $e->getMessage(); +} finally { + $printer->close(); +} + +/* A wrapper to do organise item names & prices into columns */ + +class item +{ + private $name; + private $price; + private $dollarSign; + + public function __construct($name = '', $price = '', $dollarSign = false) + { + $this->name = $name; + $this->price = $price; + $this->dollarSign = $dollarSign; + } + + public function getAsString($width = 48) + { + $rightCols = 10; + $leftCols = $width - $rightCols; + if ($this->dollarSign) { + $leftCols = $leftCols / 2 - $rightCols / 2; + } + $left = str_pad($this->name, $leftCols); + + $sign = ($this->dollarSign ? '$ ' : ''); + $right = str_pad($sign . $this->price, $rightCols, ' ', STR_PAD_LEFT); + return "$left$right\n"; + } + + public function __toString() + { + return $this->getAsString(); + } + +} diff --git a/htdocs/includes/mike42/escpos-php/example/receipt-with-logo.php b/htdocs/includes/mike42/escpos-php/example/receipt-with-logo.php index 8322c09c750..b094e9f2b2a 100644 --- a/htdocs/includes/mike42/escpos-php/example/receipt-with-logo.php +++ b/htdocs/includes/mike42/escpos-php/example/receipt-with-logo.php @@ -1,12 +1,18 @@ setJustification(Escpos::JUSTIFY_CENTER); +$printer -> setJustification(Printer::JUSTIFY_CENTER); $printer -> graphics($logo); /* Name of shop */ -$printer -> selectPrintMode(Escpos::MODE_DOUBLE_WIDTH); +$printer -> selectPrintMode(Printer::MODE_DOUBLE_WIDTH); $printer -> text("ExampleMart Ltd.\n"); $printer -> selectPrintMode(); $printer -> text("Shop No. 42.\n"); @@ -36,12 +42,12 @@ $printer -> text("SALES INVOICE\n"); $printer -> setEmphasis(false); /* Items */ -$printer -> setJustification(Escpos::JUSTIFY_LEFT); +$printer -> setJustification(Printer::JUSTIFY_LEFT); $printer -> setEmphasis(true); $printer -> text(new item('', '$')); $printer -> setEmphasis(false); -foreach($items as $item) { - $printer -> text($item); +foreach ($items as $item) { + $printer -> text($item); } $printer -> setEmphasis(true); $printer -> text($subtotal); @@ -50,13 +56,13 @@ $printer -> feed(); /* Tax and total */ $printer -> text($tax); -$printer -> selectPrintMode(Escpos::MODE_DOUBLE_WIDTH); +$printer -> selectPrintMode(Printer::MODE_DOUBLE_WIDTH); $printer -> text($total); $printer -> selectPrintMode(); /* Footer */ $printer -> feed(2); -$printer -> setJustification(Escpos::JUSTIFY_CENTER); +$printer -> setJustification(Printer::JUSTIFY_CENTER); $printer -> text("Thank you for shopping at ExampleMart\n"); $printer -> text("For trading hours, please visit example.com\n"); $printer -> feed(2); @@ -69,28 +75,30 @@ $printer -> pulse(); $printer -> close(); /* A wrapper to do organise item names & prices into columns */ -class item { - private $name; - private $price; - private $dollarSign; +class item +{ + private $name; + private $price; + private $dollarSign; - public function __construct($name = '', $price = '', $dollarSign = false) { - $this -> name = $name; - $this -> price = $price; - $this -> dollarSign = $dollarSign; - } - - public function __toString() { - $rightCols = 10; - $leftCols = 38; - if($this -> dollarSign) { - $leftCols = $leftCols / 2 - $rightCols / 2; - } - $left = str_pad($this -> name, $leftCols) ; - - $sign = ($this -> dollarSign ? '$ ' : ''); - $right = str_pad($sign . $this -> price, $rightCols, ' ', STR_PAD_LEFT); - return "$left$right\n"; - } + public function __construct($name = '', $price = '', $dollarSign = false) + { + $this -> name = $name; + $this -> price = $price; + $this -> dollarSign = $dollarSign; + } + + public function __toString() + { + $rightCols = 10; + $leftCols = 38; + if ($this -> dollarSign) { + $leftCols = $leftCols / 2 - $rightCols / 2; + } + $left = str_pad($this -> name, $leftCols) ; + + $sign = ($this -> dollarSign ? '$ ' : ''); + $right = str_pad($sign . $this -> price, $rightCols, ' ', STR_PAD_LEFT); + return "$left$right\n"; + } } -?> diff --git a/htdocs/includes/mike42/escpos-php/example/resources/character-encoding-test-strings.inc b/htdocs/includes/mike42/escpos-php/example/resources/character-encoding-test-strings.inc index caca76c4479..000b3bd59a2 100644 --- a/htdocs/includes/mike42/escpos-php/example/resources/character-encoding-test-strings.inc +++ b/htdocs/includes/mike42/escpos-php/example/resources/character-encoding-test-strings.inc @@ -3,21 +3,22 @@ * on the default profile, so you can use them to test modified profiles (using the wrong * profile for a printer produces mojibake) */ $inputsOk = array( - "Danish" => "Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Wolther spillede på xylofon.\n", - "German" => "Falsches Üben von Xylophonmusik quält jeden größeren Zwerg.\n", - "Greek" => "Ξεσκεπάζω την ψυχοφθόρα βδελυγμία\n", - "English" => "The quick brown fox jumps over the lazy dog.\n", - "Spanish" => "El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y frío, añoraba a su querido cachorro.\n", - "French" => "Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en canoë au delà des îles, près du mälström où brûlent les novæ.\n", - "Irish Gaelic" => "D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh.\n", - "Hungarian" => "Árvíztűrő tükörfúrógép.\n", - "Icelandic" => "Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa.\n", - "Latvian" => "Glāžšķūņa rūķīši dzērumā čiepj Baha koncertflīģeļu vākus.\n", - "Polish" => "Pchnąć w tę łódź jeża lub ośm skrzyń fig.\n", - "Russian" => "В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!\n", - "Turkish" => "Pijamalı hasta, yağız şoföre çabucak güvendi.\n", - "Japanese (Katakana half-width)" => implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウイノオクヤマ ケフコエテ アサキユメミシ エヒモセスン")) . "\n" - ); + "Danish" => "Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Wolther spillede på xylofon.\n", + "German" => "Falsches Üben von Xylophonmusik quält jeden größeren Zwerg.\n", + "Greek" => "Ξεσκεπάζω την ψυχοφθόρα βδελυγμία\n", + "English" => "The quick brown fox jumps over the lazy dog.\n", + "Spanish" => "El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y frío, añoraba a su querido cachorro.\n", + "French" => "Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en canoë au delà des îles, près du mälström où brûlent les novæ.\n", + "Irish Gaelic" => "D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh.\n", + "Hungarian" => "Árvíztűrő tükörfúrógép.\n", + "Icelandic" => "Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa.\n", + "Latvian" => "Glāžšķūņa rūķīši dzērumā čiepj Baha koncertflīģeļu vākus.\n", + "Polish" => "Pchnąć w tę łódź jeża lub ośm skrzyń fig.\n", + "Russian" => "В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!\n", + "Turkish" => "Pijamalı hasta, yağız şoföre çabucak güvendi.\n", + "Japanese (Katakana half-width)" => implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウイノオクヤマ ケフコエテ アサキユメミシ エヒモセスン")) . "\n", + "Vietnamese" => "Tiếng Việt, còn gọi tiếng Việt Nam hay Việt ngữ, là ngôn ngữ của người Việt (người Kinh) và là ngôn ngữ chính thức tại Việt Nam.\n" + ); /* * These strings are not expected to print correctly, if at all, even on an Epson printer. This is due to a mix of @@ -26,10 +27,9 @@ $inputsOk = array( * They are included here as a collection of things not yet implemented. */ $inputsNotOk = array( - "Thai (No character encoder available)" => "นายสังฆภัณฑ์ เฮงพิทักษ์ฝั่ง ผู้เฒ่าซึ่งมีอาชีพเป็นฅนขายฃวด ถูกตำรวจปฏิบัติการจับฟ้องศาล ฐานลักนาฬิกาคุณหญิงฉัตรชฎา ฌานสมาธิ\n", - "Japanese (Hiragana)" => implode("\n", array("いろはにほへとちりぬるを", " わかよたれそつねならむ", "うゐのおくやまけふこえて", "あさきゆめみしゑひもせす")) . "\n", - "Japanese (Katakana full-width)" => implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン")) . "\n", - "Arabic (RTL not supported, encoding issues)" => "صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ" . "\n", - "Hebrew (RTL not supported, line break issues)" => "דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה" . "\n" - ); - + "Thai (No character encoder available)" => "นายสังฆภัณฑ์ เฮงพิทักษ์ฝั่ง ผู้เฒ่าซึ่งมีอาชีพเป็นฅนขายฃวด ถูกตำรวจปฏิบัติการจับฟ้องศาล ฐานลักนาฬิกาคุณหญิงฉัตรชฎา ฌานสมาธิ\n", + "Japanese (Hiragana)" => implode("\n", array("いろはにほへとちりぬるを", " わかよたれそつねならむ", "うゐのおくやまけふこえて", "あさきゆめみしゑひもせす")) . "\n", + "Japanese (Katakana full-width)" => implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン")) . "\n", + "Arabic (RTL not supported, encoding issues)" => "صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ" . "\n", + "Hebrew (RTL not supported, line break issues)" => "דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה" . "\n" + ); diff --git a/htdocs/includes/mike42/escpos-php/example/resources/document.html b/htdocs/includes/mike42/escpos-php/example/resources/document.html new file mode 100644 index 00000000000..bb413aa1d3d --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/resources/document.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + + +

    + + This is a simple document. For receipts involving complex formatting, + non-monospace fonts, advanced character encodings, or vector graphics, + you can always create and render HTML instead. +

    +

    + The printing will be a lot slower, but you have full access to things like unicode and SVG. +

    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua.

    +

    Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor + in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur.

    +

    Excepteur sint occaecat cupidatat non proident, sunt in culpa + qui officia deserunt mollit anim id est laborum.

    + + diff --git a/htdocs/includes/mike42/escpos-php/example/resources/document.z b/htdocs/includes/mike42/escpos-php/example/resources/document.z index cb0473875589c9505bfaa40eec9fb6bb930e59a6..c19e213227aa0fd1d601285fc03b6caa3427b1ee 100644 GIT binary patch literal 18900 zcmeFZXIN8P+b;U9rQ#9^O*8RMDHbKlRnpXrZTo$mD# zSxlwxe@nVv@wU{A%)%Y5YEdSMA3Mha_s=YMFQ}L^{A1WN;twQ$VwY9m^`hcJ$QaG= z`AB!(ugahAS!2%^bWGU`MQp5v{KE5%{gLdtqm%G+Ug+>;x18yHn!_)7bZ6x<0qRM{8S^75vN1-hYYRLqn3K%<83G989Wkc z+;Hq!DGDguH}yMRs%S!+2GZ+8xQlAGA(am!6JS*KlZFHHZO5UF)b+sKk)q*A<#Ye~ zkB8|)-Vg90YHJjWIqK71S!L%$aKqN(1O`qKN21HNatbxPODrk31oc7GCDVu^sI2Q* z9#fDbKT1Az?qAk4LRl7rUr`VTMF96(c!Kw@{HW6pQ3wR+0N-aIQmo9zuAYx{7kOIT z%HmB>boSw$$3>Li7rdev_tw`cOM6tTzgE8q^fhI{^w$KV@>a5LoTYufn(cJ@Wha1q zpL@eM_pm@EL)J&jBaMCWH>Tk)KAPXH@*cbEetGA4H%paZwXc0zDtCO@OvPOXikW;C zGT-Nw41n4nK;Qh_(Pt`26jV5uE`*?aKlzmAN1$5-5?O zv?8``w|5lm9agRBRu?v>M5Q&|;g5te=`_Ct6A-@9L*@}&Afs4tHv-G)TqlplKUhK= zfv6t}cDKeWuAxurGTEaDNmmn$K^Z>ya(xZyoj=PSTYi2a^yS65P*a7j`$Q?g>QCpz zXab*z72c16qUHf~?JaX9e4Nd1@5UZaJ*JFd!@_EIBO*OpnjLiV?)A#Bg{^MiqkRrm zZ3u=mb|S^CWx5K6*jGCY}+qaA-!&Jl`=*~%NavFS zP=tE1oOVo={wqS3WdKdir)Cj~x@+c;DyO1bHJ~1yeeq>^eipR*7v(%=?(UU%hfapU z=!F}K0z!3J|BAavG0XS-?x;&0czDaAYUpjF*VX4kw_A_s!qJ;JY42^)5(G5;aSkFm#ex1QCR4Tn1IXYAwrp;K@e}J#8ZLDK;`T# zqYrA7dxjuH>5fAK!9dGF^%Gt`84G2R0v1Al{@esPp<;YMbX!np!P$L%_7VU9B~saC zN@T#VLCWv8=ngBOM6CbdbLuD*2dJ5y%+}DQ0U7G3A|mjGvOb$w<>N_Pwp?{;Vv8Uf z3VXiG7O*?ON*sQsQg>hv&(4OfILXu2&Z4jwL*hfqLh}aC4UOAIQUw3FGG$#&PYHIH zYH25c{WnBDe~I(_UN<3W5A%rmy(Lp5ZHzO*+sYk<-TqQ%*bxtWHsoFF+F}6O2zEXr z6dG{0l5rvEhihoFU%Y$D`?ZS!ZUNTLb4j`@EotmH+eO8PwPI1)t|fY@Q)Zsx?rP#v z*&K70lUd*WWUN0-==f;-%!228DFSTsG&r=>s@z}AXf8fajqa=asqR8uUx~0@xD+98 zH_zU?JXCmAEITi@u~bkiL(Nx)Z>sDC8o&DScD$V}`ZM6&{uPzAczH(&Otau|8Nyh;sNe{$7GU=<1sQ2FhM_ zq3sXdNrL!?SaMGl+!iEp=wpL_{z929uTufN()lM*JR(%0`e}SSQbw(mdpz& zlM7vX59YBh32@ss0I|ttLnBZz-00*76srr46cB%;G+^_7fj1W^?rT2uJx#8T+bq6j zaIh0iNOGIF%&Y#aSnI3eL)C$YwwGKlw|K-}MEW5x`|45(rn3WPtXjd^`20ZU3YhFWFZSP-$i02$9oU@H0 zz=fWzW~@s3)!=Qe9*CmL7d7g)GmW&k`8}A+6V3Otu^45)QrrJ?V@S_!c15cW%CGjr zV02vmu8X_)bR&0;+Mk0S>2~%`tv$w+u}_DtSm@T+gL2q+wlLv433|~wlXA6jN=C(p zTcj=S_|}7))NCs+uZER^gbNe6`+30b2tt1-tz@9vEn)H4^~y%SNw2EKqproLUUwQ4 zJG&Pq0O^fp%b=l=i=NY10k8oVn%_NeaoX%ti#T@?bm;8n*aC4NKC}8oR7IMs45Vt5 z?a8>#47K~;Pe3N%&qKQ&eNgcu`$}khQUP>J{$r(?a7NX22OlN6?^zNL3LDic4e*)b zf{X@op|`)q zV1|C1{SN3P-?4@dg=Oiob$kILoJ6RPCP=D95fdy)OC;$6@chA27VQMLJ`9>>$Y{Dz0wXW|6$8CtP@1y0Kz&DOTKSw}|T4bvO z@9+jgn_@*MCsLC|Ll~ptG{J@Z0pLMX$hqs5vs9DkKyx_jO zER$a%GcgxY*mXRk_3m~Rdr>3{ScLz*PSheQ=4am9jBK{;j0t}oE_CDW2G21lhYLM2 zC5?HVzuge$p2PlNRZsYBz)notH)S~iJv5@yHWPtY3eNbDShtu1X;Cako%vp(D#+pPTwkm!3kp|+6e&vtC&zWT%p9G ztIS2Z&4UJC$JJskePL`KB%`34|O&%`N#2=B2B57Dg45=J?(--hmAct(go zTGZU(mFZJrxgjmDmXd^p=G@^4tpRY66z1(NCcGyk5$;7$%Jo5sf1yId|2HT3)BrwW zO^%QS(@gqVDkR`UUUq?;5O5BXgH;<8P^6 za%H38FIVw-N0?YheK-_5_kpmYo5E)gueEh}+VQ$GWgMM>{DGzbnd*yH}RYwq-SYfG8}Dqsa{YrJRiT%R|aTBo2O1 zRH-=9SoxGbZ@Btt%l3xP=zM!pCNy@6!n2&A2e}v@DmJZRqq!9<&0dJYHeAW}SX&v* zQ^pb=s@)R&_i){%(C)IFYouRiVd1D4JD3DO#I&&nQwgm+*XBHpifP#3wZBshO)VXw zO|*8m6Ux}f?o*s=C#LgRwa5@bPglzOw%I#uT0)Ty8k*c_haW7gT3y3y5DU;jg%XnT zrlN@1y>vA7Zutc^qJJS4T4}ZF8DjXz2fwvJQK3FfvM7zWN0z6cu<^x6c!f!7N&3>O zTDGol7rD?vg=B#=_3rF7`18{MjhgZ=+^opDpo=4&-rFkfPWVhdYY>d5>W`GGPbj<{ zp^tzXhds!f;HNv2`i)YR)Ni7$kK`uudW@9x4vdwqZG8J$6#HQVBy*;!d$0zsdVW55 zY+k#?|Bd%CWJ&`C@0Tu7dT8|n7(8(}Jn9&wyX?{!^><4H=Op4^z}ffmg9L3ijdiUb zcI2=kt3=ZCrV0S5LHLibTH&fUf-1_#q&JV@A!k?qpK#vNE)PyIKZ@w}(q=dckAhd$ zyd)9s$Tn-K2{pYf+S1&0IaN}VO=N_!y3{(nJuLGc(o#wkeMbOmCCyiboPAiN|8Vrr zQ7S{=8QE!1g&TcO)h@3muIy!<*Ny`a6Mcqn+y96~g6*z?|1oQB2&ko*ue#~!DPIeU z8|_-7e+owGoXIFM<>x)V#Rj-QX=gDlfR?XzLiyjnaZW|aKM$c^gTS;iM#DCjKeB|X z#(zMcOA@fkCv?#ZpmfKhtXOg2UTdv*rGQ^daMsTH~m9z8^`{3C9Q)k>V1~^{Ks~ zeeMy<8!`(sM(JGfnjLP{nButX@lcbegaMKPNPD?CvGUK6b(I}?kDR$6+{$4h`_@lB z1*rQS1YPtS_j@QLZ^&~`E<5^UC?P>I`+83$cMfL93WeSEc<}+(6l)DF7sftulT+2C zjEM~eI`H;CRcpwo9TEp1-v_+YR-1H?0%YJi6sp@U_wl@T`O?_B#jeTeYC@nGK{?pO zB-nK+W;{|T`*ExUD>2Y32Uznri~L8-wN-~(M$g~debCe%e6ZY{5i68~zdpI{6r6uW z;+TDnIZgTzmY_CmkrqBJq;&cp7=hPP0PK^z)vi*hW$*7?}ar*$pi$j_O>=%Rnbh_SAYIT^7{7;YROiEZ%CCB#dqvz zGd1RQ_e7;#8&M4m=9EogBrs$`N^MSfE`ObT&6aU|+c$tMx)HZ8HZ*Kt-iFJsQb41x4v>!1iUozKx;CrE1R#+_VYuZX9G>F*PlDMhK(?+t^SZy%OA{M zh2}v$vOI5;RC^XFU0#Z>V&pyFQdyqy^Ko%^UaK!M^^mte?_poP^0k4wAzp+OTrx*< z$WZHf9WS&~V|kLU-t>x_`d&e898TfIPqtwr$4x*Zm+)b+1n-DPDi0Qn?z(bD2tp$U zcHWe&dUcYlt!PZ7nl^riP3+_@gpz3FvEv}LI7H|_BhQVF&W~y_1RY#``G%4hWa0SZ z4&C(wb+K*?B|^vOQS#KR^eMbXFmIIo8vTfe^xIg$jq=y_*I59o)_QaKfcHveY8ffi z4KQ%cO`}yBBUc13(r~z*&m_|N`O(oDS}1H069Y~IM>?YSX&#RDQ+kBZ#k94L|9bOnx{vjKrT?LMFM<8^l(EkVU` z#S$xCuf3dRZe_p1d1;~YFIQ!lReP@_Vxi?LxTCQVyQZ8iuhLYpP1V-}*S<}?E`8ki zd_+terg>$ZY~lK9dHSx9sj9=h<5K}^$)J1`wm4=p#xm%IMH=}jS#33uL(9b_6O!$r z>9NW8A!EqXTYBnm`%Umdho(crL+Otw0jRq=@m~LncMdEag>4$-^MDbiDR zWCrfI?u#7D|+1t7-)el$o z1VXcw@ftMhi;*H+uae93MV_U4jR+HEZ@AR|c1db6ZT!&! zZQeQiJ8q>Z32`|qyh9)4VtLCi#&}-EUNyh0uJ5b;I`HR$Q*Pt;8@uGjwi(osdE=qC5NQcgz{uThZwnB=z#4)&j4>jdb@k! zMej^`G}&mN57AeV?!D6dSs$cH6d{2Qes~m+rp-{;o~37OMDIQc%o8A>tI$y#a9GSY zY-i~_|I7x|Hjic1n#}$z12E-;8-v>HOzBVglPZVmP*pz^0}gyeScySb%4D9(V79Qi zMI1&Wk%|_?pY2^mDEmm5DXEnQ{ZzK(>m>OV4m!s+Hixw8Y)vk|Z)v}EOVQ*EE~6b> zbpojWX4C0*_%gyAq%yn%RtSDRI(6CM6mZpk8Bvpe$HLCi(Zyb^A;G?wMLxQ9CKOe< zR{^0|eUOq{HhswhgpD)QPKJ73<$2N|({SqvS z)h>JXw|QuXl~!DRMVtxfz}wJqP*KK0Rm8L0(&v70Mn@RIhBH1$PXgd( zxgG8SiF*nJ1a0cuPV_>rp%uZ$iI~skJm{*{Y%a)vl8`W#&f-fi#pr7`-*W@g}7;;xVZ+_;AJ zaMsS9r?n^kle0UEr2K`$x-%F4-7P!2s&L&Mk772hdeu5;#D1y|<^9sLasJ75v?b`F zitw24Gxd2YGi#%<;CYFN4FcaicJ2!3hr^PHNrayeE71(0 zj-swT8SieaPGWNcomLUbo-KVOXira@%iDU;e3tOutVF=6G%N9LcNr_udzu-L%`Cxe zL`C+8%Pob{ixO((P|e;+a9@*cR!~>b=@s<`K^u10u56jd1Gi%RY-esB7TvSh?TanD zZ9nYUV{Phmqjp&IVMjtWKPmZ5kDIQNmh4xLp*0WPSo@djt-O+str&cen! zG1Fnfa24tLE^&-`nQw)DMTtdT1`tXat2fUZH|;s@qp>j^)YmA#r|hwuE#f_~_l}K3 zm$YDC_3fUQZSgLh>C^HI_SIz9X?x|K6k&MyD{9M|FGy^A`h`hkvIafEm0Ia5ryLv9 zAD<`8^HoD~2ya{+PyJd%b20VG4i(>(-4&16-jGht=zw*psP#7BxJt?^+9dO(9G+?x z-U&hTJ?ER6^5#ZYjltZI-U8BmQ+fqmcJI{X4>UUto}ugo1LE!Nx8&VD-l$If(M1lM z-x2W??CDud70IVouGa(rrnO8o&MflL^+6IM!rNIwZO%osH}>%ZYc9R1mr;YOoxF66 z35l7fQc-lIjOF~!WYsb&nH2|^Qt}e`sN8784V6sjdtV3Ft!!&H-lCy=pQykHLNqWz zX0dblQ{!d{oMMJfB}2w`o_S%4pzjYVtG2JXTC1{&dCXDMyt^}M>&hW#Q1%{T?notX zN|q3^tL3v4X3jY$Vz5k}3te|V#g=I0T9Kn*QqV4#S)?&TC^ISBT8?*7mBL(&!9y#Z zk{uBA_OmGaXZlR56T-4dVGNM3pI?q|=A&i1J0vAuM8#z9Px09-vzLg+06Sjo`<6x` zym&?DisD$796L&`BRRO>+1o11 zrBbLiKG>i0x~~c`Z6IW&{{ovlPgUD?;&F(cBHoy&zBlCFPHXPgrNaiZ=7LIOXap zgyok0K*{qs@omRkKUTe2dr#NKdI;G`L`Ue2*Kq2r%S(4SI%;%2%FlPmf<0T;bOCym zM2J^9@EuB=bDnO;FQ?`S=S5fX$!b?|7Uj<`e8mgwd|SbTi#JEsm1@O;{(hPo7{oce z^Gfb^$3tC>SEV=~`v6rx5#;3Ss^RbOt=G<=@R(Ad%Xn6QTIIrjV&l+4_6-v znS*w&cag^r(sK!SMCUQAMBHUm#TS&w*REg9pYtl9ge(tNtt!Ih12!hNoEo+vY4M=z zn!(r52c{oGFE?DU>p+z&8G2N@RyIDJagk8#D3iHU*YEpy z`BvqvM5L-~{#}(W-r#8-W}TBf?EHpgBq2*^Awx_TFq_k2V9C!DgTL z%SOhn=!mf+g}8}{gJv(>RjIX9%o@d=q($S^8m%oE`P39kDD#YGn9MvSyWvvrOlY%- z`6Li!06~AsK0j^M!st?*`_0*${56hi_zIYyL?M9U3~Wd1Uhs%Ra%YQ9#9`9{FQBlT zKWhFO(VA1)IGBpG22B8L)8sDpNObFi(8s!wCiaD!sqRTr{V~Ah2&&Ni4}?3asm#5; zieB1#RB}Vv1*C09}oMmS%WkkB5DM&P^-;kLr{xihak1a-0fvD z;f`;IRl&vk^{TTGSTBSkE0F=vuI*`5b*+5UJ9QIGyeL%bHc&IgR{|Y~`m$PDCnffX zB5wNBv<&*b0oh@?&Fa%vIwR_m>%JZlPx!jpEsDUTxkt*M_aIA7cJ*XGFpmeF|E9?< zAKmjb~XwIcz1@7F!s59r70C{1(MobFuosN@_Ay8DoCBmzw{3yoZhmDOnOH`Yes0~@@ zmm#$M&Slo~S2LKHl?h#cIZgg^tN*7SKl}-D4J$W(9ih(Hd(v!%kJAC_`@iIR>$H3e zsVOGx8_DD#N%|*#0J)o}{7i}^8~QV`!|axwcnF_cio2UQra)T)uxR|W?*1K{lr0Nh zg;E=!0mwAQ3S^gOmBj0Z^N7_VN%6DNUB8xiyDQowB`VaQ*EoFOPx#iqSGsmsfU4wU z`ngTRyshs}5;8oCC5!$#cyg=hMN&e;I9pg8e8V@TtX95nzG-|5L z_B-$=3I7(UJX&8P3J3k}=soQrHtlULISr?*n|OVmY&tTIFFJA9COZkAER#)kJwxco z86-W``6`oRjt+d^aF#d-aeEgFqkEG#->n_%Y@I$lUA`}7@2s!gd)dpeD*(G;7Em}p zbeHZQ_aimtGwg1gf1H5Ue%sQgYMO@{vSvbp%dOR|F=!PoT=*1>TU`dFm0%Vn&d)*Q?7~kvNa_<*AO(blbI9oydXDF&pFpx@~a@u4x0Z zx$2w4$deq&p1X+Y7AK-H=5%pjaSC<*jV zD1nLPt$hkT{S}!~!A+A6QWXwd>H;H+F`n)Lvr80m}jkV=cdhVm5Q48V;t^gNS7nn3@^ZatXY4ZU$Ud0nludJaSC zH<#$#Z@`rgPMCi(ECP%C1ouERobYPK5D&TwFxOw@Ib;hWLkj4(VB~an2ydeks=0eN z--BDHU#%@XkngN*ss)Vdt)hy8HR<=JCq2}?8r@UVrlQ(56*|GjOW@J=*qC)L)gJPu z8(ksTX2>S5x5TSqrYR;q!OP#N7P1w1+S|X0pF*dv<9K@G=!d_~L0_OhlI4o$qZ(cv zy_BfKw5t`E!;10ISFU<}4~(3dqg$liCh{1~$8x3}hlLfm(QFkHblKO%Lw@(MMZtQ7 zG;jNv6s8tB24Vs-sU!F$ z`~IzWOTm2?Jp+1{1wzVG)QDaR$AK85aQHh<^vuP~gz=gm7Wm~aZsET&r$yCjes!RMM2!Ohp{&-K)8ytGbFog**=IVXC1 z!I~d@>A_$WT*)=E5S%^D)0-Bu--X{`3~tlOU0A1HH#cAkFl}A1x>qMX&E2Udx}i2h z9ik)z%-tB|qfI3lphpk`7#|<+Vl_Lo0N99r(N^zssE6zHU{0FR{?^>q;I!59!kz)O z<^?c*Cpm3ukAJo{%jL#Yf4KqdMC?MUinwn~w7BX;)J@RhvH~@bu6GqWqR-CZfotE2;O) zn`j}EC20}SR4sb%r`^bfX9qG(7N>&`V~seMD3*sa90c2_7%CA=jmcN0)`|} z->$==u)B%4JMgMmOtx|^DWJCtKOxf)z)!>Yz^k6@dp91vn!;q7)|6RJeI!y_!OBaS z{E=eHo)C3XM~Iv?4xH7SyYz-TSil`D=5l*&CiscH zk%RXf1ZuCak}9RW;s6O0#XEy+56SZjJ{ zsaju9bSPz0waY^>|IO3?`PV@PXe*QF(#O-Uj=e!SYxu=;ljkU*9XY$T#e1iS7 z>-&B5D|g@Re7{uwUj4)0em<8|%bN0DlP;eq`voy>kr+}2kS(3d3YpbL=gKHv{#1Hp zJ-BHER#i@mwb_PqgdTcB)<#o3AzM}M^(mV+ZHze<@T>fk&E3dvDOZ~qk?>FU^9q(I z5b-bs3Enr+5K9L;4M)jZ{G18!0iGne)t6y7A5)Y4E(w=JPMjZyvDO~IZm6&6=`E!& zdab15vKxT>*)g6F9HZGa2XoYwo9&3CclD;Hr+Kz%z>5lb(goGruAP=`Zy%5oRtHzz z!H-4*X~xosu@FE+0`-ubveXhx60oPgC)XiwF?^SKUE_+sEAnRv&=8$ zBu@gXNTkhUPhn2A@+H*OAz%LG$Zh%}c)wyhW@GUePWPv7T3S5mQ-25}Dgc&hky|!6 z<`UV-Kp({s6mRDaN}N8g-DHmHvvacSN&mI%l)9r)Io#WkM~?7HK1304%~%`K0b;+p z>39{JtCy~>fe1d@Xzk)Df!Jivy_ii2UGNzDZJ0Nz;ihpY-p zF44Gzry2Z;jR?R zD8J0=>QjeDFLvQk%;lObI9@s_T2rps6l;wkQ#R_tq*Pum<6u~68doDufWF6=oE)wW zjeJOonisQeN&`;id2o>@*5@lXS3UPJnx`IGr$xluFO1+qD{M2LVVTu2H#@^WowWC^ zrf$JtQB;f-_Ox>BQyRB7xa6^3L?%qpta6UIhoJc&c94J0Uvd3-p-CBgO8$6Kzh?dU z?cqjMru-+Y#xy&Bwo5k|H^fv4}F7KV|_&e80 zgGl@ywQFJ3gR#e1kXx%UKgkRcCV^YWF~fuF!uZbQn4<9~v^h=XjyXN2*owPY029=q zaQyh7r}jr*s&a=GX7~bELk!1G*nd5J@N;?NV3zXEoObb|dhOIPrEn{LUf@{QkQ#;; zf&J-G@USUgKG%!~C{#R;hKzgrHs1^7(@^4QU6LM8za|JX@U~`1=#@S1|VvI-=l0+yxuSaWE$6Z zpRzLHwUGL)SGHZ31y1oZ5#-nd_RCE)c8;CaHUR=Bi~$Ur3Wss*v`jQpn=T0i?=8F8 zsUd*UM_z|^*1fgH3-erc;NU+0o1U#rklAh6h7DCacC&u3zR9kq-uP0S*vbroe4GCA7e~!v_bZ(*W;*eQUd8P-jO|1iaG#?a|cWN%|TaGZU4p zNtM`w#S3I!&-8E$_Pe)F><{utgSTMb#l{%H0~N)1XdkbtIbjp1qew7=u|d{>x%M+Q z1PZhvKBq-9k9Tn@-RA`YByvqPLNVV;liglmF`cj*3-fQH4lOyc0qRCDoz#K;P}AO~ zZoza+e0oT2oQAcngy8UqX*?_>qAB|b3AFgV-+{>AU--2k%-=fWSLJIm^0~L^sDWzE zr&lS|rROX)J&CbDL!4E%0`D_mKOHWkS)xj zW#)p#^I+Adam%TrFx;AyYpcLLe&?ShMFK5#99HQM63rp2$+7ZQdmje!2Bzz{@d}*q zVm>BP(ptr(TvhB415cnHuZ_2qC%Cl=e^zl0uq5hAH8Vm@YJEdIsCKnDZgpqbgkYn< zw2(3$CCk|W5i`pYoU)Ehe&IY9p-y=EC$rZ@*x~SjWaBp!<2tW~e4z?&!94HzuL%CsReEO!v6%|DL98%g*)1oxa?C)1xL8QwNEf(Z zWM-NE1^{06CPD1Ag!N=Q8EXM}K#2u#2kwf-IQreQX|1MB>A*IO=B$=!XT3@18H^?R zW1>{&_z;XENEdRWbG(6j1hH+jJpX1n7il~k0XGTSuTiGbZr1e~!Z(2F+{&Me_UsLa z9_y9U<2L(8HF&Za`Q&IHJF;W3w&$|nH86@4Q#~!4mc%<39&c20LNb?t>j5lwvP-KK z_O)Fp@}2oiQsH0%ru9FE_DAgEQetRl5lN5r=Jz|3#2rn*wK0lKFaEMT$&K{g_jc== zyi&C4x;3DZv*u)(eEOVAwO7b1c0#W~ER!Ek5k%^v1nPscYXOhf;YSPX?$e*iy+f@t z=)GUL5{TzxCGL9$kk%-2z_o^jAm;}Pvf$h|S7;c`L)@wd5qy4UW?fh<&ACzeXd%)^ z%`^(mAvRs&NkSUYei923HXCD&1mu}!&g5uLO(|CecUuG^@4z>5C#7ikXs51#o(z$@?GXm=Pw`Xo`J_rni!ro9k0B1 z;u)wW_Q8uYEMY6sj@tbF(>@jba5prxqCMdHw4V3#&c)y~P0({A_)JzRJ?@4WEO5HUGKls|71AIH)4&JG^(j@Qv4@Vo6t$4iP8 z^ZwK6mO9{l5dB-i=C3m0k1gW#)CKkwo>NBV_4Y3nbwCXr1b0b*Ri~NQ;+B~I z)_0-8U3hYlIK4kuncfY=e}ef=jxhGT(ZEQ0$W-resG~-186WMQ|3D8T{&>oBw^#jj z=Y9^5{!u)4q<6nqBsa0k5~c$q%{&3udu_o_5}55h22rNL%Io1a=r>brC>v5s&9b*iLjtyFCXC(GsZF3p)Tyb|oUOX`AuS|u|I~jOS&~+* z<2Fgd<2EYf*SBi+%e^OpPYzS@PS{}l{Uo(TF-@ZyB_`?C1e3dA8cs=PMS1ZQpNylaxFWV086HN%rSg zGH0@&o}uL+`CzY!#^yErlUiear2FkaxO9;|l)24*BXGSV^8De6oY;w#5k}E4B1)0Q zFV12Xj14;$1^rG19_;p-?o9)=+1oq5t&ERbuACiKu-hs6pFU{WP@15)!c+7<$+s4 zLsOlPM(6(F!nAW^?VFHR)e|vY1~GxdBChCnGsRVXY-vxRXV|dM0=RZMix0Fu-UYDE zd{1a%-PI^MuQ$uM7fz1!)i7EywjCaAvDjT7ig)W7oGLhu#GjUX^Q(U%BLsu4&G`=Z z3Ui-SUYZKm(BK+61lt@X&4yZR&y2R{Ji2#5iS>aDB5b2c)5FATKW<@8YVD}k0F9{q zMc?!$Jx~*W47R~gw_!p<^}?zf${P>1)WxeU^8hT~kQ%8qu0pWzst#BS7YN z$-#=2`#e7Vi}Ne(V5hj24PA|3VEsv)S}v?tHE(92SI=JlWW}Rp8BL6VH8|f3&*WN*M*)%6nI zt4A5)r_)Nejc=No2-vEujMX?W3~_yvE~GeVXzcJNMk*!7E5cKL$BA8TG;6nLzz=O| z$tXIiyVnq-T0Z|&Z;J3c_$b%&RmZaFS`Ve(n5Jq#o&O085rLCe@LW7!O<%h~PI*G7 zz<5qkE$}O5mL=NA#(c9tOH6F_&~2ZJJ=h2;!Q;5`LZ_l*W~@;ShFEKJHfF-*czD3H zix!q`xY};(F)x5186H);q;w4vXXX5U@AdKQ3mk^^FEfIV5X?mkv~Y?LZC6h#l&1r@@qo?V zm-LgUTl7>Lv@Mj@knnZ05ZO=%cALgvY)kx8m}~CO4kP=~{UaTLVhC-{cj98gw74Qb-*MGnBgyg1ut-u?qtM6B6$a*0kEG~A!)`mM=wh%`&i~5S4a)V&s0kVyhqE64? zZ1Xs2FpfIWHLsyQbBK=~Om$y29Q<|Wg{(Q8MK~}y0n=PPU{!v?(MMVkH3PgN!3Jik z(Dnyj8?l+YwW~$D$%k=^FxCRS&L-rQ7rPcl^Jlkz`7w6S&0y{lfoB;&rx7h>{5Q<% zefQq$^ptJ#t}XpGT~mV|$wwxhZS=pR!s!_lkrq$1D+5#VB^xyOT z|Ly$a&%auJd0Bnl45Dey&Tk0aVwHY zZUQ*ev*1<}+#GwKG`UgV29E+#N(--c)I6#^<1rHZ%BXJSz+@d&MY&}kt30wx{K&ce zK)2c@Dy(C|hF3Lr1%FTKzy`FVi!P6i^vN4ZQWMjmY_(;|BQJ=exkAyZe2+RmT-OX+*(*DT;#?i8;P5Ux-Vdl9Ye;}QcqBeIrU*EhhEDs%6hEzbY(RHV*k>{* z`4ob|!2CC8VFmAZU~gxz%d&LKh)uqj3??i6L4sxwiCGnS{m`eSmZ_0am+^Vo^kbmS zySP$z$_cPoT-MuReOM}}3f80~o|k+?zsjt5n42irRHK443t_RNC?3)`)6qsaR%kiCq{D_&fX1D^M^Qida&#+(w~_b?vc{SRx+F3BcX=%m z1Nqhx%iU}A&6T^aw202PEfuNo3{;=n>T4c3Xdgn}lu;Ph%^+74#)hsmAK0{G^>=1g zx)Lu>{@TiWeQE6&Mp^+Rmh?Ycy1Dx*K1k;G3h;N|Z8l3##pgO_X4TIQu05uy-Cj@H znIbK>xZ(5Gdd|iwlJ5-D;^jo>zgZp}pbxU6ZsT(|m!JkSK9Pzm;k*4fJ8>2bOWet8 z*`lV;DPEgm(c{XUrSSy5kVmvH`XJNM!d(L?44aVd$iF7Vfxop9Of!m$Ur=6iltyg) z88XjIgJv~{DSz;bGsgG&C9Y<9WeLm}au!XZ5LYFh9^4Bb*o3~V;B-hWdwTjavJSh! zd1k1U&|aZn*!6T(F1(Co8R?oL;Pdq-U_gUCOD4f$!7pqV2d-48x@XDUomYemR6w^g zSn`y0X6)9_=#K~vbKB(`+JpC@)h(WvCF!dgIo1NGkLlV20w&p#Nwd{3J$q~TjUkU$Y@rskoi=lw*4 zJZbq+V_Vs9#Bp|ao`4fYU)eO4QLIxCU&yTSkY`FH;=HZDW<$IErul3JpxL~pwQag_ z0Ud5ZFJ%Br^PT0kG*@NP^T&vPIwowc8i;GWs46{g#`@o?hl7(pk$*FXPATZN0BxWm z8B18(&6>t2`DRZ2GVvjiNxX1!9JcxnIZR?k1>zE30BQ96qnuR&@a!E^KO=fnc+LiC zHS!;-iAsNXHX_$|RA+adum3M^=NLWRXo)Hi4qBK#-otXL@9#J5@9~7#92X)srw=(RgeGiQ^i$QBFEmgi_d~z+!;ActF!*5Ce$8c zp98LKrYe6m#*q^~>;`Yy-t4R;y8@c#AvO;ryMv{ETmiN5-%b3o)r>t@A`( z0rCigNr|i{f<`Q)R+TJU#R^hs1I-mYy%Q(%7Jbb3n%G*(2m*jjbXt0$P+S~lx%vF4 z@;mB7Guz%()85Bqp2HdLuuPkxb0L@AS3Wy#*<$?%q;YHoxjpv*ADrIOXD;~e3EUi@Z3G`*Ykco2SZkV zz@*3Wzc?@)G;}0Zcs?kPgE|He)8Ze6-m2YLtsTFMmA0GuPFvcZg2YiPTw6&MUo0LYT_!1!mWN~&V^{c5))yj;S~d7LfSp*VxzyKTi`vS}_Rhw-+I z)V@}(la!kFRM~A}e~W1l@V>&di6OjDFg~7m9nwqD-)CXp*yR4$2`l!&1=GRAGK2(A~z{bB}o zwNVmoEzOf)!e$Q;cW=>H6!T4t$}2|=qQU5+FQVrYAc%lU^o8P|Bb%{b#3%2?58o%rw0 zJo_Al0@cXZJ&)!pe5M6|G5j>R&Kx{AI~>xnWP{75Cc6ojYWb`CeSsb5t~ce0{Fs9z zf6E>2i|r_N3)1O34J2z-RQ30;4N=0>B_}ycG;Asg|?U>Vq>FK2j)N< z4ZIes44p%U{YWF+TwgfBkFlh0l}<*8`rk}nd|gl>Ua|}Ed>8ULzo>+8mQLez^wrCj zD@D>9vZTgA6UpNy7em^`fFV3J_3Qkm2IHA0l7ykCUl>)HiAA%P)!}HoCQcRcphh_{ zjm_dMWNo;(=g=LeEsC*8YZt5&oBWkF2q_=+($leOeH0GaqzE84VzT1Y{#aJP@!lkh zryKiF4=$hp9@8S)Vj3ZrC+~OlJDx)R&+cJG{0qA?7l>?Xb?^KDKX4r5T5zSTR3RAR z!z+!YP`@X-bT{YE#t1ne>Bi)3u8YFUzmX;sYokX7L(TF0VBJg+R8w)dFSew6rcb7w z>QwuylqG1we`5#8f#wR#@TON3hm-?e6fp1c(+T9j=(hkN`}m>}Oyq0aw+tG*)7d~C z1XpAa%sS(LNmu`DVT0NJ%L$xYH y4MbN-dh5!C8nnl)OLNzgCGKZ>y2Bu7taC9+mWSMSWX)}d*ZSptTJm@EtbYJc+)`x# literal 20320 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 RuDa7m%-5OL40^FJe*+_L<7)r_ diff --git a/htdocs/includes/mike42/escpos-php/example/resources/rawbtlogo.png b/htdocs/includes/mike42/escpos-php/example/resources/rawbtlogo.png new file mode 100644 index 0000000000000000000000000000000000000000..999abab33e236912c93d59fd032431cdcdcb26e0 GIT binary patch literal 1358 zcmV-U1+n^xP)p(EnuI);X7XGWDosAHLOP)UR;MsOQM66j7#jM6lO z4oZ&?q0J?#ero_rOl{EpaRJzd6h7N;Hei9}BOgIo+A7%yR<}{p0J^GT8V1l-O*P$N z0qu{r8%Q`5*A1jcTipOD`cTy&QM?aj{oBR{ur5tcec06BKo`0uA_Hif7`tA?18l!o zdeF4h??oJT-3CNHg-Z0`#*a{6t$}d7#l~e^+S=NlpoVfS4LsDohS0(`aHfX5hKH`O zHLQL+K?m2j1a}BS3#X^Bgb3_$qyn(&AAA6F6jU7{u*XSKg-cdtgBd_qm3@Y4Zn|m8 zkPo0OF$X<@p*>3vZldkb_z^ZSg1+Ib2esIRUCjD<|Fq+1??cCo*cP=;mWQ&bHK2~O zPIJpNSF?P@&PeI+5>6fpc)=K_jT5Nj%3!$3a0)T+Le@YVn+@^|vFKS+(R=K~GqlVy z!#CfU2}f2;fFRcsbleENsC{z0q|^c-!~LUM?f!NDvVX)8v^3D9-aiicnAkE*VK~8< zDl^PGQg@m}1k=DwTbeVZJd|M`Paaxf=519weM6b84D~cSJTzPjwfI0%rKV=5(?GTf zHNz`Z$*h7PlYOLc_WxY#ieXF-crifzaUP9-mq2535 ze|BJ}XDDxcSE%M*&m5uX_4PG;Ps?f;J%43r!{6t6*&-OWNglEcwU3Au7jO-Ga4HlN zkDkMlku!6FbC@%fn{YD{Zjzy{pa`?j9w57bJe1glxU$IiIg`cU?FWZwkM4HRjj znRxuUhAKcagysnKJ+u|n9k|tS{?2eixcyhCYbc&Ug-~^%8NhhFqn^PdoSDk%EDPLl z!r``VC8)2V!a0f?#Tmj0PtjDBKOG=#N_B#Hm=W|-awGVLHc|)$xC;Kt2&xrfJnT0R zTPNQ!I`PUSLw*I}-E@L1*Kse86A;=KPVsdC-1}iCJNW$oC+ts0aU{4R{1D)q0vU}t z>O$Oi#zp4?w2;%ptRN>CW~%+MKtWSI!i~rChdsfWa!i3N!tk|yTcAfZ6uN;w7q}l_ zJaze(7EUJ!HGIjC9br81`Okh-+1C+VpTT&#^lkDRHS0!jDe&(BjHgS#rib)+4}Axz z8%Rg-2at}2@y!U*sMu(v-$Qi|X;gd@~Np2sh7LLL^W1j7R+o8gOx zb6NJnJWenyDh0+z6loz1(AIE@`(9Z?mY+x<48td{AZcZ7;6yN>3{?$z%yCz6i${M< zNFr`)8NpCL>`_@mmY%zWJ6}KzKTukdSQJ9EU^TSFHO&OUII)y@k^_>`yM=_-C*>i2lFeKas@WKj@Hw Q9{>OV07*qoM6N<$g5qCe^8f$< literal 0 HcmV?d00001 diff --git a/htdocs/includes/mike42/escpos-php/example/resources/tulips.png b/htdocs/includes/mike42/escpos-php/example/resources/tulips.png new file mode 100644 index 0000000000000000000000000000000000000000..a0e681cf0ffa7498bfff6e26d71b15f82a8bc7f6 GIT binary patch literal 379443 zcmV)RK(oJzP)004R=004l4008;_004mL004C`008P>0026e000+nl3&F}00006 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

    ;pHdyGure7GxRzfSq-{YSt0 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 L(g0N{n1A^n;lIUB literal 0 HcmV?d00001 diff --git a/htdocs/includes/mike42/escpos-php/example/specific/123-code128-barcode.php b/htdocs/includes/mike42/escpos-php/example/specific/123-code128-barcode.php new file mode 100644 index 00000000000..b87e44981e0 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/specific/123-code128-barcode.php @@ -0,0 +1,21 @@ + setJustification(Printer::JUSTIFY_CENTER); +$printer -> setBarcodeHeight(48); +$printer->setBarcodeTextPosition(Printer::BARCODE_TEXT_BELOW); +foreach(array($a, $b, $c) as $item) { + $printer -> barcode($item, Printer::BARCODE_CODE128); + $printer -> feed(1); +} +$printer -> cut(); +$printer -> close(); + diff --git a/htdocs/includes/mike42/escpos-php/example/specific/141-custom-command.php b/htdocs/includes/mike42/escpos-php/example/specific/141-custom-command.php new file mode 100644 index 00000000000..6e3bed70d0b --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/specific/141-custom-command.php @@ -0,0 +1,55 @@ +getPrintConnector()->write($barcodeCommand); +$printer->cut(); +$printer->close(); + +/** + * Generate two characters for a number: In lower and higher parts, or more parts as needed. + * + * @param int $input + * Input number + * @param int $length + * The number of bytes to output (1 - 4). + */ +function intLowHigh($input, $length) +{ + $outp = ""; + for ($i = 0; $i < $length; $i ++) { + $outp .= chr($input % 256); + $input = (int) ($input / 256); + } + return $outp; +} +?> \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/example/specific/148-data-uri.php b/htdocs/includes/mike42/escpos-php/example/specific/148-data-uri.php new file mode 100644 index 00000000000..74759146712 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/specific/148-data-uri.php @@ -0,0 +1,35 @@ + setResourceLimit(6, 1); // Prevent libgomp1 segfaults, grumble grumble. +$imagick -> readImageBlob($imageBlob, "input.png"); + +// Load Imagick straight into an EscposImage object +$im = new ImagickEscposImage(); +$im -> readImageFromImagick($imagick); + +// Do a test print to make sure that this EscposImage object has the right data +// (should see a tiny bullet point) +$connector = new FilePrintConnector("php://output"); +$printer = new Printer($connector); +$printer -> bitImage($im); +$printer -> cut(); +$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/235-get-data.php b/htdocs/includes/mike42/escpos-php/example/specific/235-get-data.php new file mode 100644 index 00000000000..c3607c868b3 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/specific/235-get-data.php @@ -0,0 +1,28 @@ + text("Hello world!\n"); +$printer -> cut(); + +// Get the data out as a string +$data = $connector -> getData(); + +// Return it, check the manual for specifics. +header('Content-type: application/octet-stream'); +header('Content-Length: '.strlen($data)); +echo $data; + +// Close the printer when done. +$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/29-latvian-star-tup592.php b/htdocs/includes/mike42/escpos-php/example/specific/29-latvian-star-tup592.php index 72dc7c8f2ed..73613100abb 100644 --- a/htdocs/includes/mike42/escpos-php/example/specific/29-latvian-star-tup592.php +++ b/htdocs/includes/mike42/escpos-php/example/specific/29-latvian-star-tup592.php @@ -1,11 +1,16 @@ - text("Glāžšķūņa rūķīši dzērumā čiepj Baha koncertflīģeļu vākus\n"); $printer -> cut(); $printer -> close(); @@ -13,9 +18,8 @@ $printer -> close(); /* Option 2: Image-based output (formatting not available using this output) */ $buffer = new ImagePrintBuffer(); $connector = new FilePrintConnector("php://stdout"); -$printer = new Escpos($connector, $profile); +$printer = new Printer($connector, $profile); $printer -> setPrintBuffer($buffer); $printer -> text("Glāžšķūņa rūķīši dzērumā čiepj Baha koncertflīģeļu vākus\n"); $printer -> cut(); $printer -> close(); -?> \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/example/specific/32-german-tm-t20-ii-custom-command.php b/htdocs/includes/mike42/escpos-php/example/specific/32-german-tm-t20-ii-custom-command.php index 49eca235091..29b6b3fc638 100644 --- a/htdocs/includes/mike42/escpos-php/example/specific/32-german-tm-t20-ii-custom-command.php +++ b/htdocs/includes/mike42/escpos-php/example/specific/32-german-tm-t20-ii-custom-command.php @@ -1,5 +1,9 @@ getPrintConnector() -> write($cmd); $printer -> text("Beispieltext in Deutsch\n"); $printer -> cut(); $printer -> close(); - /* * Hex-dump of output confirms that ESC V 1 being sent: * * 0000000 033 @ 033 V 001 B e i s p i e l t e x * 0000010 t i n D e u t s c h \n 035 V A * 0000020 003 - */ \ No newline at end of file + */ diff --git a/htdocs/includes/mike42/escpos-php/example/specific/33-spanish-seypos-prp-300.php b/htdocs/includes/mike42/escpos-php/example/specific/33-spanish-seypos-prp-300.php index 7314ad21bf0..90bdc63fb5c 100644 --- a/htdocs/includes/mike42/escpos-php/example/specific/33-spanish-seypos-prp-300.php +++ b/htdocs/includes/mike42/escpos-php/example/specific/33-spanish-seypos-prp-300.php @@ -6,11 +6,14 @@ * * Use the hardware switch to activate "Two-byte Character Code" */ -require_once(dirname(__FILE__) . "/../../Escpos.php"); +require __DIR__ . '/../../autoload.php'; +use Mike42\Escpos\CapabilityProfile; +use Mike42\Escpos\Printer; +use Mike42\Escpos\PrintConnectors\FilePrintConnector; + $connector = new FilePrintConnector("php://output"); -$profile = SimpleCapabilityProfile::getInstance(); -$printer = new Escpos($connector); +$profile = CapabilityProfile::load("simple"); // Works for Epson printers +$printer = new Printer($connector); $printer -> text("El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y frío, añoraba a su querido cachorro.\n"); $printer -> cut(); $printer -> close(); - diff --git a/htdocs/includes/mike42/escpos-php/example/specific/37-chinese.php b/htdocs/includes/mike42/escpos-php/example/specific/37-chinese.php new file mode 100644 index 00000000000..d14790f47d5 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/specific/37-chinese.php @@ -0,0 +1,24 @@ + textChinese("艾德蒙 AOC E2450SWH 23.6吋 LED液晶寬螢幕特價$ 19900\n\n"); + +// Note that on the printer tested (ZJ5890), the font only contained simplified characters. +$printer -> textChinese("示例文本打印机!\n\n"); +$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/39-currency-symbols.php b/htdocs/includes/mike42/escpos-php/example/specific/39-currency-symbols.php index b3d4b29edd1..b960ee681c3 100644 --- a/htdocs/includes/mike42/escpos-php/example/specific/39-currency-symbols.php +++ b/htdocs/includes/mike42/escpos-php/example/specific/39-currency-symbols.php @@ -1,11 +1,16 @@ - text("€ 9,95\n"); $printer -> text("£ 9.95\n"); $printer -> text("$ 9.95\n"); @@ -16,7 +21,7 @@ $printer -> close(); /* Option 2: Image-based output (formatting not available using this output). */ $buffer = new ImagePrintBuffer(); $connector = new FilePrintConnector("php://stdout"); -$printer = new Escpos($connector, $profile); +$printer = new Printer($connector, $profile); $printer -> setPrintBuffer($buffer); $printer -> text("€ 9,95\n"); $printer -> text("£ 9.95\n"); @@ -34,32 +39,35 @@ $printer -> close(); are not available in CP437. CP858 has good printer support, but is not included in all iconv builds. */ -class CustomCapabilityProfile extends SimpleCapabilityProfile { - function getCustomCodePages() { - /* +class CustomCapabilityProfile extends CapabilityProfile +{ + function getCustomCodePages() + { + /* * Example to print in a specific, user-defined character set * on a printer which has been configured to use i */ - return array( - 'CP858' => "ÇüéâäàåçêëèïîìÄÅ" . - "ÉæÆôöòûùÿÖÜø£Ø×ƒ" . - "áíóúñѪº¿®¬½¼¡«»" . - "░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐" . - "└┴┬├─┼ãÃ╚╔╩╦╠═╬¤" . - "ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀" . - "ÓßÔÒõÕµþÞÚÛÙýݯ´" . - " ±‗¾¶§÷¸°¨·¹³²■ "); - } - - function getSupportedCodePages() { - return array( - 0 => 'custom:CP858'); - } + return array( + 'CP858' => "ÇüéâäàåçêëèïîìÄÅ" . + "ÉæÆôöòûùÿÖÜø£Ø×ƒ" . + "áíóúñѪº¿®¬½¼¡«»" . + "░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐" . + "└┴┬├─┼ãÃ╚╔╩╦╠═╬¤" . + "ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀" . + "ÓßÔÒõÕµþÞÚÛÙýݯ´" . + " ±‗¾¶§÷¸°¨·¹³²■ "); + } + + function getSupportedCodePages() + { + return array( + 0 => 'custom:CP858'); + } } $connector = new FilePrintConnector("php://stdout"); $profile = CustomCapabilityProfile::getInstance(); -$printer = new Escpos($connector, $profile); +$printer = new Printer($connector, $profile); $printer -> text("€ 9,95\n"); $printer -> text("£ 9.95\n"); $printer -> text("$ 9.95\n"); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/44-pound-symbol-star-tsp650.php b/htdocs/includes/mike42/escpos-php/example/specific/44-pound-symbol-star-tsp650.php index 4ef1a9575c2..3e7e6a2e48b 100644 --- a/htdocs/includes/mike42/escpos-php/example/specific/44-pound-symbol-star-tsp650.php +++ b/htdocs/includes/mike42/escpos-php/example/specific/44-pound-symbol-star-tsp650.php @@ -7,12 +7,16 @@ */ // Adjust these to your environment -require_once(dirname(__FILE__) . "/../../Escpos.php"); +require __DIR__ . '/../../autoload.php'; +use Mike42\Escpos\CapabilityProfile; +use Mike42\Escpos\Printer; +use Mike42\Escpos\PrintConnectors\FilePrintConnector; + $connector = new FilePrintConnector("php://stdout"); // Start printer -$profile = SimpleCapabilityProfile::getInstance(); -$printer = new Escpos($connector, $profile); +$profile = CapabilityProfile::load("simple"); +$printer = new Printer($connector, $profile); // A) Raw pound symbol // This is the most likely thing to work, and bypasses all the fancy stuff. diff --git a/htdocs/includes/mike42/escpos-php/example/specific/50-P-822D-greek.php b/htdocs/includes/mike42/escpos-php/example/specific/50-P-822D-greek.php index 2d88cf1a2a8..1651f44a7fa 100644 --- a/htdocs/includes/mike42/escpos-php/example/specific/50-P-822D-greek.php +++ b/htdocs/includes/mike42/escpos-php/example/specific/50-P-822D-greek.php @@ -1,11 +1,14 @@ setJustification(Escpos::JUSTIFY_CENTER); - $printer -> graphics($img); - $printer -> cut(); - } finally { - // Always close the connection - $printer -> close(); - } + // Run the actual print + $printer = new Printer($connector, $profile); + try { + $printer -> setJustification(Printer::JUSTIFY_CENTER); + $printer -> graphics($img); + $printer -> cut(); + } finally { + // Always close the connection + $printer -> close(); + } } catch (Exception $e) { - // Print out any errors: Eg. printer connection, image loading & external image manipulation. - echo $e -> getMessage() . "\n"; - echo $e -> getTraceAsString(); + // Print out any errors: Eg. printer connection, image loading & external image manipulation. + echo $e -> getMessage() . "\n"; + echo $e -> getTraceAsString(); } finally { - unlink ( $imgCombined_path ); - unlink ( $tmpf_path ); + unlink($imgCombined_path); + unlink($tmpf_path); } diff --git a/htdocs/includes/mike42/escpos-php/example/specific/6-arabic-epos-tep-220m.php b/htdocs/includes/mike42/escpos-php/example/specific/6-arabic-epos-tep-220m.php index c2b0fb5aa57..5994b7a81c7 100644 --- a/htdocs/includes/mike42/escpos-php/example/specific/6-arabic-epos-tep-220m.php +++ b/htdocs/includes/mike42/escpos-php/example/specific/6-arabic-epos-tep-220m.php @@ -10,14 +10,30 @@ * Requirements are: * - imagick extension (For the ImagePrintBuffer, which does not * support gd at the time of writing) - * - Ar-PHP library, available from sourceforge, for the first - * part of this example. Drop it in the folder listed below: + * - ArPHP 4.0 (release date: Jan 8, 2016), available from SourceForge, for + * handling the layout for this example. */ -require_once(dirname(__FILE__) . "/../../Escpos.php"); -require_once(dirname(__FILE__) . "/../../vendor/I18N/Arabic.php"); +require __DIR__ . '/../../autoload.php'; +use Mike42\Escpos\CapabilityProfile; +use Mike42\Escpos\Printer; +use Mike42\Escpos\PrintConnectors\FilePrintConnector; +use Mike42\Escpos\PrintBuffers\ImagePrintBuffer; /* - * First, convert the text into LTR byte order with joined letters, + * Drop Ar-php into the folder listed below: + */ +require_once(dirname(__FILE__) . "/../../I18N/Arabic.php"); +$fontPath = dirname(__FILE__) . "/../../I18N/Arabic/Examples/GD/ae_AlHor.ttf"; + +/* + * Inputs are some text, line wrapping options, and a font size. + */ +$textUtf8 = "صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ"; +$maxChars = 50; +$fontSize = 28; + +/* + * First, convert the text into LTR byte order with line wrapping, * Using the Ar-PHP library. * * The Ar-PHP library uses the default internal encoding, and can print @@ -29,19 +45,30 @@ require_once(dirname(__FILE__) . "/../../vendor/I18N/Arabic.php"); */ mb_internal_encoding("UTF-8"); $Arabic = new I18N_Arabic('Glyphs'); -$text = "صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ"; -$text = $Arabic -> utf8Glyphs($text); +$textLtr = $Arabic -> utf8Glyphs($textUtf8, $maxChars); +$textLine = explode("\n", $textLtr); /* - * Set up and use the printer + * Set up and use an image print buffer with a suitable font */ $buffer = new ImagePrintBuffer(); -$profile = EposTepCapabilityProfile::getInstance(); -$connector = new FilePrintConnector("php://output"); - // = WindowsPrintConnector("LPT2"); - // Windows LPT2 was used in the bug tracker +$buffer -> setFont($fontPath); +$buffer -> setFontSize($fontSize); -$printer = new Escpos($connector, $profile); +$profile = CapabilityProfile::load("TEP-200M"); +$connector = new FilePrintConnector("php://output"); + // = new WindowsPrintConnector("LPT2"); + // Windows LPT2 was used in the bug tracker + +$printer = new Printer($connector, $profile); $printer -> setPrintBuffer($buffer); -$printer -> text($text . "\n"); + +$printer -> setJustification(Printer::JUSTIFY_RIGHT); +foreach($textLine as $text) { + // Print each line separately. We need to do this since Imagick thinks + // text is left-to-right + $printer -> text($text . "\n"); +} + +$printer -> cut(); $printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/62-greek-symbol-swap.php b/htdocs/includes/mike42/escpos-php/example/specific/62-greek-symbol-swap.php new file mode 100644 index 00000000000..5ea995e5aed --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/specific/62-greek-symbol-swap.php @@ -0,0 +1,15 @@ + text("Μιχάλης Νίκος\n"); +$printer -> cut(); +$printer -> close(); + +?> diff --git a/htdocs/includes/mike42/escpos-php/example/specific/68-redblack.php b/htdocs/includes/mike42/escpos-php/example/specific/68-redblack.php new file mode 100644 index 00000000000..142a83ab3e7 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/specific/68-redblack.php @@ -0,0 +1,21 @@ + text("Hello World!\n"); + $printer -> setColor(Printer::COLOR_2); + $printer -> text("Red?!\n"); + $printer -> setColor(Printer::COLOR_1); + $printer -> text("Default color again?!\n"); + $printer -> cut(); +} finally { + /* Always close the printer! */ + $printer -> close(); +} diff --git a/htdocs/includes/mike42/escpos-php/example/specific/97-dithering.php b/htdocs/includes/mike42/escpos-php/example/specific/97-dithering.php new file mode 100644 index 00000000000..312df749eb1 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/example/specific/97-dithering.php @@ -0,0 +1,28 @@ + bitImage($img1); + + /* Load with optimisations disabled, forcing the use of PHP to convert the + pixels, which uses a threshold and is much slower. + */ + $img2 = EscposImage::load(__DIR__ . '/../resources/tulips.png', false); + $printer -> bitImage($img2); + $printer -> cut(); +} finally { + /* Always close the printer! */ + $printer -> close(); +} diff --git a/htdocs/includes/mike42/escpos-php/example/text-size.php b/htdocs/includes/mike42/escpos-php/example/text-size.php index 2f9272e434b..01bf33dd699 100644 --- a/htdocs/includes/mike42/escpos-php/example/text-size.php +++ b/htdocs/includes/mike42/escpos-php/example/text-size.php @@ -5,33 +5,37 @@ * * @author Michael Billington */ -require_once(dirname(__FILE__) . "/../Escpos.php"); -$printer = new Escpos(); +require __DIR__ . '/../autoload.php'; +use Mike42\Escpos\Printer; +use Mike42\Escpos\PrintConnectors\FilePrintConnector; + +$connector = new FilePrintConnector("php://stdout"); +$printer = new Printer($connector); /* Initialize */ $printer -> initialize(); /* Text of various (in-proportion) sizes */ title($printer, "Change height & width\n"); -for($i = 1; $i <= 8; $i++) { - $printer -> setTextSize($i, $i); - $printer -> text($i); +for ($i = 1; $i <= 8; $i++) { + $printer -> setTextSize($i, $i); + $printer -> text($i); } $printer -> text("\n"); /* Width changing only */ title($printer, "Change width only (height=4):\n"); -for($i = 1; $i <= 8; $i++) { - $printer -> setTextSize($i, 4); - $printer -> text($i); +for ($i = 1; $i <= 8; $i++) { + $printer -> setTextSize($i, 4); + $printer -> text($i); } $printer -> text("\n"); /* Height changing only */ title($printer, "Change height only (width=4):\n"); -for($i = 1; $i <= 8; $i++) { - $printer -> setTextSize(4, $i); - $printer -> text($i); +for ($i = 1; $i <= 8; $i++) { + $printer -> setTextSize(4, $i); + $printer -> text($i); } $printer -> text("\n"); @@ -47,16 +51,15 @@ $printer -> text("Hello world!\n"); /* Very large text */ title($printer, "Largest possible text:\n"); -$printer -> setTextSize(8,8); +$printer -> setTextSize(8, 8); $printer -> text("Hello\nworld!\n"); $printer -> cut(); $printer -> close(); -function title(Escpos $printer, $text) { - $printer -> selectPrintMode(Escpos::MODE_EMPHASIZED); - $printer -> text("\n" . $text); - $printer -> selectPrintMode(); // Reset +function title(Printer $printer, $text) +{ + $printer -> selectPrintMode(Printer::MODE_EMPHASIZED); + $printer -> text("\n" . $text); + $printer -> selectPrintMode(); // Reset } - -?> diff --git a/htdocs/includes/mike42/escpos-php/phpunit.xml b/htdocs/includes/mike42/escpos-php/phpunit.xml new file mode 100644 index 00000000000..158b7e0775b --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/phpunit.xml @@ -0,0 +1,21 @@ + + + + test/unit + + + test/integration + + + + + src + + + diff --git a/htdocs/includes/mike42/escpos-php/src/AbstractCapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/AbstractCapabilityProfile.php deleted file mode 100644 index db2e8e01f58..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/AbstractCapabilityProfile.php +++ /dev/null @@ -1,61 +0,0 @@ - CodePage::CP437, - 1 => CodePage::CP932, - 2 => CodePage::CP850, - 3 => CodePage::CP860, - 4 => CodePage::CP863, - 5 => CodePage::CP865, - 6 => false, // Hiragana - 7 => false, // One-pass printing Kanji characters - 8 => false, // Page 8 [One-pass printing Kanji characters] - 11 => CodePage::CP851, - 12 => CodePage::CP853, - 13 => CodePage::CP857, - 14 => CodePage::CP737, - 15 => CodePage::ISO8859_7, - 16 => CodePage::CP1252, - 17 => CodePage::CP866, - 18 => CodePage::CP852, - 19 => CodePage::CP858, - 20 => false, // Thai Character Code 42 - 21 => CodePage::CP874, // Thai Character Code 11 - 22 => false, // Thai Character Code 13 - 23 => false, // Thai Character Code 14 - 24 => false, // Thai Character Code 16 - 25 => false, // Thai Character Code 17 - 26 => false, // Thai Character Code 18 - 30 => false, // TCVN-3: Vietnamese - 31 => false, // TCVN-3: Vietnamese - 32 => CodePage::CP720, - 33 => CodePage::CP775, - 34 => CodePage::CP855, - 35 => CodePage::CP861, - 36 => CodePage::CP862, - 37 => CodePage::CP864, - 38 => CodePage::CP869, - 39 => CodePage::ISO8859_2, - 40 => CodePage::ISO8859_15, - 41 => CodePage::CP1098, // PC1098: Farsi - 42 => CodePage::CP774, - 43 => CodePage::CP772, - 44 => CodePage::CP1125, - 45 => CodePage::CP1250, - 46 => CodePage::CP1251, - 47 => CodePage::CP1253, - 48 => CodePage::CP1254, - 49 => CodePage::CP1255, - 50 => CodePage::CP1256, - 51 => CodePage::CP1257, - 52 => CodePage::CP1258, - 53 => CodePage::RK1048, - 66 => false, // Devanagari - 67 => false, // Bengali - 68 => false, // Tamil - 69 => false, // Telugu - 70 => false, // Assamese - 71 => false, // Oriya - 72 => false, // Kannada - 73 => false, // Malayalam - 74 => false, // Gujarati - 75 => false, // Punjabi - 82 => false, // Marathi - 254 => false, - 255 => false); - } - - function getSupportsBarcodeB() { - return true; - } - - function getSupportsBitImage() { - return true; - } - - function getSupportsGraphics() { - return true; - } - - function getSupportsStarCommands() { - return false; - } - - function getSupportsQrCode() { - return true; - } -} diff --git a/htdocs/includes/mike42/escpos-php/src/DummyPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/DummyPrintConnector.php deleted file mode 100644 index e1a197b7c7b..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/DummyPrintConnector.php +++ /dev/null @@ -1,78 +0,0 @@ -, - * incorporating modifications by: - * - Roni Saha - * - Gergely Radics - * - Warren Doyle - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Print connector that writes to nowhere, but allows the user to retrieve the - * buffered data. Used for testing. - */ -final class DummyPrintConnector implements PrintConnector { - /** - * @var array Buffer of accumilated data. - */ - private $buffer; - - /** - * @var string data which the printer will provide on next read - */ - private $readData; - - /** - * Create new print connector - */ - public function __construct() { - $this -> buffer = array(); - } - - public function __destruct() { - if($this -> buffer !== null) { - trigger_error("Print connector was not finalized. Did you forget to close the printer?", E_USER_NOTICE); - } - } - - public function finalize() { - $this -> buffer = null; - } - - /** - * @return string Get the accumulated data that has been sent to this buffer. - */ - public function getData() { - return implode($this -> buffer); - } - - /* (non-PHPdoc) - * @see PrintConnector::read() - */ - public function read($len) { - return $len >= strlen($this -> readData) ? $this -> readData : substr($this -> readData, 0, $len); - } - - public function write($data) { - $this -> buffer[] = $data; - } -} diff --git a/htdocs/includes/mike42/escpos-php/src/EposTepCapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/EposTepCapabilityProfile.php deleted file mode 100644 index 2803fe3f69c..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/EposTepCapabilityProfile.php +++ /dev/null @@ -1,4 +0,0 @@ -, - * incorporating modifications by: - * - Roni Saha - * - Gergely Radics - * - Warren Doyle - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * This class deals with images in raster formats, and converts them into formats - * which are suitable for use on thermal receipt printers. Currently, only PNG - * images (in) and ESC/POS raster format (out) are implemeted. - * - * Input formats: - * - Currently, only PNG is supported. - * - Other easily read raster formats (jpg, gif) will be added at a later date, as this is not complex. - * - The BMP format can be directly read by some commands, but this has not yet been implemented. - * - * Output formats: - * - Currently, only ESC/POS raster format is supported - * - ESC/POS 'column format' support is partially implemented, but is not yet used by Escpos.php library. - * - Output as multiple rows of column format image is not yet in the works. - * - * Libraries: - * - Currently, php-gd is used to read the input. Support for imagemagick where gd is not installed is - * also not complex to add, and is a likely future feature. - * - Support for native use of the BMP format is a goal, for maximum compatibility with target environments. - */ -class EscposImage { - /** - * @var string The image's bitmap data (if it is a Windows BMP). - */ - protected $imgBmpData; - - /** - * @var string image data in rows: 1 for black, 0 for white. - */ - protected $imgData; - - /** - * @var string cached raster format data to avoid re-computation - */ - protected $imgRasterData; - - /** - * @var int height of the image - */ - protected $imgHeight; - - /** - * @var int width of the image - */ - protected $imgWidth; - - /** - * Load up an image from a filename - * - * @param string $imgPath The path to the image to load, or null to skip - * loading the image (some other functions are available for - * populating the data). Supported graphics types depend on your PHP configuration. - */ - public function __construct($imgPath = null) { - /* Can't use bitmaps yet */ - $this -> imgBmpData = null; - $this -> imgRasterData = null; - if($imgPath === null) { - // Blank image - $this -> imgHeight = 0; - $this -> imgWidth = 0; - $this -> imgData = ""; - return; - } - - /* Load up using GD */ - if(!file_exists($imgPath)) { - throw new Exception("File '$imgPath' does not exist."); - } - $ext = pathinfo($imgPath, PATHINFO_EXTENSION); - if($ext == "bmp") { - // The plan is to implement BMP handling directly in - // PHP, as some printers understand this format themselves. - // TODO implement PHP bitmap handling - throw new Exception("Native bitmaps not yet supported. Please convert the file to a supported raster format."); - } - if($this -> isGdSupported()) { - // Prefer to use gd. It is installed by default, so - // most systems will have it, giving a consistent UX. - switch($ext) { - case "png": - $im = @imagecreatefrompng($imgPath); - $this -> readImageFromGdResource($im); - return; - case "jpg": - $im = @imagecreatefromjpeg($imgPath); - $this -> readImageFromGdResource($im); - return; - case "gif": - $im = @imagecreatefromgif($imgPath); - $this -> readImageFromGdResource($im); - return; - } - } - if($this -> isImagickSupported()) { - $im = new Imagick(); - try { - // Throws an ImagickException if the format is not supported or file is not found - $im -> readImage($imgPath); - } catch(ImagickException $e) { - // Wrap in normal exception, so that classes which call this do not themselves require imagick as a dependency. - throw new Exception($e); - } - /* Flatten by doing a composite over white, in case of transparency */ - $flat = new Imagick(); - $flat -> newImage($im -> getimagewidth(), $im -> getimageheight(), "white"); - $flat -> compositeimage($im, Imagick::COMPOSITE_OVER, 0, 0); - $this -> readImageFromImagick($flat); - return; - } - throw new Exception("Images are not supported on your PHP. Please install either the gd or imagick extension."); - } - - /** - * @return int height of the image in pixels - */ - public function getHeight() { - return $this -> imgHeight; - } - - /** - * @return int Number of bytes to represent a row of this image - */ - public function getHeightBytes() { - return (int)(($this -> imgHeight + 7) / 8); - } - - /** - * @return int Width of the image - */ - public function getWidth() { - return $this -> imgWidth; - } - - /** - * @return int Number of bytes to represent a row of this image - */ - public function getWidthBytes() { - return (int)(($this -> imgWidth + 7) / 8); - } - - /** - * @return string binary data of the original file, for function which accept bitmaps. - */ - public function getWindowsBMPData() { - return $this -> imgBmpData; - } - - /** - * @return boolean True if the image was a windows bitmap, false otherwise - */ - public function isWindowsBMP() { - return $this -> imgBmpData != null; - } - - /** - * Load actual image pixels from GD resource. - * - * @param resouce $im GD resource to use - * @throws Exception Where the image can't be read. - */ - public function readImageFromGdResource($im) { - if(!is_resource($im)) { - throw new Exception("Failed to load image."); - } else if(!$this -> isGdSupported()) { - throw new Exception(__FUNCTION__ . " requires 'gd' extension."); - } - /* Make a string of 1's and 0's */ - $this -> imgHeight = imagesy($im); - $this -> imgWidth = imagesx($im); - $this -> imgData = str_repeat("\0", $this -> imgHeight * $this -> imgWidth); - for($y = 0; $y < $this -> imgHeight; $y++) { - for($x = 0; $x < $this -> imgWidth; $x++) { - /* Faster to average channels, blend alpha and negate the image here than via filters (tested!) */ - $cols = imagecolorsforindex($im, imagecolorat($im, $x, $y)); - $greyness = (int)(($cols['red'] + $cols['green'] + $cols['blue']) / 3) >> 7; // 1 for white, 0 for black - $black = (1 - $greyness) >> ($cols['alpha'] >> 6); // 1 for black, 0 for white, taking into account transparency - $this -> imgData[$y * $this -> imgWidth + $x] = $black; - } - } - } - - /** - * Load actual image pixels from Imagick object - * - * @param Imagick $im Image to load from - */ - public function readImageFromImagick(Imagick $im) { - /* Threshold */ - $im -> setImageType(Imagick::IMGTYPE_TRUECOLOR); // Remove transparency (good for PDF's) - $max = $im->getQuantumRange(); - $max = $max["quantumRangeLong"]; - $im -> thresholdImage(0.5 * $max); - /* Make a string of 1's and 0's */ - $geometry = $im -> getimagegeometry(); - $this -> imgHeight = $im -> getimageheight(); - $this -> imgWidth = $im -> getimagewidth(); - $this -> imgData = str_repeat("\0", $this -> imgHeight * $this -> imgWidth); - - for($y = 0; $y < $this -> imgHeight; $y++) { - for($x = 0; $x < $this -> imgWidth; $x++) { - /* Faster to average channels, blend alpha and negate the image here than via filters (tested!) */ - $cols = $im -> getImagePixelColor($x, $y); - $cols = $cols -> getcolor(); - $greyness = (int)(($cols['r'] + $cols['g'] + $cols['b']) / 3) >> 7; // 1 for white, 0 for black - $this -> imgData[$y * $this -> imgWidth + $x] = (1 - $greyness); // 1 for black, 0 for white - } - } - - } - - /** - * Output the image in raster (row) format. This can result in padding on the right of the image, if its width is not divisible by 8. - * - * @throws Exception Where the generated data is unsuitable for the printer (indicates a bug or oversized image). - * @return string The image in raster format. - */ - public function toRasterFormat() { - if($this -> imgRasterData != null) { - /* Use previous calculation */ - return $this -> imgRasterData; - } - /* Loop through and convert format */ - $widthPixels = $this -> getWidth(); - $heightPixels = $this -> getHeight(); - $widthBytes = $this -> getWidthBytes(); - $heightBytes = $this -> getHeightBytes(); - $x = $y = $bit = $byte = $byteVal = 0; - $data = str_repeat("\0", $widthBytes * $heightPixels); - if(strlen($data) == 0) { - return $data; - } - do { - $byteVal |= (int)$this -> imgData[$y * $widthPixels + $x] << (7 - $bit); - $x++; - $bit++; - if($x >= $widthPixels) { - $x = 0; - $y++; - $bit = 8; - if($y >= $heightPixels) { - $data[$byte] = chr($byteVal); - break; - } - } - if($bit >= 8) { - $data[$byte] = chr($byteVal); - $byteVal = 0; - $bit = 0; - $byte++; - } - } while(true); - if(strlen($data) != ($this -> getWidthBytes() * $this -> getHeight())) { - throw new Exception("Bug in " . __FUNCTION__ . ", wrong number of bytes."); - } - $this -> imgRasterData = $data; - return $this -> imgRasterData; - } - - /** - * Output image in column format. This format results in padding at the base and right of the image, if its height and width are not divisible by 8. - */ - private function toColumnFormat() { - /* Note: This function is marked private, as it is not yet used/tested and may be buggy. */ - $widthPixels = $this -> getWidth(); - $heightPixels = $this -> getHeight(); - $widthBytes = $this -> getWidthBytes(); - $heightBytes = $this -> getHeightBytes(); - $x = $y = $bit = $byte = $byteVal = 0; - $data = str_repeat("\0", $widthBytes * $heightBytes * 8); - do { - $byteVal |= (int)$this -> imgData[$y * $widthPixels + $x] << (8 - $bit); - $y++; - $bit++; - if($y >= $heightPixels) { - $y = 0; - $x++; - $bit = 8; - if($x >= $widthPixels) { - $data[$byte] = chr($byteVal); - break; - } - } - if($bit >= 8) { - $data[$byte] = chr($byteVal); - $byteVal = 0; - $bit = 0; - $byte++; - } - } while(true); - if(strlen($data) != ($widthBytes * $heightBytes * 8)) { - throw new Exception("Bug in " . __FUNCTION__ . ", wrong number of bytes. Should be " . ($widthBytes * $heightBytes * 8) . " but was " . strlen($data)); - } - return $data; - } - - /** - * @return boolean True if GD is supported, false otherwise (a wrapper for the static version, for mocking in tests) - */ - protected function isGdSupported() { - return self::isGdLoaded(); - } - - /** - * @return boolean True if Imagick is supported, false otherwise (a wrapper for the static version, for mocking in tests) - */ - protected function isImagickSupported() { - return self::isImagickLoaded(); - } - - - /** - * @return boolean True if GD is loaded, false otherwise - */ - public static function isGdLoaded() { - return extension_loaded('gd'); - } - - /** - * @return boolean True if Imagick is loaded, false otherwise - */ - public static function isImagickLoaded() { - return extension_loaded('imagick'); - } - - /** - * Load a PDF for use on the printer - * - * @param string $pdfFile The file to load - * @param string $pageWidth The width, in pixels, of the printer's output. The first page of the PDF will be scaled to approximately fit in this area. - * @param array $range array indicating the first and last page (starting from 0) to load. If not set, the entire document is loaded. - * @throws Exception Where Imagick is not loaded, or where a missing file or invalid page number is requested. - * @return multitype:EscposImage Array of images, retrieved from the PDF file. - */ - public static function loadPdf($pdfFile, $pageWidth = 550, array $range = null) { - if(!extension_loaded('imagick')) { - throw new Exception(__FUNCTION__ . " requires imagick extension."); - } - /* - * Load first page at very low density (resolution), to figure out what - * density to use to achieve $pageWidth - */ - try { - $image = new Imagick(); - $testRes = 2; // Test resolution - $image -> setresolution($testRes, $testRes); - $image -> readimage($pdfFile."[0]"); - $geo = $image -> getimagegeometry(); - $image -> destroy(); - $width = $geo['width']; - $newRes = $pageWidth / $width * $testRes; - /* Load actual document (can be very slow!) */ - $rangeStr = ""; // Set to [0] [0-1] page range if $range is set - if($range != null) { - if(count($range) != 2 || !isset($range[0]) || !is_integer($range[0]) || !isset($range[1]) || !is_integer($range[1]) || $range[0] > $range[1]) { - throw new Exception("Invalid range. Must be two numbers in the array: The start and finish page indexes, starting from 0."); - } - $rangeStr = "[" . ($range[0] == $range[1] ? $range[0] : implode($range, "-")) . "]"; - } - $image -> setresolution($newRes, $newRes); - $image -> readImage($pdfFile."$rangeStr"); - $pages = $image -> getNumberImages(); - /* Convert images to Escpos objects */ - $ret = array(); - for($i = 0;$i < $pages; $i++) { - $image -> setIteratorIndex($i); - $ep = new EscposImage(); - $ep -> readImageFromImagick($image); - $ret[] = $ep; - } - return $ret; - } catch(ImagickException $e) { - // Wrap in normal exception, so that classes which call this do not themselves require imagick as a dependency. - throw new Exception($e); - } - } -} diff --git a/htdocs/includes/mike42/escpos-php/src/EscposPrintBuffer.php b/htdocs/includes/mike42/escpos-php/src/EscposPrintBuffer.php deleted file mode 100644 index 703bc0a57c0..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/EscposPrintBuffer.php +++ /dev/null @@ -1,304 +0,0 @@ -, - * incorporating modifications by: - * - Roni Saha - * - Gergely Radics - * - Warren Doyle - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * This class manages newlines and character encoding for the target printer, and - * can be interchanged for an image-bassed buffer (ImagePrintBuffer) if you can't - * get it operating properly on your machine. - */ -class EscposPrintBuffer implements PrintBuffer { - /** - * @var boolean True to cache output as .gz, false to leave un-compressed (useful for debugging) - */ - const COMPRESS_CACHE = true; - - /** - * @var string The input encoding of the buffer. - */ - const INPUT_ENCODING = "UTF-8"; - - /** - * @var string Un-recorgnised characters will be replaced with this. - */ - const REPLACEMENT_CHAR = "?"; - - /** - * This array Maps ESC/POS character tables to names iconv encodings - */ - private $available = null; - - /** - * @var array Maps of UTF-8 to code-pages - */ - private $encode = null; - - /** - * @var Escpos Printer for output - */ - private $printer; - - /** - * Empty print buffer. - */ - function __construct() { - $this -> printer = null; - } - - public function flush() { - if($this -> printer == null) { - throw new LogicException("Not attached to a printer."); - } - // TODO Not yet implemented for this buffer: This indicates that the printer needs the current line to be ended. - } - - public function getPrinter() { - return $this -> printer; - } - - public function setPrinter(Escpos $printer = null) { - $this -> printer = $printer; - if($printer != null) { - $this -> loadAvailableCharacters(); - } - } - - public function writeText($text) { - if($this -> printer == null) { - throw new LogicException("Not attached to a printer."); - } - if($text == null) { - return; - } - if(!mb_detect_encoding($text, self::INPUT_ENCODING, true)) { - // Assume that the user has already put non-UTF8 into the target encoding. - return $this -> writeTextRaw($text); - } - $i = 0; - $j = 0; - $len = mb_strlen($text, self::INPUT_ENCODING); - while($i < $len) { - $matching = true; - if(($encoding = $this -> identifyText(mb_substr($text, $i, 1, self::INPUT_ENCODING))) === false) { - // Un-encodeable text - $encoding = $this -> getPrinter() -> getCharacterTable(); - } - $i++; - $j = 1; - do { - $char = mb_substr($text, $i, 1, self::INPUT_ENCODING); - $matching = !isset($this -> available[$char]) || isset($this -> available[$char][$encoding]); - if($matching) { - $i++; - $j++; - } - } while($matching && $i < $len); - $this -> writeTextUsingEncoding(mb_substr($text, $i - $j, $j, self::INPUT_ENCODING), $encoding); - } - } - - public function writeTextRaw($text) { - if($this -> printer == null) { - throw new LogicException("Not attached to a printer."); - } - if(strlen($text) == 0) { - return; - } - // Pass only printable characters - for($i = 0; $i < strlen($text); $i++) { - $c = substr($text, $i, 1); - if(!self::asciiCheck($c, true)) { - $text[$i] = self::REPLACEMENT_CHAR; - } - } - $this -> write($text); - } - - /** - * Return an encoding which we can start to use for outputting this text. Later parts of the text need not be included in the returned code page. - * - * @param string $text Input text to check. - * @return boolean|integer Code page number, or FALSE if the text is not printable on any supported encoding. - */ - private function identifyText($text) { - // TODO Replace this with an algorithm to choose the encoding which will encode the farthest into the string, to minimise code page changes. - $char = mb_substr($text, 0, 1, self::INPUT_ENCODING); - if(!isset($this -> available[$char])) { - /* Character not available anywhere */ - return false; - } - foreach($this -> available[$char] as $encodingNo => $true) { - /* Return first code-page where it is available */ - return $encodingNo; - } - return false; - } - - /** - * Based on the printer's connector, compute (or load a cached copy of) maps of UTF character to unicode characters for later use. - */ - private function loadAvailableCharacters() { - $supportedCodePages = $this -> printer -> getPrinterCapabilityProfile() -> getSupportedCodePages(); - $capabilityClassName = get_class($this -> printer -> getPrinterCapabilityProfile()); - $cacheFile = dirname(__FILE__) . "/cache/Characters-" . $capabilityClassName . ".ser" . (self::COMPRESS_CACHE ? ".gz" : ""); - $cacheKey = md5(serialize($supportedCodePages)); - /* Check for pre-generated file */ - if(file_exists($cacheFile)) { - $cacheData = file_get_contents($cacheFile); - if(self::COMPRESS_CACHE) { - $cacheData = gzdecode($cacheData); - } - if($cacheData) { - $dataArray = unserialize($cacheData); - if(isset($dataArray["key"]) && isset($dataArray["available"]) && isset($dataArray["encode"]) && $dataArray["key"] == $cacheKey) { - $this -> available = $dataArray["available"]; - $this -> encode = $dataArray["encode"]; - return; - } - } - } - /* Generate conversion tables */ - $encode = array(); - $available = array(); - $custom = $this -> printer -> getPrinterCapabilityProfile() -> getCustomCodePages(); - - foreach($supportedCodePages as $num => $characterMap) { - $encode[$num] = array(); - if($characterMap === false) { - continue; - } else if(strpos($characterMap, ":") !== false) { - /* Load a pre-defined custom map (vendor-specific code pages) */ - $i = strpos($characterMap, ":"); - if(substr($characterMap, 0, $i) !== "custom") { - continue; - } - $i++; - $mapName = substr($characterMap, $i, strlen($characterMap) - $i); - if(!isset($custom[$mapName]) || mb_strlen($custom[$mapName], self::INPUT_ENCODING) != 128) { - throw new Exception("Capability profile referenced invalid custom map '$mapName'."); - } - $map = $custom[$mapName]; - for($char = 128; $char <= 255; $char++) { - $utf8 = mb_substr($map, $char - 128, 1, self::INPUT_ENCODING); - if($utf8 == " ") { // Skip placeholders - continue; - } - if(!isset($available[$utf8])) { - $available[$utf8] = array(); - } - $available[$utf8][$num] = true; - $encode[$num][$utf8] = chr($char); - } - } else { - /* Generate map using iconv */ - for($char = 128; $char <= 255; $char++) { - $utf8 = @iconv($characterMap, self::INPUT_ENCODING, chr($char)); - if($utf8 == '') { - continue; - } - if(iconv(self::INPUT_ENCODING, $characterMap, $utf8) != chr($char)) { - // Avoid non-canonical conversions - continue; - } - if(!isset($available[$utf8])) { - $available[$utf8] = array(); - } - $available[$utf8][$num] = true; - $encode[$num][$utf8] = chr($char); - } - } - } - /* Use generated data */ - $dataArray = array("available" => $available, "encode" => $encode, "key" => $cacheKey); - $this -> available = $dataArray["available"]; - $this -> encode = $dataArray["encode"]; - $cacheData = serialize($dataArray); - if(self::COMPRESS_CACHE) { - $cacheData = gzencode($cacheData); - } - /* Attempt to cache, but don't worry if we can't */ - @file_put_contents($cacheFile, $cacheData); - } - - /** - * Encode a block of text using the specified map, and write it to the printer. - * - * @param string $text Text to print, UTF-8 format. - * @param integer $encodingNo Encoding number to use- assumed to exist. - */ - private function writeTextUsingEncoding($text, $encodingNo) { - $encodeMap = $this -> encode[$encodingNo]; - $len = mb_strlen($text, self::INPUT_ENCODING); - $rawText = str_repeat(self::REPLACEMENT_CHAR, $len); - for($i = 0; $i < $len; $i++) { - $char = mb_substr($text, $i, 1, self::INPUT_ENCODING); - if(isset($encodeMap[$char])) { - $rawText[$i] = $encodeMap[$char]; - } else if(self::asciiCheck($char)) { - $rawText[$i] = $char; - } - } - if($this -> printer -> getCharacterTable() != $encodingNo) { - $this -> printer -> selectCharacterTable($encodingNo); - } - $this -> writeTextRaw($rawText); - } - - /** - * Write data to the underlying printer. - * - * @param string $data - */ - private function write($data) { - $this -> printer -> getPrintConnector() -> write($data); - } - - /** - * Return true if a character is an ASCII printable character. - * - * @param string $char Character to check - * @param boolean $extended True to allow 128-256 values also (excluded by default) - * @return boolean True if the character is printable, false if it is not. - */ - private static function asciiCheck($char, $extended = false) { - if(strlen($char) != 1) { - // Multi-byte string - return false; - } - $num = ord($char); - if($num > 31 && $num < 127) { // Printable - return true; - } - if($num == 10) { // New-line (printer will take these) - return true; - } - if($extended && $num > 127) { - return true; - } - return false; - } -} diff --git a/htdocs/includes/mike42/escpos-php/src/FilePrintConnector.php b/htdocs/includes/mike42/escpos-php/src/FilePrintConnector.php deleted file mode 100644 index 8d87f0a527a..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/FilePrintConnector.php +++ /dev/null @@ -1,80 +0,0 @@ -, - * incorporating modifications by: - * - Roni Saha - * - Gergely Radics - * - Warren Doyle - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * PrintConnector for passing print data to a file. - */ -class FilePrintConnector implements PrintConnector { - /** - * @var resource The file pointer to send data to. - */ - protected $fp; - - /** - * Construct new connector, given a filename - * - * @param string $filename - */ - public function __construct($filename) { - $this -> fp = fopen($filename, "wb+"); - if($this -> fp === false) { - throw new Exception("Cannot initialise FilePrintConnector."); - } - } - - public function __destruct() { - if($this -> fp !== false) { - trigger_error("Print connector was not finalized. Did you forget to close the printer?", E_USER_NOTICE); - } - } - - /** - * Close file pointer - */ - public function finalize() { - fclose($this -> fp); - $this -> fp = false; - } - - /* (non-PHPdoc) - * @see PrintConnector::read() - */ - public function read($len) { - rewind($this -> fp); - return fgets($this -> fp, $len + 1); - } - - /** - * Write data to the file - * - * @param string $data - */ - public function write($data) { - fwrite($this -> fp, $data); - } -} diff --git a/htdocs/includes/mike42/escpos-php/src/ImagePrintBuffer.php b/htdocs/includes/mike42/escpos-php/src/ImagePrintBuffer.php deleted file mode 100644 index 08ca64ac43e..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/ImagePrintBuffer.php +++ /dev/null @@ -1,99 +0,0 @@ -, - * incorporating modifications by: - * - Roni Saha - * - Gergely Radics - * - Warren Doyle - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * This class renders text to small images on-the-fly. It attempts to mimic the - * behaviour of text output, whilst supporting any fonts & character encodings - * which your system can handle. This class currently requires Imagick. - */ -class ImagePrintBuffer implements PrintBuffer { - private $printer; - - function __construct() { - if(!EscposImage::isImagickLoaded()) { - throw new Exception("ImagePrintBuffer requires the imagick extension"); - } - } - - function flush() { - if($this -> printer == null) { - throw new LogicException("Not attached to a printer."); - } - } - - function getPrinter() { - return $this -> printer; - } - - function setPrinter(Escpos $printer = null) { - $this -> printer = $printer; - } - - function writeText($text) { - if($this -> printer == null) { - throw new LogicException("Not attached to a printer."); - } - if($text == null) { - return; - } - $text = trim($text, "\n"); - /* Create Imagick objects */ - $image = new Imagick(); - $draw = new ImagickDraw(); - $color = new ImagickPixel('#000000'); - $background = new ImagickPixel('white'); - - /* Create annotation */ - //$draw -> setFont('Arial');// (not necessary?) - $draw -> setFontSize(24); // Size 21 looks good for FONT B - $draw -> setFillColor($color); - $draw -> setStrokeAntialias(true); - $draw -> setTextAntialias(true); - $metrics = $image -> queryFontMetrics($draw, $text); - $draw -> annotation(0, $metrics['ascender'], $text); - - /* Create image & draw annotation on it */ - $image -> newImage($metrics['textWidth'], $metrics['textHeight'], $background); - $image -> setImageFormat('png'); - $image -> drawImage($draw); - //$image -> writeImage("test.png"); - - /* Save image */ - $escposImage = new EscposImage(); - $escposImage -> readImageFromImagick($image); - $size = Escpos::IMG_DEFAULT; - $this -> printer -> bitImage($escposImage, $size); - } - - function writeTextRaw($text) { - if($this -> printer == null) { - throw new LogicException("Not attached to a printer."); - } - $this -> printer -> getPrintConnector() -> write($data); - } -} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfile.php new file mode 100644 index 00000000000..9a91390594e --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfile.php @@ -0,0 +1,348 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos; + +use \InvalidArgumentException; + +/** + * Store compatibility information about one printer. + */ +class CapabilityProfile +{ + + /** + * + * @var string $codePageCacheKey + * Hash of the code page data structure, to identify it for caching. + */ + protected $codePageCacheKey; + + /** + * + * @var array $codePages + * Associtive array of CodePage objects, indicating which encodings the printer supports. + */ + protected $codePages; + + /** + * + * @var array $colors + * Not used. + */ + protected $colors; + + /** + * + * @var array $features + * Feature values. + */ + protected $features; + + /** + * + * @var array $fonts + * Not used + */ + protected $fonts; + + /** + * + * @var array $media + * Not used + */ + protected $media; + + /** + * + * @var string $name + * Name of the profile, including model number. + */ + protected $name; + + /** + * + * @var string $notes + * Notes on the profile, null if not set. + */ + protected $notes; + + /** + * + * @var string $profileId + * ID of the profile. + */ + protected $profileId; + + + /** + * @var string $vendor + * Name of manufacturer. + */ + protected $vendor; + + /** + * + * @var array $encodings + * Data structure containing encodings loaded from disk, null if not loaded yet. + */ + protected static $encodings = null; + + /** + * + * @var array $profiles + * Data structure containing profiles loaded from disk, null if not loaded yet. + */ + protected static $profiles = null; + + /** + * Construct new CapabilityProfile. + * The encoding data must be loaded from disk before calling. + * + * @param string $profileId + * ID of the profile + * @param array $profileData + * Profile data from disk. + */ + protected function __construct($profileId, array $profileData) + { + // Basic primitive fields + $this->profileId = $profileId; + $this->name = $profileData['name']; + $this->notes = $profileData['notes']; + $this->vendor = $profileData['vendor']; + // More complex fields that are not currently loaded into custom objects + $this->features = $profileData['features']; + $this->colors = $profileData['colors']; + $this->fonts = $profileData['fonts']; + $this->media = $profileData['media']; + // More complex fields that are loaded into custom objects + $this->codePages = []; + $this->codePageCacheKey = md5(json_encode($profileData['codePages'])); + foreach ($profileData['codePages'] as $k => $v) { + $this->codePages[$k] = new CodePage($v, self::$encodings[$v]); + } + } + + /** + * + * @return string Hash of the code page data structure, to identify it for caching. + */ + public function getCodePageCacheKey() + { + return $this->codePageCacheKey; + } + + /** + * + * @return array Associtive array of CodePage objects, indicating which encodings the printer supports. + */ + public function getCodePages() + { + return $this->codePages; + } + + /** + * + * @param string $featureName + * Name of the feature to retrieve. + * @throws \InvalidArgumentException Where the feature does not exist. + * The exception will contain suggestions for the closest-named features. + * @return mixed feature value. + */ + public function getFeature($featureName) + { + if (isset($this->features[$featureName])) { + return $this->features[$featureName]; + } + $suggestionsArr = $this->suggestFeatureName($featureName); + $suggestionsStr = implode(", ", $suggestionsArr); + $str = "The feature '$featureName' does not exist. Try one that does exist, such as $suggestionsStr"; + throw new \InvalidArgumentException($str); + } + + /** + * + * @return string ID of the profile. + */ + public function getId() + { + return $this->profileId; + } + + /** + * + * @return string Name of the printer. + */ + public function getName() + { + return $this->name; + } + + /** + * + * @return boolean True if Barcode B command is supported, false otherwise + */ + public function getSupportsBarcodeB() + { + return $this->getFeature('barcodeB') === true; + } + + /** + * + * @return boolean True if Bit Image Raster command is supported, false otherwise + */ + public function getSupportsBitImageRaster() + { + return $this->getFeature('bitImageRaster') === true; + } + + /** + * + * @return boolean True if Graphics command is supported, false otherwise + */ + public function getSupportsGraphics() + { + return $this->getFeature('graphics') === true; + } + + /** + * + * @return boolean True if PDF417 code command is supported, false otherwise + */ + public function getSupportsPdf417Code() + { + // TODO submit 'pdf417Code' as a new feature to be tracked in upstream profiles + return $this->getFeature('qrCode') === true; + } + + /** + * + * @return boolean True if QR code command is supported, false otherwise + */ + public function getSupportsQrCode() + { + return $this->getFeature('qrCode') === true; + } + + /** + * + * @return boolean True if Star mode commands are supported, false otherwise + */ + public function getSupportsStarCommands() + { + return $this->getFeature('starCommands') === true; + } + + /** + * + * @return string Vendor of this printer. + */ + public function getVendor() + { + return $this->vendor; + } + + /** + * + * @param string $featureName + * Feature that does not exist + * @return array Three most similar feature names that do exist. + */ + protected function suggestFeatureName($featureName) + { + return self::suggestNearest($featureName, array_keys($this->features), 3); + } + + /** + * + * @return array Names of all profiles that exist. + */ + public static function getProfileNames() + { + self::loadCapabilitiesDataFile(); + return array_keys(self::$profiles); + } + + /** + * Retrieve the CapabilityProfile with the given ID. + * + * @param string $profileName + * The ID of the profile to load. + * @throws InvalidArgumentException Where the ID does not exist. Some similarly-named profiles will be suggested in the Exception text. + * @return CapabilityProfile The CapabilityProfile that was requested. + */ + public static function load($profileName) + { + self::loadCapabilitiesDataFile(); + if (! isset(self::$profiles[$profileName])) { + $suggestionsArray = self::suggestProfileName($profileName); + $suggestionsStr = implode(", ", $suggestionsArray); + throw new InvalidArgumentException("The CapabilityProfile '$profileName' does not exist. Try one that does exist, such as $suggestionsStr."); + } + return new CapabilityProfile($profileName, self::$profiles[$profileName]); + } + + /** + * Ensure that the capabilities.json data file has been loaded. + */ + protected static function loadCapabilitiesDataFile() + { + if (self::$profiles === null) { + $filename = dirname(__FILE__) . "/resources/capabilities.json"; + $capabilitiesData = json_decode(file_get_contents($filename), true); + self::$profiles = $capabilitiesData['profiles']; + self::$encodings = $capabilitiesData['encodings']; + } + } + + /** + * Return choices with smallest edit distance to an invalid input. + * + * @param string $input + * Input that is not a valid choice + * @param array $choices + * Array of valid choices. + * @param int $num + * Number of suggestions to return + */ + public static function suggestNearest($input, array $choices, $num) + { + $distances = array_fill_keys($choices, PHP_INT_MAX); + foreach ($distances as $word => $_) { + $distances[$word] = levenshtein($input, $word); + } + asort($distances); + return array_slice(array_keys($distances), 0, min($num, count($choices))); + } + + /** + * + * @param string $profileName + * profile name that does not exist + * @return array Three similar profile names that do exist, plus 'simple' and 'default' for good measure. + */ + protected static function suggestProfileName($profileName) + { + $suggestions = self::suggestNearest($profileName, array_keys(self::$profiles), 3); + $alwaysSuggest = [ + 'simple', + 'default' + ]; + foreach ($alwaysSuggest as $item) { + if (array_search($item, $suggestions) === false) { + array_push($suggestions, $item); + } + } + return $suggestions; + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/DefaultCapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/DefaultCapabilityProfile.php new file mode 100644 index 00000000000..c574aed178b --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/DefaultCapabilityProfile.php @@ -0,0 +1,22 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ +namespace Mike42\Escpos\CapabilityProfiles; + +use Mike42\Escpos\CapabilityProfile; + +class DefaultCapabilityProfile +{ + public static function getInstance() + { + return CapabilityProfile::load('default'); + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/EposTepCapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/EposTepCapabilityProfile.php new file mode 100644 index 00000000000..cc8e3ec5f3b --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/EposTepCapabilityProfile.php @@ -0,0 +1,22 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ +namespace Mike42\Escpos\CapabilityProfiles; + +use Mike42\Escpos\CapabilityProfile; + +class EposTepCapabilityProfile +{ + public static function getInstance() + { + return CapabilityProfile::load('TEP-200M'); + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/P822DCapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/P822DCapabilityProfile.php new file mode 100644 index 00000000000..42ee3a0b4fa --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/P822DCapabilityProfile.php @@ -0,0 +1,22 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ +namespace Mike42\Escpos\CapabilityProfiles; + +use Mike42\Escpos\CapabilityProfile; + +class P822DCapabilityProfile +{ + public static function getInstance() + { + return CapabilityProfile::load('P822D'); + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/SimpleCapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/SimpleCapabilityProfile.php new file mode 100644 index 00000000000..cb141b8b9b8 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/SimpleCapabilityProfile.php @@ -0,0 +1,22 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ +namespace Mike42\Escpos\CapabilityProfiles; + +use Mike42\Escpos\CapabilityProfile; + +class SimpleCapabilityProfile +{ + public static function getInstance() + { + return CapabilityProfile::load('simple'); + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/StarCapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/StarCapabilityProfile.php new file mode 100644 index 00000000000..6e2f64c2c93 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfiles/StarCapabilityProfile.php @@ -0,0 +1,22 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ +namespace Mike42\Escpos\CapabilityProfiles; + +use Mike42\Escpos\CapabilityProfile; + +class StarCapabilityProfile +{ + public static function getInstance() + { + return CapabilityProfile::load('SP2000'); + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CodePage.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CodePage.php new file mode 100644 index 00000000000..25f58b95369 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CodePage.php @@ -0,0 +1,181 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos; + +use \InvalidArgumentException; + +/** + * Class to handle data about a particular CodePage, as loaded from the receipt print + * database. + * + * Also computes map between UTF-8 and this encoding if necessary, using the iconv library. + */ +class CodePage +{ + /** + * The input encoding for generating character maps with iconv. + */ + const INPUT_ENCODING = "UTF-8"; + + /** + * @var string $data + * Data string, null if not known (can be computed with iconv) + */ + protected $data; + + /** + * @var string $iconv + * Iconv encoding name, null if not known + */ + protected $iconv; + + /** + * @var string $id + * Internal ID of the CodePage + */ + protected $id; + + /** + * @var string $name + * Name of the code page. Substituted with the ID if not set. + */ + protected $name; + + /** + * @var string $notes + * Notes on this code page, or null if not set. + */ + protected $notes; + + /** + * + * @param string $id + * Unique internal identifier for the CodePage. + * @param array $codePageData + * Associative array of CodePage data, as + * specified by the upstream receipt-print-hq/escpos-printer-db database. + * May contain 'name', 'data', 'iconv', and 'notes' fields. + */ + public function __construct($id, array $codePageData) + { + $this->id = $id; + $this->name = isset($codePageData['name']) ? $codePageData['name'] : $id; + $this->data = isset($codePageData['data']) ? implode("", $codePageData['data']) : null; + $this->iconv = isset($codePageData['iconv']) ? $codePageData['iconv'] : null; + $this->notes = isset($codePageData['notes']) ? $codePageData['notes'] : null; + } + + /** + * Get a 128-character data string representing this encoding. + * It will be + * calculated and cached if it was not previously known. + * + * @throws InvalidArgumentException Where the data is now known or computable. + * @return string Data for this encoding. + */ + public function getData() + { + if ($this->data !== null) { + // Return data if known + return $this->data; + } + if ($this->iconv !== null) { + // Calculate with iconv if we know the encoding name + $this->data = self::generateEncodingMap($this->iconv); + return $this->data; + } + // Can't encode.. + throw new InvalidArgumentException("Cannot encode this code page"); + } + + /** + * + * @return string Iconv encoding name, or blank if not set. + */ + public function getIconv() + { + return $this->iconv; + } + + /** + * + * @return string Unique identifier of the code page. + */ + public function getId() + { + return $this->id; + } + + /** + * Name of the code page. + */ + public function getName() + { + return $this->name; + } + + /** + * The notes may explain quirks about a code-page, such as a source if it's non-standard or un-encodeable. + * + * @return string Notes on the code page, or null if not set. + */ + public function getNotes() + { + return $this->notes; + } + + /** + * + * @return boolean True if we can encode with this code page (ie, we know what data it holds). + * + * Many printers contain vendor-specific code pages, which are named but have not been identified or + * typed out. For our purposes, this is an "un-encodeable" code page. + */ + public function isEncodable() + { + return $this->iconv !== null || $this->data !== null; + } + + /** + * Given an iconv encoding name, generate a 128-character UTF-8 string, containing code points 128-255. + * + * This string is used to map UTF-8 characters to their location in this code page. + * + * @param string $iconvName + * Name of the encoding + * @return string 128-character string in UTF-8. + */ + protected static function generateEncodingMap($iconvName) + { + // Start with array of blanks (" " indicates unknown character). + $charMap = array_fill(0, 128, " "); + // Loop through 128 code points + for ($char = 128; $char <= 255; $char ++) { + // Try to identify the UTF-8 character that would go here + $utf8 = @iconv($iconvName, self::INPUT_ENCODING, chr($char)); + if ($utf8 == '') { + continue; + } + if (iconv(self::INPUT_ENCODING, $iconvName, $utf8) != chr($char)) { + // Avoid non-canonical conversions (no known examples) + continue; + } + // Replace the ' ' with the correct character if we found it + $charMap[$char - 128] = $utf8; + } + // Join into a 128-character string and return. + $charMapStr = implode("", $charMap); + assert(mb_strlen($charMapStr, self::INPUT_ENCODING) == 128); + return $charMapStr; + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Devices/AuresCustomerDisplay.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Devices/AuresCustomerDisplay.php new file mode 100644 index 00000000000..3bf9101a4cf --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Devices/AuresCustomerDisplay.php @@ -0,0 +1,150 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\Devices; + +use Mike42\Escpos\Printer; + +/** + * A class for sending ESC/POS-like code to an Aures customer display. + * The display has some features that printers do not, such as an ability to "clear" the screen. + */ +class AuresCustomerDisplay extends Printer +{ + + /** + * Indicates that the text should wrap and type over + * existing text on the screen, rather than scroll. + */ + const TEXT_OVERWRITE = 1; + + /** + * Indicates that overflowing text should cause the + * display to scroll vertically, like a computer terminal. + */ + const TEXT_VERTICAL_SCROLL = 2; + + /** + * Indicates that overflowing text should cause the + * display to scroll horizontally, like a news ticker. + */ + const TEXT_HORIZONTAL_SCROLL = 3; + + /** + * + * {@inheritdoc} + * + * @see \Mike42\Escpos\Printer::initialize() + */ + public function initialize() + { + // Select ESC/POS mode first + $this->selectEscposMode(); + parent::initialize(); + // ESC @ does not reset character table on this printer + $this->selectCharacterTable(0); + // Default to horizontal scroll mode. Behaves most like a printer. + $this->selectTextScrollMode(AuresCustomerDisplay::TEXT_VERTICAL_SCROLL); + } + + /** + * Selects ESC/POS mode. + * + * This device supports other modes, which are not used. + */ + protected function selectEscposMode() + { + $this->connector->write("\x02\x05\x43\x31\x03"); + } + + /** + * + * @param int $mode + * The text scroll mode to use. One of + * AuresCustomerDisplay::TEXT_OVERWRITE, + * AuresCustomerDisplay::TEXT_VERTICAL_SCROLL or + * AuresCustomerDisplay::TEXT_HORIZONTAL_SCROLL + */ + public function selectTextScrollMode($mode = AuresCustomerDisplay::TEXT_VERTICAL_SCROLL) + { + self::validateInteger($mode, 1, 3, __FUNCTION__); + $this->connector->write("\x1F" . chr($mode)); + } + + /** + * Clear the display. + */ + public function clear() + { + $this->connector->write("\x0c"); + } + + /** + * Instruct the display to show the firmware version. + */ + public function showFirmwareVersion() + { + $this->connector->write("\x02\x05\x56\x01\x03"); + } + + /** + * Instruct the display to begin a self-test/demo sequence. + */ + public function selfTest() + { + $this->connector->write("\x02\x05\x44\x08\x03"); + } + + /** + * Instruct the display to show a pre-loaded logo. + * + * Note that this driver is not capable of uploading a + * logo, but that the vendor supplies software + * which has this function. + */ + public function showLogo() + { + $this->connector->write("\x02\xFC\x55\xAA\x55\xAA"); + } + + /** + * + * {@inheritdoc} + * + * @see \Mike42\Escpos\Printer::text() + */ + public function text($str = "") + { + self::validateString($str, __FUNCTION__); + // Need to intercept line-feeds, since "\n" is insufficient on this device. + foreach (explode("\n", $str) as $id => $line) { + if ($id > 0) { + $this->feed(); + } + parent::text($line); + } + } + + /** + * + * {@inheritdoc} + * + * @see \Mike42\Escpos\Printer::feed() + */ + public function feed($lines = 1) + { + self::validateInteger($lines, 1, 255, __FUNCTION__); + for ($i = 0; $i < $lines; $i ++) { + $this->connector->write("\r\n"); + } + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/EscposImage.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/EscposImage.php new file mode 100644 index 00000000000..9a625acb47c --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/EscposImage.php @@ -0,0 +1,460 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos; + +use Exception; +use InvalidArgumentException; + +/** + * This class deals with images in raster formats, and converts them into formats + * which are suitable for use on thermal receipt printers. Currently, only PNG + * images (in) and ESC/POS raster format (out) are implemeted. + * + * Input formats: + * - Currently, only PNG is supported. + * - Other easily read raster formats (jpg, gif) will be added at a later date, as this is not complex. + * - The BMP format can be directly read by some commands, but this has not yet been implemented. + * + * Output formats: + * - Currently, only ESC/POS raster format is supported + * - ESC/POS 'column format' support is partially implemented, but is not yet used by Escpos.php library. + * - Output as multiple rows of column format image is not yet in the works. + * + * Libraries: + * - Currently, php-gd is used to read the input. Support for imagemagick where gd is not installed is + * also not complex to add, and is a likely future feature. + * - Support for native use of the BMP format is a goal, for maximum compatibility with target environments. + */ +abstract class EscposImage +{ + /** + * @var int $imgHeight + * height of the image. + */ + protected $imgHeight = 0; + + /** + * @var int $imgWidth + * width of the image + */ + protected $imgWidth = 0; + + /** + * @var string $imgData + * Image data in rows: 1 for black, 0 for white. + */ + private $imgData = null; + + /** + * @var array:string $imgColumnData + * Cached column-format data to avoid re-computation + */ + private $imgColumnData = []; + + /** + * @var string $imgRasterData + * Cached raster format data to avoid re-computation + */ + private $imgRasterData = null; + + /** + * @var string $filename + * Filename of image on disk - null if not loaded from disk. + */ + private $filename = null; + + /** + * @var boolean $allowOptimisations + * True to allow faster library-specific rendering shortcuts, false to always just use + * image libraries to read pixels (more reproducible between systems). + */ + private $allowOptimisations = true; + + /** + * Construct a new EscposImage. + * + * @param string $filename Path to image filename, or null to create an empty image. + * @param boolean $allowOptimisations True (default) to use any library-specific tricks + * to speed up rendering, false to force the image to be read in pixel-by-pixel, + * which is easier to unit test and more reproducible between systems, but slower. + */ + public function __construct($filename = null, $allowOptimisations = true) + { + $this -> filename = $filename; + $this -> allowOptimisations = $allowOptimisations; + } + + /** + * @return int height of the image in pixels + */ + public function getHeight() + { + return $this -> imgHeight; + } + + /** + * @return int Number of bytes to represent a row of this image + */ + public function getHeightBytes() + { + return (int)(($this -> imgHeight + 7) / 8); + } + + /** + * @return int Width of the image + */ + public function getWidth() + { + return $this -> imgWidth; + } + + /** + * @return int Number of bytes to represent a row of this image + */ + public function getWidthBytes() + { + return (int)(($this -> imgWidth + 7) / 8); + } + + /** + * Output the image in raster (row) format. This can result in padding on the + * right of the image, if its width is not divisible by 8. + * + * @throws Exception Where the generated data is unsuitable for the printer + * (indicates a bug or oversized image). + * @return string The image in raster format. + */ + public function toRasterFormat() + { + // Just wraps implementations for caching & lazy loading + if ($this -> imgRasterData !== null) { + /* Return cached value */ + return $this -> imgRasterData; + } + if ($this -> allowOptimisations) { + /* Use optimised code if allowed */ + $this -> imgRasterData = $this -> getRasterFormatFromFile($this -> filename); + } + if ($this -> imgRasterData === null) { + /* Load in full image and render the slow way if no faster implementation + is available, or if we've been asked not to use it */ + if ($this -> imgData === null) { + $this -> loadImageData($this -> filename); + } + $this -> imgRasterData = $this -> getRasterFormat(); + } + return $this -> imgRasterData; + } + + /** + * Output the image in column format. + * + * @param boolean $doubleDensity True for double density (24px) lines, false for single-density (8px) lines. + * @return string[] an array, one item per line of output. All lines will be of equal size. + */ + public function toColumnFormat($doubleDensity = false) + { + $densityIdx = $doubleDensity ? 1 : 0; + // Just wraps implementations for caching and lazy loading + if (isset($this -> imgColumnData[$densityIdx])) { + /* Return cached value */ + return $this -> imgColumnData[$densityIdx]; + } + $this -> imgColumnData[$densityIdx] = null; + if ($this -> allowOptimisations) { + /* Use optimised code if allowed */ + $data = $this -> getColumnFormatFromFile($this -> filename, $doubleDensity); + $this -> imgColumnData[$densityIdx] = $data; + } + if ($this -> imgColumnData[$densityIdx] === null) { + /* Load in full image and render the slow way if no faster implementation + is available, or if we've been asked not to use it */ + if ($this -> imgData === null) { + $this -> loadImageData($this -> filename); + } + $this -> imgColumnData[$densityIdx] = $this -> getColumnFormat($doubleDensity); + } + return $this -> imgColumnData[$densityIdx]; + } + + /** + * Load an image from disk. This default implementation always gives a zero-sized image. + * + * @param string|null $filename Filename to load from. + */ + protected function loadImageData($filename = null) + { + // Load image in to string of 1's and 0's, also set width & height + $this -> setImgWidth(0); + $this -> setImgHeight(0); + $this -> setImgData(""); + } + + /** + * Set image data. + * + * @param string $data Image data to use, string of 1's (black) and 0's (white) in row-major order. + */ + protected function setImgData($data) + { + $this -> imgData = $data; + } + + /** + * Set image width. + * + * @param int $width width of the image + */ + protected function setImgWidth($width) + { + $this -> imgWidth = $width; + } + + /** + * Set image height. + * + * @param int $height height of the image. + */ + protected function setImgHeight($height) + { + $this -> imgHeight = $height; + } + + /** + * @param string $filename + * Filename to load from + * @return string|NULL + * Raster format data, or NULL if no optimised renderer is available in + * this implementation. + */ + protected function getRasterFormatFromFile($filename = null) + { + // No optimised implementation to provide + return null; + } + + /** + * @param string $filename + * Filename to load from + * @param boolean $highDensityVertical + * True for high density output (24px lines), false for regular density (8px) + * @return string[]|NULL + * Column format data as array, or NULL if optimised renderer isn't + * available in this implementation. + */ + protected function getColumnFormatFromFile($filename = null, $highDensityVertical = true) + { + // No optimised implementation to provide + return null; + } + + /** + * Get column fromat from loaded image pixels, line by line. + * + * @throws Exception + * Where wrong number of bytes has been generated. + * @return string + * Raster format data + */ + private function getRasterFormat() + { + /* Loop through and convert format */ + $widthPixels = $this -> getWidth(); + $heightPixels = $this -> getHeight(); + $widthBytes = $this -> getWidthBytes(); + $heightBytes = $this -> getHeightBytes(); + $x = $y = $bit = $byte = $byteVal = 0; + $data = str_repeat("\0", $widthBytes * $heightPixels); + if (strlen($data) == 0) { + return $data; + } + do { + $byteVal |= (int)$this -> imgData[$y * $widthPixels + $x] << (7 - $bit); + $x++; + $bit++; + if ($x >= $widthPixels) { + $x = 0; + $y++; + $bit = 8; + if ($y >= $heightPixels) { + $data[$byte] = chr($byteVal); + break; + } + } + if ($bit >= 8) { + $data[$byte] = chr($byteVal); + $byteVal = 0; + $bit = 0; + $byte++; + } + } while (true); + if (strlen($data) != ($this -> getWidthBytes() * $this -> getHeight())) { + throw new Exception("Bug in " . __FUNCTION__ . ", wrong number of bytes."); + } + return $data; + } + + /** + * Get column fromat from loaded image pixels, line by line. + * + * @param boolean $highDensity + * True for high density output (24px lines), false for regular density (8px) + * @return string[] + * Array of column format data, one item per row. + */ + private function getColumnFormat($highDensity) + { + $out = []; + $i = 0; + while (($line = $this -> getColumnFormatLine($i, $highDensity)) !== null) { + $out[] = $line; + $i++; + } + return $out; + } + + /** + * Output image in column format. Must be called once for each line of output. + * + * @param int $lineNo + * Line number to retrieve + * @param bool $highDensity + * True for high density output (24px lines), false for regular density (8px) + * @throws Exception + * Where wrong number of bytes has been generated. + * @return NULL|string + * Column format data, or null if there is no more data (when iterating) + */ + private function getColumnFormatLine($lineNo, $highDensity) + { + // Currently double density in both directions, very experimental + $widthPixels = $this -> getWidth(); + $heightPixels = $this -> getHeight(); + $widthBytes = $this -> getWidthBytes(); + $heightBytes = $this -> getHeightBytes(); + $lineHeight = $highDensity ? 3 : 1; // Vertical density. 1 or 3 (for 8 and 24 pixel lines) + // Initialise to zero + $x = $y = $bit = $byte = $byteVal = 0; + $data = str_repeat("\x00", $widthPixels * $lineHeight); + $yStart = $lineHeight * 8 * $lineNo; + if ($yStart >= $heightPixels) { + return null; + } + if (strlen($data) == 0) { + return $data; + } + do { + $yReal = $y + $yStart; + if ($yReal < $heightPixels) { + $byteVal |= (int)$this -> imgData[$yReal * $widthPixels + $x] << (7 - $bit); + } + $y++; + $bit++; + if ($y >= $lineHeight * 8) { + $y = 0; + $x++; + $bit = 8; + if ($x >= $widthPixels) { + $data[$byte] = chr($byteVal); + break; + } + } + if ($bit >= 8) { + $data[$byte] = chr($byteVal); + $byteVal = 0; + $bit = 0; + $byte++; + } + } while (true); + if (strlen($data) != $widthPixels * $lineHeight) { + throw new Exception("Bug in " . __FUNCTION__ . ", wrong number of bytes."); + } + return $data; + } + + /** + * @return boolean True if GD is loaded, false otherwise + */ + public static function isGdLoaded() + { + return extension_loaded('gd'); + } + + /** + * @return boolean True if Imagick is loaded, false otherwise + */ + public static function isImagickLoaded() + { + return extension_loaded('imagick'); + } + + + /** + * This is a convinience method to load an image from file, auto-selecting + * an EscposImage implementation which uses an available library. + * + * The sub-classes can be constructed directly if you know that you will + * have Imagick or GD on the print server. + * + * @param string $filename + * File to load from + * @param bool $allowOptimisations + * True to allow the fastest rendering shortcuts, false to force the library + * to read the image into an internal raster format and use PHP to render + * the image (slower but less fragile). + * @param array $preferred + * Order to try to load libraries in- escpos-php supports pluggable image + * libraries. Items can be 'imagick', 'gd', 'native'. + * @throws Exception + * Where no suitable library could be found for the type of file being loaded. + * @return EscposImage + * + */ + public static function load( + $filename, + $allowOptimisations = true, + array $preferred = ['imagick', 'gd', 'native'] + ) { + /* Fail early if file is not readble */ + if (!file_exists($filename) || !is_readable($filename)) { + throw new Exception("File '$filename' does not exist, or is not readable."); + } + $ext = pathinfo($filename, PATHINFO_EXTENSION); + /* Choose the first implementation which can handle this format */ + foreach ($preferred as $implemetnation) { + if ($implemetnation === 'imagick') { + if (!self::isImagickLoaded()) { + // Skip option if Imagick is not loaded + continue; + } + return new \Mike42\Escpos\ImagickEscposImage($filename, $allowOptimisations); + } elseif ($implemetnation === 'gd') { + if (!self::isGdLoaded()) { + // Skip option if GD not loaded + continue; + } + return new \Mike42\Escpos\GdEscposImage($filename, $allowOptimisations); + } elseif ($implemetnation === 'native') { + if (!in_array($ext, ['wbmp', 'pbm', 'bmp'])) { + // Pure PHP is fastest way to generate raster output from wbmp and pbm formats. + continue; + } + return new \Mike42\Escpos\NativeEscposImage($filename, $allowOptimisations); + } else { + // Something else on the 'preferred' list. + throw new InvalidArgumentException("'$implemetnation' is not a known EscposImage implementation"); + } + } + throw new InvalidArgumentException("No suitable EscposImage implementation found for '$filename'."); + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php new file mode 100644 index 00000000000..32edf76ef7c --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php @@ -0,0 +1,86 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos; + +use Mike42\Escpos\EscposImage; +use Exception; + +/** + * Implementation of EscposImage using the GD PHP plugin. + */ +class GdEscposImage extends EscposImage +{ + /** + * Load an image from disk, into memory, using GD. + * + * @param string|null $filename The filename to load from + * @throws Exception if the image format is not supported, + * or the file cannot be opened. + */ + protected function loadImageData($filename = null) + { + if ($filename === null) { + /* Set to blank image */ + return parent::loadImageData($filename); + } + + $ext = pathinfo($filename, PATHINFO_EXTENSION); + switch ($ext) { + case "png": + $im = @imagecreatefrompng($filename); + break; + case "jpg": + $im = @imagecreatefromjpeg($filename); + break; + case "gif": + $im = @imagecreatefromgif($filename); + break; + default: + throw new Exception("Image format not supported in GD"); + } + $this -> readImageFromGdResource($im); + } + + /** + * Load actual image pixels from GD resource. + * + * @param resource $im GD resource to use + * @throws Exception Where the image can't be read. + */ + public function readImageFromGdResource($im) + { + if (!is_resource($im)) { + throw new Exception("Failed to load image."); + } elseif (!EscposImage::isGdLoaded()) { + throw new Exception(__FUNCTION__ . " requires 'gd' extension."); + } + /* Make a string of 1's and 0's */ + $imgHeight = imagesy($im); + $imgWidth = imagesx($im); + $imgData = str_repeat("\0", $imgHeight * $imgWidth); + for ($y = 0; $y < $imgHeight; $y++) { + for ($x = 0; $x < $imgWidth; $x++) { + /* Faster to average channels, blend alpha and negate the image here than via filters (tested!) */ + $cols = imagecolorsforindex($im, imagecolorat($im, $x, $y)); + // 1 for white, 0 for black, ignoring transparency + $greyness = (int)(($cols['red'] + $cols['green'] + $cols['blue']) / 3) >> 7; + // 1 for black, 0 for white, taking into account transparency + $black = (1 - $greyness) >> ($cols['alpha'] >> 6); + $imgData[$y * $imgWidth + $x] = $black; + } + } + $this -> setImgWidth($imgWidth); + $this -> setImgHeight($imgHeight); + $this -> setImgData($imgData); + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php new file mode 100644 index 00000000000..13851a4d034 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php @@ -0,0 +1,273 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos; + +use Exception; +use Imagick; +use Mike42\Escpos\EscposImage; + +/** + * Implementation of EscposImage using the Imagick PHP plugin. + */ +class ImagickEscposImage extends EscposImage +{ + /** + * Load actual image pixels from Imagick object + * + * @param Imagick $im Image to load from + */ + public function readImageFromImagick(\Imagick $im) + { + /* Strip transparency */ + $im = self::alphaRemove($im); + /* Threshold */ + $im -> setImageType(\Imagick::IMGTYPE_TRUECOLOR); // Remove transparency (good for PDF's) + $max = $im->getQuantumRange(); + $max = $max["quantumRangeLong"]; + $im -> thresholdImage(0.5 * $max); + /* Make a string of 1's and 0's */ + $imgHeight = $im -> getimageheight(); + $imgWidth = $im -> getimagewidth(); + $imgData = str_repeat("\0", $imgHeight * $imgWidth); + for ($y = 0; $y < $imgHeight; $y++) { + for ($x = 0; $x < $imgWidth; $x++) { + /* Faster to average channels, blend alpha and negate the image here than via filters (tested!) */ + $cols = $im -> getImagePixelColor($x, $y); + $cols = $cols -> getcolor(); + $greyness = (int)(($cols['r'] + $cols['g'] + $cols['b']) / 3) >> 7; // 1 for white, 0 for black + $imgData[$y * $imgWidth + $x] = (1 - $greyness); // 1 for black, 0 for white + } + } + $this -> setImgWidth($imgWidth); + $this -> setImgHeight($imgHeight); + $this -> setImgData($imgData); + } + + /** + * @param string $filename + * Filename to load from + * @param boolean $highDensityVertical + * True for high density output (24px lines), false for regular density (8px) + * @return string[]|NULL + * Column format data as array, or NULL if optimised renderer isn't + * available in this implementation. + */ + protected function getColumnFormatFromFile($filename = null, $highDensityVertical = true) + { + if ($filename === null) { + return null; + } + $im = $this -> getImageFromFile($filename); + $this -> setImgWidth($im -> getimagewidth()); + $this -> setImgHeight($im -> getimageheight()); + + /* Strip transparency */ + $im = self::alphaRemove($im); + $im -> setformat('pbm'); + $im -> getimageblob(); // Forces 1-bit rendering now, so that subsequent operations are faster + $im -> rotateImage('#fff', 90.0); + $im -> flopImage(); + $lineHeight = $highDensityVertical ? 3 : 1; + $blobs = $this -> getColumnFormatFromImage($im, $lineHeight * 8); + return $blobs; + } + + /** + * Load an image from disk, into memory, using Imagick. + * + * @param string|null $filename The filename to load from + * @throws Exception if the image format is not supported, + * or the file cannot be opened. + */ + protected function loadImageData($filename = null) + { + if ($filename === null) { + /* Set to blank image */ + return parent::loadImageData($filename); + } + + $im = $this -> getImageFromFile($filename); + $this -> readImageFromImagick($im); + } + + /** + * Return data in column format as array of slices. + * Operates recursively to save cloning larger image many times. + * + * @param Imagick $im + * @param int $lineHeight + * Height of printed line in dots. 8 or 24. + * @return string[] + */ + private function getColumnFormatFromImage(Imagick $im, $lineHeight) + { + $imgWidth = $im->getimagewidth(); + if ($imgWidth == $lineHeight) { + // Return glob of this panel + return [$this -> getRasterBlobFromImage($im)]; + } elseif ($imgWidth > $lineHeight) { + // Calculations + $slicesLeft = ceil($imgWidth / $lineHeight / 2); + $widthLeft = $slicesLeft * $lineHeight; + $widthRight = $imgWidth - $widthLeft; + // Slice up (left) + $left = clone $im; + $left -> extentimage($widthLeft, $left -> getimageheight(), 0, 0); + // Slice up (right - ensure width is divisible by lineHeight also) + $right = clone $im; + $widthRightRounded = $widthRight < $lineHeight ? $lineHeight : $widthRight; + $right -> extentimage($widthRightRounded, $right -> getimageheight(), $widthLeft, 0); + // Recurse + $leftBlobs = $this -> getColumnFormatFromImage($left, $lineHeight); + $rightBlobs = $this -> getColumnFormatFromImage($right, $lineHeight); + return array_merge($leftBlobs, $rightBlobs); + } else { + /* Image is smaller than full width */ + $im -> extentimage($lineHeight, $im -> getimageheight(), 0, 0); + return [$this -> getRasterBlobFromImage($im)]; + } + } + + /** + * Load Imagick file from image + * + * @param string $filename Filename to load + * @throws Exception Wrapped Imagick error if image can't be loaded + * @return Imagick Loaded image + */ + private function getImageFromFile($filename) + { + $im = new Imagick(); + try { + $im->setResourceLimit(6, 1); // Prevent libgomp1 segfaults, grumble grumble. + $im -> readimage($filename); + } catch (\ImagickException $e) { + /* Re-throw as normal exception */ + throw new Exception($e); + } + return $im; + } + + /** + * Pull blob (from PBM-formatted image only!), and spit out a blob or raster data. + * Will crash out on anything which is not a valid 'P4' file. + * + * @param Imagick $im Image which has format PBM. + * @return string raster data from the image + */ + private function getRasterBlobFromImage(Imagick $im) + { + $blob = $im -> getimageblob(); + /* Find where header ends */ + $i = strpos($blob, "P4\n") + 2; + while ($blob[$i + 1] == '#') { + $i = strpos($blob, "\n", $i + 1); + } + $i = strpos($blob, "\n", $i + 1); + /* Return raster data only */ + $subBlob = substr($blob, $i + 1); + return $subBlob; + } + + /** + * @param string $filename + * Filename to load from + * @return string|NULL + * Raster format data, or NULL if no optimised renderer is available in + * this implementation. + */ + protected function getRasterFormatFromFile($filename = null) + { + if ($filename === null) { + return null; + } + $im = $this -> getImageFromFile($filename); + $this -> setImgWidth($im -> getimagewidth()); + $this -> setImgHeight($im -> getimageheight()); + /* Convert to PBM and extract raster portion */ + $im = self::alphaRemove($im); + $im -> setFormat('pbm'); + return $this -> getRasterBlobFromImage($im); + } + + /** + * Load a PDF for use on the printer + * + * @param string $pdfFile + * The file to load + * @param int $pageWidth + * The width, in pixels, of the printer's output. The first page of the + * PDF will be scaled to approximately fit in this area. + * @throws Exception Where Imagick is not loaded, or where a missing file + * or invalid page number is requested. + * @return array Array of images, retrieved from the PDF file. + */ + public static function loadPdf($pdfFile, $pageWidth = 550) + { + if (!EscposImage::isImagickLoaded()) { + throw new Exception(__FUNCTION__ . " requires imagick extension."); + } + /* + * Load first page at very low density (resolution), to figure out what + * density to use to achieve $pageWidth + */ + try { + $image = new \Imagick(); + $testRes = 2; // Test resolution + $image -> setresolution($testRes, $testRes); + /* Load document just to measure geometry */ + $image -> readimage($pdfFile); + $geo = $image -> getimagegeometry(); + $image -> destroy(); + $width = $geo['width']; + $newRes = $pageWidth / $width * $testRes; + /* Load entire document in */ + $image -> setresolution($newRes, $newRes); + $image -> readImage($pdfFile); + $pages = $image -> getNumberImages(); + /* Convert images to Escpos objects */ + $ret = []; + for ($i = 0; $i < $pages; $i++) { + $image -> setIteratorIndex($i); + $ep = new ImagickEscposImage(); + $ep -> readImageFromImagick($image); + $ret[] = $ep; + } + return $ret; + } catch (\ImagickException $e) { + /* Wrap in normal exception, so that classes which call this do not + * themselves require imagick as a dependency. */ + throw new Exception($e); + } + } + + /** + * Paste image over white canvas to stip transparency reliably on different + * versions of ImageMagick. + * + * There are other methods for this: + * - flattenImages() is deprecated + * - setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE) is not available on + * ImageMagick < 6.8. + * + * @param Imagick $im Image to flatten + * @return Imagick Flattened image + */ + private static function alphaRemove(Imagick $im) + { + $flat = new \Imagick(); + $flat -> newImage($im -> getimagewidth(), $im -> getimageheight(), "white", $im -> getimageformat()); + $flat -> compositeimage($im, \Imagick::COMPOSITE_OVER, 0, 0); + return $flat; + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/NativeEscposImage.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/NativeEscposImage.php new file mode 100644 index 00000000000..e85c942b2c3 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/NativeEscposImage.php @@ -0,0 +1,24 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos; + +use Mike42\Escpos\EscposImage; + +/** + * Implementation of EscposImage using only native PHP. + * TODO: wbmp, pbm, bmp files. + */ +class NativeEscposImage extends EscposImage +{ + +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php new file mode 100644 index 00000000000..4e04176521e --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php @@ -0,0 +1,300 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\PrintBuffers; + +use LogicException; +use Mike42\Escpos\Printer; + +/** + * This class manages newlines and character encoding for the target printer, and + * can be interchanged for an image-bassed buffer (ImagePrintBuffer) if you can't + * get it operating properly on your machine. + */ +class EscposPrintBuffer implements PrintBuffer +{ + /** + * True to cache output as .z, false to leave un-compressed (useful for debugging) + */ + const COMPRESS_CACHE = true; + + /** + * The input encoding of the buffer. + */ + const INPUT_ENCODING = "UTF-8"; + + /** + * Un-recognised characters will be replaced with this. + */ + const REPLACEMENT_CHAR = "?"; + + /** + * @var array $available + * This array Maps ESC/POS character tables to names iconv encodings + */ + private $available = null; + + /** + * @var array $encode + * Maps of UTF-8 to code-pages + */ + private $encode = null; + + /** + * @var Printer|null $printer + * Printer for output + */ + private $printer; + + /** + * Empty print buffer. + */ + public function __construct() + { + $this -> printer = null; + } + + public function flush() + { + if ($this -> printer == null) { + throw new LogicException("Not attached to a printer."); + } + // TODO Not yet implemented for this buffer: This indicates that the printer needs the current line to be ended. + } + + public function getPrinter() + { + return $this -> printer; + } + + public function setPrinter(Printer $printer = null) + { + $this -> printer = $printer; + if ($printer != null) { + $this -> loadAvailableCharacters(); + } + } + + public function writeText($text) + { + if ($this -> printer == null) { + throw new LogicException("Not attached to a printer."); + } + if ($text == null) { + return; + } + if (!mb_detect_encoding($text, self::INPUT_ENCODING, true)) { + // Assume that the user has already put non-UTF8 into the target encoding. + return $this -> writeTextRaw($text); + } + $i = 0; + $j = 0; + $len = mb_strlen($text, self::INPUT_ENCODING); + while ($i < $len) { + $matching = true; + if (($encoding = $this -> identifyText(mb_substr($text, $i, 1, self::INPUT_ENCODING))) === false) { + // Un-encodeable text + $encoding = $this -> getPrinter() -> getCharacterTable(); + } + $i++; + $j = 1; + do { + $char = mb_substr($text, $i, 1, self::INPUT_ENCODING); + $matching = !isset($this -> available[$char]) || isset($this -> available[$char][$encoding]); + if ($matching) { + $i++; + $j++; + } + } while ($matching && $i < $len); + $this -> writeTextUsingEncoding(mb_substr($text, $i - $j, $j, self::INPUT_ENCODING), $encoding); + } + } + + public function writeTextRaw($text) + { + if ($this -> printer == null) { + throw new LogicException("Not attached to a printer."); + } + if (strlen($text) == 0) { + return; + } + // Pass only printable characters + $j = 0; + $l = strlen($text); + $outp = str_repeat(self::REPLACEMENT_CHAR, $l); + for ($i = 0; $i < $l; $i++) { + $c = substr($text, $i, 1); + if ($c == "\r") { + /* Skip past Windows line endings (raw usage). */ + continue; + } else if (self::asciiCheck($c, true)) { + $outp[$j] = $c; + } + $j++; + } + $this -> write(substr($outp, 0, $j)); + } + + /** + * Return an encoding which we can start to use for outputting this text. + * Later parts of the text need not be included in the returned code page. + * + * @param string $text Input text to check. + * @return boolean|integer Code page number, or FALSE if the text is not + * printable on any supported encoding. + */ + private function identifyText($text) + { + // TODO Replace this with an algorithm to choose the encoding which will + // encode the farthest into the string, to minimise code page changes. + $char = mb_substr($text, 0, 1, self::INPUT_ENCODING); + if (!isset($this -> available[$char])) { + /* Character not available anywhere */ + return false; + } + foreach ($this -> available[$char] as $encodingNo => $true) { + /* Return first code-page where it is available */ + return $encodingNo; + } + return false; + } + + /** + * Based on the printer's connector, compute (or load a cached copy of) maps + * of UTF character to unicode characters for later use. + */ + private function loadAvailableCharacters() + { + $profile = $this -> printer -> getPrinterCapabilityProfile(); + $supportedCodePages = $profile -> getCodePages(); + $profileName = $profile -> getId(); + $cacheFile = dirname(__FILE__) . "/cache/Characters-" . $profileName . ".ser" . + (self::COMPRESS_CACHE ? ".z" : ""); + $cacheKey = $profile -> getCodePageCacheKey(); + /* Check for pre-generated file */ + if (file_exists($cacheFile)) { + $cacheData = file_get_contents($cacheFile); + if (self::COMPRESS_CACHE) { + $cacheData = gzuncompress($cacheData); + } + if ($cacheData) { + $dataArray = unserialize($cacheData); + if (isset($dataArray["key"]) && isset($dataArray["available"]) && + isset($dataArray["encode"]) && $dataArray["key"] == $cacheKey) { + $this -> available = $dataArray["available"]; + $this -> encode = $dataArray["encode"]; + return; + } + } + } + + /* Generate conversion tables */ + $encode = []; + $available = []; + + foreach ($supportedCodePages as $num => $codePage) { + $encode[$num] = []; + if (!$codePage -> isEncodable()) { + continue; + } + $map = $codePage -> getData(); + for ($char = 128; $char <= 255; $char++) { + $utf8 = mb_substr($map, $char - 128, 1, self::INPUT_ENCODING); + if ($utf8 == " ") { // Skip placeholders + continue; + } + if (!isset($available[$utf8])) { + $available[$utf8] = []; + } + $available[$utf8][$num] = true; + $encode[$num][$utf8] = chr($char); + } + } + + /* Use generated data */ + $dataArray = ["available" => $available, "encode" => $encode, "key" => $cacheKey]; + $this -> available = $dataArray["available"]; + $this -> encode = $dataArray["encode"]; + $cacheData = serialize($dataArray); + if (self::COMPRESS_CACHE) { + $cacheData = gzcompress($cacheData); + } + /* Attempt to cache, but don't worry if we can't */ + @file_put_contents($cacheFile, $cacheData); + } + + /** + * Encode a block of text using the specified map, and write it to the printer. + * + * @param string $text Text to print, UTF-8 format. + * @param integer $encodingNo Encoding number to use- assumed to exist. + */ + private function writeTextUsingEncoding($text, $encodingNo) + { + $encodeMap = $this -> encode[$encodingNo]; + $len = mb_strlen($text, self::INPUT_ENCODING); + $rawText = str_repeat(self::REPLACEMENT_CHAR, $len); + $j = 0; + for ($i = 0; $i < $len; $i++) { + $char = mb_substr($text, $i, 1, self::INPUT_ENCODING); + if (isset($encodeMap[$char])) { + $rawText[$j] = $encodeMap[$char]; + } elseif (self::asciiCheck($char)) { + $rawText[$j] = $char; + } elseif ($char === "\r") { + /* Skip past Windows line endings (UTF-8 usage) */ + continue; + } + $j++; + } + if ($this -> printer -> getCharacterTable() != $encodingNo) { + $this -> printer -> selectCharacterTable($encodingNo); + } + $this -> writeTextRaw(substr($rawText, 0, $j)); + } + + /** + * Write data to the underlying printer. + * + * @param string $data + */ + private function write($data) + { + $this -> printer -> getPrintConnector() -> write($data); + } + + /** + * Return true if a character is an ASCII printable character. + * + * @param string $char Character to check + * @param boolean $extended True to allow 128-256 values also (excluded by default) + * @return boolean True if the character is printable, false if it is not. + */ + private static function asciiCheck($char, $extended = false) + { + if (strlen($char) != 1) { + // Multi-byte string + return false; + } + $num = ord($char); + if ($num > 31 && $num < 127) { // Printable + return true; + } + if ($num == 10) { // New-line (printer will take these) + return true; + } + if ($extended && $num > 127) { + return true; + } + return false; + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php new file mode 100644 index 00000000000..d4fdefaf130 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php @@ -0,0 +1,135 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\PrintBuffers; + +use Exception; +use LogicException; +use Mike42\Escpos\Printer; +use Mike42\Escpos\EscposImage; +use Mike42\Escpos\ImagickEscposImage; + +/** + * This class renders text to small images on-the-fly. It attempts to mimic the + * behaviour of text output, whilst supporting any fonts & character encodings + * which your system can handle. This class currently requires Imagick. + */ +class ImagePrintBuffer implements PrintBuffer +{ + private $printer; + + /** + * @var string|null font to use + */ + private $font; + + private $fontSize; + + public function __construct() + { + if (!EscposImage::isImagickLoaded()) { + throw new Exception("ImagePrintBuffer requires the imagick extension"); + } + $this -> font = null; + $this -> fontSize = 24; + } + + public function flush() + { + if ($this -> printer == null) { + throw new LogicException("Not attached to a printer."); + } + } + + public function getPrinter() + { + return $this -> printer; + } + + public function setPrinter(Printer $printer = null) + { + $this -> printer = $printer; + } + + public function writeText($text) + { + if ($this -> printer == null) { + throw new LogicException("Not attached to a printer."); + } + if ($text == null) { + return; + } + $text = trim($text, "\n"); + /* Create Imagick objects */ + $image = new \Imagick(); + $draw = new \ImagickDraw(); + $color = new \ImagickPixel('#000000'); + $background = new \ImagickPixel('white'); + + /* Create annotation */ + if ($this->font !== null) { + // Allow fallback on defaults as necessary + $draw->setFont($this->font); + } + /* In Arial, size 21 looks good as a substitute for FONT_B, 24 for FONT_A */ + $draw -> setFontSize($this -> fontSize); + $draw -> setFillColor($color); + $draw -> setStrokeAntialias(true); + $draw -> setTextAntialias(true); + $metrics = $image -> queryFontMetrics($draw, $text); + $draw -> annotation(0, $metrics['ascender'], $text); + + /* Create image & draw annotation on it */ + $image -> newImage($metrics['textWidth'], $metrics['textHeight'], $background); + $image -> setImageFormat('png'); + $image -> drawImage($draw); + // debugging if you want to view the images yourself + //$image -> writeImage("test.png"); + + /* Save image */ + $escposImage = new ImagickEscposImage(); + $escposImage -> readImageFromImagick($image); + $size = Printer::IMG_DEFAULT; + $this -> printer -> bitImage($escposImage, $size); + } + + public function writeTextRaw($text) + { + if ($this -> printer == null) { + throw new LogicException("Not attached to a printer."); + } + $this -> printer -> getPrintConnector() -> write($text); + } + + /** + * Set path on disk to TTF font that will be used to render text to image, + * or 'null' to use a default. + * + * ImageMagick will also accept a font name, but this will not port as well + * between systems. + * + * @param string $font + * Font name or a filename + */ + public function setFont($font) + { + $this->font = $font; + } + + /** + * Numeric font size for rendering text to image + */ + public function setFontSize($fontSize) + { + $this->fontSize = $fontSize; + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/PrintBuffer.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/PrintBuffer.php new file mode 100644 index 00000000000..fcad6e9e0bb --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/PrintBuffer.php @@ -0,0 +1,63 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\PrintBuffers; + +use Mike42\Escpos\Printer; + +/** + * Print buffers manage newlines and character encoding for the target printer. + * They are used as a swappable component: text or image-based output. + * + * - Text output (EscposPrintBuffer) is the fast default, and is recommended for + * most people, as the text output can be more directly manipulated by ESC/POS + * commands. + * - Image output (ImagePrintBuffer) is designed to accept more encodings than the + * physical printer supports, by rendering the text to small images on-the-fly. + * This takes a lot more CPU than sending text, but is necessary for some users. + * - If your use case fits outside these, then a further speed/flexibility trade-off + * can be made by printing directly from generated HTML or PDF. + */ +interface PrintBuffer +{ + /** + * Cause the buffer to send any partial input and wait on a newline. + * If the printer is already on a new line, this does nothing. + */ + public function flush(); + + /** + * Used by Escpos to check if a printer is set. + */ + public function getPrinter(); + + /** + * Used by Escpos to hook up one-to-one link between buffers and printers. + * + * @param Printer|null $printer New printer + */ + public function setPrinter(Printer $printer = null); + + /** + * Accept UTF-8 text for printing. + * + * @param string $text Text to print + */ + public function writeText($text); + + /** + * Accept 8-bit text in the current encoding and add it to the buffer. + * + * @param string $text Text to print, already the target encoding. + */ + public function writeTextRaw($text); +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-OCD-300.ser.z b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-OCD-300.ser.z new file mode 100644 index 0000000000000000000000000000000000000000..c0b9adb9d97ed1f7e2788ef0c595a4917e6288fb GIT binary patch literal 6934 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 literal 0 HcmV?d00001 diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-POS-5890.ser.z b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-POS-5890.ser.z new file mode 100644 index 0000000000000000000000000000000000000000..948e135c9b97fbf6a2689ab65ec22971e255ce1c GIT binary patch literal 12537 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 literal 0 HcmV?d00001 diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-SP2000.ser.z b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-SP2000.ser.z new file mode 100644 index 0000000000000000000000000000000000000000..c5ac146d0b5890f6412f7acea7426d393e4de759 GIT binary patch literal 9267 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 literal 0 HcmV?d00001 diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-TEP-200M.ser.z b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/cache/Characters-TEP-200M.ser.z new file mode 100644 index 0000000000000000000000000000000000000000..3e6b190290ee024bb10117596baa233a0a29f35d GIT binary patch literal 13740 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 = new Client(['base_uri' => $host]); + $this->printerId = $printerId; + $this->apiToken = $apiToken; + + $this->stream = ''; + } + + /** + * Print connectors should cause a NOTICE if they are deconstructed + * when they have not been finalized. + */ + public function __destruct() + { + if (! empty($this->stream)) { + trigger_error("Print connector was not finalized. Did you forget to close the printer?", E_USER_NOTICE); + } + } + + /** + * Finish using this print connector (close file, socket, send + * accumulated output, etc). + */ + public function finalize() + { + /** @var Request $request */ + $request = $this->httpClient->post( + 'printers/'.$this->printerId.'/print?api_token='.$this->apiToken, + null, + $this->stream + ); + + /** @var Response $response */ + $response = $request->send(); + + if (! $response->isSuccessful()) { + throw new Exception( + sprintf('Failed to print. API returned "%s: %s"', $response->getStatusCode(), $response->getReasonPhrase()) + ); + } + + $this->stream = ''; + } + + /** + * Read data from the printer. + * + * @param string $len Length of data to read. + * @return string Data read from the printer. + */ + public function read($len) + { + return $this->stream; + } + + /** + * Write data to the print connector. + * + * @param string $data The data to write + */ + public function write($data) + { + $this->stream .= $data; + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php new file mode 100644 index 00000000000..497887f37cd --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php @@ -0,0 +1,182 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\PrintConnectors; + +use Exception; +use BadMethodCallException; + +/** + * Print connector that passes print data to CUPS print commands. + * Your printer mut be installed on the local CUPS instance to use this connector. + */ +class CupsPrintConnector implements PrintConnector +{ + + /** + * @var array $buffer + * Buffer of accumilated data. + */ + private $buffer; + + /** + * + * @var string $printerName + * The name of the target printer. + */ + private $printerName; + + /** + * Construct new CUPS print connector. + * + * @param string $dest + * The CUPS printer name to print to. This must be loaded using a raw driver. + * @throws BadMethodCallException + */ + public function __construct($dest) + { + $valid = $this->getLocalPrinters(); + if (count($valid) == 0) { + throw new BadMethodCallException("You do not have any printers installed on " . + "this system via CUPS. Check 'lpr -a'."); + } + + if (array_search($dest, $valid, true) === false) { + throw new BadMethodCallException("'$dest' is not a printer on this system. " . + "Printers are: [" . implode(", ", $valid) . "]"); + } + $this->buffer = array (); + $this->printerName = $dest; + } + + /** + * Cause a NOTICE if deconstructed before the job was printed. + */ + public function __destruct() + { + if ($this->buffer !== null) { + trigger_error("Print connector was not finalized. Did you forget to close the printer?", E_USER_NOTICE); + } + } + + /** + * Send job to printer. + */ + public function finalize() + { + $data = implode($this->buffer); + $this->buffer = null; + + // Build command to work on data + $tmpfname = tempnam(sys_get_temp_dir(), 'print-'); + file_put_contents($tmpfname, $data); + $cmd = sprintf( + "lp -d %s %s", + escapeshellarg($this->printerName), + escapeshellarg($tmpfname) + ); + try { + $this->getCmdOutput($cmd); + } catch (Exception $e) { + unlink($tmpfname); + throw $e; + } + unlink($tmpfname); + } + + /** + * Run a command and throw an exception if it fails, or return the output if it works. + * (Basically exec() with good error handling) + * + * @param string $cmd + * Command to run + */ + protected function getCmdOutput($cmd) + { + $descriptors = array ( + 1 => array ( + "pipe", + "w" + ), + 2 => array ( + "pipe", + "w" + ) + ); + $process = proc_open($cmd, $descriptors, $fd); + if (! is_resource($process)) { + throw new Exception("Command '$cmd' failed to start."); + } + /* Read stdout */ + $outputStr = stream_get_contents($fd [1]); + fclose($fd [1]); + /* Read stderr */ + $errorStr = stream_get_contents($fd [2]); + fclose($fd [2]); + /* Finish up */ + $retval = proc_close($process); + if ($retval != 0) { + throw new Exception("Command $cmd failed: $errorStr"); + } + return $outputStr; + } + + /** + * Read data from the printer. + * + * @param string $len Length of data to read. + * @return Data read from the printer, or false where reading is not possible. + */ + public function read($len) + { + return false; + } + + /** + * @param string $data + */ + public function write($data) + { + $this->buffer [] = $data; + } + + /** + * Load a list of CUPS printers. + * + * @return array A list of printer names installed on this system. Any item + * on this list is valid for constructing a printer. + */ + protected function getLocalPrinters() + { + $outpStr = $this->getCmdOutput("lpstat -a"); + $outpLines = explode("\n", trim($outpStr)); + foreach ($outpLines as $line) { + $ret [] = $this->chopLpstatLine($line); + } + return $ret; + } + + /** + * Get the item before the first space in a string + * + * @param string $line + * @return string the string, up to the first space, or the whole string if it contains no spaces. + */ + private function chopLpstatLine($line) + { + if (($pos = strpos($line, " ")) === false) { + return $line; + } else { + return substr($line, 0, $pos); + } + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php new file mode 100644 index 00000000000..b376cd87d83 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php @@ -0,0 +1,78 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\PrintConnectors; + +/** + * Print connector that writes to nowhere, but allows the user to retrieve the + * buffered data. Used for testing. + */ +final class DummyPrintConnector implements PrintConnector +{ + /** + * @var array $buffer + * Buffer of accumilated data. + */ + private $buffer; + + /** + * @var string data which the printer will provide on next read + */ + private $readData; + + /** + * Create new print connector + */ + public function __construct() + { + $this -> buffer = []; + } + + public function clear() + { + $this -> buffer = []; + } + + public function __destruct() + { + if ($this -> buffer !== null) { + trigger_error("Print connector was not finalized. Did you forget to close the printer?", E_USER_NOTICE); + } + } + + public function finalize() + { + $this -> buffer = null; + } + + /** + * @return string Get the accumulated data that has been sent to this buffer. + */ + public function getData() + { + return implode($this -> buffer); + } + + /** + * {@inheritDoc} + * @see PrintConnector::read() + */ + public function read($len) + { + return $len >= strlen($this -> readData) ? $this -> readData : substr($this -> readData, 0, $len); + } + + public function write($data) + { + $this -> buffer[] = $data; + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php new file mode 100644 index 00000000000..ca44ad0ad7e --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php @@ -0,0 +1,82 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\PrintConnectors; + +use Exception; + +/** + * PrintConnector for passing print data to a file. + */ +class FilePrintConnector implements PrintConnector +{ + /** + * @var resource $fp + * The file pointer to send data to. + */ + protected $fp; + + /** + * Construct new connector, given a filename + * + * @param string $filename + */ + public function __construct($filename) + { + $this -> fp = fopen($filename, "wb+"); + if ($this -> fp === false) { + throw new Exception("Cannot initialise FilePrintConnector."); + } + } + + public function __destruct() + { + if ($this -> fp !== false) { + trigger_error("Print connector was not finalized. Did you forget to close the printer?", E_USER_NOTICE); + } + } + + /** + * Close file pointer + */ + public function finalize() + { + if ($this -> fp !== false) { + fclose($this -> fp); + $this -> fp = false; + } + } + + /* (non-PHPdoc) + * @see PrintConnector::read() + */ + public function read($len) + { + if ($this -> fp === false) { + throw new Exception("PrintConnector has been closed, cannot read input."); + } + return fread($this -> fp, $len); + } + + /** + * Write data to the file + * + * @param string $data + */ + public function write($data) + { + if ($this -> fp === false) { + throw new Exception("PrintConnector has been closed, cannot send output."); + } + fwrite($this -> fp, $data); + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/NetworkPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/NetworkPrintConnector.php new file mode 100644 index 00000000000..10aa6640a01 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/NetworkPrintConnector.php @@ -0,0 +1,41 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\PrintConnectors; + +use Exception; + +/** + * PrintConnector for directly opening a network socket to a printer to send it commands. + */ +class NetworkPrintConnector extends FilePrintConnector +{ + /** + * Construct a new NetworkPrintConnector + * + * @param string $ip IP address or hostname to use. + * @param string $port The port number to connect on. + * @param string $timeout The connection timeout, in seconds. + * @throws Exception Where the socket cannot be opened. + */ + public function __construct($ip, $port = "9100", $timeout = false) + { + // Default to 60 if default_socket_timeout isn't defined in the ini + $defaultSocketTimeout = ini_get("default_socket_timeout") ?: 60; + $timeout = $timeout ?: $defaultSocketTimeout; + + $this -> fp = @fsockopen($ip, $port, $errno, $errstr, $timeout); + if ($this -> fp === false) { + throw new Exception("Cannot initialise NetworkPrintConnector: " . $errstr); + } + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/PrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/PrintConnector.php new file mode 100644 index 00000000000..4198dbc133b --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/PrintConnector.php @@ -0,0 +1,47 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\PrintConnectors; + +/** + * Interface passed to Escpos class for receiving print data. Print connectors + * are responsible for transporting this to the actual printer. + */ +interface PrintConnector +{ + /** + * Print connectors should cause a NOTICE if they are deconstructed + * when they have not been finalized. + */ + public function __destruct(); + + /** + * Finish using this print connector (close file, socket, send + * accumulated output, etc). + */ + public function finalize(); + + /** + * Read data from the printer. + * + * @param string $len Length of data to read. + * @return Data read from the printer, or false where reading is not possible. + */ + public function read($len); + + /** + * Write data to the print connector. + * + * @param string $data The data to write + */ + public function write($data); +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/RawbtPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/RawbtPrintConnector.php new file mode 100644 index 00000000000..622f7263d9e --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/RawbtPrintConnector.php @@ -0,0 +1,81 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\PrintConnectors; + +/** + * Print connector for android RawBT application + * https://play.google.com/store/apps/details?id=ru.a402d.rawbtprinter + */ +final class RawbtPrintConnector implements PrintConnector +{ + /** + * @var array $buffer + * Buffer of accumilated data. + */ + private $buffer; + + /** + * @var string data which the printer will provide on next read + */ + private $readData; + + /** + * Create new print connector + */ + public function __construct() + { + ob_start(); + $this->buffer = []; + } + + public function clear() + { + $this->buffer = []; + } + + public function __destruct() + { + if ($this->buffer !== null) { + trigger_error("Print connector was not finalized. Did you forget to close the printer?", E_USER_NOTICE); + } + } + + public function finalize() + { + ob_end_clean(); + echo "intent:base64," . base64_encode($this->getData()) . "#Intent;scheme=rawbt;package=ru.a402d.rawbtprinter;end;"; + $this->buffer = null; + } + + /** + * @return string Get the accumulated data that has been sent to this buffer. + */ + public function getData() + { + return implode($this->buffer); + } + + /** + * {@inheritDoc} + * @see PrintConnector::read() + */ + public function read($len) + { + return $len >= strlen($this->readData) ? $this->readData : substr($this->readData, 0, $len); + } + + public function write($data) + { + $this->buffer[] = $data; + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/UriPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/UriPrintConnector.php new file mode 100644 index 00000000000..c51d2bf3350 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/UriPrintConnector.php @@ -0,0 +1,44 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\PrintConnectors; + +class UriPrintConnector +{ + const URI_ASSEMBLER_PATTERN = "~^(.+):/{2}(.+?)(?::(\d{1,4}))?$~"; + + public static function get($uri) + { + // Parse URI + $is_uri = preg_match(self::URI_ASSEMBLER_PATTERN, $uri, $uri_parts); + if ($is_uri !== 1) { + throw new \InvalidArgumentException("Malformed connector URI: {$uri}"); + } + // Extract parts + $protocol = $uri_parts[1]; + $printer = $uri_parts[2]; + $port = isset($uri_parts[3]) ? $uri_parts[3] : 9100; + // Initialise the most applicable print connector + switch ($protocol) { + case "file": + return new FilePrintConnector($printer); + case "tcp": + return new NetworkPrintConnector($printer, $port); + case "smb": + return new WindowsPrintConnector($uri); + } + // Fallthrough + throw new \InvalidArgumentException("URI sheme is not supported: {$protocol}://"); + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/WindowsPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/WindowsPrintConnector.php new file mode 100644 index 00000000000..9bab87cddb8 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/WindowsPrintConnector.php @@ -0,0 +1,391 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos\PrintConnectors; + +use Exception; +use BadMethodCallException; + +/** + * Connector for sending print jobs to + * - local ports on windows (COM1, LPT1, etc) + * - shared (SMB) printers from any platform (smb://server/foo) + * For USB printers or other ports, the trick is to share the printer with a + * generic text driver, then connect to the shared printer locally. + */ +class WindowsPrintConnector implements PrintConnector +{ + /** + * @var array $buffer + * Accumulated lines of output for later use. + */ + private $buffer; + + /** + * @var string $hostname + * The hostname of the target machine, or null if this is a local connection. + */ + private $hostname; + + /** + * @var boolean $isLocal + * True if a port is being used directly (must be Windows), false if network shares will be used. + */ + private $isLocal; + + /** + * @var int $platform + * Platform we're running on, for selecting different commands. See PLATFORM_* constants. + */ + private $platform; + + /** + * @var string $printerName + * The name of the target printer (eg "Foo Printer") or port ("COM1", "LPT1"). + */ + private $printerName; + + /** + * @var string $userName + * Login name for network printer, or null if not using authentication. + */ + private $userName; + + /** + * @var string $userPassword + * Password for network printer, or null if no password is required. + */ + private $userPassword; + + /** + * @var string $workgroup + * Workgroup that the printer is located on + */ + private $workgroup; + + /** + * Represents Linux + */ + const PLATFORM_LINUX = 0; + + /** + * Represents Mac + */ + const PLATFORM_MAC = 1; + + /** + * Represents Windows + */ + const PLATFORM_WIN = 2; + + /** + * Valid local ports. + */ + const REGEX_LOCAL = "/^(LPT\d|COM\d)$/"; + + /** + * Valid printer name. + */ + const REGEX_PRINTERNAME = "/^[\d\w-]+(\s[\d\w-]+)*$/"; + + /** + * Valid smb:// URI containing hostname & printer with optional user & optional password only. + */ + const REGEX_SMB = "/^smb:\/\/([\s\d\w-]+(:[\s\d\w+-]+)?@)?([\d\w-]+\.)*[\d\w-]+\/([\d\w-]+\/)?[\d\w-]+(\s[\d\w-]+)*$/"; + + /** + * @param string $dest + * @throws BadMethodCallException + */ + public function __construct($dest) + { + $this -> platform = $this -> getCurrentPlatform(); + $this -> isLocal = false; + $this -> buffer = null; + $this -> userName = null; + $this -> userPassword = null; + $this -> workgroup = null; + if (preg_match(self::REGEX_LOCAL, $dest) == 1) { + // Straight to LPT1, COM1 or other local port. Allowed only if we are actually on windows. + if ($this -> platform !== self::PLATFORM_WIN) { + throw new BadMethodCallException("WindowsPrintConnector can only be " . + "used to print to a local printer ('".$dest."') on a Windows computer."); + } + $this -> isLocal = true; + $this -> hostname = null; + $this -> printerName = $dest; + } elseif (preg_match(self::REGEX_SMB, $dest) == 1) { + // Connect to samba share, eg smb://host/printer + $part = parse_url($dest); + $this -> hostname = $part['host']; + /* Printer name and optional workgroup */ + $path = ltrim($part['path'], '/'); + if (strpos($path, "/") !== false) { + $pathPart = explode("/", $path); + $this -> workgroup = $pathPart[0]; + $this -> printerName = $pathPart[1]; + } else { + $this -> printerName = $path; + } + /* Username and password if set */ + if (isset($part['user'])) { + $this -> userName = $part['user']; + if (isset($part['pass'])) { + $this -> userPassword = $part['pass']; + } + } + } elseif (preg_match(self::REGEX_PRINTERNAME, $dest) == 1) { + // Just got a printer name. Assume it's on the current computer. + $hostname = gethostname(); + if (!$hostname) { + $hostname = "localhost"; + } + $this -> hostname = $hostname; + $this -> printerName = $dest; + } else { + throw new BadMethodCallException("Printer '" . $dest . "' is not a valid " . + "printer name. Use local port (LPT1, COM1, etc) or smb://computer/printer notation."); + } + $this -> buffer = []; + } + + public function __destruct() + { + if ($this -> buffer !== null) { + trigger_error("Print connector was not finalized. Did you forget to close the printer?", E_USER_NOTICE); + } + } + + public function finalize() + { + $data = implode($this -> buffer); + $this -> buffer = null; + if ($this -> platform == self::PLATFORM_WIN) { + $this -> finalizeWin($data); + } elseif ($this -> platform == self::PLATFORM_LINUX) { + $this -> finalizeLinux($data); + } else { + $this -> finalizeMac($data); + } + } + + /** + * Send job to printer -- platform-specific Linux code. + * + * @param string $data Print data + * @throws Exception + */ + protected function finalizeLinux($data) + { + /* Non-Windows samba printing */ + $device = "//" . $this -> hostname . "/" . $this -> printerName; + if ($this -> userName !== null) { + $user = ($this -> workgroup != null ? ($this -> workgroup . "\\") : "") . $this -> userName; + if ($this -> userPassword == null) { + // No password + $command = sprintf( + "smbclient %s -U %s -c %s -N -m SMB2", + escapeshellarg($device), + escapeshellarg($user), + escapeshellarg("print -") + ); + $redactedCommand = $command; + } else { + // With password + $command = sprintf( + "smbclient %s %s -U %s -c %s -m SMB2", + escapeshellarg($device), + escapeshellarg($this -> userPassword), + escapeshellarg($user), + escapeshellarg("print -") + ); + $redactedCommand = sprintf( + "smbclient %s %s -U %s -c %s -m SMB2", + escapeshellarg($device), + escapeshellarg("*****"), + escapeshellarg($user), + escapeshellarg("print -") + ); + } + } else { + // No authentication information at all + $command = sprintf( + "smbclient %s -c %s -N -m SMB2", + escapeshellarg($device), + escapeshellarg("print -") + ); + $redactedCommand = $command; + } + $retval = $this -> runCommand($command, $outputStr, $errorStr, $data); + if ($retval != 0) { + throw new Exception("Failed to print. Command \"$redactedCommand\" " . + "failed with exit code $retval: " . trim($errorStr) . trim($outputStr)); + } + } + + /** + * Send job to printer -- platform-specific Mac code. + * + * @param string $data Print data + * @throws Exception + */ + protected function finalizeMac($data) + { + throw new Exception("Mac printing not implemented."); + } + + /** + * Send data to printer -- platform-specific Windows code. + * + * @param string $data + */ + protected function finalizeWin($data) + { + /* Windows-friendly printing of all sorts */ + if (!$this -> isLocal) { + /* Networked printing */ + $device = "\\\\" . $this -> hostname . "\\" . $this -> printerName; + if ($this -> userName !== null) { + /* Log in */ + $user = "/user:" . ($this -> workgroup != null ? ($this -> workgroup . "\\") : "") . $this -> userName; + if ($this -> userPassword == null) { + $command = sprintf( + "net use %s %s", + escapeshellarg($device), + escapeshellarg($user) + ); + $redactedCommand = $command; + } else { + $command = sprintf( + "net use %s %s %s", + escapeshellarg($device), + escapeshellarg($user), + escapeshellarg($this -> userPassword) + ); + $redactedCommand = sprintf( + "net use %s %s %s", + escapeshellarg($device), + escapeshellarg($user), + escapeshellarg("*****") + ); + } + $retval = $this -> runCommand($command, $outputStr, $errorStr); + if ($retval != 0) { + throw new Exception("Failed to print. Command \"$redactedCommand\" " . + "failed with exit code $retval: " . trim($errorStr)); + } + } + /* Final print-out */ + $filename = tempnam(sys_get_temp_dir(), "escpos"); + file_put_contents($filename, $data); + if (!$this -> runCopy($filename, $device)) { + throw new Exception("Failed to copy file to printer"); + } + unlink($filename); + } else { + /* Drop data straight on the printer */ + if (!$this -> runWrite($data, $this -> printerName)) { + throw new Exception("Failed to write file to printer at " . $this -> printerName); + } + } + } + + /** + * @return string Current platform. Separated out for testing purposes. + */ + protected function getCurrentPlatform() + { + if (PHP_OS == "WINNT") { + return self::PLATFORM_WIN; + } + if (PHP_OS == "Darwin") { + return self::PLATFORM_MAC; + } + return self::PLATFORM_LINUX; + } + + /* (non-PHPdoc) + * @see PrintConnector::read() + */ + public function read($len) + { + /* Two-way communication is not supported */ + return false; + } + + /** + * Run a command, pass it data, and retrieve its return value, standard output, and standard error. + * + * @param string $command the command to run. + * @param string $outputStr variable to fill with standard output. + * @param string $errorStr variable to fill with standard error. + * @param string $inputStr text to pass to the command's standard input (optional). + * @return number + */ + protected function runCommand($command, &$outputStr, &$errorStr, $inputStr = null) + { + $descriptors = [ + 0 => ["pipe", "r"], + 1 => ["pipe", "w"], + 2 => ["pipe", "w"], + ]; + $process = proc_open($command, $descriptors, $fd); + if (is_resource($process)) { + /* Write to input */ + if ($inputStr !== null) { + fwrite($fd[0], $inputStr); + } + fclose($fd[0]); + /* Read stdout */ + $outputStr = stream_get_contents($fd[1]); + fclose($fd[1]); + /* Read stderr */ + $errorStr = stream_get_contents($fd[2]); + fclose($fd[2]); + /* Finish up */ + $retval = proc_close($process); + return $retval; + } else { + /* Method calling this should notice a non-zero exit and print an error */ + return -1; + } + } + + /** + * Copy a file. Separated out so that nothing is actually printed during test runs. + * + * @param string $from Source file + * @param string $to Destination file + * @return boolean True if copy was successful, false otherwise + */ + protected function runCopy($from, $to) + { + return copy($from, $to); + } + + /** + * Write data to a file. Separated out so that nothing is actually printed during test runs. + * + * @param string $data Data to print + * @param string $filename Destination file + * @return boolean True if write was successful, false otherwise + */ + protected function runWrite($data, $filename) + { + return file_put_contents($filename, $data) !== false; + } + + public function write($data) + { + $this -> buffer[] = $data; + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php new file mode 100644 index 00000000000..753d2ea8ad3 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php @@ -0,0 +1,1217 @@ +, + * incorporating modifications by others. See CONTRIBUTORS.md for a full list. + * + * This software is distributed under the terms of the MIT license. See LICENSE.md + * for details. + */ + +namespace Mike42\Escpos; + +use Exception; +use InvalidArgumentException; +use Mike42\Escpos\PrintBuffers\PrintBuffer; +use Mike42\Escpos\PrintBuffers\EscposPrintBuffer; +use Mike42\Escpos\PrintConnectors\PrintConnector; +use Mike42\Escpos\CapabilityProfile; + +/** + * Main class for ESC/POS code generation + */ +class Printer +{ + /** + * ASCII null control character + */ + const NUL = "\x00"; + + /** + * ASCII linefeed control character + */ + const LF = "\x0a"; + + /** + * ASCII escape control character + */ + const ESC = "\x1b"; + + /** + * ASCII form separator control character + */ + const FS = "\x1c"; + + /** + * ASCII form feed control character + */ + const FF = "\x0c"; + + /** + * ASCII group separator control character + */ + const GS = "\x1d"; + + /** + * ASCII data link escape control character + */ + const DLE = "\x10"; + + /** + * ASCII end of transmission control character + */ + const EOT = "\x04"; + + /** + * Indicates UPC-A barcode when used with Printer::barcode + */ + const BARCODE_UPCA = 65; + + /** + * Indicates UPC-E barcode when used with Printer::barcode + */ + const BARCODE_UPCE = 66; + + /** + * Indicates JAN13 barcode when used with Printer::barcode + */ + const BARCODE_JAN13 = 67; + + /** + * Indicates JAN8 barcode when used with Printer::barcode + */ + const BARCODE_JAN8 = 68; + + /** + * Indicates CODE39 barcode when used with Printer::barcode + */ + const BARCODE_CODE39 = 69; + + /** + * Indicates ITF barcode when used with Printer::barcode + */ + const BARCODE_ITF = 70; + + /** + * Indicates CODABAR barcode when used with Printer::barcode + */ + const BARCODE_CODABAR = 71; + + /** + * Indicates CODE93 barcode when used with Printer::barcode + */ + const BARCODE_CODE93 = 72; + + /** + * Indicates CODE128 barcode when used with Printer::barcode + */ + const BARCODE_CODE128 = 73; + + /** + * Indicates that HRI (human-readable interpretation) text should not be + * printed, when used with Printer::setBarcodeTextPosition + */ + const BARCODE_TEXT_NONE = 0; + + /** + * Indicates that HRI (human-readable interpretation) text should be printed + * above a barcode, when used with Printer::setBarcodeTextPosition + */ + const BARCODE_TEXT_ABOVE = 1; + + /** + * Indicates that HRI (human-readable interpretation) text should be printed + * below a barcode, when used with Printer::setBarcodeTextPosition + */ + const BARCODE_TEXT_BELOW = 2; + + /** + * Use the first color (usually black), when used with Printer::setColor + */ + const COLOR_1 = 0; + + /** + * Use the second color (usually red or blue), when used with Printer::setColor + */ + const COLOR_2 = 1; + + /** + * Make a full cut, when used with Printer::cut + */ + const CUT_FULL = 65; + + /** + * Make a partial cut, when used with Printer::cut + */ + const CUT_PARTIAL = 66; + + /** + * Use Font A, when used with Printer::setFont + */ + const FONT_A = 0; + + /** + * Use Font B, when used with Printer::setFont + */ + const FONT_B = 1; + + /** + * Use Font C, when used with Printer::setFont + */ + const FONT_C = 2; + + /** + * Use default (high density) image size, when used with Printer::graphics, + * Printer::bitImage or Printer::bitImageColumnFormat + */ + const IMG_DEFAULT = 0; + + /** + * Use lower horizontal density for image printing, when used with Printer::graphics, + * Printer::bitImage or Printer::bitImageColumnFormat + */ + const IMG_DOUBLE_WIDTH = 1; + + /** + * Use lower vertical density for image printing, when used with Printer::graphics, + * Printer::bitImage or Printer::bitImageColumnFormat + */ + const IMG_DOUBLE_HEIGHT = 2; + + /** + * Align text to the left, when used with Printer::setJustification + */ + const JUSTIFY_LEFT = 0; + + /** + * Center text, when used with Printer::setJustification + */ + const JUSTIFY_CENTER = 1; + + /** + * Align text to the right, when used with Printer::setJustification + */ + const JUSTIFY_RIGHT = 2; + + /** + * Use Font A, when used with Printer::selectPrintMode + */ + const MODE_FONT_A = 0; + + /** + * Use Font B, when used with Printer::selectPrintMode + */ + const MODE_FONT_B = 1; + + /** + * Use text emphasis, when used with Printer::selectPrintMode + */ + const MODE_EMPHASIZED = 8; + + /** + * Use double height text, when used with Printer::selectPrintMode + */ + const MODE_DOUBLE_HEIGHT = 16; + + /** + * Use double width text, when used with Printer::selectPrintMode + */ + const MODE_DOUBLE_WIDTH = 32; + + /** + * Underline text, when used with Printer::selectPrintMode + */ + const MODE_UNDERLINE = 128; + + /** + * Indicates standard PDF417 code + */ + const PDF417_STANDARD = 0; + + /** + * Indicates truncated PDF417 code + */ + const PDF417_TRUNCATED = 1; + + /** + * Indicates error correction level L when used with Printer::qrCode + */ + const QR_ECLEVEL_L = 0; + + /** + * Indicates error correction level M when used with Printer::qrCode + */ + const QR_ECLEVEL_M = 1; + + /** + * Indicates error correction level Q when used with Printer::qrCode + */ + const QR_ECLEVEL_Q = 2; + + /** + * Indicates error correction level H when used with Printer::qrCode + */ + const QR_ECLEVEL_H = 3; + + /** + * Indicates QR model 1 when used with Printer::qrCode + */ + const QR_MODEL_1 = 1; + + /** + * Indicates QR model 2 when used with Printer::qrCode + */ + const QR_MODEL_2 = 2; + + /** + * Indicates micro QR code when used with Printer::qrCode + */ + const QR_MICRO = 3; + + /** + * Indicates a request for printer status when used with + * Printer::getPrinterStatus (experimental) + */ + const STATUS_PRINTER = 1; + + /** + * Indicates a request for printer offline cause when used with + * Printer::getPrinterStatus (experimental) + */ + const STATUS_OFFLINE_CAUSE = 2; + + /** + * Indicates a request for error cause when used with Printer::getPrinterStatus + * (experimental) + */ + const STATUS_ERROR_CAUSE = 3; + + /** + * Indicates a request for error cause when used with Printer::getPrinterStatus + * (experimental) + */ + const STATUS_PAPER_ROLL = 4; + + /** + * Indicates a request for ink A status when used with Printer::getPrinterStatus + * (experimental) + */ + const STATUS_INK_A = 7; + + /** + * Indicates a request for ink B status when used with Printer::getPrinterStatus + * (experimental) + */ + const STATUS_INK_B = 6; + + /** + * Indicates a request for peeler status when used with Printer::getPrinterStatus + * (experimental) + */ + const STATUS_PEELER = 8; + + /** + * Indicates no underline when used with Printer::setUnderline + */ + const UNDERLINE_NONE = 0; + + /** + * Indicates single underline when used with Printer::setUnderline + */ + const UNDERLINE_SINGLE = 1; + + /** + * Indicates double underline when used with Printer::setUnderline + */ + const UNDERLINE_DOUBLE = 2; + + /** + * @var PrintBuffer|null $buffer + * The printer's output buffer. + */ + protected $buffer; + + /** + * @var PrintConnector $connector + * Connector showing how to print to this printer + */ + protected $connector; + + /** + * @var CapabilityProfile $profile + * Profile showing supported features for this printer + */ + protected $profile; + + /** + * @var int $characterTable + * Current character code table + */ + protected $characterTable; + + /** + * Construct a new print object + * + * @param PrintConnector $connector The PrintConnector to send data to. If not set, output is sent to standard output. + * @param CapabilityProfile|null $profile Supported features of this printer. If not set, the "default" CapabilityProfile will be used, which is suitable for Epson printers. + * @throws InvalidArgumentException + */ + public function __construct(PrintConnector $connector, CapabilityProfile $profile = null) + { + /* Set connector */ + $this -> connector = $connector; + + /* Set capability profile */ + if ($profile === null) { + $profile = CapabilityProfile::load('default'); + } + $this -> profile = $profile; + /* Set buffer */ + $buffer = new EscposPrintBuffer(); + $this -> buffer = null; + $this -> setPrintBuffer($buffer); + $this -> initialize(); + } + + /** + * Print a barcode. + * + * @param string $content The information to encode. + * @param int $type The barcode standard to output. Supported values are + * `Printer::BARCODE_UPCA`, `Printer::BARCODE_UPCE`, `Printer::BARCODE_JAN13`, + * `Printer::BARCODE_JAN8`, `Printer::BARCODE_CODE39`, `Printer::BARCODE_ITF`, + * `Printer::BARCODE_CODABAR`, `Printer::BARCODE_CODE93`, and `Printer::BARCODE_CODE128`. + * If not specified, `Printer::BARCODE_CODE39` will be used. Note that some + * barcode formats only support specific lengths or sets of characters, and that + * available barcode types vary between printers. + * @throws InvalidArgumentException Where the length or characters used in $content is invalid for the requested barcode format. + */ + public function barcode($content, $type = Printer::BARCODE_CODE39) + { + /* Validate input */ + self::validateInteger($type, 65, 73, __FUNCTION__, "Barcode type"); + $len = strlen($content); + switch ($type) { + case self::BARCODE_UPCA: + self::validateInteger($len, 11, 12, __FUNCTION__, "UPCA barcode content length"); + self::validateStringRegex($content, __FUNCTION__, "/^[0-9]{11,12}$/", "UPCA barcode content"); + break; + case self::BARCODE_UPCE: + self::validateIntegerMulti($len, [[6, 8], [11, 12]], __FUNCTION__, "UPCE barcode content length"); + self::validateStringRegex($content, __FUNCTION__, "/^([0-9]{6,8}|[0-9]{11,12})$/", "UPCE barcode content"); + break; + case self::BARCODE_JAN13: + self::validateInteger($len, 12, 13, __FUNCTION__, "JAN13 barcode content length"); + self::validateStringRegex($content, __FUNCTION__, "/^[0-9]{12,13}$/", "JAN13 barcode content"); + break; + case self::BARCODE_JAN8: + self::validateInteger($len, 7, 8, __FUNCTION__, "JAN8 barcode content length"); + self::validateStringRegex($content, __FUNCTION__, "/^[0-9]{7,8}$/", "JAN8 barcode content"); + break; + case self::BARCODE_CODE39: + self::validateInteger($len, 1, 255, __FUNCTION__, "CODE39 barcode content length"); // 255 is a limitation of the "function b" command, not the barcode format. + self::validateStringRegex($content, __FUNCTION__, "/^([0-9A-Z \$\%\+\-\.\/]+|\*[0-9A-Z \$\%\+\-\.\/]+\*)$/", "CODE39 barcode content"); + break; + case self::BARCODE_ITF: + self::validateInteger($len, 2, 255, __FUNCTION__, "ITF barcode content length"); // 255 is a limitation of the "function b" command, not the barcode format. + self::validateStringRegex($content, __FUNCTION__, "/^([0-9]{2})+$/", "ITF barcode content"); + break; + case self::BARCODE_CODABAR: + self::validateInteger($len, 1, 255, __FUNCTION__, "Codabar barcode content length"); // 255 is a limitation of the "function b" command, not the barcode format. + self::validateStringRegex($content, __FUNCTION__, "/^[A-Da-d][0-9\$\+\-\.\/\:]+[A-Da-d]$/", "Codabar barcode content"); + break; + case self::BARCODE_CODE93: + self::validateInteger($len, 1, 255, __FUNCTION__, "Code93 barcode content length"); // 255 is a limitation of the "function b" command, not the barcode format. + self::validateStringRegex($content, __FUNCTION__, "/^[\\x00-\\x7F]+$/", "Code93 barcode content"); + break; + case self::BARCODE_CODE128: + self::validateInteger($len, 1, 255, __FUNCTION__, "Code128 barcode content length"); // 255 is a limitation of the "function b" command, not the barcode format. + // The CODE128 encoder is quite complex, so only a very basic header-check is applied here. + self::validateStringRegex($content, __FUNCTION__, "/^\{[A-C][\\x00-\\x7F]+$/", "Code128 barcode content"); + break; + } + if (!$this -> profile -> getSupportsBarcodeB()) { + // A simpler barcode command which supports fewer codes + self::validateInteger($type, 65, 71, __FUNCTION__); + $this -> connector -> write(self::GS . "k" . chr($type - 65) . $content . self::NUL); + return; + } + // More advanced function B, used in preference + $this -> connector -> write(self::GS . "k" . chr($type) . chr(strlen($content)) . $content); + } + + /** + * Print an image, using the older "bit image" command. This creates padding on the right of the image, + * if its width is not divisible by 8. + * + * Should only be used if your printer does not support the graphics() command. + * See also bitImageColumnFormat(). + * + * @param EscposImage $img The image to print + * @param int $size Size modifier for the image. Must be either `Printer::IMG_DEFAULT` + * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and + * `Printer::IMG_DOUBLE_WIDTH` flags. + */ + public function bitImage(EscposImage $img, $size = Printer::IMG_DEFAULT) + { + self::validateInteger($size, 0, 3, __FUNCTION__); + $rasterData = $img -> toRasterFormat(); + $header = Printer::dataHeader([$img -> getWidthBytes(), $img -> getHeight()], true); + $this -> connector -> write(self::GS . "v0" . chr($size) . $header); + $this -> connector -> write($rasterData); + } + + /** + * Print an image, using the older "bit image" command in column format. + * + * Should only be used if your printer does not support the graphics() or + * bitImage() commands. + * + * @param EscposImage $img The image to print + * @param int $size Size modifier for the image. Must be either `Printer::IMG_DEFAULT` + * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and + * `Printer::IMG_DOUBLE_WIDTH` flags. + */ + public function bitImageColumnFormat(EscposImage $img, $size = Printer::IMG_DEFAULT) + { + $highDensityVertical = ! (($size & self::IMG_DOUBLE_HEIGHT) == Printer::IMG_DOUBLE_HEIGHT); + $highDensityHorizontal = ! (($size & self::IMG_DOUBLE_WIDTH) == Printer::IMG_DOUBLE_WIDTH); + // Experimental column format printing + // This feature is not yet complete and may produce unpredictable results. + $this -> setLineSpacing(16); // 16-dot line spacing. This is the correct value on both TM-T20 and TM-U220 + // Header and density code (0, 1, 32, 33) re-used for every line + $densityCode = ($highDensityHorizontal ? 1 : 0) + ($highDensityVertical ? 32 : 0); + $colFormatData = $img -> toColumnFormat($highDensityVertical); + $header = Printer::dataHeader([$img -> getWidth()], true); + foreach ($colFormatData as $line) { + // Print each line, double density etc for printing are set here also + $this -> connector -> write(self::ESC . "*" . chr($densityCode) . $header . $line); + $this -> feed(); + // sleep(0.1); // Reduces the amount of trouble that a TM-U220 has keeping up with large images + } + $this -> setLineSpacing(); // Revert to default line spacing + } + + /** + * Close the underlying buffer. With some connectors, the + * job will not actually be sent to the printer until this is called. + */ + public function close() + { + $this -> connector -> finalize(); + } + + /** + * Cut the paper. + * + * @param int $mode Cut mode, either Printer::CUT_FULL or Printer::CUT_PARTIAL. If not specified, `Printer::CUT_FULL` will be used. + * @param int $lines Number of lines to feed + */ + public function cut($mode = Printer::CUT_FULL, $lines = 3) + { + // TODO validation on cut() inputs + $this -> connector -> write(self::GS . "V" . chr($mode) . chr($lines)); + } + + /** + * Print and feed line / Print and feed n lines. + * + * @param int $lines Number of lines to feed + */ + public function feed($lines = 1) + { + self::validateInteger($lines, 1, 255, __FUNCTION__); + if ($lines <= 1) { + $this -> connector -> write(self::LF); + } else { + $this -> connector -> write(self::ESC . "d" . chr($lines)); + } + } + + /** + * Some printers require a form feed to release the paper. On most printers, this + * command is only useful in page mode, which is not implemented in this driver. + */ + public function feedForm() + { + $this -> connector -> write(self::FF); + } + + /** + * Some slip printers require `ESC q` sequence to release the paper. + */ + public function release() + { + $this -> connector -> write(self::ESC . chr(113)); + } + + /** + * Print and reverse feed n lines. + * + * @param int $lines number of lines to feed. If not specified, 1 line will be fed. + */ + public function feedReverse($lines = 1) + { + self::validateInteger($lines, 1, 255, __FUNCTION__); + $this -> connector -> write(self::ESC . "e" . chr($lines)); + } + + /** + * @return number + */ + public function getCharacterTable() + { + return $this -> characterTable; + } + + /** + * @return PrintBuffer + */ + public function getPrintBuffer() + { + return $this -> buffer; + } + + /** + * @return PrintConnector + */ + public function getPrintConnector() + { + return $this -> connector; + } + + /** + * @return CapabilityProfile + */ + public function getPrinterCapabilityProfile() + { + return $this -> profile; + } + + /** + * Print an image to the printer. + * + * Size modifiers are: + * - Printer::IMG_DEFAULT (leave image at original size) + * - Printer::IMG_DOUBLE_WIDTH + * - Printer::IMG_DOUBLE_HEIGHT + * + * See the example/ folder for detailed examples. + * + * The functions bitImage() and bitImageColumnFormat() take the same + * parameters, and can be used if your printer doesn't support the newer + * graphics commands. + * + * @param EscposImage $img The image to print. + * @param int $size Size modifier for the image. Must be either `Printer::IMG_DEFAULT` + * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and + * `Printer::IMG_DOUBLE_WIDTH` flags. + */ + public function graphics(EscposImage $img, $size = Printer::IMG_DEFAULT) + { + self::validateInteger($size, 0, 3, __FUNCTION__); + $rasterData = $img -> toRasterFormat(); + $imgHeader = Printer::dataHeader([$img -> getWidth(), $img -> getHeight()], true); + $tone = '0'; + $colors = '1'; + $xm = (($size & self::IMG_DOUBLE_WIDTH) == Printer::IMG_DOUBLE_WIDTH) ? chr(2) : chr(1); + $ym = (($size & self::IMG_DOUBLE_HEIGHT) == Printer::IMG_DOUBLE_HEIGHT) ? chr(2) : chr(1); + $header = $tone . $xm . $ym . $colors . $imgHeader; + $this -> wrapperSendGraphicsData('0', 'p', $header . $rasterData); + $this -> wrapperSendGraphicsData('0', '2'); + } + + /** + * Initialize printer. This resets formatting back to the defaults. + */ + public function initialize() + { + $this -> connector -> write(self::ESC . "@"); + $this -> characterTable = 0; + } + + /** + * Print a two-dimensional data code using the PDF417 standard. + * + * @param string $content Text or numbers to store in the code + * @param int $width Width of a module (pixel) in the printed code. + * Default is 3 dots. + * @param int $heightMultiplier Multiplier for height of a module. + * Default is 3 times the width. + * @param int $dataColumnCount Number of data columns to use. 0 (default) + * is to auto-calculate. Smaller numbers will result in a narrower code, + * making larger pixel sizes possible. Larger numbers require smaller pixel sizes. + * @param float $ec Error correction ratio, from 0.01 to 4.00. Default is 0.10 (10%). + * @param int $options Standard code Printer::PDF417_STANDARD with + * start/end bars, or truncated code Printer::PDF417_TRUNCATED with start bars only. + * @throws Exception If this profile indicates that PDF417 code is not supported + */ + public function pdf417Code($content, $width = 3, $heightMultiplier = 3, $dataColumnCount = 0, $ec = 0.10, $options = Printer::PDF417_STANDARD) + { + self::validateString($content, __FUNCTION__, 'content'); + self::validateInteger($width, 2, 8, __FUNCTION__, 'width'); + self::validateInteger($heightMultiplier, 2, 8, __FUNCTION__, 'heightMultiplier'); + self::validateInteger($dataColumnCount, 0, 30, __FUNCTION__, 'dataColumnCount'); + self::validateFloat($ec, 0.01, 4.00, __FUNCTION__, 'ec'); + self::validateInteger($options, 0, 1, __FUNCTION__, 'options'); + if ($content == "") { + return; + } + if (!$this -> profile -> getSupportsPdf417Code()) { + // TODO use software rendering via a library instead + throw new Exception("PDF417 codes are not supported on your printer."); + } + $cn = '0'; // Code type for pdf417 code + // Select model: standard or truncated + $this -> wrapperSend2dCodeData(chr(70), $cn, chr($options)); + // Column count + $this -> wrapperSend2dCodeData(chr(65), $cn, chr($dataColumnCount)); + // Set dot sizes + $this -> wrapperSend2dCodeData(chr(67), $cn, chr($width)); + $this -> wrapperSend2dCodeData(chr(68), $cn, chr($heightMultiplier)); + // Set error correction ratio: 1% to 400% + $ec_int = (int)ceil(floatval($ec) * 10); + $this -> wrapperSend2dCodeData(chr(69), $cn, chr($ec_int), '1'); + // Send content & print + $this -> wrapperSend2dCodeData(chr(80), $cn, $content, '0'); + $this -> wrapperSend2dCodeData(chr(81), $cn, '', '0'); + } + + /** + * Generate a pulse, for opening a cash drawer if one is connected. + * The default settings should open an Epson drawer. + * + * @param int $pin 0 or 1, for pin 2 or pin 5 kick-out connector respectively. + * @param int $on_ms pulse ON time, in milliseconds. + * @param int $off_ms pulse OFF time, in milliseconds. + */ + public function pulse($pin = 0, $on_ms = 120, $off_ms = 240) + { + self::validateInteger($pin, 0, 1, __FUNCTION__); + self::validateInteger($on_ms, 1, 511, __FUNCTION__); + self::validateInteger($off_ms, 1, 511, __FUNCTION__); + $this -> connector -> write(self::ESC . "p" . chr($pin + 48) . chr($on_ms / 2) . chr($off_ms / 2)); + } + + /** + * Print the given data as a QR code on the printer. + * + * @param string $content The content of the code. Numeric data will be more efficiently compacted. + * @param int $ec Error-correction level to use. One of Printer::QR_ECLEVEL_L (default), Printer::QR_ECLEVEL_M, Printer::QR_ECLEVEL_Q or Printer::QR_ECLEVEL_H. Higher error correction results in a less compact code. + * @param int $size Pixel size to use. Must be 1-16 (default 3) + * @param int $model QR code model to use. Must be one of Printer::QR_MODEL_1, Printer::QR_MODEL_2 (default) or Printer::QR_MICRO (not supported by all printers). + */ + public function qrCode($content, $ec = Printer::QR_ECLEVEL_L, $size = 3, $model = Printer::QR_MODEL_2) + { + self::validateString($content, __FUNCTION__); + self::validateInteger($ec, 0, 3, __FUNCTION__); + self::validateInteger($size, 1, 16, __FUNCTION__); + self::validateInteger($model, 1, 3, __FUNCTION__); + if ($content == "") { + return; + } + if (!$this -> profile -> getSupportsQrCode()) { + // TODO use software rendering via phpqrcode instead + throw new Exception("QR codes are not supported on your printer."); + } + $cn = '1'; // Code type for QR code + // Select model: 1, 2 or micro. + $this -> wrapperSend2dCodeData(chr(65), $cn, chr(48 + $model) . chr(0)); + // Set dot size. + $this -> wrapperSend2dCodeData(chr(67), $cn, chr($size)); + // Set error correction level: L, M, Q, or H + $this -> wrapperSend2dCodeData(chr(69), $cn, chr(48 + $ec)); + // Send content & print + $this -> wrapperSend2dCodeData(chr(80), $cn, $content, '0'); + $this -> wrapperSend2dCodeData(chr(81), $cn, '', '0'); + } + + /** + * Switch character table (code page) manually. Used in conjunction with textRaw() to + * print special characters which can't be encoded automatically. + * + * @param int $table The table to select. Available code tables are model-specific. + */ + public function selectCharacterTable($table = 0) + { + self::validateInteger($table, 0, 255, __FUNCTION__); + $supported = $this -> profile -> getCodePages(); + if (!isset($supported[$table])) { + throw new InvalidArgumentException("There is no code table $table allowed by this printer's capability profile."); + } + $this -> characterTable = $table; + if ($this -> profile -> getSupportsStarCommands()) { + /* Not an ESC/POS command: STAR printers stash all the extra code pages under a different command. */ + $this -> connector -> write(self::ESC . self::GS . "t" . chr($table)); + return; + } + $this -> connector -> write(self::ESC . "t" . chr($table)); + } + + /** + * Select print mode(s). + * + * Several MODE_* constants can be OR'd together passed to this function's `$mode` argument. The valid modes are: + * - Printer::MODE_FONT_A + * - Printer::MODE_FONT_B + * - Printer::MODE_EMPHASIZED + * - Printer::MODE_DOUBLE_HEIGHT + * - Printer::MODE_DOUBLE_WIDTH + * - Printer::MODE_UNDERLINE + * + * @param int $mode The mode to use. Default is Printer::MODE_FONT_A, with no special formatting. This has a similar effect to running initialize(). + */ + public function selectPrintMode($mode = Printer::MODE_FONT_A) + { + $allModes = Printer::MODE_FONT_B | self::MODE_EMPHASIZED | self::MODE_DOUBLE_HEIGHT | self::MODE_DOUBLE_WIDTH | self::MODE_UNDERLINE; + if (!is_integer($mode) || $mode < 0 || ($mode & $allModes) != $mode) { + throw new InvalidArgumentException("Invalid mode"); + } + + $this -> connector -> write(self::ESC . "!" . chr($mode)); + } + + /** + * Set barcode height. + * + * @param int $height Height in dots. If not specified, 8 will be used. + */ + public function setBarcodeHeight($height = 8) + { + self::validateInteger($height, 1, 255, __FUNCTION__); + $this -> connector -> write(self::GS . "h" . chr($height)); + } + + /** + * Set barcode bar width. + * + * @param int $width Bar width in dots. If not specified, 3 will be used. + * Values above 6 appear to have no effect. + */ + public function setBarcodeWidth($width = 3) + { + self::validateInteger($width, 1, 255, __FUNCTION__); + $this -> connector -> write(self::GS . "w" . chr($width)); + } + + /** + * Set the position for the Human Readable Interpretation (HRI) of barcode characters. + * + * @param int $position. Use Printer::BARCODE_TEXT_NONE to hide the text (default), + * or any combination of Printer::BARCODE_TEXT_ABOVE and Printer::BARCODE_TEXT_BELOW + * flags to display the text. + */ + public function setBarcodeTextPosition($position = Printer::BARCODE_TEXT_NONE) + { + self::validateInteger($position, 0, 3, __FUNCTION__, "Barcode text position"); + $this -> connector -> write(self::GS . "H" . chr($position)); + } + + /** + * Turn double-strike mode on/off. + * + * @param boolean $on true for double strike, false for no double strike + */ + public function setDoubleStrike($on = true) + { + self::validateBoolean($on, __FUNCTION__); + $this -> connector -> write(self::ESC . "G". ($on ? chr(1) : chr(0))); + } + + /** + * Select print color on printers that support multiple colors. + * + * @param int $color Color to use. Must be either Printer::COLOR_1 (default), or Printer::COLOR_2. + */ + public function setColor($color = Printer::COLOR_1) + { + self::validateInteger($color, 0, 1, __FUNCTION__, "Color"); + $this -> connector -> write(self::ESC . "r" . chr($color)); + } + + /** + * Turn emphasized mode on/off. + * + * @param boolean $on true for emphasis, false for no emphasis + */ + public function setEmphasis($on = true) + { + self::validateBoolean($on, __FUNCTION__); + $this -> connector -> write(self::ESC . "E". ($on ? chr(1) : chr(0))); + } + + /** + * Select font. Most printers have two fonts (Fonts A and B), and some have a third (Font C). + * + * @param int $font The font to use. Must be either Printer::FONT_A, Printer::FONT_B, or Printer::FONT_C. + */ + public function setFont($font = Printer::FONT_A) + { + self::validateInteger($font, 0, 2, __FUNCTION__); + $this -> connector -> write(self::ESC . "M" . chr($font)); + } + + /** + * Select justification. + * + * @param int $justification One of Printer::JUSTIFY_LEFT, Printer::JUSTIFY_CENTER, or Printer::JUSTIFY_RIGHT. + */ + public function setJustification($justification = Printer::JUSTIFY_LEFT) + { + self::validateInteger($justification, 0, 2, __FUNCTION__); + $this -> connector -> write(self::ESC . "a" . chr($justification)); + } + + /** + * Set the height of the line. + * + * Some printers will allow you to overlap lines with a smaller line feed. + * + * @param int|null $height The height of each line, in dots. If not set, the printer + * will reset to its default line spacing. + */ + public function setLineSpacing($height = null) + { + if ($height === null) { + // Reset to default + $this -> connector -> write(self::ESC . "2"); // Revert to default line spacing + return; + } + self::validateInteger($height, 1, 255, __FUNCTION__); + $this -> connector -> write(self::ESC . "3" . chr($height)); + } + + /** + * Set print area left margin. Reset to default with Printer::initialize() + * + * @param int $margin The left margin to set on to the print area, in dots. + */ + public function setPrintLeftMargin($margin = 0) + { + self::validateInteger($margin, 0, 65535, __FUNCTION__); + $this -> connector -> write(Printer::GS . 'L' . self::intLowHigh($margin, 2)); + } + + /** + * Set print area width. This can be used to add a right margin to the print area. + * Reset to default with Printer::initialize() + * + * @param int $width The width of the page print area, in dots. + */ + public function setPrintWidth($width = 512) + { + self::validateInteger($width, 1, 65535, __FUNCTION__); + $this -> connector -> write(Printer::GS . 'W' . self::intLowHigh($width, 2)); + } + + /** + * Attach a different print buffer to the printer. Buffers are responsible for handling text output to the printer. + * + * @param PrintBuffer $buffer The buffer to use. + * @throws InvalidArgumentException Where the buffer is already attached to a different printer. + */ + public function setPrintBuffer(PrintBuffer $buffer) + { + if ($buffer === $this -> buffer) { + return; + } + if ($buffer -> getPrinter() != null) { + throw new InvalidArgumentException("This buffer is already attached to a printer."); + } + if ($this -> buffer !== null) { + $this -> buffer -> setPrinter(null); + } + $this -> buffer = $buffer; + $this -> buffer -> setPrinter($this); + } + + /** + * Set black/white reverse mode on or off. In this mode, text is printed white on a black background. + * + * @param boolean $on True to enable, false to disable. + */ + public function setReverseColors($on = true) + { + self::validateBoolean($on, __FUNCTION__); + $this -> connector -> write(self::GS . "B" . ($on ? chr(1) : chr(0))); + } + + /** + * Set the size of text, as a multiple of the normal size. + * + * @param int $widthMultiplier Multiple of the regular height to use (range 1 - 8) + * @param int $heightMultiplier Multiple of the regular height to use (range 1 - 8) + */ + public function setTextSize($widthMultiplier, $heightMultiplier) + { + self::validateInteger($widthMultiplier, 1, 8, __FUNCTION__); + self::validateInteger($heightMultiplier, 1, 8, __FUNCTION__); + $c = pow(2, 4) * ($widthMultiplier - 1) + ($heightMultiplier - 1); + $this -> connector -> write(self::GS . "!" . chr($c)); + } + + /** + * Set underline for printed text. + * + * Argument can be true/false, or one of UNDERLINE_NONE, + * UNDERLINE_SINGLE or UNDERLINE_DOUBLE. + * + * @param int $underline Either true/false, or one of Printer::UNDERLINE_NONE, Printer::UNDERLINE_SINGLE or Printer::UNDERLINE_DOUBLE. Defaults to Printer::UNDERLINE_SINGLE. + */ + public function setUnderline($underline = Printer::UNDERLINE_SINGLE) + { + /* Map true/false to underline constants */ + if ($underline === true) { + $underline = Printer::UNDERLINE_SINGLE; + } elseif ($underline === false) { + $underline = Printer::UNDERLINE_NONE; + } + /* Set the underline */ + self::validateInteger($underline, 0, 2, __FUNCTION__); + $this -> connector -> write(self::ESC . "-" . chr($underline)); + } + + /** + * Print each line upside-down (180 degrees rotated). + * + * @param boolean $on True to enable, false to disable. + */ + public function setUpsideDown($on = true) + { + self::validateBoolean($on, __FUNCTION__); + $this -> connector -> write(self::ESC . "{" . ($on ? chr(1) : chr(0))); + } + + /** + * Add text to the buffer. + * + * Text should either be followed by a line-break, or feed() should be called + * after this to clear the print buffer. + * + * @param string $str Text to print + */ + public function text($str = "") + { + self::validateString($str, __FUNCTION__); + $this -> buffer -> writeText((string)$str); + } + + /** + * Add Chinese text to the buffer. This is a specific workaround for the common Zijang printer- The printer will be switched to a two-byte mode and sent GBK-encoded text. + * + * Support for this will be merged into a print buffer. + * + * @param string $str Text to print, as UTF-8 + */ + public function textChinese($str = "") + { + self::validateString($str, __FUNCTION__); + $this -> connector -> write(self::FS . "&"); + $str = iconv("UTF-8", "GBK//IGNORE", $str); + $this -> buffer -> writeTextRaw((string)$str); + $this -> connector -> write(self::FS . "."); + } + + /** + * Add text to the buffer without attempting to interpret chararacter codes. + * + * Text should either be followed by a line-break, or feed() should be called + * after this to clear the print buffer. + * + * @param string $str Text to print + */ + public function textRaw($str = "") + { + self::validateString($str, __FUNCTION__); + $this -> buffer -> writeTextRaw((string)$str); + } + + /** + * Wrapper for GS ( k, to calculate and send correct data length. + * + * @param string $fn Function to use + * @param string $cn Output code type. Affects available data + * @param string $data Data to send. + * @param string $m Modifier/variant for function. Often '0' where used. + * @throws InvalidArgumentException Where the input lengths are bad. + */ + protected function wrapperSend2dCodeData($fn, $cn, $data = '', $m = '') + { + if (strlen($m) > 1 || strlen($cn) != 1 || strlen($fn) != 1) { + throw new InvalidArgumentException("wrapperSend2dCodeData: cn and fn must be one character each."); + } + $header = $this -> intLowHigh(strlen($data) + strlen($m) + 2, 2); + $this -> connector -> write(self::GS . "(k" . $header . $cn . $fn . $m . $data); + } + + /** + * Wrapper for GS ( L, to calculate and send correct data length. + * + * @param string $m Modifier/variant for function. Usually '0'. + * @param string $fn Function number to use, as character. + * @param string $data Data to send. + * @throws InvalidArgumentException Where the input lengths are bad. + */ + protected function wrapperSendGraphicsData($m, $fn, $data = '') + { + if (strlen($m) != 1 || strlen($fn) != 1) { + throw new InvalidArgumentException("wrapperSendGraphicsData: m and fn must be one character each."); + } + $header = $this -> intLowHigh(strlen($data) + 2, 2); + $this -> connector -> write(self::GS . "(L" . $header . $m . $fn . $data); + } + + /** + * Convert widths and heights to characters. Used before sending graphics to set the size. + * + * @param array $inputs + * @param boolean $long True to use 4 bytes, false to use 2 + * @return string + */ + protected static function dataHeader(array $inputs, $long = true) + { + $outp = []; + foreach ($inputs as $input) { + if ($long) { + $outp[] = Printer::intLowHigh($input, 2); + } else { + self::validateInteger($input, 0, 255, __FUNCTION__); + $outp[] = chr($input); + } + } + return implode("", $outp); + } + + /** + * Generate two characters for a number: In lower and higher parts, or more parts as needed. + * + * @param int $input Input number + * @param int $length The number of bytes to output (1 - 4). + */ + protected static function intLowHigh($input, $length) + { + $maxInput = (256 << ($length * 8) - 1); + self::validateInteger($length, 1, 4, __FUNCTION__); + self::validateInteger($input, 0, $maxInput, __FUNCTION__); + $outp = ""; + for ($i = 0; $i < $length; $i++) { + $outp .= chr($input % 256); + $input = (int)($input / 256); + } + return $outp; + } + + /** + * Throw an exception if the argument given is not a boolean + * + * @param boolean $test the input to test + * @param string $source the name of the function calling this + */ + protected static function validateBoolean($test, $source) + { + if (!($test === true || $test === false)) { + throw new InvalidArgumentException("Argument to $source must be a boolean"); + } + } + + /** + * Throw an exception if the argument given is not a float within the specified range + * + * @param float $test the input to test + * @param float $min the minimum allowable value (inclusive) + * @param float $max the maximum allowable value (inclusive) + * @param string $source the name of the function calling this + * @param string $argument the name of the invalid parameter + */ + protected static function validateFloat($test, $min, $max, $source, $argument = "Argument") + { + if (!is_numeric($test)) { + throw new InvalidArgumentException("$argument given to $source must be a float, but '$test' was given."); + } + if ($test < $min || $test > $max) { + throw new InvalidArgumentException("$argument given to $source must be in range $min to $max, but $test was given."); + } + } + + /** + * Throw an exception if the argument given is not an integer within the specified range + * + * @param int $test the input to test + * @param int $min the minimum allowable value (inclusive) + * @param int $max the maximum allowable value (inclusive) + * @param string $source the name of the function calling this + * @param string $argument the name of the invalid parameter + */ + protected static function validateInteger($test, $min, $max, $source, $argument = "Argument") + { + self::validateIntegerMulti($test, [[$min, $max]], $source, $argument); + } + + /** + * Throw an exception if the argument given is not an integer within one of the specified ranges + * + * @param int $test the input to test + * @param array $ranges array of two-item min/max ranges. + * @param string $source the name of the function calling this + * @param string $source the name of the function calling this + * @param string $argument the name of the invalid parameter + */ + protected static function validateIntegerMulti($test, array $ranges, $source, $argument = "Argument") + { + if (!is_integer($test)) { + throw new InvalidArgumentException("$argument given to $source must be a number, but '$test' was given."); + } + $match = false; + foreach ($ranges as $range) { + $match |= $test >= $range[0] && $test <= $range[1]; + } + if (!$match) { + // Put together a good error "range 1-2 or 4-6" + $rangeStr = "range "; + for ($i = 0; $i < count($ranges); $i++) { + $rangeStr .= $ranges[$i][0] . "-" . $ranges[$i][1]; + if ($i == count($ranges) - 1) { + continue; + } elseif ($i == count($ranges) - 2) { + $rangeStr .= " or "; + } else { + $rangeStr .= ", "; + } + } + throw new InvalidArgumentException("$argument given to $source must be in $rangeStr, but $test was given."); + } + } + + /** + * Throw an exception if the argument given can't be cast to a string + * + * @param string $test the input to test + * @param string $source the name of the function calling this + * @param string $argument the name of the parameter being validated + * @throws InvalidArgumentException Where the argument is not valid + */ + protected static function validateString($test, $source, $argument = "Argument") + { + if (is_object($test) && !method_exists($test, '__toString')) { + throw new InvalidArgumentException("$argument to $source must be a string"); + } + } + + /** + * Throw an exception if the argument doesn't match the given regex. + * + * @param string $test the input to test + * @param string $source the name of the function calling this + * @param string $regex valid values for this attribute, as a regex + * @param string $argument the name of the parameter being validated + * @throws InvalidArgumentException Where the argument is not valid + */ + protected static function validateStringRegex($test, $source, $regex, $argument = "Argument") + { + if (preg_match($regex, $test) === 0) { + throw new InvalidArgumentException("$argument given to $source is invalid. It should match regex '$regex', but '$test' was given."); + } + } +} diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/resources/capabilities.json b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/resources/capabilities.json new file mode 100644 index 00000000000..c60cac0deb7 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/resources/capabilities.json @@ -0,0 +1,1760 @@ +{ + "encodings": { + "CP1001": { + "name": "Unimplemented Star-specific CP1001" + }, + "CP1098": { + "name": "CP1098" + }, + "CP1125": { + "iconv": "CP1125", + "name": "CP1125", + "python_encode": "cp1125" + }, + "CP1250": { + "iconv": "CP1250", + "name": "CP1250", + "python_encode": "cp1250" + }, + "CP1251": { + "iconv": "CP1251", + "name": "CP1251", + "python_encode": "cp1251" + }, + "CP1252": { + "iconv": "CP1252", + "name": "CP1252", + "python_encode": "cp1252" + }, + "CP1253": { + "iconv": "CP1253", + "name": "CP1253", + "python_encode": "cp1253" + }, + "CP1254": { + "iconv": "CP1254", + "name": "CP1254", + "python_encode": "cp1254" + }, + "CP1255": { + "iconv": "CP1255", + "name": "CP1255", + "python_encode": "cp1255" + }, + "CP1256": { + "iconv": "CP1256", + "name": "CP1256", + "python_encode": "cp1256" + }, + "CP1257": { + "iconv": "CP1257", + "name": "CP1257", + "python_encode": "cp1257" + }, + "CP1258": { + "iconv": "CP1258", + "name": "CP1258", + "python_encode": "cp1258" + }, + "CP2001": { + "name": "Unimplemented Star-specific CP2001" + }, + "CP3001": { + "name": "Unimplemented Star-specific CP3001" + }, + "CP3002": { + "name": "Unimplemented Star-specific CP3002" + }, + "CP3011": { + "data": [ + "\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5", + "\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00a2\u00a3\u00a5\u20a7\u0192", + "\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u2310\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb", + "\u2591\u2592\u2593\u2502\u2524\u0100\u2562\u0146\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510", + "\u2514\u2534\u252c\u251c\u2500\u253c\u0101\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567", + "\u0160\u2564\u010d\u010c\u2558\u2552\u0123\u012a\u012b\u2518\u250c\u2588\u2584\u016b\u016a\u2580", + "\u03b1\u00df\u0393\u03c0\u03a3\u03c3\u00b5\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229", + "\u0112\u0113\u0122\u0137\u0136\u013c\u013b\u017e\u017d\u2219\u00b7\u221a\u0145\u0161\u25a0 " + ], + "name": "CP3011 Latvian" + }, + "CP3012": { + "data": [ + "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f", + "\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f", + "\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f", + "\u2591\u2592\u2593\u2502\u2524\u0100\u2562\u0146\u2555\u2563\u2551\u2557\u255d\u014c\u255b\u2510", + "\u2514\u2534\u252c\u251c\u2500\u253c\u0101\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567", + "\u0160\u2564\u010d\u010c\u2558\u2552\u0123\u012a\u012b\u2518\u250c\u2588\u2584\u016b\u016a\u2580", + "\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f", + "\u0112\u0113\u0122\u0137\u0136\u013c\u013b\u017e\u017d\u2219\u00b7\u221a\u0145\u0161\u25a0 " + ], + "name": "CP3012 Cyrillic" + }, + "CP3021": { + "name": "Unimplemented Star-specific CP3021" + }, + "CP3041": { + "name": "Unimplemented Star-specific CP3041" + }, + "CP3840": { + "name": "Unimplemented Star-specific CP3840" + }, + "CP3841": { + "name": "Unimplemented Star-specific CP3841" + }, + "CP3843": { + "name": "Unimplemented Star-specific CP3843" + }, + "CP3844": { + "name": "Unimplemented Star-specific CP3844" + }, + "CP3845": { + "name": "Unimplemented Star-specific CP3845" + }, + "CP3846": { + "name": "Unimplemented Star-specific CP3846" + }, + "CP3847": { + "name": "Unimplemented Star-specific CP3847" + }, + "CP3848": { + "name": "Unimplemented Star-specific CP3848" + }, + "CP437": { + "iconv": "CP437", + "name": "CP437", + "python_encode": "cp437" + }, + "CP720": { + "name": "CP720", + "python_encode": "cp720" + }, + "CP737": { + "iconv": "CP737", + "name": "CP737", + "python_encode": "cp737" + }, + "CP747": { + "name": "CP747" + }, + "CP772": { + "iconv": "CP772", + "name": "CP772" + }, + "CP774": { + "iconv": "CP774", + "name": "CP774" + }, + "CP775": { + "iconv": "CP775", + "name": "CP775", + "python_encode": "cp775" + }, + "CP850": { + "iconv": "CP850", + "name": "CP850", + "python_encode": "cp850" + }, + "CP851": { + "name": "Greek CP851", + "notes": "Not used, due to inconsistencies between implementations." + }, + "CP852": { + "iconv": "CP852", + "name": "CP852", + "python_encode": "cp852" + }, + "CP853": { + "name": "CP853" + }, + "CP855": { + "iconv": "CP855", + "name": "CP855", + "python_encode": "cp855" + }, + "CP857": { + "iconv": "CP857", + "name": "CP857", + "python_encode": "cp857" + }, + "CP858": { + "name": "CP858", + "python_encode": "cp858" + }, + "CP860": { + "iconv": "CP860", + "name": "CP860", + "python_encode": "cp860" + }, + "CP861": { + "iconv": "CP861", + "name": "CP861", + "python_encode": "cp861" + }, + "CP862": { + "iconv": "CP862", + "name": "CP862", + "python_encode": "cp862" + }, + "CP863": { + "iconv": "CP863", + "name": "CP863", + "python_encode": "cp863" + }, + "CP864": { + "iconv": "CP864", + "name": "CP864", + "python_encode": "cp864" + }, + "CP865": { + "iconv": "CP865", + "name": "CP865", + "python_encode": "cp865" + }, + "CP866": { + "iconv": "CP866", + "name": "CP866", + "python_encode": "cp866" + }, + "CP869": { + "iconv": "CP869", + "name": "CP869", + "python_encode": "cp869" + }, + "CP874": { + "iconv": "CP874", + "name": "CP874", + "python_encode": "cp874" + }, + "CP928": { + "name": "CP928" + }, + "CP932": { + "iconv": "CP932", + "name": "CP932", + "python_encode": "cp932" + }, + "ISO_8859-15": { + "iconv": "ISO_8859-15", + "name": "ISO_8859-15", + "python_encode": "iso8859-15" + }, + "ISO_8859-2": { + "iconv": "ISO_8859-2", + "name": "ISO_8859-2", + "python_encode": "iso8859_2" + }, + "ISO_8859-7": { + "iconv": "ISO_8859-7", + "name": "ISO_8859-7", + "python_encode": "iso8859_7" + }, + "OXHOO-EUROPEAN": { + "data": [ + "\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5", + "\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f1\u00d1\u00aa\u00ba\u00bf", + "\u00e1\u00ed\u00f3\u00fa\u00a2\u00a3\u00a5\u20a7\u0192\u00a1\u00c3\u00e3\u00d5\u00f5\u00d8\u00f8", + "\u00b7\u00a8\u00b0`\u00b4\u00bd\u00bc\u00d7\u00f7\u2264\u2265\u00ab\u00bb\u2260\u221a\u00af", + "\u2320\u2321\u221e\u25e4\u21b5\u2191\u2193\u2192\u2190\u250c\u2510\u2514\u2518\u2022\u00ae\u00a9", + "\u2122\u2020\u00a7\u00b6\u0393\u25e2\u0398 ", + "\u00df \u03b5 ", + "\u03c4 " + ], + "name": "Oxhoo-specific European" + }, + "RK1048": { + "iconv": "RK1048", + "name": "RK1048" + }, + "TCVN-3-1": { + "data": [ + " ", + " ", + " \u0103\u00e2\u00ea\u00f4\u01a1\u01b0\u0111 ", + " \u00e0\u1ea3\u00e3\u00e1\u1ea1 \u1eb1\u1eb3\u1eb5\u1eaf ", + " \u1eb7\u1ea7\u1ea9\u1eab\u1ea5\u1ead\u00e8 \u1ebb\u1ebd", + "\u00e9\u1eb9\u1ec1\u1ec3\u1ec5\u1ebf\u1ec7\u00ec\u1ec9 \u0129\u00ed\u1ecb\u00f2", + " \u1ecf\u00f5\u00f3\u1ecd\u1ed3\u1ed5\u1ed7\u1ed1\u1ed9\u1edd\u1edf\u1ee1\u1edb\u1ee3\u00f9", + " \u1ee7\u0169\u00fa\u1ee5\u1eeb\u1eed\u1eef\u1ee9\u1ef1\u1ef3\u1ef7\u1ef9\u00fd\u1ef5 " + ], + "name": "Vietnamese TCVN-3 1" + }, + "TCVN-3-2": { + "data": [ + " ", + " ", + " \u0102\u00c2 \u00d0 \u00ca\u00d4\u01a0\u01af ", + " \u00c0\u1ea2\u00c3\u00c1\u1ea0 \u1eb0\u1eb2\u1eb4\u1eae ", + " \u1eb6\u1ea6\u1ea8\u1eaa\u1ea4\u1eac\u00c8 \u1eba\u1ebc", + "\u00c9\u1eb8\u1ec0\u1ec2\u1ec4\u1ebe\u1ec6\u00cc\u1ec8 \u0128\u00cd\u1eca\u00d2", + " \u1ece\u00d5\u00d3\u1ecc\u1ed2\u1ed4\u1ed6\u1ed0\u1ed8\u1edc\u1ede\u1ee0\u1eda\u1ee2\u00d9", + " \u1ee6\u0168\u00da\u1ee4\u1eea\u1eec\u1eee\u1ee8\u1ef0\u1ef2\u1ef6\u1ef8\u00dd\u1ef4 " + ], + "name": "Vietnamese TCVN-3 1" + }, + "Unknown": { + "name": "Unknown", + "notes": "Code page that has not yet been identified." + } + }, + "profiles": { + "AF-240": { + "codePages": { + "0": "OXHOO-EUROPEAN" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": false, + "barcodeB": false, + "bitImageColumn": false, + "bitImageRaster": false, + "graphics": false, + "highDensity": false, + "paperFullCut": false, + "paperPartCut": false, + "pdf417Code": false, + "pulseBel": false, + "pulseStandard": false, + "qrCode": false, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 20, + "name": "Font A" + } + }, + "media": { + "width": { + "mm": 120, + "pixels": 100 + } + }, + "name": "AF-240 Customer Display", + "notes": "This is a two-line, ESC/POS-aware customer display from Oxhoo. The ESC/POS command mode can be activated persistently by sending:\n\n echo -ne \"\\n\\x02\\x05\\x43\\x31\\x03\" > /dev/ttyUSB0\n", + "vendor": "Oxhoo" + }, + "NT-5890K": { + "codePages": { + "0": "CP437", + "1": "CP932", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "6": "Unknown", + "7": "Unknown", + "8": "Unknown", + "9": "Unknown", + "10": "Unknown", + "16": "CP1252", + "17": "CP866", + "18": "CP852", + "19": "CP858", + "20": "Unknown", + "21": "Unknown", + "22": "Unknown", + "23": "Unknown", + "24": "CP747", + "25": "CP1257", + "27": "CP1258", + "28": "CP864", + "31": "Unknown", + "32": "CP1255", + "50": "CP437", + "52": "CP437", + "53": "CP858", + "54": "CP852", + "55": "CP860", + "56": "CP861", + "57": "CP863", + "58": "CP865", + "59": "CP866", + "60": "CP855", + "61": "CP857", + "62": "CP862", + "63": "CP864", + "64": "CP737", + "65": "CP851", + "66": "CP869", + "68": "CP772", + "69": "CP774", + "71": "CP1252", + "72": "CP1250", + "73": "CP1251", + "74": "CP3840", + "76": "CP3843", + "77": "CP3844", + "78": "CP3845", + "79": "CP3846", + "80": "CP3847", + "81": "CP3848", + "83": "CP2001", + "84": "CP3001", + "85": "CP3002", + "86": "CP3011", + "87": "CP3012", + "88": "CP3021", + "89": "CP3041", + "90": "CP1253", + "91": "CP1254", + "92": "CP1256", + "93": "CP720", + "94": "CP1258", + "95": "CP775", + "96": "Unknown", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": false, + "barcodeB": false, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": false, + "highDensity": true, + "paperFullCut": false, + "paperPartCut": false, + "pdf417Code": false, + "pulseBel": false, + "pulseStandard": true, + "qrCode": false, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 32, + "name": "Font A" + }, + "1": { + "columns": 42, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": 57.5, + "pixels": 384 + } + }, + "name": "NT-5890K", + "notes": "", + "vendor": "Netum" + }, + "OCD-100": { + "codePages": { + "0": "CP437", + "1": "CP932", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "6": "Unknown", + "7": "Unknown", + "8": "Unknown", + "9": "CP852", + "10": "CP862", + "11": "CP866", + "12": "CP1251", + "13": "CP1254", + "14": "CP1255", + "15": "CP1257", + "16": "CP1252", + "17": "CP1253", + "19": "CP858" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": false, + "barcodeB": false, + "bitImageColumn": false, + "bitImageRaster": false, + "graphics": false, + "highDensity": false, + "paperFullCut": false, + "paperPartCut": false, + "pdf417Code": false, + "pulseBel": false, + "pulseStandard": false, + "qrCode": false, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 20, + "name": "Font A" + } + }, + "media": { + "width": { + "mm": 180, + "pixels": 100 + } + }, + "name": "OCD-100 Customer Display", + "notes": "This is a two-line, ESC/POS-aware customer display from Aures. It has some graphics support via custom fonts, but is otherwise text-only. This profile is also suitable for the OCD-150 pole-mounted display.\n", + "vendor": "Aures" + }, + "OCD-300": { + "codePages": { + "0": "CP437", + "1": "CP932", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "6": "Unknown", + "7": "Unknown", + "8": "Unknown", + "9": "CP852", + "10": "CP862", + "11": "CP866", + "12": "CP1251", + "13": "CP1254", + "14": "CP1255", + "15": "CP1257", + "16": "CP1252", + "17": "CP1253", + "18": "CP1250", + "19": "CP858", + "20": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": false, + "barcodeB": false, + "bitImageColumn": false, + "bitImageRaster": false, + "graphics": false, + "highDensity": false, + "paperFullCut": false, + "paperPartCut": false, + "pdf417Code": false, + "pulseBel": false, + "pulseStandard": false, + "qrCode": false, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 20, + "name": "Font A" + } + }, + "media": { + "width": { + "mm": 130.2, + "pixels": 240 + } + }, + "name": "OCD-300 Customer Display", + "notes": "This is a two-line, ESC/POS-aware customer display from Aures. It has some graphics support via vendor-provided tools, but is otherwise text-only.\n", + "vendor": "Aures" + }, + "P822D": { + "codePages": { + "0": "CP437", + "1": "Unknown", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "6": "Unknown", + "7": "Unknown", + "8": "Unknown", + "9": "Unknown", + "10": "Unknown", + "16": "CP1252", + "17": "CP866", + "18": "CP852", + "19": "CP858", + "20": "Unknown", + "21": "Unknown", + "22": "Unknown", + "23": "Unknown", + "24": "CP747", + "25": "CP1257", + "27": "Unknown", + "28": "CP864", + "29": "CP1001", + "30": "Unknown", + "31": "Unknown", + "32": "CP1255", + "33": "CP720", + "34": "CP1256", + "35": "CP1257", + "50": "CP437", + "51": "Unknown", + "52": "CP437", + "53": "CP858", + "54": "CP852", + "55": "CP860", + "56": "CP861", + "57": "CP863", + "58": "CP865", + "59": "CP866", + "60": "CP855", + "61": "CP857", + "62": "CP862", + "63": "CP864", + "64": "CP737", + "65": "CP851", + "66": "CP869", + "67": "CP928", + "68": "CP772", + "69": "CP774", + "70": "CP874", + "71": "CP1252", + "72": "CP1250", + "73": "CP1251", + "74": "CP3840", + "75": "CP3841", + "76": "CP3843", + "77": "CP3844", + "78": "CP3845", + "79": "CP3846", + "80": "CP3847", + "81": "CP3848", + "82": "CP1001", + "83": "CP2001", + "84": "CP3001", + "85": "CP3002", + "86": "CP3011", + "87": "CP3012", + "88": "CP3021", + "89": "CP3041", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": false, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": "Unknown", + "pixels": "Unknown" + } + }, + "name": "P822D", + "notes": "", + "vendor": "PBM" + }, + "POS-5890": { + "codePages": { + "0": "CP437", + "1": "CP932", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "6": "Unknown", + "7": "Unknown", + "8": "Unknown", + "9": "Unknown", + "10": "Unknown", + "16": "CP1252", + "17": "CP866", + "18": "CP852", + "19": "CP858", + "20": "Unknown", + "21": "Unknown", + "22": "Unknown", + "23": "Unknown", + "24": "CP747", + "25": "CP1257", + "27": "CP1258", + "28": "CP864", + "31": "Unknown", + "32": "CP1255", + "50": "CP437", + "52": "CP437", + "53": "CP858", + "54": "CP852", + "55": "CP860", + "56": "CP861", + "57": "CP863", + "58": "CP865", + "59": "CP866", + "60": "CP855", + "61": "CP857", + "62": "CP862", + "63": "CP864", + "64": "CP737", + "65": "CP851", + "66": "CP869", + "68": "CP772", + "69": "CP774", + "71": "CP1252", + "72": "CP1250", + "73": "CP1251", + "74": "CP3840", + "76": "CP3843", + "77": "CP3844", + "78": "CP3845", + "79": "CP3846", + "80": "CP3847", + "81": "CP3848", + "83": "CP2001", + "84": "CP3001", + "85": "CP3002", + "86": "CP3011", + "87": "CP3012", + "88": "CP3021", + "89": "CP3041", + "90": "CP1253", + "91": "CP1254", + "92": "CP1256", + "93": "CP720", + "94": "CP1258", + "95": "CP775", + "96": "Unknown", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": false, + "barcodeB": false, + "bitImageColumn": false, + "bitImageRaster": true, + "graphics": false, + "highDensity": true, + "paperFullCut": false, + "paperPartCut": false, + "pdf417Code": false, + "pulseBel": false, + "pulseStandard": true, + "qrCode": false, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 32, + "name": "Font A" + }, + "1": { + "columns": 42, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": 57.5, + "pixels": 384 + } + }, + "name": "POS5890 Series", + "notes": "POS-5890 thermal printer series, also marketed under various other names.\n", + "vendor": "Zjiang" + }, + "SP2000": { + "codePages": { + "0": "CP437", + "1": "CP437", + "2": "CP932", + "3": "CP437", + "4": "CP858", + "5": "CP852", + "6": "CP860", + "7": "CP861", + "8": "CP863", + "9": "CP865", + "10": "CP866", + "11": "CP855", + "12": "CP857", + "13": "CP862", + "14": "CP864", + "15": "CP737", + "16": "CP851", + "17": "CP869", + "18": "CP928", + "19": "CP772", + "20": "CP774", + "21": "CP874", + "32": "CP1252", + "33": "CP1250", + "34": "CP1251", + "64": "CP3840", + "65": "CP3841", + "66": "CP3843", + "67": "CP3844", + "68": "CP3845", + "69": "CP3846", + "70": "CP3847", + "71": "CP3848", + "72": "CP1001", + "73": "CP2001", + "74": "CP3001", + "75": "CP3002", + "76": "CP3011", + "77": "CP3012", + "78": "CP3021", + "79": "CP3041", + "96": "Unknown", + "97": "Unknown", + "98": "Unknown", + "99": "Unknown", + "100": "Unknown", + "101": "Unknown", + "102": "Unknown", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": true, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": true + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": "Unknown", + "pixels": "Unknown" + } + }, + "name": "SP2000 Series", + "notes": "Star SP2000 impact printer series with ESC/POS emulation enabled", + "vendor": "Star Micronics" + }, + "TEP-200M": { + "codePages": { + "0": "CP437", + "1": "CP932", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "6": "Unknown", + "7": "Unknown", + "8": "Unknown", + "11": "CP851", + "12": "CP853", + "13": "CP857", + "14": "CP737", + "15": "ISO_8859-7", + "16": "CP1252", + "17": "CP866", + "18": "CP852", + "19": "CP858", + "20": "Unknown", + "21": "CP874", + "22": "Unknown", + "23": "Unknown", + "24": "Unknown", + "25": "Unknown", + "26": "Unknown", + "30": "TCVN-3-1", + "31": "TCVN-3-2", + "32": "CP720", + "33": "CP775", + "34": "CP855", + "35": "CP861", + "36": "CP862", + "37": "CP864", + "38": "CP869", + "39": "ISO_8859-2", + "40": "ISO_8859-15", + "41": "CP1098", + "42": "CP774", + "43": "CP772", + "44": "CP1125", + "45": "CP1250", + "46": "CP1251", + "47": "CP1253", + "48": "CP1254", + "49": "CP1255", + "50": "CP1256", + "51": "CP1257", + "52": "CP1258", + "53": "RK1048", + "66": "Unknown", + "67": "Unknown", + "68": "Unknown", + "69": "Unknown", + "70": "Unknown", + "71": "Unknown", + "72": "Unknown", + "73": "Unknown", + "74": "Unknown", + "75": "Unknown", + "82": "Unknown", + "254": "Unknown", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": true, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": "Unknown", + "pixels": "Unknown" + } + }, + "name": "TEP200M Series", + "notes": "", + "vendor": "EPOS" + }, + "TM-P80": { + "codePages": { + "0": "CP437", + "1": "CP932", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "6": "Unknown", + "7": "Unknown", + "8": "Unknown", + "11": "CP851", + "12": "CP853", + "13": "CP857", + "14": "CP737", + "15": "ISO_8859-7", + "16": "CP1252", + "17": "CP866", + "18": "CP852", + "19": "CP858", + "20": "Unknown", + "21": "CP874", + "22": "Unknown", + "23": "Unknown", + "24": "Unknown", + "25": "Unknown", + "26": "Unknown", + "30": "TCVN-3-1", + "31": "TCVN-3-2", + "32": "CP720", + "33": "CP775", + "34": "CP855", + "35": "CP861", + "36": "CP862", + "37": "CP864", + "38": "CP869", + "39": "ISO_8859-2", + "40": "ISO_8859-15", + "41": "CP1098", + "42": "CP774", + "43": "CP772", + "44": "CP1125", + "45": "CP1250", + "46": "CP1251", + "47": "CP1253", + "48": "CP1254", + "49": "CP1255", + "50": "CP1256", + "51": "CP1257", + "52": "CP1258", + "53": "RK1048", + "66": "Unknown", + "67": "Unknown", + "68": "Unknown", + "69": "Unknown", + "70": "Unknown", + "71": "Unknown", + "72": "Unknown", + "73": "Unknown", + "74": "Unknown", + "75": "Unknown", + "82": "Unknown", + "254": "Unknown", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": true, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + }, + "2": { + "columns": 24, + "name": "Kanji" + } + }, + "media": { + "width": { + "mm": 72, + "pixels": 576 + } + }, + "name": "TM-P80", + "notes": "Portable printer (48-column mode)", + "vendor": "Epson" + }, + "TM-P80-42col": { + "codePages": { + "0": "CP437", + "1": "CP932", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "6": "Unknown", + "7": "Unknown", + "8": "Unknown", + "11": "CP851", + "12": "CP853", + "13": "CP857", + "14": "CP737", + "15": "ISO_8859-7", + "16": "CP1252", + "17": "CP866", + "18": "CP852", + "19": "CP858", + "20": "Unknown", + "21": "CP874", + "22": "Unknown", + "23": "Unknown", + "24": "Unknown", + "25": "Unknown", + "26": "Unknown", + "30": "TCVN-3-1", + "31": "TCVN-3-2", + "32": "CP720", + "33": "CP775", + "34": "CP855", + "35": "CP861", + "36": "CP862", + "37": "CP864", + "38": "CP869", + "39": "ISO_8859-2", + "40": "ISO_8859-15", + "41": "CP1098", + "42": "CP774", + "43": "CP772", + "44": "CP1125", + "45": "CP1250", + "46": "CP1251", + "47": "CP1253", + "48": "CP1254", + "49": "CP1255", + "50": "CP1256", + "51": "CP1257", + "52": "CP1258", + "53": "RK1048", + "66": "Unknown", + "67": "Unknown", + "68": "Unknown", + "69": "Unknown", + "70": "Unknown", + "71": "Unknown", + "72": "Unknown", + "73": "Unknown", + "74": "Unknown", + "75": "Unknown", + "82": "Unknown", + "254": "Unknown", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": true, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 60, + "name": "Font B" + }, + "2": { + "columns": 21, + "name": "Kanji" + } + }, + "media": { + "width": { + "mm": 63.6, + "pixels": 546 + } + }, + "name": "TM-P80 (42 column mode)", + "notes": "Portable printer (42-column mode)", + "vendor": "Epson" + }, + "TM-T88II": { + "codePages": { + "0": "CP437", + "1": "CP932", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "19": "CP858", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": true, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": "Unknown", + "pixels": "Unknown" + } + }, + "name": "TM-T88II", + "notes": "Epson TM-T88II profile. This printer is discontinued by the Vendor, and has similar feature support to the TM-T88III. The code page mapping is documented in the \"TM-T88II/T88III Technical Reference Guide\".\n", + "vendor": "Epson" + }, + "TM-T88III": { + "codePages": { + "0": "CP437", + "1": "CP932", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "16": "CP1252", + "17": "CP866", + "18": "CP862", + "19": "CP858", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": true, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": "Unknown", + "pixels": "Unknown" + } + }, + "name": "TM-T88III", + "notes": "Epson TM-T88III profile. This printer has similar feature support to the TM-T88II. The code page mapping is documented in the \"TM-T88II/T88III Technical Reference Guide\".\n", + "vendor": "Epson" + }, + "TM-T88IV": { + "codePages": { + "0": "CP437", + "1": "CP932", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "16": "CP1252", + "17": "CP866", + "18": "CP852", + "19": "CP858", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": true, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": "Unknown", + "pixels": "Unknown" + } + }, + "name": "TM-T88IV", + "notes": "Epson TM-T88IV profile\n", + "vendor": "Epson" + }, + "TM-T88IV-SA": { + "codePages": { + "0": "CP437", + "20": "Unknown", + "21": "CP874", + "26": "Unknown", + "30": "TCVN-3-1", + "31": "TCVN-3-2" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": true, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": "Unknown", + "pixels": "Unknown" + } + }, + "name": "TM-T88IV South Asia", + "notes": "Epson TM-T88IV profile (South Asia models)\n", + "vendor": "Epson" + }, + "TM-U220": { + "codePages": { + "0": "CP437" + }, + "colors": { + "0": "black", + "1": "alternate" + }, + "features": { + "barcodeA": false, + "barcodeB": false, + "bitImageColumn": true, + "bitImageRaster": false, + "graphics": false, + "highDensity": false, + "paperFullCut": false, + "paperPartCut": false, + "pdf417Code": false, + "pulseBel": false, + "pulseStandard": true, + "qrCode": false, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": 80, + "pixels": "Unknown" + } + }, + "name": "TM-U220", + "notes": "Two-color impact printer with 80mm output", + "vendor": "Epson" + }, + "TSP600": { + "codePages": { + "0": "CP437", + "1": "CP437", + "2": "CP932", + "3": "CP437", + "4": "CP858", + "5": "CP852", + "6": "CP860", + "7": "CP861", + "8": "CP863", + "9": "CP865", + "10": "CP866", + "11": "CP855", + "12": "CP857", + "13": "CP862", + "14": "CP864", + "15": "CP737", + "16": "CP851", + "17": "CP869", + "18": "CP928", + "19": "CP772", + "20": "CP774", + "21": "CP874", + "32": "CP1252", + "33": "CP1250", + "34": "CP1251", + "64": "CP3840", + "65": "CP3841", + "66": "CP3843", + "67": "CP3844", + "68": "CP3845", + "69": "CP3846", + "70": "CP3847", + "71": "CP3848", + "72": "CP1001", + "73": "CP2001", + "74": "CP3001", + "75": "CP3002", + "76": "CP3011", + "77": "CP3012", + "78": "CP3021", + "79": "CP3041", + "96": "Unknown", + "97": "Unknown", + "98": "Unknown", + "99": "Unknown", + "100": "Unknown", + "101": "Unknown", + "102": "Unknown", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": true, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": true + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": "Unknown", + "pixels": "Unknown" + } + }, + "name": "TSP600 Series", + "notes": "Star TSP600 thermal printer series with ESC/POS emulation enabled", + "vendor": "Star Micronics" + }, + "TUP500": { + "codePages": { + "0": "CP437", + "1": "CP437", + "2": "CP932", + "3": "CP437", + "4": "CP858", + "5": "CP852", + "6": "CP860", + "7": "CP861", + "8": "CP863", + "9": "CP865", + "10": "CP866", + "11": "CP855", + "12": "CP857", + "13": "CP862", + "14": "CP864", + "15": "CP737", + "16": "CP851", + "17": "CP869", + "18": "CP928", + "19": "CP772", + "20": "CP774", + "21": "CP874", + "32": "CP1252", + "33": "CP1250", + "34": "CP1251", + "64": "CP3840", + "65": "CP3841", + "66": "CP3843", + "67": "CP3844", + "68": "CP3845", + "69": "CP3846", + "70": "CP3847", + "71": "CP3848", + "72": "CP1001", + "73": "CP2001", + "74": "CP3001", + "75": "CP3002", + "76": "CP3011", + "77": "CP3012", + "78": "CP3021", + "79": "CP3041", + "96": "Unknown", + "97": "Unknown", + "98": "Unknown", + "99": "Unknown", + "100": "Unknown", + "101": "Unknown", + "102": "Unknown", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": true, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": true + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": "Unknown", + "pixels": "Unknown" + } + }, + "name": "TUP500 Series", + "notes": "Star TUP500 thermal printer series with ESC/POS emulation enabled", + "vendor": "Star Micronics" + }, + "default": { + "codePages": { + "0": "CP437", + "1": "CP932", + "2": "CP850", + "3": "CP860", + "4": "CP863", + "5": "CP865", + "6": "Unknown", + "7": "Unknown", + "8": "Unknown", + "11": "CP851", + "12": "CP853", + "13": "CP857", + "14": "CP737", + "15": "ISO_8859-7", + "16": "CP1252", + "17": "CP866", + "18": "CP852", + "19": "CP858", + "20": "Unknown", + "21": "CP874", + "22": "Unknown", + "23": "Unknown", + "24": "Unknown", + "25": "Unknown", + "26": "Unknown", + "30": "TCVN-3-1", + "31": "TCVN-3-2", + "32": "CP720", + "33": "CP775", + "34": "CP855", + "35": "CP861", + "36": "CP862", + "37": "CP864", + "38": "CP869", + "39": "ISO_8859-2", + "40": "ISO_8859-15", + "41": "CP1098", + "42": "CP774", + "43": "CP772", + "44": "CP1125", + "45": "CP1250", + "46": "CP1251", + "47": "CP1253", + "48": "CP1254", + "49": "CP1255", + "50": "CP1256", + "51": "CP1257", + "52": "CP1258", + "53": "RK1048", + "66": "Unknown", + "67": "Unknown", + "68": "Unknown", + "69": "Unknown", + "70": "Unknown", + "71": "Unknown", + "72": "Unknown", + "73": "Unknown", + "74": "Unknown", + "75": "Unknown", + "82": "Unknown", + "254": "Unknown", + "255": "Unknown" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": true, + "barcodeB": true, + "bitImageColumn": true, + "bitImageRaster": true, + "graphics": true, + "highDensity": true, + "paperFullCut": true, + "paperPartCut": true, + "pdf417Code": true, + "pulseBel": false, + "pulseStandard": true, + "qrCode": true, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": "Unknown", + "pixels": "Unknown" + } + }, + "name": "Default", + "notes": "Default ESC/POS profile, suitable for standards-compliant or Epson-branded printers. This profile allows the use of standard ESC/POS features, and can encode a variety of code pages.\n", + "vendor": "Generic" + }, + "simple": { + "codePages": { + "0": "CP437" + }, + "colors": { + "0": "black" + }, + "features": { + "barcodeA": false, + "barcodeB": false, + "bitImageColumn": false, + "bitImageRaster": true, + "graphics": false, + "highDensity": true, + "paperFullCut": false, + "paperPartCut": false, + "pdf417Code": false, + "pulseBel": false, + "pulseStandard": true, + "qrCode": false, + "starCommands": false + }, + "fonts": { + "0": { + "columns": 42, + "name": "Font A" + }, + "1": { + "columns": 56, + "name": "Font B" + } + }, + "media": { + "width": { + "mm": "Unknown", + "pixels": "Unknown" + } + }, + "name": "Simple", + "notes": "A profile for use in printers with unknown or poor compatibility. This profile indicates that a small number of features are supported, so that commands are not sent a printer that is unlikely to understand them.\n", + "vendor": "Generic" + } + } +} \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/src/NetworkPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/NetworkPrintConnector.php deleted file mode 100644 index 4dd2c39f115..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/NetworkPrintConnector.php +++ /dev/null @@ -1,39 +0,0 @@ -, - * incorporating modifications by: - * - Roni Saha - * - Gergely Radics - * - Warren Doyle - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * PrintConnector for directly opening a network socket to a printer to send it commands. - */ -class NetworkPrintConnector extends FilePrintConnector { - public function __construct($ip, $port = "9100") { - $this -> fp = @fsockopen($ip, $port, $errno, $errstr); - if($this -> fp === false) { - throw new Exception("Cannot initialise NetworkPrintConnector: " . $errstr); - } - } -} diff --git a/htdocs/includes/mike42/escpos-php/src/P822DCapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/P822DCapabilityProfile.php deleted file mode 100644 index 7c3b5abe6dd..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/P822DCapabilityProfile.php +++ /dev/null @@ -1,90 +0,0 @@ - CodePage::CP437, - 1 => false, // Katakana - 2 => CodePage::CP850, - 3 => CodePage::CP860, - 4 => CodePage::CP863, - 5 => CodePage::CP865, - 6 => false, // Western Europe - 7 => false, // Greek - 8 => false, // Hebrew - 9 => false, // Eastern europe - 10 => false, // Iran - 16 => CodePage::CP1252 , - 17 => CodePage::CP866 , - 18 => CodePage::CP852 , - 19 => CodePage::CP858, - 20 => false, // Iran II - 21 => false, // latvian - 22 => false, //Arabic - 23 => false, // PT151, 1251 - 24 => CodePage::CP747, - 25 => CodePage::CP1257, - 27 => false, // Vietnam, - 28 => CodePage::CP864, - 29 => CodePage::CP1001, - 30 => false, // Uigur - 31 => false, // Hebrew - 32 => CodePage::CP1255, - 33 => CodePage::CP720, - 34 => CodePage::CP1256, - 35 => CodePage::CP1257, - 255 => false, // Thai - - 50 => CodePage::CP437, - 51 => false, // Jatakana, - 52 => CodePage::CP437, - 53 => CodePage::CP858, - 54 => CodePage::CP852, - 55 => CodePage::CP860, - 56 => CodePage::CP861, - 57 => CodePage::CP863, - 58 => CodePage::CP865, - 59 => CodePage::CP866, - 60 => CodePage::CP855, - 61 => CodePage::CP857, - 62 => CodePage::CP862, - 63 => CodePage::CP864, - 64 => CodePage::CP737, - 65 => CodePage::CP851, - 66 => CodePage::CP869, - 67 => CodePage::CP928, - 68 => CodePage::CP772, - 69 => CodePage::CP774, - 70 => CodePage::CP874, - 71 => CodePage::CP1252, - 72 => CodePage::CP1250, - 73 => CodePage::CP1251, - 74 => CodePage::CP3840, - 75 => CodePage::CP3841, - 76 => CodePage::CP3843, - 77 => CodePage::CP3844, - 78 => CodePage::CP3845, - 79 => CodePage::CP3846, - 80 => CodePage::CP3847, - 81 => CodePage::CP3848, - 82 => CodePage::CP1001, - 83 => CodePage::CP2001, - 84 => CodePage::CP3001, - 85 => CodePage::CP3002, - 86 => CodePage::CP3011, - 87 => CodePage::CP3012, - 88 => CodePage::CP3021, - 89 => CodePage::CP3041 - ); - } - - public function getSupportsGraphics() { - /* Ask the driver to use bitImage wherever possible instead of graphics */ - return false; - } -} diff --git a/htdocs/includes/mike42/escpos-php/src/PrintBuffer.php b/htdocs/includes/mike42/escpos-php/src/PrintBuffer.php deleted file mode 100644 index 9e3b110085f..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/PrintBuffer.php +++ /dev/null @@ -1,75 +0,0 @@ -, - * incorporating modifications by: - * - Roni Saha - * - Gergely Radics - * - Warren Doyle - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Print buffers manage newlines and character encoding for the target printer. - * They are used as a swappable component: text or image-based output. - * - * - Text output (EscposPrintBuffer) is the fast default, and is recommended for - * most people, as the text output can be more directly manipulated by ESC/POS - * commands. - * - Image output (ImagePrintBuffer) is designed to accept more encodings than the - * physical printer supports, by rendering the text to small images on-the-fly. - * This takes a lot more CPU than sending text, but is necessary for some users. - * - If your use case fits outside these, then a further speed/flexibility trade-off - * can be made by printing directly from generated HTML or PDF. - */ -interface PrintBuffer { - /** - * Cause the buffer to send any partial input and wait on a newline. - * If the printer is already on a new line, this does nothing. - */ - function flush(); - - /** - * Used by Escpos to check if a printer is set. - */ - function getPrinter(); - - /** - * Used by Escpos to hook up one-to-one link between buffers and printers. - * - * @param Escpos $printer New printer - */ - function setPrinter(Escpos $printer = null); - - /** - * Accept UTF-8 text for printing. - * - * @param string $text Text to print - */ - function writeText($text); - - /** - * Accept 8-bit text in the current encoding and add it to the buffer. - * - * @param string $text Text to print, already the target encoding. - */ - function writeTextRaw($text); -} -?> \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/src/PrintConnector.php b/htdocs/includes/mike42/escpos-php/src/PrintConnector.php deleted file mode 100644 index f1d37be9c55..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/PrintConnector.php +++ /dev/null @@ -1,56 +0,0 @@ -, - * incorporating modifications by: - * - Roni Saha - * - Gergely Radics - * - Warren Doyle - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Interface passed to Escpos class for receiving print data. Print connectors - * are responsible for transporting this to the actual printer. - */ -interface PrintConnector { - /** - * Print connectors should cause a NOTICE if they are deconstructed - * when they have not been finalized. - */ - public function __destruct(); - - /** - * Finish using this print connector (close file, socket, send - * accumulated output, etc). - */ - public function finalize(); - - /** - * @param string $data - * @return Data read from the printer, or false where reading is not possible. - */ - public function read($len); - - /** - * @param string $data - */ - public function write($data); -} diff --git a/htdocs/includes/mike42/escpos-php/src/SimpleCapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/SimpleCapabilityProfile.php deleted file mode 100644 index 7076b5e16cb..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/SimpleCapabilityProfile.php +++ /dev/null @@ -1,17 +0,0 @@ - CodePage::CP437); - } - - public function getSupportsGraphics() { - /* Ask the driver to use bitImage wherever possible instead of graphics */ - return false; - } -} diff --git a/htdocs/includes/mike42/escpos-php/src/StarCapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/StarCapabilityProfile.php deleted file mode 100644 index f61774a5e30..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/StarCapabilityProfile.php +++ /dev/null @@ -1,82 +0,0 @@ - "ÇüéâäàåçêëèïîìÄÅ" . - "ÉæÆôöòûùÿÖÜ¢£¥₧ƒ" . - "áíóúñѪº¿⌐¬½¼¡«»" . - "░▒▓│┤Ā╢ņ╕╣║╗╝╜╛┐" . - "└┴┬├─┼ā╟╚╔╩╦╠═╬╧" . - "Š╤čČ╘╒ģĪī┘┌█▄ūŪ▀" . - "αßΓπΣσµτΦΘΩδ∞φε∩" . - "ĒēĢķĶļĻžŽ∙·√Ņš■ ", - 'CP3012' => "АБВГДЕЖЗИЙКЛМНОП" . - "РСТУФХЦЧШЩЪЫЬЭЮЯ" . - "абвгдежзийклмноп" . - "░▒▓│┤Ā╢ņ╕╣║╗╝Ō╛┐" . - "└┴┬├─┼ā╟╚╔╩╦╠═╬╧" . - "Š╤čČ╘╒ģĪī┘┌█▄ūŪ▀" . - "рстуфхцчшщъыьэюя" . - "ĒēĢķĶļĻžŽ∙·√Ņš■ " - ); - } - - function getSupportedCodePages() { - return array( - 0 => CodePage::CP437, // "Normal" - 1 => CodePage::CP437, - 2 => CodePage::CP932, - 3 => CodePage::CP437, - 4 => CodePage::CP858, - 5 => CodePage::CP852, - 6 => CodePage::CP860, - 7 => CodePage::CP861, - 8 => CodePage::CP863, - 9 => CodePage::CP865, - 10 => CodePage::CP866, - 11 => CodePage::CP855, - 12 => CodePage::CP857, - 13 => CodePage::CP862, - 14 => CodePage::CP864, - 15 => CodePage::CP737, - 16 => CodePage::CP851, - 17 => CodePage::CP869, - 18 => CodePage::CP928, - 19 => CodePage::CP772, - 20 => CodePage::CP774, - 21 => CodePage::CP874, - 32 => CodePage::CP1252, - 33 => CodePage::CP1250, - 34 => CodePage::CP1251, - 64 => CodePage::CP3840, - 65 => CodePage::CP3841, - 66 => CodePage::CP3843, - 67 => CodePage::CP3844, - 68 => CodePage::CP3845, - 69 => CodePage::CP3846, - 70 => CodePage::CP3847, - 71 => CodePage::CP3848, - 72 => CodePage::CP1001, - 73 => CodePage::CP2001, - 74 => CodePage::CP3001, - 75 => CodePage::CP3002, - 76 => 'custom:CP3011', - 77 => 'custom:CP3012', - 78 => CodePage::CP3021, - 79 => CodePage::CP3041, - 96 => false, // Thai Character Code 42 - 97 => false, // Thai Character Code 11 - 98 => false, // Thai Character Code 13 - 99 => false, // Thai Character Code 14 - 100 => false, // Thai Character Code 16 - 101 => false, // Thai Character Code 17 - 102 => false, // Thai Character Code 18 - 255 => false); - } - - function getSupportsStarCommands() { - /* Allows Escpos.php to substitute emulated ESC/POS commands with native ones for this printer. */ - return true; - } -} \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/src/WindowsPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/WindowsPrintConnector.php deleted file mode 100644 index 717e9c1a572..00000000000 --- a/htdocs/includes/mike42/escpos-php/src/WindowsPrintConnector.php +++ /dev/null @@ -1,356 +0,0 @@ -, - * incorporating modifications by: - * - Roni Saha - * - Gergely Radics - * - Warren Doyle - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Connector for sending print jobs to - * - local ports on windows (COM1, LPT1, etc) - * - shared (SMB) printers from any platform (\\server\foo) - * For USB printers or other ports, the trick is to share the printer with a generic text driver, then access it locally. - */ -class WindowsPrintConnector implements PrintConnector { - /** - * @var array Accumulated lines of output for later use. - */ - private $buffer; - - /** - * @var string The hostname of the target machine, or null if this is a local connection. - */ - private $hostname; - - /** - * @var boolean True if a port is being used directly (must be Windows), false if network shares will be used. - */ - private $isLocal; - - /** - * @var int Platform we're running on, for selecting different commands. See PLATFORM_* constants. - */ - private $platform; - - /** - * @var string The name of the target printer (eg "Foo Printer") or port ("COM1", "LPT1"). - */ - private $printerName; - - /** - * @var string Login name for network printer, or null if not using authentication. - */ - private $userName; - - /** - * @var string Password for network printer, or null if no password is required. - */ - private $userPassword; - - /** - * @var string Workgroup that the printer is located on - */ - private $workgroup; - - /** - * @var int represents Linux - */ - const PLATFORM_LINUX = 0; - - /** - * @var int represents Mac - */ - const PLATFORM_MAC = 1; - - /** - * @var int represents Windows - */ - const PLATFORM_WIN = 2; - - /** - * @var string Valid local ports. - */ - const REGEX_LOCAL = "/^(LPT\d|COM\d)$/"; - - /** - * @var string Valid printer name. - */ - const REGEX_PRINTERNAME = "/^[\w-]+(\s[\w-]+)*$/"; - - /** - * @var string Valid smb:// URI containing hostname & printer with optional user & optional password only. - */ - const REGEX_SMB = "/^smb:\/\/([\s\w-]+(:[\s\w-]+)?@)?[\w-]+\/([\w-]+\/)?[\w-]+(\s[\w-]+)*$/"; - - /** - * @param string $dest - * @throws BadMethodCallException - */ - public function __construct($dest) { - $this -> platform = $this -> getCurrentPlatform(); - $this -> isLocal = false; - $this -> buffer = null; - $this -> userName = null; - $this -> userPassword = null; - $this -> workgroup = null; - if(preg_match(self::REGEX_LOCAL, $dest) == 1) { - // Straight to LPT1, COM1 or other local port. Allowed only if we are actually on windows. - if($this -> platform !== self::PLATFORM_WIN) { - throw new BadMethodCallException("WindowsPrintConnector can only be used to print to a local printer ('".$dest."') on a Windows computer."); - } - $this -> isLocal = true; - $this -> hostname = null; - $this -> printerName = $dest; - } else if(preg_match(self::REGEX_SMB, $dest) == 1) { - // Connect to samba share, eg smb://host/printer - $part = parse_url($dest); - $this -> hostname = $part['host']; - /* Printer name and optional workgroup */ - $path = ltrim($part['path'], '/'); - if(strpos($path, "/") !== false) { - $pathPart = explode("/", $path); - $this -> workgroup = $pathPart[0]; - $this -> printerName = $pathPart[1]; - } else { - $this -> printerName = $path; - } - /* Username and password if set */ - if(isset($part['user'])) { - $this -> userName = $part['user']; - if(isset($part['pass'])) { - $this -> userPassword = $part['pass']; - } - } - } else if(preg_match(self::REGEX_PRINTERNAME, $dest) == 1) { - // Just got a printer name. Assume it's on the current computer. - $hostname = gethostname(); - if(!$hostname) { - $hostname = "localhost"; - } - $this -> hostname = $hostname; - $this -> printerName = $dest; - } else { - throw new BadMethodCallException("Printer '" . $dest . "' is not a valid printer name. Use local port (LPT1, COM1, etc) or smb://computer/printer notation."); - } - $this -> buffer = array(); - } - - public function __destruct() { - if($this -> buffer !== null) { - trigger_error("Print connector was not finalized. Did you forget to close the printer?", E_USER_NOTICE); - } - } - - public function finalize() { - $data = implode($this -> buffer); - $this -> buffer = null; - if($this -> platform == self::PLATFORM_WIN) { - $this -> finalizeWin($data); - } else if($this -> platform == self::PLATFORM_LINUX) { - $this -> finalizeLinux($data); - } else { - $this -> finalizeMac($data); - } - } - - /** - * Send job to printer -- platform-specific Linux code. - * - * @param string $data Print data - * @throws Exception - */ - protected function finalizeLinux($data) { - /* Non-Windows samba printing */ - $device = "//" . $this -> hostname . "/" . $this -> printerName; - if($this -> userName !== null) { - $user = ($this -> workgroup != null ? ($this -> workgroup . "\\") : "") . $this -> userName; - if($this -> userPassword == null) { - // No password - $command = sprintf("smbclient %s -U %s -c %s -N", - escapeshellarg($device), - escapeshellarg($user), - escapeshellarg("print -")); - $redactedCommand = $command; - } else { - // With password - $command = sprintf("smbclient %s %s -U %s -c %s", - escapeshellarg($device), - escapeshellarg($this -> userPassword), - escapeshellarg($user), - escapeshellarg("print -")); - $redactedCommand = sprintf("smbclient %s %s -U %s -c %s", - escapeshellarg($device), - escapeshellarg("*****"), - escapeshellarg($user), - escapeshellarg("print -")); - } - } else { - // No authentication information at all - $command = sprintf("smbclient %s -c %s -N", - escapeshellarg($device), - escapeshellarg("print -")); - $redactedCommand = $command; - } - $retval = $this -> runCommand($command, $outputStr, $errorStr, $data); - if($retval != 0) { - throw new Exception("Failed to print. Command \"$redactedCommand\" failed with exit code $retval: " . trim($outputStr)); - } - } - - protected function finalizeMac($data) { - throw new Exception("Mac printing not implemented."); - } - - /** - * Send data to printer -- platform-specific Windows code. - * - * @param string $data - */ - protected function finalizeWin($data) { - /* Windows-friendly printing of all sorts */ - if(!$this -> isLocal) { - /* Networked printing */ - $device = "\\\\" . $this -> hostname . "\\" . $this -> printerName; - if($this -> userName !== null) { - /* Log in */ - $user = "/user:" . ($this -> workgroup != null ? ($this -> workgroup . "\\") : "") . $this -> userName; - if($this -> userPassword == null) { - $command = sprintf("net use %s %s", - escapeshellarg($device), - escapeshellarg($user)); - $redactedCommand = $command; - } else { - $command = sprintf("net use %s %s %s", - escapeshellarg($device), - escapeshellarg($user), - escapeshellarg($this -> userPassword)); - $redactedCommand = sprintf("net use %s %s %s", - escapeshellarg($device), - escapeshellarg($user), - escapeshellarg("*****")); - } - $retval = $this -> runCommand($command, $outputStr, $errorStr); - if($retval != 0) { - throw new Exception("Failed to print. Command \"$redactedCommand\" failed with exit code $retval: " . trim($errorStr)); - } - } - /* Final print-out */ - $filename = tempnam(sys_get_temp_dir(), "escpos"); - file_put_contents($filename, $data); - if(!$this -> runCopy($filename, $device)){ - throw new Exception("Failed to copy file to printer"); - } - unlink($filename); - } else { - /* Drop data straight on the printer */ - if(!$this -> runWrite($data, $this -> printerName)) { - throw new Exception("Failed to write file to printer at " . $this -> printerName); - } - } - } - - /** - * @return string Current platform. Separated out for testing purposes. - */ - protected function getCurrentPlatform() { - if(PHP_OS == "WINNT") { - return self::PLATFORM_WIN; - } - if(PHP_OS == "Darwin") { - return self::PLATFORM_MAC; - } - return self::PLATFORM_LINUX; - } - - /* (non-PHPdoc) - * @see PrintConnector::read() - */ - public function read($len) { - /* Two-way communication is not supported */ - return false; - } - - /** - * Run a command, pass it data, and retrieve its return value, standard output, and standard error. - * - * @param string $command the command to run. - * @param string $outputStr variable to fill with standard output. - * @param string $errorStr variable to fill with standard error. - * @param string $inputStr text to pass to the command's standard input (optional). - * @return number - */ - protected function runCommand($command, &$outputStr, &$errorStr, $inputStr = null) { - $descriptors = array( - 0 => array("pipe", "r"), - 1 => array("pipe", "w"), - 2 => array("pipe", "w"), - ); - $process = proc_open($command, $descriptors, $fd); - if (is_resource($process)) { - /* Write to input */ - if($inputStr !== null) { - fwrite($fd[0], $inputStr); - } - fclose($fd[0]); - /* Read stdout */ - $outputStr = stream_get_contents($fd[1]); - fclose($fd[1]); - /* Read stderr */ - $errorStr = stream_get_contents($fd[2]); - fclose($fd[2]); - /* Finish up */ - $retval = proc_close($process); - return $retval; - } else { - /* Method calling this should notice a non-zero exit and print an error */ - return -1; - } - } - - /** - * Copy a file. Separated out so that nothing is actually printed during test runs. - * - * @param string $from Source file - * @param string $to Destination file - * @return boolean True if copy was successful, false otherwise - */ - protected function runCopy($from, $to) { - return copy($from, $to); - } - - /** - * Write data to a file. Separated out so that nothing is actually printed during test runs. - * - * @param string $data Data to print - * @param string $to Destination file - * @return boolean True if write was successful, false otherwise - */ - protected function runWrite($data, $to) { - return file_put_contents($data, $to) !== false; - } - - public function write($data) { - $this -> buffer[] = $data; - } -} diff --git a/htdocs/includes/mike42/escpos-php/src/cache/Characters-DefaultCapabilityProfile.ser.gz b/htdocs/includes/mike42/escpos-php/src/cache/Characters-DefaultCapabilityProfile.ser.gz deleted file mode 100644 index 43ad39d229582af5ad7121088bf2c6287e067e11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12928 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

    AN>wkF3^lWB>v&YPaMdeJ# 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 diff --git a/htdocs/includes/mike42/escpos-php/src/cache/Characters-SimpleCapabilityProfile.ser.gz b/htdocs/includes/mike42/escpos-php/src/cache/Characters-SimpleCapabilityProfile.ser.gz deleted file mode 100644 index 288b7d3740782fbcc9d9a28d71a6ecc330683eb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1116 zcmV-i1f%;OiwFP!0000019jGCa}-Aq2H^j4zu=@ppj-W#6S@x+l>LD!S5XvI%G|-( zDBPZM&N)j+LdafhIRGb;P0kqyYz!D2xgGlLa@lWxQt7$b*`As1-br{d@8Etf?nM$G zCHCw~lRM>N;gO`CvM?<}uDCNAj@HmhwhZCfOE_CYw{>ZDVf! zrP{9H4RVQ(<`;%MzXIgRu7}KTVtJ#+Q=|sNQ26~KPXc$d7?qYbz8mBu+;Ah|(?)@0 zjDpP=pY|1FdXkS}l(WWSN%@7tjoDL1*Q(+dr+{3_TvGGPaqvGb_)ag9{9yNo70G}7 zmiW)zet+SINM-m}ZuJhT0Am8xfPR4*z@R`apjV&{FeFe97!f!O7#BzZCIr%eQGp|X z8G)mKX@Lx2Qs84it-vRMI)P(=v_J!3SfCM5FVF;76lex43uFQF0zP0}AO~0#XaQ^r zv;uMhZGcXJc7Xur(g7F{=mg*xy28J>Cp+nuAzMuXJ$Ox@KrdiQpbxMh&<|J>7y!%( z3<4Sjh7cK!e;9x{MgZ85QN*5U5E;V|9QQb2Ltp}cI&S!5oPtrl5OLD?)qd_=RPf-_xKK_0BA_#($uaPX@th1r_p{3XUpJ!MjeWREm7Ag5&!_BEvnp6uUIi7lt%62&P6e58UImqUL8VRPqDrgCB^Bi1w<^fP?^KZB zmsL=ES9G5-^Hr6M$TiLIl*n}zG}jv{cYw-2>5zioy zpY$0_`y7%+U-%i(V~>8(AxM}PDoCndAsHm_OBGD~3VXdG@LH$AIsb-t&kDTJfRUPS zF$A;xu0v3Re?Y3x&;P_j_(=YxseyR^#t^_i5qG&M4BDGK;D#4|jh0lzkjbXRFnB3hb^MN8s^XWjvL>zN7b6aWBu>k}&g diff --git a/htdocs/includes/mike42/escpos-php/src/cache/Characters-StarCapabilityProfile.ser.gz b/htdocs/includes/mike42/escpos-php/src/cache/Characters-StarCapabilityProfile.ser.gz deleted file mode 100644 index e0bb0e5fec5c59a4131ae1f2f4151d392f435b91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9416 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 $c) { - $code = ord($c); - if($code < 32 || $code > 126) { - $chars[$i] = "\\x" . bin2hex($c); - } - } - return implode($chars); + $chars = str_split($in); + foreach ($chars as $i => $c) { + $code = ord($c); + if ($code < 32 || $code > 126) { + $chars[$i] = "\\x" . bin2hex($c); + } + } + return implode($chars); } diff --git a/htdocs/includes/mike42/escpos-php/test/integration/ExampleTest.php b/htdocs/includes/mike42/escpos-php/test/integration/ExampleTest.php index 689891e2432..6ba8e23e59e 100644 --- a/htdocs/includes/mike42/escpos-php/test/integration/ExampleTest.php +++ b/htdocs/includes/mike42/escpos-php/test/integration/ExampleTest.php @@ -1,126 +1,187 @@ exampleDir = dirname(__FILE__) . "/../../example/"; - } - - public function testBitImage() { - $this -> requireGraphicsLibrary(); - $outp = $this -> runExample("bit-image.php"); - $this -> outpTest($outp, "bit-image.bin"); - } - - public function testCharacterEncodings() { - $outp = $this -> runExample("character-encodings.php"); - $this -> outpTest($outp, "character-encodings.bin"); - } - - public function testCharacterTables() { - $outp = $this -> runExample("character-tables.php"); - $this -> outpTest($outp, "character-tables.bin"); - } - - private function outpTest($outp, $fn) { - $file = dirname(__FILE__) . "/resources/output/".$fn; - if(!file_exists($file)) { - file_put_contents($file, $outp); - } - $this -> assertEquals($outp, file_get_contents($file)); - } - - public function testDemo() { - $this -> requireGraphicsLibrary(); - $outp = $this -> runExample("demo.php"); - $this -> outpTest($outp, "demo.bin"); - } - - public function testGraphics() { - $this -> requireGraphicsLibrary(); - $outp = $this -> runExample("graphics.php"); - $this -> outpTest($outp, "graphics.bin"); - } - - public function testReceiptWithLogo() { - $this -> requireGraphicsLibrary(); - $outp = $this -> runExample("receipt-with-logo.php"); - $this -> outpTest($outp, "receipt-with-logo.bin"); - } - - public function testQrCode() { - $outp = $this -> runExample("qr-code.php"); - $this -> outpTest($outp, "qr-code.bin"); - } +use Mike42\Escpos\EscposImage; - public function testBarcode() { - $outp = $this -> runExample("barcode.php"); - $this -> outpTest($outp, "barcode.bin"); - } - - public function testTextSize() { - $outp = $this -> runExample("text-size.php"); - $this -> outpTest($outp, "text-size.bin"); - } +class ExampleTest extends PHPUnit_Framework_TestCase +{ + /* Verify that the examples don't fizzle out with fatal errors */ + private $exampleDir; + + public function setup() + { + $this -> exampleDir = dirname(__FILE__) . "/../../example/"; + } + + /** + * @medium + */ + public function testBitImage() + { + $this->markTestSkipped('Not repeatable on Travis CI.'); + $this -> requireGraphicsLibrary(); + $outp = $this -> runExample("bit-image.php"); + $this -> outpTest($outp, "bit-image.bin"); + } + + /** + * @medium + */ + public function testCharacterEncodings() + { + $outp = $this -> runExample("character-encodings.php"); + $this -> outpTest($outp, "character-encodings.bin"); + } + + /** + * @medium + */ + public function testCharacterTables() + { + $outp = $this -> runExample("character-tables.php"); + $this -> outpTest($outp, "character-tables.bin"); + } + + private function outpTest($outp, $fn) + { + $file = dirname(__FILE__) . "/resources/output/".$fn; + if (!file_exists($file)) { + file_put_contents($file, $outp); + } + $this -> assertEquals($outp, file_get_contents($file)); + } + + /** + * @medium + */ + public function testDemo() + { + $this->markTestSkipped('Not repeatable on Travis CI.'); + $this -> requireGraphicsLibrary(); + $outp = $this -> runExample("demo.php"); + $this -> outpTest($outp, "demo.bin"); + } + + /** + * @medium + */ + public function testGraphics() + { + $this->markTestSkipped('Not repeatable on Travis CI.'); + $this -> requireGraphicsLibrary(); + $outp = $this -> runExample("graphics.php"); + $this -> outpTest($outp, "graphics.bin"); + } + + /** + * @medium + */ + public function testReceiptWithLogo() + { + $this->markTestSkipped('Not repeatable on Travis CI.'); + $this -> requireGraphicsLibrary(); + $outp = $this -> runExample("receipt-with-logo.php"); + $this -> outpTest($outp, "receipt-with-logo.bin"); + } + + /** + * @medium + */ + public function testQrCode() + { + $outp = $this -> runExample("qr-code.php"); + $this -> outpTest($outp, "qr-code.bin"); + } - /** - * @large - */ - public function testPrintFromPdf() { - if(!EscposImage::isImagickLoaded()) { - $this -> markTestSkipped("imagick plugin required for this test"); - } - $outp = $this -> runExample("print-from-pdf.php"); - $this -> outpTest(gzcompress($outp, 9), "print-from-pdf.bin.z"); // Compressing output because it's ~1MB - } + /** + * @medium + */ + public function testBarcode() + { + $outp = $this -> runExample("barcode.php"); + $this -> outpTest($outp, "barcode.bin"); + } + + /** + * @medium + */ + public function testTextSize() + { + $outp = $this -> runExample("text-size.php"); + $this -> outpTest($outp, "text-size.bin"); + } - public function testInterfaceEthernet() { - // Test attempts DNS lookup on some machine - $outp = $this -> runExample("interface/ethernet.php"); - $this -> outpTest($outp, "interface.bin"); - } - - public function testInterfaceLinuxUSB() { - $outp = $this -> runExample("interface/linux-usb.php"); - $this -> outpTest($outp, "interface.bin"); - } - - public function testInterfaceWindowsUSB() { - // Output varies between platforms, not checking. - $outp = $this -> runExample("interface/windows-usb.php"); - $this -> outpTest($outp, "interface.bin"); - } - - public function testInterfaceSMB() { - // Output varies between platforms, not checking. - $outp = $this -> runExample("interface/smb.php"); - $this -> outpTest($outp, "interface.bin"); - } - - public function testInterfaceWindowsLPT() { - // Output varies between platforms, not checking. - $outp = $this -> runExample("interface/windows-lpt.php"); - $this -> outpTest($outp, "interface.bin"); - } - - private function runExample($fn) { - // Change directory and check script - chdir($this -> exampleDir); - $this -> assertTrue(file_exists($fn), "Script $fn not found."); - // Run command and save output - ob_start(); - passthru("php " . escapeshellarg($fn), $retval); - $outp = ob_get_contents(); - ob_end_clean(); - // Check return value - $this -> assertEquals(0, $retval, "Example $fn exited with status $retval"); - return $outp; - } - - protected function requireGraphicsLibrary() { - if(!EscposImage::isGdLoaded() && !EscposImage::isImagickLoaded()) { - $this -> markTestSkipped("This test requires a graphics library."); - } - } + /** + * @medium + */ + public function testMarginsAndSpacing() + { + $outp = $this -> runExample("margins-and-spacing.php"); + $this -> outpTest($outp, "margins-and-spacing.bin"); + } + + /** + * @medium + */ + public function testPdf417Code() + { + $outp = $this -> runExample("pdf417-code.php"); + $this -> outpTest($outp, "pdf417-code.bin"); + } + + public function testInterfaceCups() + { + $outp = $this -> runSyntaxCheck("interface/cups.php"); + } + + public function testInterfaceEthernet() + { + $outp = $this -> runSyntaxCheck("interface/ethernet.php"); + } + + public function testInterfaceLinuxUSB() + { + $outp = $this -> runSyntaxCheck("interface/linux-usb.php"); + } + + public function testInterfaceWindowsUSB() + { + $outp = $this -> runSyntaxCheck("interface/windows-usb.php"); + } + + public function testInterfaceSMB() + { + $outp = $this -> runSyntaxCheck("interface/smb.php"); + } + + public function testInterfaceWindowsLPT() + { + $outp = $this -> runSyntaxCheck("interface/windows-lpt.php"); + } + + private function runSyntaxCheck($fn) + { + $this -> runExample($fn, true); + } + + private function runExample($fn, $syntaxCheck = false) + { + // Change directory and check script + chdir($this -> exampleDir); + $this -> assertTrue(file_exists($fn), "Script $fn not found."); + // Run command and save output + $php = "php" . ($syntaxCheck ? " -l" : ""); + ob_start(); + passthru($php . " " . escapeshellarg($fn), $retval); + $outp = ob_get_contents(); + ob_end_clean(); + // Check return value + $this -> assertEquals(0, $retval, "Example $fn exited with status $retval"); + return $outp; + } + + protected function requireGraphicsLibrary() + { + if (!EscposImage::isGdLoaded() && !EscposImage::isImagickLoaded()) { + $this -> markTestSkipped("This test requires a graphics library."); + } + } } diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/barcode.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/barcode.bin index 79a2daf803edde452d5e0e47aa7e2545bb108962..ae4070d70a02f0b74946bbc6011ef46379dac870 100644 GIT binary patch delta 341 zcmZ1`^jf4|+Cf^;z#}y?J)=Y+F)u|SDX~bQJTs*vgG*YG!6h{X8gI1BwcusWb)|sQ?oU2RTdu zXmdH-W{40_RXN;Zh>$T*h#6HQ&?)6`r$AKsm;%LEQI!GRQO<@cWDXQ!M->A4p&a4| QpciB_G=L7+$g0Q*07+<8IRF3v delta 15 WcmaDYvP_6o+Cer$W3v~dA}0VPTm$U@ diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/character-encodings.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/character-encodings.bin index 0a762c8c160e39da6be9fc7c587b76a53e73c74e..f93ea377722c34a852f80637b7ba278d7c916b7a 100644 GIT binary patch delta 233 zcmeyu+r>ZOp%P#3oRtgbEPpunfx_x}OBB|xS+{KM{AVj>D9oHaXVIEji=WPz%*+@p zC0)YMn380_oLxAdW)v y$3!5#_EjcCUIW7R&dkfuR4Chusx(9FZeE5$Nyd+4g_5064M5ZNHg~aPF#!PJ?O`JT delta 82 zcmV-Y0ImOu5A+R?;UWvY-t6Sw>YL#DAnxJkAolX~>GR^E>((IG-QMN$*yf+slLG-$ o8i8qUZy;A?ZewM0Y+-L8XlZ(HAZuxC8*~7(Z~+?wvmpg(0urz)YXATM diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/character-tables.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/character-tables.bin index f3fb990cea3c56a9631360b2d12cb0e5b64254c6..9979e46bdd51cec37960ec219a39c22204e2003b 100644 GIT binary patch delta 645 zcmaE7ztC=j1uJK9X+c4LQAujbWIt9}Bwiz{Y&cv_lS|r_LAvC>bP2b#D`QAvQckLZ zp`n$6f<|6`i2@d7JP2h*7|J%UU|YgsfJK)GT$hmnhOWuexbGpkuZu?xiMNkO4x53J z2m?(q4OHWm)4<{iIk+ZcpesV0!~ArObthk7T_-A!kO6ugCL<`iPF4XSgT=q!cs1D& zj@@i3qQQyHwa#!u%*-)eyIdC8!?#g*{Bl^m?+!Q695b>em&+j=xEh6bAG?9x2m`T% ar@K6|fz|Tz2tQBWATKY38rHI5j?4h{>C{>P literal 8174 zcmdT}Rdf?k5N#=TaJL*_3)C%}WF1NkjpY#0?C(h z45ESa7c5+~c*)Xb%U7&iwR+9kb?Y~5+_ZVi)@|E&?A*0`&)$7B&_Vhzhj=gwcace>RFz*0_>*o&=LuZ-FAn_8 zyq&8A!x+ev&DZTp0><9q6%(p+E(QF#JA7%tkPgq6r!s&cU6l`07BHlf@nOmVhIha9fTyV6?T6 zf^0nT0sapA!}aF*0)Nf^L~@ZqRsVh=e6D|S4On}V27_b0_`zt|hz;J&iumXmASyhK&6z-)(UBGZpkRgEKURs0#hI>I2 l1{m%IQ8-|@7erAEqjKxXWEf&yyxX3ve?UC!%Etz|`~{yY7?A(~ diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/interface.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/interface.bin deleted file mode 100644 index 729d4f4481b..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/interface.bin +++ /dev/null @@ -1,2 +0,0 @@ -@Hello World! -VA \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/margins-and-spacing.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/margins-and-spacing.bin new file mode 100644 index 0000000000000000000000000000000000000000..0b3a4676033f93f4b13ba388d573ae18975b5086 GIT binary patch literal 339 zcmY+>qf5_d!m*jAca;gz+ z*GGK~k72wOs)0k-hvyXagj|%Z06Ki{wLy_gEXtC}7G=d`hq7j3Y9!5QLrIQNO;Ix= zV<`+oUdmRK1~RwGP#gg6JBFdtukjo&G*1QjTllfkgS`Kr==9Np$SCFe88S*WyvvEo Hp7x736xCmM literal 0 HcmV?d00001 diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/pdf417-code.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/pdf417-code.bin new file mode 100644 index 0000000000000000000000000000000000000000..ab2d7c54958650ba4b50fa76d5fec1a8a69e3cb1 GIT binary patch literal 2366 zcmb_e&riZI6rO^K*};=Hf_dC#LQJ<|$>m#_`bf^&TXehrlZNgzkw)a92iehx6^aF-bc$J6Kn6Ry>G47N5-}tGWL(~;mjdZ zGUu5V@(uhTTaA%O>{m>b)NJj3yi-mYPf52T7GmKY>aH z5iTgs(2s+8kTHHxxKSw{X_3l9<@OgB6h(L-SHA21$*;6_C%Cb!cBS~&)$vUrHSudi ze_kIws2;mlAANx0LNSXak5P4Bd<)f9a#dx_a#ZlAVEP>bV5!c)ON10jo?KSXX!}Xo za1mM;jK9)6*5xkRSR*`04YC-lT$BcX+8BAbt`A+>`XDC{T)e$&NH80*hy_<$s9ARy zL($F-QvgPO4opqaMF`$bYSvj8iW+1wfKqDK$cCZ@$V05pCN(3fDYnNrPb8XL>I&3U zYX0{dm_Wdzxla2yUP?4=heEv}@XLo^tXZSU@(VO5f?5Lhh%_vM+M~P&=s%J%^9B3E z9-!C7NH6vV4N(nNgD8lUXHvtf&^>H)*ejkEW=v;?lHp9_rGP5-bDpfwn%!vTDwh$} Lc)f7DFL$kP%6Aqq literal 0 HcmV?d00001 diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/print-from-pdf.bin.z b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/print-from-pdf.bin.z deleted file mode 100644 index f89eb5d2115e388de90586ff30d80a47fc0ad083..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17081 zcmc$_bx>SSw=VpPL6G2*1Q-&W!9s8tAh`PsgA*WFaCZnU!C`Rs8QdL$2Y0vNFgSzj z&HJA7)pt*wy8oQIRd@fft5;XA-nF`WKWnY0yImI!TYYTF=Dq&hq(nHXjc}w)5+ zchk|1u<6fOhudQ`tm93Ef2QVFTXA)^D6T_(FaGFis^jFq-LO)q8x1l9Dw1qf|t!3u&OH+0+mQ!#Tw1jE>YMp)a$SS?y?i}4RavNayU{|R#>>hpWSb`S&%dAc=z#YLLHO%K zFElpKFb|dRuUuf>Sg<}!okp>}=%zw+I5maG`vfvUEgz814j|8)nI4%f^Nm_Szv>u+ zAXZ*mFP(9oun-#yp5|1@p_KKb@Hb!0fUc^8uQakqGDoAIq45`!FNj4ctb1?4TERcK zE!^$%l+hn)+3|k9ZT1Qgs;O$}r{4NgGX;P+IDjw0eTqv0s)rBOxuE&1aX3Z&@w1em z2~*TUpwv`9jeYc?dncEYTVHOyPOV`adb0TDjLI)2T!g#htbg-KQNYgU*H_4Q;C_@& zP}j<34uHJa_4AY%|5eha1QMeG;3xfzX(+b|kj;T>sua(2?n=JAb+pQ+r|^5QiPLCs zul^^ri!h;UzQx!DoKdi_e5QE`lHoHtl^gJ+5SeKP3V zgJh;k+#M?|aO*d+AL0=^iOr{GoOT70@L-OY>xKL1rzuElwug$DN~x>|z-#ctCoZkKO zX;hh%&7Qe*Zp$ny%A~b0jY($8p@Up82}8KH?))H?Ew4(Y%(YWp3BXdh<|bZ9ic0~v zYS=e@d$GIbuyQF%XemfJMolNdTK`pf)RXxaGOBJK@py1NFHIkjQ)$e931S&VyWowu zm_PX4mDp3YcBqdLd`P-rvhmmh>GQZc|9E!^}nvBXWsq4+>A09juynP0;+fKd!8H_qi z4X~EmV`x=ByxevWEx{oMUwbnIA%6p+0w zQ<5#+dyyC7n~CwR#?rm-LCnaZ+V!Hv)yjg}6Wwa-Ov1`=aE`eEOT9m{egpk2DZ|eD z#ETb^Y*XHDQ;)8Ovv(U9JgoL4;Y^ewN?e(;0zT*UCq*1}9C4dNItH3-(u^vyWJSh8 zTP~4sOcu~~_{PxY^{~!bik^nv;?~;TR`#kti=fUdU}B=nWh?vUT-`O+S&=YqRO`xh z5YxhbpvsiK$B?~oLc;B(Y94jIZ;}X3pov;Alqw|_r!*+Do8ETjsB7Wi9cU3c`{=lnaY91y{!ACOubcF6oJx+a$L^(jh8wTHctR5W zw)=Bk_m@aF75sSe#Jt7y$()pR_fJvHr(>R4I+0BG+N8CCsoFtXpyEmPqvad5J^J}Nmzu%lar%()E&05y;?GE&Xn$bbX zeTFn4;nTm@8%IFANmQmqQku{*YD&JoJ8Vxw<;Fx|!hs zfuzU~>sIM1iF>H*S*A7Detb96#zJhNGNs$1q_4ywFs3^a1@H8?r3*OrkW|}7uWp<>M7JT|OIHM$V4jS$qxa1Jy-NX}y zerii%sPAxY@%&Y^yjo%W(Sngi%kVhcH|k*P-cJ|5wOjzsj((%_IbD-%W!*64ceFJD zfSInIRzXijgP`>9M~1MNRolE+>GnBuKv@awB0$mT^7Mm$Kt*|n8tdTkz}D8{p8c&} zRoe1MVkx@%1}K??LeYr!hu1XiC?U?^Y?-e1%G?~oc35EPaOv>f<%1x|y8T15pJ0^M zMf_$gIAOq$PggM^!oJROf{jUKCx)Kx1-tiTQ}AX!G_JsC{7stfsS(XB%VH&+go~g+ zY<0Ce$s8sy6{C8^AKjdl7$?|d@8mN0xQB{KC&c|FsQc$eA{CQT6MBQ2c1`PW;L@-J z&sz%heS5DvQ2aMQXHb2%1E-j6-a3AyURV|QID>DUrT&)poJq00vjo%pO-2{iyI0gm zgVL7HZQ1cdT4|CCGshG0q~J-W<{t8877Zsrfk2SP{$*pvA8Vyh*Ddy9K;AgFb(nP< z{=xuGw#a6#{)^hUOY3|xW59?Bpz*5&g_ip=3QqtT5IV6|w&8wFTo1|-MeT&`8@%ZG zLNx4*T&pVU^U!~e!b5hH1)FS{?Esou?}rF2F3Ft)=>^VrOCCQ(QGFE&H7ldvbbpTD z)MFxGNm|ozP15e>@Ds;oGO(VG{D{tG-0PhT+2{h{2>jfI|01jHSGLrkL!MH`KhOUi z`&_>YjtIUoY`B=LWtVd*(obd#UvzsJ_+T~5HC5|S_HdRZ8RcSMXD!X4ycdgUb$$rS z+Zz?l#}?g(VoDFaLeZuU4iArR0+L!-jMxi*`+hQo?a<0dMS2d^(C0J=baB0WcEWV-QasL~jC$<^ zVC@=Vn*}xeYif)DQwO2$fV4BvK?BG8mj=$Mu4&;QV|?1;-q zO%L+yz>({fth=UA3%3#owbf{G*%xgbe&#!)gj>re8PM>}2LxJ$pv^qn^5i0ln!t&s>|rw_q0zl^ z4&Io6VdxHAkZ-DniQy=l$+~Z2ajT;gG+>SUX3YhpK!G9DOk>f~Um#)3@{KrwZp#D9 zkx?k|`iR}Z-m}A1N)HycZgLcF5Ew?6oap4?{PxXYM5<^=-X{Xd`I;iG&T%3;oY9iX z+#mZLABW4Q zs2UkT&yG`&A`O@3Y5aog`cT{$!SL2v5&AIIs6Q2B<@)%7>(QsEF!0iVgMDAu@rLGN z*9Hm{;FeJcP(6Ja7vOHFkO8&Diuxjmu#x=vT|~>LMj9z0&!h@gThfDdfH-$ZZ7uu6 zn0!SAv=lDfn$x%?Cf(F2Sv7XETPY~plq+^s??vtA!ROD` zkjY*f& zce9fhskwX~b0z0_HH`t`X1T0my*H-&G0eAZ2UP0ho1dZ#C@MgXf)dbeJKJ<^(~PtU z|6uvGuR(*KMi-ueWSo64XLFBT{j};A1-p?^f7}QDIx`$<$HO(7-Y)xvioDR_)KF~) zm+|FbXY+=Wx*0LGJfvBj&*RXc6VgFZX)171RuWTVVXA_*G`S$Z^x22nsVL%%PZW)Rb@U6^M+~Hc|O&^OvSGoQ( z50C6_%tzXdF^P(;0!vdDmjXKuI~xGV?CRhtlHx)$*O0@tALW^Gd%4}Oic1j5TJklg zL}k?G&sPEo&gl<%FL3*(-0a_9=#;vOdbkplNik2kCGe=x=$*c$yI?lei4x0GK+2?+ zf`BFfA6+-0utuUrwbNa8q^5?8Aj1znq^9bkhi$cKDN?0Ks@T>M-@|4EnCRyNjeR;ayWkFL_xQZL!MGdEBFilh3Bb zPmyVF7q`Qplq9RI%2R09r4iRRp`}hliaw@`@pS9ZL zY4ji7*LILj)qK`f>^kyXb2=r!_z&3v%PZ>_5uHoAhjiG7QFAbYTYlP9q#A2`p=Exmz zrmQT8`BRGlh0>^G?kD&b;@$uLw9&hGQA!`S2!_pLrj&`IYA($eDzNhbfNP&2fRVJXD61vtZm5$6gy-^LmUzx=ZJs zM*?u`or@sVMaW-eDYq>Vx+s&Yt8c)JtbK!Jw3Umg71F{phK1xlu$ig?g@WNd=mMmF ztkVCZ6U4r5&9+5cg0vC@8UPHx-cwz)Xqy@QO;&~Qc(w6Z_^fkggh90w2RPl7O{;(N@nBi0%h%gA2=8*%d->hw438E>$(Y;T zVpmzS=%Fdfbatgv8&!xsiOCjtz}so~BT`brh*8KF^J#M8;8SdM0>5xubm|7Q#N!bf z=g`$R6tMZ^nWQwzRTmtr<|~j}BST;O*D)64N^=)p6B9LNVrGgTd3`q?*4R2K7oQO3 zR9Ct+>K#9)=%h{Eo&=EmW}?@)ONP76rAMf2Mu5lC4~XzXB&8aBz8HzB3>`HTmI#Un zD$E|EKyHD3^F$rQxQAB_8G-Qx261jVpzMtgxBM`L7y~0^V+FH4H!jVc?By1J_ncS3 z?&PClvmCm@#p+onMyBWY!xhrYhV{j?1WBcH!o@ihUK8boBAFlcWd=;_QeW z8dSvvvvQOl?)oX}`Ax|V#`htI*1yq-XpdOExd$#;h_`c)v#yTP4|l_VQ6;ZlX+GEq zI)YOSk5jENCOW&cN4o3w0^)egQ?RwEC?Y0&k+w-5U#&+67ivi_!0#Yi^leoBJ+7Y6Ojdsp`#jjlF*4jiH`Bt!@J3m;T4nLJM> zoKm7VN(5Od`U?>spJF6~s>=b0!BU(*?008UU=n8pcuE^eHbJvpBVhq>KazLwKWj^lC z@#3kBOk#Md=cD!dCG?HgV1w>RkCtgVjyBLK^I!@t<VLfR2W$2kP}V$m0w!G;df>@ZA|p0!YgJ{Hy#@?^{72Aecds5=5y> z-*MsX`k5wa&wt0PCl~Y{Fy17vw*<>rzE+Rg+M5L28eB-f|BsOTKS;^{$y-R7w>1$e zw^EqH@cNBBpP;MjF(I4bYYes4rHv#P;jq7sG2J1q)%E3-LL;D!el*WaYl?$$ztt@R zdlOpJw_6LMmnKqEQaus6+xWHk(?xJe6jA6wgu0AGzgibr`|>xO@)vY7q1Cd{8C6!w z*!`e?8h*b0u`JlS9KHfNE7+dSv}e0(_WnNa+&~Z}r`1>=gdX?E`E?T?^)mj^m4@Qk zzpdi5KY%BqMW11NUH|`FZ1BZ@v!2r4)$4c*)4pqp#c6hx{ktcHNU5M-c{!l02~>lk zANCj<2X}eCMV=NsTx+?0-w}^r&~HeQvSIKa!Q3LQUGd*OyX=PRbZDeVIIpGiR&6?9oHxSw0-+cnmgR3Q##Klw$^<#`t1G>6Ae&Y)!;~VGpN&u z)&W#k#=OmS_B`}k{FUKxk0blHYoq6O*f}K<)_4K>AF7js&ah)PvqW-ulQ314WZ!+w z_$sRz4i-F@Bb6p#dfu2pGvNMd%bn^CVEne|2ey5zJCR~8Ktve>vj9vqzKb>O1cB}* z+B$yBea+ikk>d`??x)7SaRHh10nF>A@RXC&;&n}Mf|0r|^#RmrTop}BZSV&_fVc7YDO#&7*!HGPK%e^MGl;rY8c`oEkl zlA^Tq*0(pOvkBg^>{!UyITD_GyRG5n&BR)0l<;jyJ|Gy&M%U9qF(m|dG&EHmB&0L9 z5bbzdSejO6VPhp=BWtxp2Ps$xcq#!EDFI3quD=OH>9&6`k1hkeDM`N^KekEU^nz4N#72n&k+s0h{X2w*i%mWvC8ttxB zjDhi}#@}8`)Iw{%KBM}2m|nJkuv$fQ9c9AqQt~y>#zEbgG5i1}cP7X}G(*E~TBjlW zOpP~9HC&8;7!<(mB>PQ8Q=)f#3WL`A+LTjOI)>Rw2HH1!60S(KFg}DTo#9Z?9nIRo z*HJ=yH?Tmsnda;NK9spBBfKhzcw1#=(N%*mbJ|f<5Tq2(p!z8hJhQ70QbOavy##3@ z*P2f^RS!XA9&QQyf;frTWD?CC8(_h;w8~)9+7UvX!YvVf@e6=;t2zKY*Hx{0-2Z9R zhTHwKK!%w`RHi%jy4&t$*!Qx&`i+kf86Dh!4%8G9_ack@bXZ*w?ydx;_AgyYypQbB zUR3P237c^y=ZkB%5g5^RwBt*xKl};ZDG6mUvS@AzKhk5+Z~fYvIh`L-GVhE&N#bKb^ZTqR7VCVMFO8~@gN+gG zXuK=GqAik=B5H|#)HM^-(dH)2-34+V&5))9ok8C)G5@q7El0lopTO7uEu9~k(0}6~ z_g%mCf8yYfHx6Dv036H)Xy4D~en#tY`ua8F>;E$d=8D7_T!EEf73WE$~yEV&N^lOP7bK zszYTZor!@~E>O~W;WO%}B>JrLKI*;y7^AEhBc)c(AMvJ<4;z#BeFeLIx8Ve8XlQpdWB?jQs{aJ0l#`@DS3;dt{*(tW30!KZ!N>ew8WR#iBRn>kLoNs9`^f5 z8SS+K>r6{iW9u*`eZWt0pS`fl+rAt7H-!Y1S-oZYja4$#kIy1pzq@q9CdCr_%5*fp zMp859Scm+XMm-6bFOaRWjS#gpJp>9r3Rm&CNPx$XK>{q)$VjIehpbHJZagxV{UZ%U ztBtQOG;At(>?=a9uj|Y6A8#U78`;^t1+Kc)Sg10*kG7QFcp^C_CrvXw+z*t*obah( zAxc6|&~^^n%fV5FKC|w2vhVn(Qw~xiZ9-nxL+3;h*O}UUBT>Q{B*Hs9K1A=II($H* z106f|WPD;z_w-%USE_uNc0mxctABb-^_%TBh%fH@)skfcb_It%ZUUCpyfXW)YoW@V z*T)=IGff&gedP}`l8!Z20l2L}`fAf!FX5$Q3%;?ldd;V9T9M;6rU<56>D(?aHogZ` z?(sS|K5V*_D!)poQ~P)&39qkuw+aW`wba4pNqz@Mb z>fwgotox$4i>2;R4JveTb{@a;_Kru4g=!?Y{p63-M(0DhkI&^~<4J@w*G+vZy8d0$ zqsNN>lWBugB}<>=()Wv3psP6!)Ap+ep0?|5)8a)5hp4Ua>lTV&>&Cvv`sybeDE>~= z{A2RXJaILzMPhkfm@9H%wtGg3l1)$m>2Wv5*1pQWK9M~L z)q78I;dOi(g zNV$)}<> zDN^jL;U1~2Jl0LVwewU#QE_u~CzPvfo&+T7dmpgTJYCfvj-5)NdP%JV@G=z(C1hgn zy?uT~xUMH>Q=58U4Domo{#-bJ`sAKq?dART3*O7j(Vf=BC}EEC(NT~yD*e~%h-=jP z{Ibo_u`q|@)=*4kc|?THL;+2P8A|9KyHH}<&)9?G3G zt$-&j?fT%$;nJ52l~lvw`bEDxG?fRqKMqxx#D1^EFj z@;2n5z1jJ1SoP#j=!oYHM+?TZC>S=cPB-dY@@wd3DI7O^DGI zI?mHbb^G~KIv=<5)E5Vm|A0wZz9Lr??l=0aLP%Z7+f}{ zuZ|z9ufqDgug3@8-%ZVT@Q}8%Uk>-cY#s+-KCYV)g?iq%2dPHoPXj!UiPXe>$LT#! z#;0V2t1WG3!%tz7tV>{=b;3*F$cQR^r~MhV{nx1p^qRB)f)@ZN)L zKDe`CpFrbZ@V4QC#P`BjWz5 z{wcNeY;mjnuu^p{+WR;zQ#HQ}`yYj&?=>*u=uznWMKFSbth8w`O7ZYLKX#MV)tK@Q z{!RX3Z*0pW^$t}3p|pbg$%@_f?s!P}X%2TKJ?$a|KE6{>D5WRFdASXvw$W?*e6gL{ zCd_v}Dw*l2)9Se;r}zG?*Q3W|u1^n@=hGGw=eqvw<7Pyk)YIjBOgWfZQOL#YwqgIR zj%S>t=loT~UY}IYcnnW5epgJp>-FJ8xuHFxZY+|u~tJs zOzf_-9e=B^TGw?tJ!0LV`oYx2erqI~IZ~+a4S3-=W?7~>F67vYiajG;H)XW!>B2|r z*24#dI3YR|j+fnNOs5XZH9C&)-sJF!^6<1x@i25hh!~sS!BJ9bx2FxWsW41 zAJ%@FOX)>FYjP-mbE)mq^i4w zkV=uI)gDP$IsTM)f1-talwd!Z7G)5!CKYvAcQJ&$FrBoKkBSUeRC*Xl%($a(f9yTA z@$@>_tF&pmDbIYob}%i*C!187czvON-{JAM5E59a6xoU@f4rcNIu-|UJ)HkO-OJ`_ z=lmq-93lbYx~%1)^g)o=A$^7-5}%keJ`MWBG}qU99-#MTrc*w3Jl#-+?dU(~6tn88 z^_3;mXsNL@R1MUT3;1>4POTzrY9;Y@P|g%K%?-;(gXvP9XT3j9ui4Or zDRufEhh0UnOZX{U?>9~?Zy$Uhf8lGxwC(Xcd#_R{0w8>T{&ty_jk59n?EK^EU1D)_ zmz0qA_Nur2pU%0SKdbKePmb4TgB%-eSM911yl1BzKDY75=W|nJFZ8;Padf?J&TEbz z{;rp$L&Iy~95rFS{7sugpDMe9ZQXWVp^LxU#4VG4HFKdOoUC43YSBeqzW?1#Jit14{Ohcpic@#*MEwI`5^N5k6rN(i7ulyk2|AQ z_mz5X?H7!B_N-cBZ%`Q5O^QEVSQlCoEOz~u?WvC(Z}A@;{L`Qrt7$obpmDs7;i2gk zm#l2+l_8w6pCQm5woI*SyKfsdZJ9$Q%ap4OI*oiNuRF-vH!F&8-P^M{2R2H|yNN%^ z<>a^YMn7%ZJTJ#4jg%<)Bal=8pC}3PCT}aZg^0I>_^NqA>lm}AF&v4b?)a0OhPH(- zu6xe?k2h^bE${z0+wplFk6L>^EmJ-|Ha}U2hMT=9{`Nf+MpB%LI9H>}Ic(m##XAkX zKU7NbkPO$mDeq%Fes{VFE4&JIbzcn;e?-rJ!X9S$FDv1{2*1#KL83Elvne_YS6Xo$ zUgccxmi`v9g>)?ZE?Z~1gDez&_)pyL(e?S{bQ48lJ?8pWgGwm=-Nz59v;uF?9q;q~ zFI1JD=zB0+E<2wpj|-+Z&(aZ|n;75JS(zPtxQiPCh2WmLi1)k=nD_>4#FA+jdz0cG?R;CT2N^F=4VWSKGyVv}Jkb)`bi3Vr; zWxljrZ3r>C-4?gmn|!Ja*=!)NLky@Md(D1Z9Q9V7t4K%6vk({|H%?4r3x*9d05Mog zPKJ;Oa?$e<2wmb#G!<(Nn8i6))r!^pj3mwUS2|rY~|wXIlAP z-VsE!wC{`B*JZ2SnG2{zjaT9fS>5Q>&9g<_zqo-);?joh&GZBIJX z8D}ytf${~U6}ROsZ)o&?JC&^;nVNi7;hCq0P80GL89xt%aK@?FKkLEsD|g9u7gJ_S zKL=~LMVhe5=e&g{Y8+*^2JPz>#ri2KVkTXZ6(L_`=S*NIoXHZ!jn+bBtRQrdnE0$T z3ozqyk!({7?bjKbBDi`nuph@MH-~Kl4*UY4%tx$t(-=<62IAy&%G16cuu&#nP-&fl z$>sxRY@`ikehs|z@~`P7aKSQ+M~c>F_1(8D{;l`DBzg^jDGwcnyrt@cLUi8!J+Poz z*YjCQz>JiFv9iK|Ys$HrNHNi2rn+X;7V^h3IDnpekRfe^v^*#=0^Pi{K#L(2qxc}? zoRmVBStitSexVhY`*L|N)q17YO_#H($#{MwPu_<^MJK^tb8$tf2UQBz6kFxov2xQG zQkiaHrmdd2?*L;3jWhyY6RpAe@NrSx!7O&hIZl16WkxmM zX{H_Fy+n0aL^2}&*Ur*44ny3W^~0M}7n`3q==nw_7% zE$lrVJ25m!W`I-<4ddl}H2eL6yNnug8}Qq>G*sZ?cj z-XJ479j`@7S-6x9GyqFgdNy+5M_^G1u_NS&M91hUqtHTWPZFju4L0`EaF)`G?PF7g zNFU^ATkypZYB$zz4?uSYigjY>T&=D}R|=liV;fn>bW1L8pO+m8sk>CH5!6TTWg=Bq z!M)1u;NRw22?huESOtiSciYa7Kni)to%9J(r8e^MnNtb1v$71{Cm4_BxPGPPxzaWtsS^-%%uH6OrXKA@ zT7D0Rd`V&Op@B$#{gaEBd;5>RH>bP#iV#s6uH6iqNag7)`}C`b5=w6h^hP2fviwo3 zV1CG{C`}hjNds`9kBa|T?I}eL0~3;6^d<93UB?Ac(+gh8H-XK=5n#yh#Pkt@AOnd; zf+ZiwuX_kWAm~)W;bZ#60r2RE7uN8lxUb7_$vF%`#O+|1Y*)A1+6aV^wO^64NC=_o z_zj*^MjvPdtb5g{2uTCTR5zlbDe7d}?T{6H6c!NZh6%!czdFaU@Gu{&*jRU|D-ZhV zmOjj*yp>jKKAL;RWj@npJKA8Ax*XX;1hWVkow+^MEe6-F=?K>=tHIHg%}XI_%LqgM zS=Xs-XGgVtb>bDTDUm6Ix8DCiX7W4)1R7YXBAJ%ycdy5zx?jMV7v_d?4fq#Gog&@n z=R}*BV0V-#zEq~{&$1sh6XjRd$(!(IHkX8eWz2krjqZL+7SRqk`s)K)nppc)wDT?d z(_K9evc%bk9ikU%ErQdMGR!D&KK)PyEgwi=Rb!@W(W9tf$?NwY5*=cw8f+D2T{sws zJ|iY@6d*ToxY_DC@2;@|C6<^E{O;41gQ>qb$3RkdwCKzTz>%A^w_JPF1GeT2SQNz` z2ts6l&8E5o>YX@HlDYXLepr&WqSA*OEq9ziQ)70Y)pg5)Ff+65gm_ky!-``2Zh}$8 zoP^;D76H}JQsyS*@^!Za43jp?k{nUqhPNEANo^rNr5R&sB3~|f^r7lB40l|)TuK+I zbdN1XaA)fe%cGQG?#Yk8(WJ_ljtx>sz+I4cG<;6&)75eIScgxuAxmQ}vr-#AW(aQLp5k?+668 zj~48_qETzwmWjy)N96XB0G-NnpOu1}3vf@S|D+)HfRgFeNAd$#oKNr)h|bE4n>NYy zJ-@zms)4z7W)yYgus{v{&7o);i2Wxyyy9DrWq<2^mI`gOE79m!@UAiq@#j|rGL>=9 za%CL-Sj!ltX@Y#VRi}JnDO7NBY2SbGOBCHdIP;f;MWqR(s{nyHn46B@l^aLExsL4c z4+ft?{Sy^U0Y-^*XetA0jBJ&mj}gG|>5^jp&?HPkuLwNdKd~XXH!5#ibl_pE23`WS9cld{ zLK-v&H{^zW`G6?Qc}gtCEclxR#4^n1t?R&Ry%-D8>Y~J7$R;?aCM3IiRIP7YocVt?fqcmvZWGH`K`h&J2{EC0u2`8 zRmm+ExqLenwT(63p5d27WmagRpX@QMa0SoUM0*-AR_5$^e*_U2M)S}0H>TGA)` z?TVA%-Y>2%bFg~iRv#cL27F~HFWN1;s_;Jg*onkXCxyH>7FMz{77G=*ze0_ zNFrk{K|6a^lQ))@#Y`d2MWjiyqi9j%gO{)QYVx293_pT!8o%O5qWjeI1uQX1N^wtL zNd>}0e1?PuLUQ;Ic%MUha7!j)3|~@_gqqCRz2x`P->h%L;4eM|~-(l4=M?2F_yBMlqm*a{tPHoMDC$6H;9yqLnAi6lGs z9$Z=Y`ZTVZe_Mc{;Q5jKpS%R6$@XPL^d-{AT1&uR=a`q*{Ow~-P_DJ-vRbosY@SkO zW_AitJ(b`?&bGcY_<-@rdKw%IEYsuq(ZCG^s~wK}mK_J-)-=4=%$yJapI!j7C3f_L ztx$n3qM^rBeC8@Z8`4swE46mN)Gz`8iz^Q4{p4id>Km#-1aUK z8|mAs7#(CZNk%T8{v?RX;>Y<(qRsZc(Pt+8a;s{<5OCxhn5b^%+eVf);H~F{Wm|`*DYD^Dc zjb0(YJR}7E@=DKRuJw=&hc4#3yfO4OTg6W-|Ma4Oad%iZ7|MhwsSB2EI!5H7K{VN2 zi*pE^5L${&2yt~b4&r9TN(s2mi)Mcjg&rx+o)f5CpgcnBQ;VuylVTANZ&@sVs(4Q1 zy^h-7EENKNfheYGh7`=G!b+iUR3Y|7IcJRg9T^C7tP!&&4VBWs??6QkL1KZxuh=O` zx@A8qW5u#X2&lcG5-DH<&OYI}5PgO!fww1Qgt$MC6)pGD5*lpTuAEQ5hdTrvTkUo^ z*tumhw>hcA*(e6IGbKbsB%f7Pjw@KaUEEo*(#<+o;+hct7i68BYD5W<4h^u)l--fn zExI0VlM&RaSIW?CZO9rE08M|nWIN|!HZm>^wut^(#_~|N6D&re+!tT;>mshLA@_gR z=h|YLU?`E)%ue5Giul$21VPGhvcbm>J9LIu(KX~>Q7^?O6+NMCg~M{&p2deLR7e8G zJPfPod0%a}E%FqF7^3FzL-7H@KC!uvS0l@9?->cfWryr23{6+(5UX_ekuA3 z^%3e2vGI@b; zSK0xWyp&wT8XXMbQWORS+d;WxAhCC7TL_?KijL;d7h+8mxPuEyTebf%oAkXv9r(?D zL7pA~mVntq4rZSHhDiLKh_xE&U<6U3I9P&%)hz=UgoI47e@O~^y;6$#iWXP{&5!8- zpF_{6Amn9;mI1sIgKv^G13G@psWx+nCL8*LLk#EDXPcICO&sr{a!VIy%gnpnQ1gq& z1M|&_&t+VKRn|3i2Np@g{yL&aB7t9w?9ShH57o%-44{<(|2Sa!YPDyty^NXFt+@2j zom=4JQAAK{Uk;7DbEvgv77_8tZ0zw(m+|vOgRPWcPE&H2O_PxT+0G8j-_J`ytjt`t z(YQvLix8J>O`3&>fx(kU#IlE*&ZV|xl>vKtJ^r>j&zrc_rRc=kUk8?~W|hgWQUnLL zwi_;P)Oy1nURk3O%*NXSsc*@6XzEF1g6F<<{Wc6w2peRupnmc3iaM?{tWsi0=AJh^ z9I`odi0lFO3{kHT=JA{le^CRwutI-}rEMpRq4P;3k$O zhb9320(oxE&!1C{&pjVqP!txX&Y18}Av#H9VmdgV?mCxF5KEIpWcL2^F7=^y4OsI6 zkv8))Oo2O`hDFIZDb4CnML#%4tsJN(!5HgYgjiDSp(B$_(14pwOc~{Pcm-$!!Q~Sn z9=`wN087*VrS}a1T;Su64x2PvQFKFaHEn#|a<2~Cx(fqV6^7})sUrH?%Ef=y=XmcU z*b9CJ?Xj>l5t&fiqYGu;jmb0llQb_HC~IKe8H0IQ-B?e+VEJ=(p8F=1baK$d)w?0d zX>Q1`MR3$cf2$kYe&MkFtf#aGQmr{8|4palP$cq;6d9O7&J7Y-U1=yA;1 zflJM+8=r=;4or9@e|fUyofV(MyKc)|u5P0X!lq%i|*=smy9N?RoBxJ_?dECUQic{1>7XX_|8hK zI+yN;Ei(v_C0;1KO)Ipw`S6gKA^T?$fi|usF>R=Kl12b0ul;gR7bFjJ&-l=iYnWN2 z42fw4V}^opxjt}-Lt5(2b0}|^fbkCcq@vHDwAvo)_`gZk@Ga2sHQ@7Cc;r^P=u;<3TD!Ks`oEm00=m=kB$# z=udte&!XK8ID?NcMCa+77x>gGriGf#OK)H~y?OFZTaIF6*`WHLbuZ;NrGo5liGMe) zKxArq6_*Jw##Lo3EJ?oTgR{A~v9j2J#>0ZEE9ekJPMFz)+C|zwyrvDFR&E8hDDPun zsgG4>ux?Lk^x}UZkpHKGxBK}mK80t$N7kxT13)->W^7I=)LXdA*j>$7ciQM&do5rE z+@$B_|DcRPOpJuoW(&mjQjY*HO5EEkWE}w*;_$opDgV+-ITcXe*>5RG!|VWF4<^K* zB&%ZuOk0!t9%-i=8aQ3C2bXjQzoJU;15JaYfCM5C*i11H2@jdrFWgjyF#cF_hnUmi zEdAD)kk|Zd99N$Pfc$=Vne5$xipm2{^AMwFvg7>A$X}zBeHrfN|1kc|c{YSq3^Ds& zJ&pg;1k7Olw;}j7%B6}TBrM&yuF`9tq7t=okF^mPSI9)*PCBD^r$82j5FLo`W;;q^ zTrhQ>h#@t%!M01p!v4OGmFmYS^)10@WK|W4J|D5pna2Y^U$7DQ7A$7J;7SjAH>b0M zwb#g-LW-)RW|>nY?=f|7s0{dKX|>=jcd30Zuwic05fim#MT5?5)Bk3l`)9Dp=NO_; z!ybIexMIvi%of=M=}2bAr4+-jJ#UBF0TVsSG!*NqXRP-{k{w9i0^DYf>V_f>V7Cx3y_N$1anoDH2`z>-khoNW6;TP=k7k2 zf`H1u(lC^d+W;7Y@Z@tsdcn8v*J8yn3MvM`1J=Za)8KVcQbedOFn!X=jYDPt+_O`R zaJ>#@(1V2DylNJKeFZk=hXw8?J-QX-i)C!svl21=I!HfdFoKL%{*o zf0lvP_21=H<`WEnnZ*PlU$_oZC(RrcU{3W}1n?qBmtr9)L+|$lM!-un^HzdZo4`p; zPhxtgt@~t5=UzQarA7;XI63^QP4%$>_&w{~NYB>X%TBrkq&6=pN6JJq?q*mHiA5HPt=>*1No+qTTq1hw-5XSc!87TSJUUXiLCGvi!; za>f!rmVMn;NwA3ot}JChqE}_Yf+KgWpHGpc9?EltugWA3155QJEdGp}$`dV=Y9Y{2 zT7AGAP6QedsPB(>0N*tUMligg_<@jJ+yjtn(1O7YBGX8PGdYsOcW=F!B0J?A=&A^5 zImpAP`7DM9A4f-*q0vB38lR-0(vtcDEU7#CW6@NPIWAFMrWe{QfI~Syy?bYgTF|BdgI@ zNO%{KQTWc!7{3$a5Nuu71zBQ#`IR zeWxsQ4QvFiG>lu$^O22v(?hTxYsoMi=Z5^n=x%E;khJX$;*j*j=oWXM9f5+D@IvYMg1cOeMO)34Ta4h0~E#!X4UbB~w baI$Cav;BIBA!wfEw|@W6|LqUE=-dSWqat^g diff --git a/htdocs/includes/mike42/escpos-php/test/phpunit.xml b/htdocs/includes/mike42/escpos-php/test/phpunit.xml deleted file mode 100644 index f9a6579cf45..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/phpunit.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - unit - - - integration - - - \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/test/unit/AbstractCapabilityProfileTest.php b/htdocs/includes/mike42/escpos-php/test/unit/AbstractCapabilityProfileTest.php deleted file mode 100644 index b3e72452a9f..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/AbstractCapabilityProfileTest.php +++ /dev/null @@ -1,69 +0,0 @@ - profiles = array('DefaultCapabilityProfile', 'EposTepCapabilityProfile', 'SimpleCapabilityProfile', 'StarCapabilityProfile', 'P822DCapabilityProfile'); - $this -> checklist = array(); - foreach($this -> profiles as $profile) { - $this-> checklist[] = $profile::getInstance(); - } - } - - function testSupportedCodePages() { - foreach($this -> checklist as $obj) { - $check = $obj -> getSupportedCodePages(); - $this -> assertTrue(is_array($check) && isset($check[0]) && $check[0] == 'CP437'); - $custom = $obj -> getCustomCodePages(); - foreach($check as $num => $page) { - $this -> assertTrue(is_numeric($num) && ($page === false || is_string($page))); - if($page === false || strpos($page, ":") === false) { - continue; - } - $part = explode(":", $page); - if(!array_shift($part) == "custom") { - continue; - } - $this -> assertTrue(isset($custom[implode(":", $part)])); - } - } - } - - function testCustomCodePages() { - foreach($this -> checklist as $obj) { - $check = $obj -> getCustomCodePages(); - $this -> assertTrue(is_array($check)); - foreach($check as $name => $customMap) { - $this -> assertTrue(is_string($name)); - $this -> assertTrue(is_string($customMap) && mb_strlen($customMap, 'UTF-8') == 128); - } - } - } - - function testSupportsBitImage() { - foreach($this -> checklist as $obj) { - $check = $obj -> getSupportsBitImage(); - $this -> assertTrue(is_bool($check)); - } - } - - function testSupportsGraphics() { - foreach($this -> checklist as $obj) { - $check = $obj -> getSupportsGraphics(); - $this -> assertTrue(is_bool($check)); - } - } - - function testSupportsQrCode() { - foreach($this -> checklist as $obj) { - $check = $obj -> getSupportsQrCode(); - $this -> assertTrue(is_bool($check)); - } - } -} -?> \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/test/unit/AuresCustomerDisplayTest.php b/htdocs/includes/mike42/escpos-php/test/unit/AuresCustomerDisplayTest.php new file mode 100644 index 00000000000..c0f803afa97 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/test/unit/AuresCustomerDisplayTest.php @@ -0,0 +1,76 @@ + outputConnector = new DummyPrintConnector(); + $profile = CapabilityProfile::load('OCD-300'); + $this -> printer = new AuresCustomerDisplay($this -> outputConnector, $profile); + } + + protected function checkOutput($expected = null) + { + /* Check those output strings */ + $outp = $this -> outputConnector -> getData(); + if ($expected === null) { + echo "\nOutput was:\n\"" . friendlyBinary($outp) . "\"\n"; + } + $this -> assertEquals($expected, $outp); + } + + protected function tearDown() + { + $this -> outputConnector -> finalize(); + } + + public function testInitializeOutput() + { + $this -> checkOutput("\x02\x05C1\x03\x1b@\x1bt\x00\x1f\x02"); + } + + public function testselectTextScrollMode() { + $this -> outputConnector -> clear(); + $this -> printer -> selectTextScrollMode(AuresCustomerDisplay::TEXT_OVERWRITE); + $this -> checkOutput("\x1f\x01"); + } + + public function testClear() { + $this -> outputConnector -> clear(); + $this -> printer -> clear(); + $this -> checkOutput("\x0c"); + } + + public function testShowFirmwareVersion() { + $this -> outputConnector -> clear(); + $this -> printer -> showFirmwareVersion(); + $this -> checkOutput("\x02\x05V\x01\x03"); + } + + public function testSelfTest() { + $this -> outputConnector -> clear(); + $this -> printer -> selfTest(); + $this -> checkOutput("\x02\x05D\x08\x03"); + } + + public function testShowLogo() { + $this -> outputConnector -> clear(); + $this -> printer -> showLogo(); + $this -> checkOutput("\x02\xfcU\xaaU\xaa"); + } + + public function testTest() { + $this -> outputConnector -> clear(); + // Handling of line-endings differs to regular printers, need to use \r\n + $this -> printer -> text("Hello\nWorld\n"); + $this -> checkOutput("Hello\x0d\x0aWorld\x0d\x0a"); + } +} \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/test/unit/CapabilityProfileTest.php b/htdocs/includes/mike42/escpos-php/test/unit/CapabilityProfileTest.php new file mode 100644 index 00000000000..923811e7042 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/test/unit/CapabilityProfileTest.php @@ -0,0 +1,59 @@ +assertFalse(array_search('simple', $names) === false); + $this->assertFalse(array_search('default', $names) === false); + $this->assertTrue(array_search('lalalalala', $names) === false); + } + + public function testLoadDefault() + { + // Just load the default profile and check it out + $profile = CapabilityProfile::load('default'); + $this->assertEquals("default", $profile->getId()); + $this->assertEquals("Default", $profile->getName()); + $this->assertTrue($profile->getSupportsBarcodeB()); + $this->assertTrue($profile->getSupportsBitImageRaster()); + $this->assertTrue($profile->getSupportsGraphics()); + $this->assertTrue($profile->getSupportsQrCode()); + $this->assertTrue($profile->getSupportsPdf417Code()); + $this->assertFalse($profile->getSupportsStarCommands()); + $this->assertArrayHasKey('0', $profile->getCodePages()); + } + + public function testCodePageCacheKey() + { + $default = CapabilityProfile::load('default'); + $simple = CapabilityProfile::load('simple'); + $this->assertNotEquals($default->getCodePageCacheKey(), $simple->getCodePageCacheKey()); + } + + public function testBadProfileNameSuggestion() + { + $this->setExpectedException('\InvalidArgumentException', 'simple'); + $profile = CapabilityProfile::load('simpel'); + } + + public function testBadFeatureNameSuggestion() + { + $this->setExpectedException('\InvalidArgumentException', 'graphics'); + $profile = CapabilityProfile::load('default'); + $profile->getFeature('graphicx'); + } + + public function testSuggestions() + { + $input = "orangee"; + $choices = array("apple", "orange", "pear"); + $suggestions = CapabilityProfile::suggestNearest($input, $choices, 1); + $this->assertEquals(1, count($suggestions)); + $this->assertEquals("orange", $suggestions[0]); + } +} \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/test/unit/CodePageTest.php b/htdocs/includes/mike42/escpos-php/test/unit/CodePageTest.php new file mode 100644 index 00000000000..0e7b661f94d --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/test/unit/CodePageTest.php @@ -0,0 +1,63 @@ +markTestSkipped("Requires iconv"); + } + } + + public function testDataIconv() + { + // Set up CP437 + $this->requiresIconv(); + $cp = new CodePage("CP437", array( + "name" => "CP437", + "iconv" => "CP437" + )); + $this->assertTrue($cp->isEncodable()); + $this->assertEquals($cp->getIconv(), "CP437"); + $this->assertEquals($cp->getName(), "CP437"); + $this->assertEquals($cp->getId(), "CP437"); + $this->assertEquals($cp->getNotes(), null); + // Get data and see if it's right + $data = $cp->getData(); + $expected = "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "; + $this->assertEquals($expected, $data); + } + + public function testDataIconvBogus() + { + // No errors raised, you just get an empty list of supported characters if you try to compute a fake code page + $this->requiresIconv(); + $cp = new CodePage("foo", array( + "name" => "foo", + "iconv" => "foo" + )); + $this->assertTrue($cp->isEncodable()); + $this->assertEquals($cp->getIconv(), "foo"); + $this->assertEquals($cp->getName(), "foo"); + $this->assertEquals($cp->getId(), "foo"); + $this->assertEquals($cp->getNotes(), null); + $data = $cp->getData(); + $expected = str_repeat(" ", 128); + $this->assertEquals($expected, $data); + // Do this twice (caching behaviour) + $data = $cp->getData(); + $this->assertEquals($expected, $data); + } + + public function testDataCannotEncode() + { + $this->setExpectedException('\InvalidArgumentException'); + $cp = new CodePage("foo", array( + "name" => "foo" + )); + $this->assertFalse($cp->isEncodable()); + $cp->getData(); + } +} \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/test/unit/CupsPrintConnectorTest.php b/htdocs/includes/mike42/escpos-php/test/unit/CupsPrintConnectorTest.php new file mode 100644 index 00000000000..41499ee4b27 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/test/unit/CupsPrintConnectorTest.php @@ -0,0 +1,36 @@ +getMockConnector("FooPrinter", array("FooPrinter")); + $connector->expects($this->once())->method('getCmdOutput')->with($this->stringContains("lp -d 'FooPrinter' ")); + $connector->finalize(); + } + public function testPrinterDoesntExist() + { + $this -> setExpectedException('BadMethodCallException'); + $connector = $this->getMockConnector("FooPrinter", array("OtherPrinter")); + $connector->expects($this->once())->method('getCmdOutput')->with($this->stringContains("lp -d 'FooPrinter' ")); + $connector->finalize(); + } + public function testNoPrinter() + { + $this -> setExpectedException('BadMethodCallException'); + $connector = $this->getMockConnector("FooPrinter", array("")); + } + private function getMockConnector($path, array $printers) + { + $stub = $this->getMockBuilder('Mike42\Escpos\PrintConnectors\CupsPrintConnector')->setMethods(array ( + 'getCmdOutput', + 'getLocalPrinters' + ))->disableOriginalConstructor()->getMock(); + $stub->method('getCmdOutput')->willReturn(""); + $stub->method('getLocalPrinters')->willReturn($printers); + $stub->__construct($path); + return $stub; + } +} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/EscposImageTest.php b/htdocs/includes/mike42/escpos-php/test/unit/EscposImageTest.php index f152f400a2f..08e1be91c50 100644 --- a/htdocs/includes/mike42/escpos-php/test/unit/EscposImageTest.php +++ b/htdocs/includes/mike42/escpos-php/test/unit/EscposImageTest.php @@ -1,235 +1,16 @@ loadAndCheckImg(null, false, false, 0, 0, ""); - } +use Mike42\Escpos\EscposImage; - /** - * BMP handling not yet implemented, but these will use - * a native PHP bitmap reader. - * This just tests that they are not being passed on to another library. - */ - public function testBmpBadFilename() { - $this -> setExpectedException('Exception'); - $this -> loadAndCheckImg('not a real file.bmp', false, false, 1, 1, "\x80"); - } - - public function testBmpBlack() { - $this -> setExpectedException('Exception'); - $this -> loadAndCheckImg("canvas_black.bmp", false, false, 0, 0, "\x80"); - } - - public function testBmpBlackWhite() { - $this -> setExpectedException('Exception'); - $this -> loadAndCheckImg("black_white.bmp", false, false, 0, 0, "\xc0\x00"); - } - - public function testBmpWhite() { - $this -> setExpectedException('Exception'); - $this -> loadAndCheckImg("canvas_white.bmp", false, false, 0, 0, "\x00"); - } - - /** - * GD tests - Load tiny images and check how they are printed. - * These are skipped if you don't have gd. - */ - public function testGdBadFilename() { - $this -> setExpectedException('Exception'); - $this -> loadAndCheckImg('not a real file.png', true, false, 1, 1, "\x80"); - } - - public function testGdBlack() { - foreach(array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('canvas_black.' . $format, true, false, 1, 1, "\x80"); - } - } - - public function testGdBlackTransparent() { - foreach(array('png', 'gif') as $format) { - $this -> loadAndCheckImg('black_transparent.' . $format, true, false, 2, 2, "\xc0\x00"); - } - } - - public function testGdBlackWhite() { - foreach(array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('black_white.' . $format, true, false, 2, 2, "\xc0\x00"); - } - } - - public function testGdWhite() { - foreach(array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('canvas_white.' . $format, true, false, 1, 1, "\x00"); - } - } - - /** - * Imagick tests - Load tiny images and check how they are printed - * These are skipped if you don't have imagick - */ - public function testImagickBadFilename() { - $this -> setExpectedException('Exception'); - $this -> loadAndCheckImg('not a real file.png', false, true, 1, 1, "\x80"); - } - - public function testImagickBlack() { - foreach(array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('canvas_black.' . $format, false, true, 1, 1, "\x80"); - } - } - - public function testImagickBlackTransparent() { - foreach(array('png', 'gif') as $format) { - $this -> loadAndCheckImg('black_transparent.' . $format, false, true, 2, 2, "\xc0\x00"); - } - } - - public function testImagickBlackWhite() { - foreach(array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('black_white.' . $format, false, true, 2, 2, "\xc0\x00"); - } - } - - public function testImagickWhite() { - foreach(array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('canvas_white.' . $format, false, true, 1, 1, "\x00"); - } - } - - /** - * Mixed test - Same as above, but confirms that each tiny image can be loaded - * under any supported library configuration with the same results. - * These are skipped if you don't have gd AND imagick - */ - public function testLibraryDifferences() { - if(!EscposImage::isGdLoaded() || !EscposImage::isImagickLoaded()) { - $this -> markTestSkipped("both gd and imagick plugin are required for this test"); - } - $inFile = array('black_white.png', 'canvas_black.png', 'canvas_white.png'); - foreach($inFile as $fn) { - // Default check - $im = new EscposImage(dirname(__FILE__) . "/resources/$fn"); - $width = $im -> getWidth(); - $height = $im -> getHeight(); - $data = $im -> toRasterFormat(); - // Gd check - $this -> loadAndCheckImg($fn, true, false, $width, $height, $data); - // Imagick check - $this -> loadAndCheckImg($fn, false, true, $width, $height, $data); - } - } - - /** - * PDF tests - load tiny PDF and check for well-formedness - * These are also skipped if you don't have imagick - * @medium - */ - public function testPdfAllPages() { - $this -> loadAndCheckPdf('doc.pdf', null, 1, 1, array("\x00", "\x80")); - } - - public function testPdfBadFilename() { - $this -> setExpectedException('Exception'); - $this -> loadAndCheckPdf('not a real file', null, 1, 1, array()); - } - - /** - * @medium - */ - public function testPdfBadRange() { - // Start page is after end page. - $this -> setExpectedException('Exception'); - $this -> loadAndCheckPdf('doc.pdf', array(1, 0), 1, 1, array("\x00", "\x80")); - } - - /** - * @medium - */ - public function testPdfFirstPage() { - $this -> loadAndCheckPdf('doc.pdf', array(0, 0), 1, 1, array("\x00")); - } - - /** - * @medium - */ - public function testPdfMorePages() { - $this -> loadAndCheckPdf('doc.pdf', array(1, 20), 1, 1, array("\x80")); - } - - /** - * @medium - */ - public function testPdfSecondPage() { - $this -> loadAndCheckPdf('doc.pdf', array(1, 1), 1, 1, array("\x80")); - } - - /** - * @medium - */ - public function testPdfStartPastEndOfDoc() { - // Doc only has pages 0 and 1, can't start reading from 2. - $this -> markTestIncomplete("Test needs revising- produces output due to apparent imagick bug."); - $this -> setExpectedException('ImagickException'); - $this -> loadAndCheckPdf('doc.pdf', array(2, 3), 1, 1, array()); - } - - /** - * Load an EscposImage with (optionally) certain libraries disabled and run a check. - */ - private function loadAndCheckImg($fn, $gd, $imagick, $width, $height, $rasterFormat = null) { - $img = $this -> getMockImage($fn === null ? null : dirname(__FILE__) . "/resources/$fn", $gd, $imagick); - $this -> checkImg($img, $width, $height, $rasterFormat); - } - - /** - * Same as above, loading document and checking pages against some expected values. - */ - private function loadAndCheckPdf($fn, array $range = null, $width, $height, array $rasterFormat = null) { - if(!EscposImage::isImagickLoaded()) { - $this -> markTestSkipped("imagick plugin required for this test"); - } - $pdfPages = EscposImage::loadPdf(dirname(__FILE__) . "/resources/$fn", $width, $range); - $this -> assertTrue(count($pdfPages) == count($rasterFormat), "Got back wrong number of pages"); - foreach($pdfPages as $id => $img) { - $this -> checkImg($img, $width, $height, $rasterFormat[$id]); - } - } - - /** - * Check image against known width, height, output. - */ - private function checkImg(EscposImage $img, $width, $height, $rasterFormat = null) { - if($rasterFormat === null) { - echo "\nImage was: " . $img -> getWidth() . "x" . $img -> getHeight() . ", data \"" . friendlyBinary($img -> toRasterFormat()) . "\""; - } - $this -> assertTrue($img -> getHeight() == $height); - $this -> assertTrue($img -> getWidth() == $width); - $this -> assertTrue($img -> toRasterFormat() == $rasterFormat); - } - - /** - * Load up an EsposImage with given libraries disabled or enabled. Marks the test - * as skipped if you ask for a library which is not loaded. - */ - private function getMockImage($path, $gd, $imagick) { - /* Sanity checks */ - if($gd && !EscposImage::isGdLoaded()) { - $this -> markTestSkipped("gd plugin required for this test"); - } - if($imagick && !EscposImage::isImagickLoaded()) { - $this -> markTestSkipped("imagick plugin required for this test"); - } - $stub = $this -> getMockBuilder('EscposImage') - -> setMethods(array('isGdSupported', 'isImagickSupported')) - -> disableOriginalConstructor() - -> getMock(); - $stub -> method('isGdSupported') - -> willReturn($gd); - $stub -> method('isImagickSupported') - -> willReturn($imagick); - $stub -> __construct($path); - return $stub; - } +class EscposImageTest extends PHPUnit_Framework_TestCase +{ + public function testImageMissingException() + { + $this -> setExpectedException('Exception'); + $img = EscposImage::load('not-a-real-file.png'); + } + public function testImageNotSupportedException() + { + $this -> setExpectedException('InvalidArgumentException'); + $img = EscposImage::load('/dev/null', false, array()); + } } \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/test/unit/EscposPrintBufferTest.php b/htdocs/includes/mike42/escpos-php/test/unit/EscposPrintBufferTest.php index 2bbdb34c20c..af0ee2b9b73 100644 --- a/htdocs/includes/mike42/escpos-php/test/unit/EscposPrintBufferTest.php +++ b/htdocs/includes/mike42/escpos-php/test/unit/EscposPrintBufferTest.php @@ -2,149 +2,191 @@ /** * Example strings are pangrams using different character sets, and are * testing correct code-table switching. - * + * * When printed, they should appear the same as in this source file. - * + * * Many of these test strings are from: * - http://www.cl.cam.ac.uk/~mgk25/ucs/examples/quickbrown.txt * - http://clagnut.com/blog/2380/ (mirrored from the English Wikipedia) */ -class EscposPrintBufferTest extends PHPUnit_Framework_TestCase { - protected $buffer; - protected $outputConnector; - - protected function setup() { - $this -> outputConnector = new DummyPrintConnector(); - $printer = new Escpos($this -> outputConnector); - $this -> buffer = $printer -> getPrintBuffer(); - } - - protected function checkOutput($expected = null) { - /* Check those output strings */ - $outp = $this -> outputConnector -> getData(); - if($expected === null) { - echo "\nOutput was:\n\"" . friendlyBinary($outp) . "\"\n"; - } - $this -> assertEquals($expected, $outp); - } +use Mike42\Escpos\Printer; +use Mike42\Escpos\PrintConnectors\DummyPrintConnector; - protected function tearDown() { - $this -> outputConnector -> finalize(); - } +class EscposPrintBufferTest extends PHPUnit_Framework_TestCase +{ + protected $buffer; + protected $outputConnector; + + protected function setup() + { + $this -> outputConnector = new DummyPrintConnector(); + $printer = new Printer($this -> outputConnector); + $this -> buffer = $printer -> getPrintBuffer(); + } + + protected function checkOutput($expected = null) + { + /* Check those output strings */ + $outp = $this -> outputConnector -> getData(); + if ($expected === null) { + echo "\nOutput was:\n\"" . friendlyBinary($outp) . "\"\n"; + } + $this -> assertEquals($expected, $outp); + } - public function testRawTextNonprintable() { - $this -> buffer -> writeTextRaw("Test" . Escpos::ESC . "v1\n"); - $this -> checkOutput("\x1b@Test?v1\x0a"); // ASCII ESC character is substituted for '?' - } + protected function tearDown() + { + $this -> outputConnector -> finalize(); + } - public function testDanish() { - $this -> buffer -> writeText("Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Wolther spillede på xylofon.\n"); - $this -> checkOutput("\x1b@Quizdeltagerne spiste jordb\x91r med fl\x1bt\x02\x9bde, mens cirkusklovnen Wolther spillede p\x86 xylofon.\x0a"); - } + public function testRawTextNonprintable() + { + $this -> buffer -> writeTextRaw("Test" . Printer::ESC . "v1\n"); + $this -> checkOutput("\x1b@Test?v1\x0a"); // ASCII ESC character is substituted for '?' + } - public function testGerman() { - $this -> buffer -> writeText("Falsches Üben von Xylophonmusik quält jeden größeren Zwerg.\n"); - $this -> checkOutput("\x1b@Falsches \x9aben von Xylophonmusik qu\x84lt jeden gr\x94\xe1eren Zwerg.\x0a"); - } + public function testDanish() + { + $this -> buffer -> writeText("Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Wolther spillede på xylofon.\n"); + $this -> checkOutput("\x1b@Quizdeltagerne spiste jordb\x91r med fl\x1bt\x02\x9bde, mens cirkusklovnen Wolther spillede p\x86 xylofon.\x0a"); + } - public function testGreek() { - $this -> buffer -> writeText("Ξεσκεπάζω την ψυχοφθόρα βδελυγμία"); - $this -> checkOutput("\x1b@\x1bt\x0b\xbd\xde\xec\xe4\xde\xea\x9b\xe0\xfa \xee\xe1\xe7 \xf6\xf2\xf4\xe9\xf3\xe2\xa2\xeb\xd6 \xd7\xdd\xde\xe5\xf2\xd8\xe6\x9f\xd6"); - } - - public function testGreekWithDiacritics() { - // This is a string which is known to be un-printable in ESC/POS (the grave-accented letters are not in any code page), - // so we are checking the substitution '?' for unknown characters. - $this -> buffer -> writeText("Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο.\n"); - $this -> checkOutput("\x1b@\xe2\xe0\x1bt\x0b\xe0\x9d\xde\xed \xe4\xd6? \xe6\xf2\xeb\xee\xe3?\xed \xdd?\xe7 \xe2? \xd7\xeb? \xea\xe3? \xec\xee? \xf4\xeb\xf2\xec\xd6\xf3? \xe8\x9d\xf3\xfa\xee\xe9.\x0a"); - } + public function testGerman() + { + $this -> buffer -> writeText("Falsches Üben von Xylophonmusik quält jeden größeren Zwerg.\n"); + $this -> checkOutput("\x1b@Falsches \x9aben von Xylophonmusik qu\x84lt jeden gr\x94\xe1eren Zwerg.\x0a"); + } - public function testEnglish() { - $this -> buffer -> writeText("The quick brown fox jumps over the lazy dog.\n"); - $this -> checkOutput("\x1b@The quick brown fox jumps over the lazy dog.\n"); - } + public function testGreek() + { + $this -> buffer -> writeText("Ξεσκεπάζω την ψυχοφθόρα βδελυγμία"); + $this -> checkOutput("\x1b@\x1bt\x0e\x8d\x9c\xa9\xa1\x9c\xa7\xe1\x9d\xe0 \xab\x9e\xa4 \xaf\xac\xae\xa6\xad\x9f\xe6\xa8\x98 \x99\x9b\x9c\xa2\xac\x9a\xa3\xe5\x98"); + } - public function testSpanish() { - // This one does not require changing code-pages at all, so characters are just converted from Unicode to CP437. - $this -> buffer -> writeText("El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y frío, añoraba a su querido cachorro.\n"); - $this -> checkOutput("\x1b@El ping\x81ino Wenceslao hizo kil\xa2metros bajo exhaustiva lluvia y fr\xa1o, a\xa4oraba a su querido cachorro.\x0a"); - } + public function testGreekWithDiacritics() + { + // This is a string which is known to be un-printable in ESC/POS (the grave-accented letters are not in any code page), + // so we are checking the substitution '?' for unknown characters. + $this -> buffer -> writeText("Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο.\n"); + $this -> checkOutput("\x1b@\xe2\xe0\x1bt\x0e\x9d\xe2\x9c\xaa \xa1\x98? \xa3\xac\xa8\xab\xa0?\xaa \x9b?\xa4 \x9f? \x99\xa8? \xa7\xa0? \xa9\xab? \xae\xa8\xac\xa9\x98\xad? \xa5\xe2\xad\xe0\xab\xa6.\x0a"); + } - public function testFrench() { - $this -> buffer -> writeText("Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en canoë au delà des îles, près du mälström où brûlent les novæ.\n"); - $this -> checkOutput("\x1b@Le c\x1bt\x10\x9cur d\xe9\xe7u mais l'\xe2me plut\xf4t na\xefve, Lou\xffs r\xeava de crapa\xfcter en cano\xeb au del\xe0 des \xeeles, pr\xe8s du m\xe4lstr\xf6m o\xf9 br\xfblent les nov\xe6.\x0a"); - } + public function testEnglish() + { + $this -> buffer -> writeText("The quick brown fox jumps over the lazy dog.\n"); + $this -> checkOutput("\x1b@The quick brown fox jumps over the lazy dog.\n"); + } - public function testIrishGaelic() { - // Note that some letters with diacritics cannot be printed for Irish Gaelic text, so text may need to be simplified. - $this -> buffer -> writeText("D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh.\n"); - $this -> checkOutput("\x1b@D'fhuascail \x1bt\x02\xd6osa, \xe9rmhac na h\xe0ighe Beannaithe, p\xa2r \x90ava agus \xb5dhaimh.\x0a"); - } + public function testSpanish() + { + // This one does not require changing code-pages at all, so characters are just converted from Unicode to CP437. + $this -> buffer -> writeText("El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y frío, añoraba a su querido cachorro.\n"); + $this -> checkOutput("\x1b@El ping\x81ino Wenceslao hizo kil\xa2metros bajo exhaustiva lluvia y fr\xa1o, a\xa4oraba a su querido cachorro.\x0a"); + } - public function testHungarian() { - $this -> buffer -> writeText("Árvíztűrő tükörfúrógép.\n"); - $this -> checkOutput("\x1b@\x1bt\x02\xb5rv\xa1zt\x1bt\x12\xfbr\x8b t\x81k\x94rf\xa3r\xa2g\x82p.\x0a"); - } - - public function testIcelandic() { - $this -> buffer -> writeText("Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa."); - $this -> checkOutput("\x1b@K\x91mi n\x1bt\x02\xec \x94xi h\x82r ykist \xe7j\xa2fum n\xa3 b\x91\xd0i v\xa1l og \xa0drepa."); - } + public function testFrench() + { + $this -> buffer -> writeText("Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en canoë au delà des îles, près du mälström où brûlent les novæ.\n"); + $this -> checkOutput("\x1b@Le c\x1bt\x10\x9cur d\xe9\xe7u mais l'\xe2me plut\xf4t na\xefve, Lou\xffs r\xeava de crapa\xfcter en cano\xeb au del\xe0 des \xeeles, pr\xe8s du m\xe4lstr\xf6m o\xf9 br\xfblent les nov\xe6.\x0a"); + } - public function testJapaneseHiragana() { - $this -> markTestIncomplete("Non-ASCII character sets not yet supported."); - $this -> buffer -> writeText(implode("\n", array("いろはにほへとちりぬるを", " わかよたれそつねならむ", "うゐのおくやまけふこえて", "あさきゆめみしゑひもせす")) . "\n"); - $this -> checkOutput(); - } + public function testIrishGaelic() + { + // Note that some letters with diacritics cannot be printed for Irish Gaelic text, so text may need to be simplified. + $this -> buffer -> writeText("D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh.\n"); + $this -> checkOutput("\x1b@D'fhuascail \x1bt\x02\xd6osa, \xe9rmhac na h\xe0ighe Beannaithe, p\xa2r \x90ava agus \xb5dhaimh.\x0a"); + } - public function testJapaneseKatakana() { - $this -> markTestIncomplete("Non-ASCII character sets not yet supported."); - $this -> buffer -> writeText(implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン")) . "\n"); - $this -> checkOutput("\x1b@\x1bt\x01\xb2\xdb\xca\xc6\xce\xcd\xc4 \xc1\xd8\xc7\xd9\xa6 \xdc\xb6\xd6\xc0\xda\xbf \xc2\xc8\xc5\xd7\xd1\x0a\xb3\xb2\xc9\xb5\xb8\xd4\xcf \xb9\xcc\xba\xb4\xc3 \xb1\xbb\xb7\xd5\xd2\xd0\xbc \xb4\xcb\xd3\xbe\xbd\xdd\x0a"); - } + public function testHungarian() + { + $this -> buffer -> writeText("Árvíztűrő tükörfúrógép.\n"); + $this -> checkOutput("\x1b@\x1bt\x02\xb5rv\xa1zt\x1bt\x12\xfbr\x8b t\x81k\x94rf\xa3r\xa2g\x82p.\x0a"); + } + + public function testIcelandic() + { + $this -> buffer -> writeText("Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa."); + $this -> checkOutput("\x1b@K\x91mi n\x1bt\x02\xec \x94xi h\x82r ykist \xe7j\xa2fum n\xa3 b\x91\xd0i v\xa1l og \xa0drepa."); + } - public function testJapaneseKataKanaHalfWidth() { - $this -> buffer -> writeText(implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウイノオクヤマ ケフコエテ アサキユメミシ エヒモセスン")) . "\n"); - $this -> checkOutput("\x1b@\x1bt\x01\xb2\xdb\xca\xc6\xce\xcd\xc4 \xc1\xd8\xc7\xd9\xa6 \xdc\xb6\xd6\xc0\xda\xbf \xc2\xc8\xc5\xd7\xd1\x0a\xb3\xb2\xc9\xb5\xb8\xd4\xcf \xb9\xcc\xba\xb4\xc3 \xb1\xbb\xb7\xd5\xd2\xd0\xbc \xb4\xcb\xd3\xbe\xbd\xdd\x0a"); - } - - public function testLatvian() { - $this -> buffer -> writeText("Glāžšķūņa rūķīši dzērumā čiepj Baha koncertflīģeļu vākus.\n"); - $this -> checkOutput("\x1b@Gl\x1bt!\x83\xd8\xd5\xe9\xd7\xeca r\xd7\xe9\x8c\xd5i dz\x89rum\x83 \xd1iepj Baha koncertfl\x8c\x85e\xebu v\x83kus.\x0a"); - } + public function testJapaneseHiragana() + { + $this -> markTestIncomplete("Non-ASCII character sets not yet supported."); + $this -> buffer -> writeText(implode("\n", array("いろはにほへとちりぬるを", " わかよたれそつねならむ", "うゐのおくやまけふこえて", "あさきゆめみしゑひもせす")) . "\n"); + $this -> checkOutput(); + } - public function testPolish() { - $this -> buffer -> writeText("Pchnąć w tę łódź jeża lub ośm skrzyń fig.\n"); - $this -> checkOutput("\x1b@Pchn\x1bt\x12\xa5\x86 w t\xa9 \x88\xa2d\xab je\xbea lub o\x98m skrzy\xe4 fig.\x0a"); - } + public function testJapaneseKatakana() + { + $this -> markTestIncomplete("Non-ASCII character sets not yet supported."); + $this -> buffer -> writeText(implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン")) . "\n"); + $this -> checkOutput("\x1b@\x1bt\x01\xb2\xdb\xca\xc6\xce\xcd\xc4 \xc1\xd8\xc7\xd9\xa6 \xdc\xb6\xd6\xc0\xda\xbf \xc2\xc8\xc5\xd7\xd1\x0a\xb3\xb2\xc9\xb5\xb8\xd4\xcf \xb9\xcc\xba\xb4\xc3 \xb1\xbb\xb7\xd5\xd2\xd0\xbc \xb4\xcb\xd3\xbe\xbd\xdd\x0a"); + } - public function testRussian() { - $this -> buffer -> writeText("В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!\n"); - $this -> checkOutput("\x1b@\x1bt\x11\x82 \xe7\xa0\xe9\xa0\xe5 \xee\xa3\xa0 \xa6\xa8\xab \xa1\xeb \xe6\xa8\xe2\xe0\xe3\xe1? \x84\xa0, \xad\xae \xe4\xa0\xab\xec\xe8\xa8\xa2\xeb\xa9 \xed\xaa\xa7\xa5\xac\xaf\xab\xef\xe0!\x0a"); - } + public function testJapaneseKataKanaHalfWidth() + { + $this -> buffer -> writeText(implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウイノオクヤマ ケフコエテ アサキユメミシ エヒモセスン")) . "\n"); + $this -> checkOutput("\x1b@\x1bt\x01\xb2\xdb\xca\xc6\xce\xcd\xc4 \xc1\xd8\xc7\xd9\xa6 \xdc\xb6\xd6\xc0\xda\xbf \xc2\xc8\xc5\xd7\xd1\x0a\xb3\xb2\xc9\xb5\xb8\xd4\xcf \xb9\xcc\xba\xb4\xc3 \xb1\xbb\xb7\xd5\xd2\xd0\xbc \xb4\xcb\xd3\xbe\xbd\xdd\x0a"); + } + + public function testLatvian() + { + $this -> buffer -> writeText("Glāžšķūņa rūķīši dzērumā čiepj Baha koncertflīģeļu vākus.\n"); + $this -> checkOutput("\x1b@Gl\x1bt!\x83\xd8\xd5\xe9\xd7\xeca r\xd7\xe9\x8c\xd5i dz\x89rum\x83 \xd1iepj Baha koncertfl\x8c\x85e\xebu v\x83kus.\x0a"); + } - public function testThai() { - $this -> markTestIncomplete("Non-ASCII character sets not yet supported."); - $this -> buffer -> writeText("นายสังฆภัณฑ์ เฮงพิทักษ์ฝั่ง ผู้เฒ่าซึ่งมีอาชีพเป็นฅนขายฃวด ถูกตำรวจปฏิบัติการจับฟ้องศาล ฐานลักนาฬิกาคุณหญิงฉัตรชฎา ฌานสมาธิ\n"); // Quotation from Wikipedia - $this -> checkOutput(); - } + public function testPolish() + { + $this -> buffer -> writeText("Pchnąć w tę łódź jeża lub ośm skrzyń fig.\n"); + $this -> checkOutput("\x1b@Pchn\x1bt\x12\xa5\x86 w t\xa9 \x88\xa2d\xab je\xbea lub o\x98m skrzy\xe4 fig.\x0a"); + } - public function testTurkish() { - $this -> buffer -> writeText("Pijamalı hasta, yağız şoföre çabucak güvendi.\n"); - $this -> checkOutput("\x1b@Pijamal\x1bt\x02\xd5 hasta, ya\x1bt\x0d\xa7\x8dz \x9fof\x94re \x87abucak g\x81vendi.\x0a"); - } - - public function testArabic() { - $this -> markTestIncomplete("Right-to-left text not yet supported."); - $this -> buffer -> writeText("صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ" . "\n"); // Quotation from Wikipedia - $this -> checkOutput(); - } - - public function testHebrew() { - // RTL text is more complex than the above. - $this -> markTestIncomplete("Right-to-left text not yet supported."); - $this -> buffer -> writeText("דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה" . "\n"); - $this -> checkOutput(); - } + public function testRussian() + { + $this -> buffer -> writeText("В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!\n"); + $this -> checkOutput("\x1b@\x1bt\x11\x82 \xe7\xa0\xe9\xa0\xe5 \xee\xa3\xa0 \xa6\xa8\xab \xa1\xeb \xe6\xa8\xe2\xe0\xe3\xe1? \x84\xa0, \xad\xae \xe4\xa0\xab\xec\xe8\xa8\xa2\xeb\xa9 \xed\xaa\xa7\xa5\xac\xaf\xab\xef\xe0!\x0a"); + } + + public function testThai() + { + $this -> markTestIncomplete("Non-ASCII character sets not yet supported."); + $this -> buffer -> writeText("นายสังฆภัณฑ์ เฮงพิทักษ์ฝั่ง ผู้เฒ่าซึ่งมีอาชีพเป็นฅนขายฃวด ถูกตำรวจปฏิบัติการจับฟ้องศาล ฐานลักนาฬิกาคุณหญิงฉัตรชฎา ฌานสมาธิ\n"); // Quotation from Wikipedia + $this -> checkOutput(); + } + + public function testTurkish() + { + $this -> buffer -> writeText("Pijamalı hasta, yağız şoföre çabucak güvendi.\n"); + $this -> checkOutput("\x1b@Pijamal\x1bt\x02\xd5 hasta, ya\x1bt\x0d\xa7\x8dz \x9fof\x94re \x87abucak g\x81vendi.\x0a"); + } + + public function testArabic() + { + $this -> markTestIncomplete("Right-to-left text not yet supported."); + $this -> buffer -> writeText("صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ" . "\n"); // Quotation from Wikipedia + $this -> checkOutput(); + } + + public function testHebrew() + { + // RTL text is more complex than the above. + $this -> markTestIncomplete("Right-to-left text not yet supported."); + $this -> buffer -> writeText("דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה" . "\n"); + $this -> checkOutput(); + } + + public function testVietnamese() { + $this -> buffer -> writeText("Tiếng Việt, còn gọi tiếng Việt Nam hay Việt ngữ, là ngôn ngữ của người Việt (người Kinh) và là ngôn ngữ chính thức tại Việt Nam.\n"); + $this -> checkOutput("\x1b@Ti\x1bt\x1e\xd5ng Vi\xd6t, c\xdfn g\xe4i ti\xd5ng Vi\xd6t Nam hay Vi\xd6t ng\xf7, l\xb5 ng\xabn ng\xf7 c\xf1a ng\xad\xeai Vi\xd6t (ng\xad\xeai Kinh) v\xb5 l\xb5 ng\xabn ng\xf7 ch\xddnh th\xf8c t\xb9i Vi\xd6t Nam.\x0a"); + } + + public function testWindowsLineEndings() { + $this -> buffer -> writeText("Hello World!\r\n"); + $this -> checkOutput("\x1b@Hello World!\x0a"); + } + + public function testWindowsLineEndingsRaw() { + $this -> buffer -> writeTextRaw("Hello World!\r\n"); + $this -> checkOutput("\x1b@Hello World!\x0a"); + } } - diff --git a/htdocs/includes/mike42/escpos-php/test/unit/EscposTest.php b/htdocs/includes/mike42/escpos-php/test/unit/EscposTest.php index 6fd0bd7d204..0b70e96b370 100644 --- a/htdocs/includes/mike42/escpos-php/test/unit/EscposTest.php +++ b/htdocs/includes/mike42/escpos-php/test/unit/EscposTest.php @@ -1,765 +1,1127 @@ outputConnector = new DummyPrintConnector(); - $this -> printer = new Escpos($this -> outputConnector); - } +class EscposTest extends PHPUnit_Framework_TestCase +{ + protected $printer; + protected $outputConnector; - protected function checkOutput($expected = null) { - /* Check those output strings */ - $outp = $this -> outputConnector -> getData(); - if($expected === null) { - echo "\nOutput was:\n\"" . friendlyBinary($outp) . "\"\n"; - } - $this -> assertEquals($expected, $outp); - } - - protected function tearDown() { - $this -> outputConnector -> finalize(); - } - - protected function requireGraphicsLibrary() { - if(!EscposImage::isGdLoaded() && !EscposImage::isImagickLoaded()) { - // If the test is about to do something which requires a library, - // something must throw an exception. - $this -> setExpectedException('Exception'); - } - } - - public function testInitializeOutput() { - $this -> checkOutput("\x1b\x40"); + protected function setup() + { + /* Print to nowhere- for testing which inputs are accepted */ + $this -> outputConnector = new DummyPrintConnector(); + $this -> printer = new Printer($this -> outputConnector); } - public function testTextStringOutput() { - $this -> printer -> text("The quick brown fox jumps over the lazy dog\n"); - $this -> checkOutput("\x1b@The quick brown fox jumps over the lazy dog\n"); + protected function checkOutput($expected = null) + { + /* Check those output strings */ + $outp = $this -> outputConnector -> getData(); + if ($expected === null) { + echo "\nOutput was:\n\"" . friendlyBinary($outp) . "\"\n"; + } + $this -> assertEquals($expected, $outp); } - public function testTextDefault() { - $this -> printer -> text(); - $this -> checkOutput("\x1b@"); + protected function tearDown() + { + $this -> outputConnector -> finalize(); } - public function testTextString() { - $this -> printer -> text("String"); - $this -> printer -> text(123); - $this -> printer -> text(); - $this -> printer -> text(null); - $this -> printer -> text(1.2); - $this -> printer -> text(new FooBar("FooBar")); - $this -> checkOutput("\x1b@String1231.2FooBar"); + protected function requireGraphicsLibrary() + { + if (!EscposImage::isGdLoaded() && !EscposImage::isImagickLoaded()) { + // If the test is about to do something which requires a library, + // something must throw an exception. + $this -> setExpectedException('Exception'); + } } - public function testTextObject() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> text(new DateTime()); - } - - public function testFeedDefault() { - $this -> printer -> feed(); - $this -> checkOutput("\x1b@\x0a"); + public function testInitializeOutput() + { + $this -> checkOutput("\x1b\x40"); } - public function testFeed3Lines() { - $this -> printer -> feed(3); - $this -> checkOutput("\x1b@\x1bd\x03"); + public function testTextStringOutput() + { + $this -> printer -> text("The quick brown fox jumps over the lazy dog\n"); + $this -> checkOutput("\x1b@The quick brown fox jumps over the lazy dog\n"); } - public function testFeedZero() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feed(0); + public function testTextDefault() + { + $this -> printer -> text(); + $this -> checkOutput("\x1b@"); + } + + public function testTextChinese() + { + // Switch to chinese print mode, GBK output, switch back to alphanumeric. + $this -> printer -> textChinese("示例文本打印机!\n"); + $this -> checkOutput("\x1b@\x1c&\xca\xbe\xc0\xfd\xce\xc4\xb1\xbe\xb4\xf2\xd3\xa1\xbb\xfa!\x0a\x1c."); + } + + public function testTextRaw() + { + // Under raw output, the raw bytes are sent to the printer, so typing a UTF-8 euro literally causes \xE2 \x82 \xAC to be sent. + // Under text(), this would cause a code-page change (to a page that contains a Euro symbol), and single byte. + $this -> printer -> textRaw("€\n"); + $this -> checkOutput("\x1b@\xe2\x82\xac\x0a"); } - public function testFeedNonInteger() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feed("ab"); + public function testTextString() + { + $this -> printer -> text("String"); + $this -> printer -> text(123); + $this -> printer -> text(); + $this -> printer -> text(null); + $this -> printer -> text(1.2); + $this -> printer -> text(new FooBar("FooBar")); + $this -> checkOutput("\x1b@String1231.2FooBar"); } - public function testFeedTooLarge() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feed(256); - } - - /* Print mode */ - public function testSelectPrintModeDefault() { - $this -> printer -> selectPrintMode(); - $this -> checkOutput("\x1b@\x1b!\x00"); + public function testTextObject() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> text(new DateTime()); } - public function testSelectPrintModeAcceptedValues() { - /* This iterates over a bunch of numbers, figures out which + public function testFeedDefault() + { + $this -> printer -> feed(); + $this -> checkOutput("\x1b@\x0a"); + } + + public function testFeed3Lines() + { + $this -> printer -> feed(3); + $this -> checkOutput("\x1b@\x1bd\x03"); + } + + public function testFeedZero() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> feed(0); + } + + public function testFeedNonInteger() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> feed("ab"); + } + + public function testFeedTooLarge() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> feed(256); + } + + /* Print mode */ + public function testSelectPrintModeDefault() + { + $this -> printer -> selectPrintMode(); + $this -> checkOutput("\x1b@\x1b!\x00"); + } + + public function testSelectPrintModeAcceptedValues() + { + /* This iterates over a bunch of numbers, figures out which ones contain invalid flags, and checks that the driver rejects those, but accepts the good inputs */ - - for($i = -1; $i <= 256; $i++) { - $invalid = ($i < 0) || ($i > 255) || (($i & 2) == 2) || (($i & 4) == 4) || (($i & 64) == 64); - $failed = false; - try { - $this -> printer -> selectPrintMode($i); - } catch(Exception $e) { - $failed = true; - } - $this -> assertEquals($failed, $invalid); - } + + for ($i = -1; $i <= 256; $i++) { + $invalid = ($i < 0) || ($i > 255) || (($i & 2) == 2) || (($i & 4) == 4) || (($i & 64) == 64); + $failed = false; + try { + $this -> printer -> selectPrintMode($i); + } catch (Exception $e) { + $failed = true; + } + $this -> assertEquals($failed, $invalid); + } } - /* Underline */ - public function testSetUnderlineDefault() { - $this -> printer -> setUnderline(); - $this -> checkOutput("\x1b@\x1b-\x01"); + /* Underline */ + public function testSetUnderlineDefault() + { + $this -> printer -> setUnderline(); + $this -> checkOutput("\x1b@\x1b-\x01"); } - public function testSetUnderlineOff() { - $this -> printer -> setUnderline(Escpos::UNDERLINE_NONE); - $this -> checkOutput("\x1b@\x1b-\x00"); + public function testSetUnderlineOff() + { + $this -> printer -> setUnderline(Printer::UNDERLINE_NONE); + $this -> checkOutput("\x1b@\x1b-\x00"); } - public function testSetUnderlineOn() { - $this -> printer -> setUnderline(Escpos::UNDERLINE_SINGLE); - $this -> checkOutput("\x1b@\x1b-\x01"); + public function testSetUnderlineOn() + { + $this -> printer -> setUnderline(Printer::UNDERLINE_SINGLE); + $this -> checkOutput("\x1b@\x1b-\x01"); } - public function testSetUnderlineDbl() { - $this -> printer -> setUnderline(Escpos::UNDERLINE_DOUBLE); - $this -> checkOutput("\x1b@\x1b-\x02"); + public function testSetUnderlineDbl() + { + $this -> printer -> setUnderline(Printer::UNDERLINE_DOUBLE); + $this -> checkOutput("\x1b@\x1b-\x02"); } - public function testSetUnderlineAcceptedValues() { - $this -> printer -> setUnderline(0); - $this -> printer -> setUnderline(1); - $this -> printer -> setUnderline(2); - /* These map to 0 & 1 for interchangeability with setEmphasis */ - $this -> printer -> setUnderline(true); - $this -> printer -> setUnderline(false); - $this -> checkOutput("\x1b@\x1b-\x00\x1b-\x01\x1b-\x02\x1b-\x01\x1b-\x00"); - } - - public function testSetUnderlineTooLarge() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setUnderline(3); - } - - public function testSetUnderlineNegative() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setUnderline(-1); - } - - public function testSetUnderlineNonInteger() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setUnderline("Hello"); - } - - /* Emphasis */ - public function testSetEmphasisDefault() { - $this -> printer -> setEmphasis(); - $this -> checkOutput("\x1b@\x1bE\x01"); + public function testSetUnderlineAcceptedValues() + { + $this -> printer -> setUnderline(0); + $this -> printer -> setUnderline(1); + $this -> printer -> setUnderline(2); + /* These map to 0 & 1 for interchangeability with setEmphasis */ + $this -> printer -> setUnderline(true); + $this -> printer -> setUnderline(false); + $this -> checkOutput("\x1b@\x1b-\x00\x1b-\x01\x1b-\x02\x1b-\x01\x1b-\x00"); } - public function testSetEmphasisOn() { - $this -> printer -> setEmphasis(true); - $this -> checkOutput("\x1b@\x1bE\x01"); + public function testSetUnderlineTooLarge() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setUnderline(3); } - public function testSetEmphasisOff() { - $this -> printer -> setEmphasis(false); - $this -> checkOutput("\x1b@\x1bE\x00"); + public function testSetUnderlineNegative() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setUnderline(-1); } - public function testSetEmphasisNonBoolean() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setEmphasis(7); - } - - /* Double strike */ - public function testSetDoubleStrikeDefault() { - $this -> printer -> setDoubleStrike(); - $this -> checkOutput("\x1b@\x1bG\x01"); + public function testSetUnderlineNonInteger() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setUnderline("Hello"); } - public function testSetDoubleStrikeOn() { - $this -> printer -> setDoubleStrike(true); - $this -> checkOutput("\x1b@\x1bG\x01"); + /* Emphasis */ + public function testSetEmphasisDefault() + { + $this -> printer -> setEmphasis(); + $this -> checkOutput("\x1b@\x1bE\x01"); } - public function testSetDoubleStrikeOff() { - $this -> printer -> setDoubleStrike(false); - $this -> checkOutput("\x1b@\x1bG\x00"); + public function testSetEmphasisOn() + { + $this -> printer -> setEmphasis(true); + $this -> checkOutput("\x1b@\x1bE\x01"); } - public function testSetDoubleStrikeNonBoolean() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setDoubleStrike(4); - } - - /* Font */ - public function testSetFontDefault() { - $this -> printer -> setFont(); - $this -> checkOutput("\x1b@\x1bM\x00"); - } - - public function testSetFontAcceptedValues() { - $this -> printer -> setFont(Escpos::FONT_A); - $this -> printer -> setFont(Escpos::FONT_B); - $this -> printer -> setFont(Escpos::FONT_C); - $this -> checkOutput("\x1b@\x1bM\x00\x1bM\x01\x1bM\x02"); - } - - public function testSetFontNegative() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setFont(-1); - } - - - public function testSetFontTooLarge() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setFont(3); - } - - public function testSetFontNonInteger() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setFont('hello'); - } - - /* Justification */ - public function testSetJustificationDefault() { - $this -> printer -> setJustification(); - $this -> checkOutput("\x1b@\x1ba\x00"); - } - - public function testSetJustificationLeft() { - $this -> printer -> setJustification(Escpos::JUSTIFY_LEFT); - $this -> checkOutput("\x1b@\x1ba\x00"); - } - - public function testSetJustificationRight() { - $this -> printer -> setJustification(Escpos::JUSTIFY_RIGHT); - $this -> checkOutput("\x1b@\x1ba\x02"); - } - - public function testSetJustificationCenter() { - $this -> printer -> setJustification(Escpos::JUSTIFY_CENTER); - $this -> checkOutput("\x1b@\x1ba\x01"); - } - - public function testSetJustificationNegative() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setJustification(-1); - } - - - public function testSetJustificationTooLarge() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setFont(3); - } - - public function testSetJustificationNonInteger() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setJustification('hello'); - } - - /* Reverse feed */ - public function testFeedReverseDefault() { - $this -> printer -> feedReverse(); - $this -> checkOutput("\x1b@\x1be\x01"); - } - - public function testFeedReverse3() { - $this -> printer -> feedReverse(3); - $this -> checkOutput("\x1b@\x1be\x03"); - } - - public function testFeedReverseNegative() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feedReverse(-1); - } - - public function testFeedReverseTooLarge() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feedReverse(256); - } - - public function testFeedReverseNonInteger() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feedReverse('hello'); - } - - /* Cut */ - public function testCutDefault() { - // TODO check what the accepted range of values should be for $line - // cut($mode = self::CUT_FULL, $lines = 3) - $this -> printer -> cut(); - $this -> checkOutput("\x1b@\x1dVA\x03"); - } - - /* Set barcode height */ - public function testSetBarcodeHeightDefault() { - $this -> printer -> setBarcodeHeight(); - $this -> checkOutput("\x1b@\x1dh\x08"); - } - - public function testBarcodeHeight10() { - $this -> printer -> setBarcodeHeight(10); - $this -> checkOutput("\x1b@\x1dh\x0a"); - } - - public function testSetBarcodeHeightNegative() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeHeight(-1); - } - - public function testSetBarcodeHeightTooLarge() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeHeight(256); - } - - public function tesSetBarcodeHeightNonInteger() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeHeight('hello'); - } - - /* Barcode text position */ - public function testSetBarcodeTextPositionDefault() { - $this -> printer -> setBarcodeTextPosition(); - $this -> checkOutput("\x1b@\x1dH\x00"); - } - - public function testSetBarcodeTextPositionBelow() { - $this -> printer -> setBarcodeTextPosition(Escpos::BARCODE_TEXT_BELOW); - $this -> checkOutput("\x1b@\x1dH\x02"); - } - - public function testSetBarcodeTextPositionBoth() { - $this -> printer -> setBarcodeTextPosition(Escpos::BARCODE_TEXT_BELOW | Escpos::BARCODE_TEXT_ABOVE); - $this -> checkOutput("\x1b@\x1dH\x03"); - } - - public function testSetBarcodeTextPositionNegative() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeTextPosition(-1); - } - - public function testSetBarcodeTextPositionTooLarge() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeTextPosition(4); - } - - public function tesSetBarcodeTextPositionNonInteger() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeTextPosition('hello'); - } - - /* Barcode - UPC-A */ - public function testBarcodeUpcaNumeric11Char() { - $this -> printer -> barcode("01234567890", Escpos::BARCODE_UPCA); - $this -> checkOutput("\x1b@\x1dkA\x0b01234567890"); - } - - public function testBarcodeUpcaNumeric12Char() { - $this -> printer -> barcode("012345678901", Escpos::BARCODE_UPCA); - $this -> checkOutput("\x1b@\x1dkA\x0c012345678901"); - } - - public function testBarcodeUpcaNumeric13Char() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("0123456789012", Escpos::BARCODE_UPCA); - } - - public function testBarcodeUpcaNonNumeric12Char() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("A12345678901", Escpos::BARCODE_UPCA); - } - - /* Barcode - UPC-E */ - public function testBarcodeUpceNumeric6Char() { - $this -> printer -> barcode("123456", Escpos::BARCODE_UPCE); - $this -> checkOutput("\x1b@\x1dkB\x06123456"); - } - - public function testBarcodeUpceNumeric7Char() { - $this -> printer -> barcode("0123456", Escpos::BARCODE_UPCE); - $this -> checkOutput("\x1b@\x1dkB\x070123456"); - } - - public function testBarcodeUpceNumeric8Char() { - $this -> printer -> barcode("01234567", Escpos::BARCODE_UPCE); - $this -> checkOutput("\x1b@\x1dkB\x0801234567"); - } - - public function testBarcodeUpceNumeric11Char() { - $this -> printer -> barcode("01234567890", Escpos::BARCODE_UPCE); - $this -> checkOutput("\x1b@\x1dkB\x0b01234567890"); - } - - public function testBarcodeUpceNumeric12Char() { - $this -> printer -> barcode("012345678901", Escpos::BARCODE_UPCE); - $this -> checkOutput("\x1b@\x1dkB\x0c012345678901"); - } - - public function testBarcodeUpceNumeric9Char() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("012345678", Escpos::BARCODE_UPCE); - } - - public function testBarcodeUpceNonNumeric12Char() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("A12345678901", Escpos::BARCODE_UPCE); - } - - /* Barcode - JAN13 */ - public function testBarcodeJan13Numeric12Char() { - $this -> printer -> barcode("012345678901", Escpos::BARCODE_JAN13); - $this -> checkOutput("\x1b@\x1dkC\x0c012345678901"); - } - - public function testBarcodeJan13Numeric13Char() { - $this -> printer -> barcode("0123456789012", Escpos::BARCODE_JAN13); - $this -> checkOutput("\x1b@\x1dkC\x0d0123456789012"); - } - - public function testBarcodeJan13Numeric11Char() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("01234567890", Escpos::BARCODE_JAN13); - } - - public function testBarcodeJan13NonNumeric13Char() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("A123456789012", Escpos::BARCODE_JAN13); - } - - /* Barcode - JAN8 */ - public function testBarcodeJan8Numeric7Char() { - $this -> printer -> barcode("0123456", Escpos::BARCODE_JAN8); - $this -> checkOutput("\x1b@\x1dkD\x070123456"); - } - - public function testBarcodeJan8Numeric8Char() { - $this -> printer -> barcode("01234567", Escpos::BARCODE_JAN8); - $this -> checkOutput("\x1b@\x1dkD\x0801234567"); - } - - public function testBarcodeJan8Numeric9Char() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("012345678", Escpos::BARCODE_JAN8); - } - - public function testBarcodeJan8NonNumeric8Char() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("A1234567", Escpos::BARCODE_JAN8); - } - - /* Barcode - Code39 */ - public function testBarcodeCode39AsDefault() { - $this -> printer -> barcode("1234"); - $this -> checkOutput("\x1b@\x1dkE\x041234"); - } - - public function testBarcodeCode39Text() { - $this -> printer -> barcode("ABC 012", Escpos::BARCODE_CODE39); - $this -> checkOutput("\x1b@\x1dkE\x07ABC 012"); - } - - public function testBarcodeCode39SpecialChars() { - $this -> printer -> barcode("$%+-./", Escpos::BARCODE_CODE39); - $this -> checkOutput("\x1b@\x1dkE\x06$%+-./"); - } - - public function testBarcodeCode39Asterisks() { - $this -> printer -> barcode("*TEXT*", Escpos::BARCODE_CODE39); - $this -> checkOutput("\x1b@\x1dkE\x06*TEXT*"); - } - - public function testBarcodeCode39AsterisksUnmatched() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("*TEXT", Escpos::BARCODE_CODE39); - } - - public function testBarcodeCode39AsteriskInText() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("12*34", Escpos::BARCODE_CODE39); - } - - public function testBarcodeCode39Lowercase() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("abcd", Escpos::BARCODE_CODE39); - } - - public function testBarcodeCode39Empty() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("**", Escpos::BARCODE_CODE39); - } - - /* Barcode - ITF */ - public function testBarcodeItfNumericEven() { - $this -> printer -> barcode("1234", Escpos::BARCODE_ITF); - $this -> checkOutput("\x1b@\x1dkF\x041234"); - } - - public function testBarcodeItfNumericOdd() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("123", Escpos::BARCODE_ITF); - } - - public function testBarcodeItfNonNumericEven() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("A234", Escpos::BARCODE_ITF); - } - - /* Barcode - Codabar */ - public function testBarcodeCodabarNumeric() { - $this -> printer -> barcode("A012345A", Escpos::BARCODE_CODABAR); - $this -> checkOutput("\x1b@\x1dkG\x08A012345A"); - } - - public function testBarcodeCodabarSpecialChars() { - $this -> printer -> barcode("A012$+-./:A", Escpos::BARCODE_CODABAR); - $this -> checkOutput("\x1b@\x1dkG\x0bA012$+-./:A"); - } - - public function testBarcodeCodabarNotWrapped() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("012345", Escpos::BARCODE_CODABAR); - } - - public function testBarcodeCodabarStartStopWrongPlace() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("012A45", Escpos::BARCODE_CODABAR); - } - - /* Barcode - Code93 */ - public function testBarcodeCode93Valid() { - $this -> printer -> barcode("012abcd", Escpos::BARCODE_CODE93); - $this -> checkOutput("\x1b@\x1dkH\x07012abcd"); - } - - public function testBarcodeCode93Empty() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("", Escpos::BARCODE_CODE93); - } - - /* Barcode - Code128 */ - public function testBarcodeCode128ValidA() { - $this -> printer -> barcode("{A" . "012ABCD", Escpos::BARCODE_CODE128); - $this -> checkOutput("\x1b@\x1dkI\x09{A012ABCD"); - } - - public function testBarcodeCode128ValidB() { - $this -> printer -> barcode("{B" . "012ABCDabcd", Escpos::BARCODE_CODE128); - $this -> checkOutput("\x1b@\x1dkI\x0d{B012ABCDabcd"); - } - - public function testBarcodeCode128ValidC() { - $this -> printer -> barcode("{C" . chr ( 21 ) . chr ( 32 ) . chr ( 43 ), Escpos::BARCODE_CODE128); - $this -> checkOutput("\x1b@\x1dkI\x05{C\x15 +"); - } - - public function testBarcodeCode128NoCodeSet() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("ABCD", Escpos::BARCODE_CODE128); - } - - /* Pulse */ - function testPulseDefault() { - $this -> printer -> pulse(); - $this -> checkOutput("\x1b@\x1bp0 printer -> pulse(1); - $this -> checkOutput("\x1b@\x1bp1 printer -> pulse(0, 2, 2); - $this -> checkOutput("\x1b@\x1bp0\x01\x01"); - } - - function testPulseOddMs() { - $this -> printer -> pulse(0, 3, 3); // Should be rounded down and give same output - $this -> checkOutput("\x1b@\x1bp0\x01\x01"); - } - - function testPulseTooHigh() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> pulse(0, 512, 2); - } - - function testPulseTooLow() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> pulse(0, 0, 2); - } - - function testPulseNotANumber() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> pulse("fish"); - } - - /* Set reverse */ - public function testSetReverseColorsDefault() { - $this -> printer -> setReverseColors(); - $this -> checkOutput("\x1b@\x1dB\x01"); + public function testSetEmphasisOff() + { + $this -> printer -> setEmphasis(false); + $this -> checkOutput("\x1b@\x1bE\x00"); } - public function testSetReverseColorsOn() { - $this -> printer -> setReverseColors(true); - $this -> checkOutput("\x1b@\x1dB\x01"); + public function testSetEmphasisNonBoolean() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setEmphasis(7); } - public function testSetReverseColorsOff() { - $this -> printer -> setReverseColors(false); - $this -> checkOutput("\x1b@\x1dB\x00"); + /* Double strike */ + public function testSetDoubleStrikeDefault() + { + $this -> printer -> setDoubleStrike(); + $this -> checkOutput("\x1b@\x1bG\x01"); } - public function testSetReverseColorsNonBoolean() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setReverseColors(7); - } + public function testSetDoubleStrikeOn() + { + $this -> printer -> setDoubleStrike(true); + $this -> checkOutput("\x1b@\x1bG\x01"); + } - /* Bit image print */ - public function testBitImageBlack() { - $this -> requireGraphicsLibrary(); - $img = new EscposImage(dirname(__FILE__)."/resources/canvas_black.png"); - $this -> printer -> bitImage($img); - $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x01\x00\x80"); - } + public function testSetDoubleStrikeOff() + { + $this -> printer -> setDoubleStrike(false); + $this -> checkOutput("\x1b@\x1bG\x00"); + } - public function testBitImageWhite() { - $this -> requireGraphicsLibrary(); - $img = new EscposImage(dirname(__FILE__)."/resources/canvas_white.png"); - $this -> printer -> bitImage($img); - $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x01\x00\x00"); - } - - public function testBitImageBoth() { - $this -> requireGraphicsLibrary(); - $img = new EscposImage(dirname(__FILE__)."/resources/black_white.png"); - $this -> printer -> bitImage($img); - $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x02\x00\xc0\x00"); - } - - public function testBitImageTransparent() { - $this -> requireGraphicsLibrary(); - $img = new EscposImage(dirname(__FILE__)."/resources/black_transparent.png"); - $this -> printer -> bitImage($img); - $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x02\x00\xc0\x00"); - } - - /* Graphics print */ - public function testGraphicsWhite() { - $this -> requireGraphicsLibrary(); - $img = new EscposImage(dirname(__FILE__)."/resources/canvas_white.png"); - $this -> printer -> graphics($img); - $this -> checkOutput("\x1b@\x1d(L\x0b\x000p0\x01\x011\x01\x00\x01\x00\x00\x1d(L\x02\x0002"); - } - - public function testGraphicsBlack() { - $this -> requireGraphicsLibrary(); - $img = new EscposImage(dirname(__FILE__)."/resources/canvas_black.png"); - $this -> printer -> graphics($img); - $this -> checkOutput("\x1b@\x1d(L\x0b\x000p0\x01\x011\x01\x00\x01\x00\x80\x1d(L\x02\x0002"); - } - - public function testGraphicsBoth() { - $this -> requireGraphicsLibrary(); - $img = new EscposImage(dirname(__FILE__)."/resources/black_white.png"); - $this -> printer -> graphics($img); - $this -> checkOutput("\x1b@\x1d(L\x0c\x000p0\x01\x011\x02\x00\x02\x00\xc0\x00\x1d(L\x02\x0002"); - } - - public function testGraphicsTransparent() { - $this -> requireGraphicsLibrary(); - $img = new EscposImage(dirname(__FILE__)."/resources/black_transparent.png"); - $this -> printer -> graphics($img); - $this -> checkOutput("\x1b@\x1d(L\x0c\x000p0\x01\x011\x02\x00\x02\x00\xc0\x00\x1d(L\x02\x0002"); - } + public function testSetDoubleStrikeNonBoolean() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setDoubleStrike(4); + } - /* QR code */ - public function testQRCodeDefaults() { - // Test will fail if default values change - $this -> printer -> qrCode("1234"); - $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); - } - - public function testQRCodeDefaultsAreCorrect() { - // Below tests assume that defaults are as written here (output string should be same as above) - $this -> printer -> qrCode("1234", Escpos::QR_ECLEVEL_L, 3, Escpos::QR_MODEL_2); - $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); - } - - public function testQRCodeEmpty() { - $this -> printer -> qrCode(''); - $this -> checkOutput("\x1b@"); // No commands actually sent - } - - public function testQRCodeChangeEC() { - $this -> printer -> qrCode("1234", Escpos::QR_ECLEVEL_H); - $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E3\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); - } - - public function testQRCodeChangeSize() { - $this -> printer -> qrCode("1234", Escpos::QR_ECLEVEL_L, 7); - $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x07\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); - } - - public function testQRCodeChangeModel() { - $this -> printer -> qrCode("1234", Escpos::QR_ECLEVEL_L, 3, Escpos::QR_MODEL_1); - $this -> checkOutput("\x1b@\x1d(k\x04\x001A1\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); - } + /* Font */ + public function testSetFontDefault() + { + $this -> printer -> setFont(); + $this -> checkOutput("\x1b@\x1bM\x00"); + } - /* Feed form - Required on page-mode only printers */ - public function testFeedForm() { - $this -> printer -> feedForm(); - $this -> checkOutput("\x1b@\x0c"); - } - - /* Get status */ - public function testGetStatus() { - $this -> markTestIncomplete("Status check test code not implemented."); - // TODO some unit testing here on statuses - // $a = $this -> printer -> getPrinterStatus(Escpos::STATUS_PRINTER); - } + public function testSetFontAcceptedValues() + { + $this -> printer -> setFont(Printer::FONT_A); + $this -> printer -> setFont(Printer::FONT_B); + $this -> printer -> setFont(Printer::FONT_C); + $this -> checkOutput("\x1b@\x1bM\x00\x1bM\x01\x1bM\x02"); + } - /* Set text size */ - public function testSetTextSizeNormal() { - $this -> printer -> setTextSize(1, 1); - $this -> checkOutput("\x1b@\x1d!\x00"); - } + public function testSetFontNegative() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setFont(-1); + } - public function testSetTextSizeWide() { - $this -> printer -> setTextSize(4, 1); - $this -> checkOutput("\x1b@\x1d!0"); - } - public function testSetTextSizeNarrow() { - $this -> printer -> setTextSize(1, 4); - $this -> checkOutput("\x1b@\x1d!\x03"); - } + public function testSetFontTooLarge() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setFont(3); + } - public function testSetTextSizeLarge() { - $this -> printer -> setTextSize(4, 4); - $this -> checkOutput("\x1b@\x1d!3"); - } + public function testSetFontNonInteger() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setFont('hello'); + } - public function testSetTextSizeInvalid() { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setTextSize(0, 9); - } + /* Justification */ + public function testSetJustificationDefault() + { + $this -> printer -> setJustification(); + $this -> checkOutput("\x1b@\x1ba\x00"); + } + + public function testSetJustificationLeft() + { + $this -> printer -> setJustification(Printer::JUSTIFY_LEFT); + $this -> checkOutput("\x1b@\x1ba\x00"); + } + + public function testSetJustificationRight() + { + $this -> printer -> setJustification(Printer::JUSTIFY_RIGHT); + $this -> checkOutput("\x1b@\x1ba\x02"); + } + + public function testSetJustificationCenter() + { + $this -> printer -> setJustification(Printer::JUSTIFY_CENTER); + $this -> checkOutput("\x1b@\x1ba\x01"); + } + + public function testSetJustificationNegative() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setJustification(-1); + } + + + public function testSetJustificationTooLarge() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setFont(3); + } + + public function testSetJustificationNonInteger() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setJustification('hello'); + } + + /* Reverse feed */ + public function testFeedReverseDefault() + { + $this -> printer -> feedReverse(); + $this -> checkOutput("\x1b@\x1be\x01"); + } + + public function testFeedReverse3() + { + $this -> printer -> feedReverse(3); + $this -> checkOutput("\x1b@\x1be\x03"); + } + + public function testFeedReverseNegative() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> feedReverse(-1); + } + + public function testFeedReverseTooLarge() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> feedReverse(256); + } + + public function testFeedReverseNonInteger() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> feedReverse('hello'); + } + + /* Cut */ + public function testCutDefault() + { + // TODO check what the accepted range of values should be for $line + // cut($mode = self::CUT_FULL, $lines = 3) + $this -> printer -> cut(); + $this -> checkOutput("\x1b@\x1dVA\x03"); + } + + /* Set barcode height */ + public function testSetBarcodeHeightDefault() + { + $this -> printer -> setBarcodeHeight(); + $this -> checkOutput("\x1b@\x1dh\x08"); + } + + public function testBarcodeHeight10() + { + $this -> printer -> setBarcodeHeight(10); + $this -> checkOutput("\x1b@\x1dh\x0a"); + } + + public function testSetBarcodeHeightNegative() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setBarcodeHeight(-1); + } + + public function testSetBarcodeHeightTooLarge() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setBarcodeHeight(256); + } + + public function testSetBarcodeHeightNonInteger() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setBarcodeHeight('hello'); + } + + /* Set barcode width */ + public function testSetBarcodeWidthDefault() + { + $this -> printer -> setBarcodeWidth(); + $this -> checkOutput("\x1b@\x1dw\x03"); + } + + public function testBarcodeWidth1() + { + $this -> printer -> setBarcodeWidth(1); + $this -> checkOutput("\x1b@\x1dw\x01"); + } + + public function testSetBarcodeWidthNegative() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setBarcodeWidth(-1); + } + + public function testSetBarcodeWidthTooLarge() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setBarcodeWidth(256); + } + + public function testSetBarcodeWidthNonInteger() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setBarcodeWidth('hello'); + } + + /* Barcode text position */ + public function testSetBarcodeTextPositionDefault() + { + $this -> printer -> setBarcodeTextPosition(); + $this -> checkOutput("\x1b@\x1dH\x00"); + } + + public function testSetBarcodeTextPositionBelow() + { + $this -> printer -> setBarcodeTextPosition(Printer::BARCODE_TEXT_BELOW); + $this -> checkOutput("\x1b@\x1dH\x02"); + } + + public function testSetBarcodeTextPositionBoth() + { + $this -> printer -> setBarcodeTextPosition(Printer::BARCODE_TEXT_BELOW | Printer::BARCODE_TEXT_ABOVE); + $this -> checkOutput("\x1b@\x1dH\x03"); + } + + public function testSetBarcodeTextPositionNegative() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setBarcodeTextPosition(-1); + } + + public function testSetBarcodeTextPositionTooLarge() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setBarcodeTextPosition(4); + } + + public function tesSetBarcodeTextPositionNonInteger() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setBarcodeTextPosition('hello'); + } + + /* Barcode - UPC-A */ + public function testBarcodeUpcaNumeric11Char() + { + $this -> printer -> barcode("01234567890", Printer::BARCODE_UPCA); + $this -> checkOutput("\x1b@\x1dkA\x0b01234567890"); + } + + public function testBarcodeUpcaNumeric12Char() + { + $this -> printer -> barcode("012345678901", Printer::BARCODE_UPCA); + $this -> checkOutput("\x1b@\x1dkA\x0c012345678901"); + } + + public function testBarcodeUpcaNumeric13Char() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("0123456789012", Printer::BARCODE_UPCA); + } + + public function testBarcodeUpcaNonNumeric12Char() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("A12345678901", Printer::BARCODE_UPCA); + } + + /* Barcode - UPC-E */ + public function testBarcodeUpceNumeric6Char() + { + $this -> printer -> barcode("123456", Printer::BARCODE_UPCE); + $this -> checkOutput("\x1b@\x1dkB\x06123456"); + } + + public function testBarcodeUpceNumeric7Char() + { + $this -> printer -> barcode("0123456", Printer::BARCODE_UPCE); + $this -> checkOutput("\x1b@\x1dkB\x070123456"); + } + + public function testBarcodeUpceNumeric8Char() + { + $this -> printer -> barcode("01234567", Printer::BARCODE_UPCE); + $this -> checkOutput("\x1b@\x1dkB\x0801234567"); + } + + public function testBarcodeUpceNumeric11Char() + { + $this -> printer -> barcode("01234567890", Printer::BARCODE_UPCE); + $this -> checkOutput("\x1b@\x1dkB\x0b01234567890"); + } + + public function testBarcodeUpceNumeric12Char() + { + $this -> printer -> barcode("012345678901", Printer::BARCODE_UPCE); + $this -> checkOutput("\x1b@\x1dkB\x0c012345678901"); + } + + public function testBarcodeUpceNumeric9Char() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("012345678", Printer::BARCODE_UPCE); + } + + public function testBarcodeUpceNonNumeric12Char() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("A12345678901", Printer::BARCODE_UPCE); + } + + /* Barcode - JAN13 */ + public function testBarcodeJan13Numeric12Char() + { + $this -> printer -> barcode("012345678901", Printer::BARCODE_JAN13); + $this -> checkOutput("\x1b@\x1dkC\x0c012345678901"); + } + + public function testBarcodeJan13Numeric13Char() + { + $this -> printer -> barcode("0123456789012", Printer::BARCODE_JAN13); + $this -> checkOutput("\x1b@\x1dkC\x0d0123456789012"); + } + + public function testBarcodeJan13Numeric11Char() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("01234567890", Printer::BARCODE_JAN13); + } + + public function testBarcodeJan13NonNumeric13Char() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("A123456789012", Printer::BARCODE_JAN13); + } + + /* Barcode - JAN8 */ + public function testBarcodeJan8Numeric7Char() + { + $this -> printer -> barcode("0123456", Printer::BARCODE_JAN8); + $this -> checkOutput("\x1b@\x1dkD\x070123456"); + } + + public function testBarcodeJan8Numeric8Char() + { + $this -> printer -> barcode("01234567", Printer::BARCODE_JAN8); + $this -> checkOutput("\x1b@\x1dkD\x0801234567"); + } + + public function testBarcodeJan8Numeric9Char() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("012345678", Printer::BARCODE_JAN8); + } + + public function testBarcodeJan8NonNumeric8Char() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("A1234567", Printer::BARCODE_JAN8); + } + + /* Barcode - Code39 */ + public function testBarcodeCode39AsDefault() + { + $this -> printer -> barcode("1234"); + $this -> checkOutput("\x1b@\x1dkE\x041234"); + } + + public function testBarcodeCode39Text() + { + $this -> printer -> barcode("ABC 012", Printer::BARCODE_CODE39); + $this -> checkOutput("\x1b@\x1dkE\x07ABC 012"); + } + + public function testBarcodeCode39SpecialChars() + { + $this -> printer -> barcode("$%+-./", Printer::BARCODE_CODE39); + $this -> checkOutput("\x1b@\x1dkE\x06$%+-./"); + } + + public function testBarcodeCode39Asterisks() + { + $this -> printer -> barcode("*TEXT*", Printer::BARCODE_CODE39); + $this -> checkOutput("\x1b@\x1dkE\x06*TEXT*"); + } + + public function testBarcodeCode39AsterisksUnmatched() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("*TEXT", Printer::BARCODE_CODE39); + } + + public function testBarcodeCode39AsteriskInText() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("12*34", Printer::BARCODE_CODE39); + } + + public function testBarcodeCode39Lowercase() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("abcd", Printer::BARCODE_CODE39); + } + + public function testBarcodeCode39Empty() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("**", Printer::BARCODE_CODE39); + } + + /* Barcode - ITF */ + public function testBarcodeItfNumericEven() + { + $this -> printer -> barcode("1234", Printer::BARCODE_ITF); + $this -> checkOutput("\x1b@\x1dkF\x041234"); + } + + public function testBarcodeItfNumericOdd() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("123", Printer::BARCODE_ITF); + } + + public function testBarcodeItfNonNumericEven() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("A234", Printer::BARCODE_ITF); + } + + /* Barcode - Codabar */ + public function testBarcodeCodabarNumeric() + { + $this -> printer -> barcode("A012345A", Printer::BARCODE_CODABAR); + $this -> checkOutput("\x1b@\x1dkG\x08A012345A"); + } + + public function testBarcodeCodabarSpecialChars() + { + $this -> printer -> barcode("A012$+-./:A", Printer::BARCODE_CODABAR); + $this -> checkOutput("\x1b@\x1dkG\x0bA012$+-./:A"); + } + + public function testBarcodeCodabarNotWrapped() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("012345", Printer::BARCODE_CODABAR); + } + + public function testBarcodeCodabarStartStopWrongPlace() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("012A45", Printer::BARCODE_CODABAR); + } + + /* Barcode - Code93 */ + public function testBarcodeCode93Valid() + { + $this -> printer -> barcode("012abcd", Printer::BARCODE_CODE93); + $this -> checkOutput("\x1b@\x1dkH\x07012abcd"); + } + + public function testBarcodeCode93Empty() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("", Printer::BARCODE_CODE93); + } + + /* Barcode - Code128 */ + public function testBarcodeCode128ValidA() + { + $this -> printer -> barcode("{A" . "012ABCD", Printer::BARCODE_CODE128); + $this -> checkOutput("\x1b@\x1dkI\x09{A012ABCD"); + } + + public function testBarcodeCode128ValidB() + { + $this -> printer -> barcode("{B" . "012ABCDabcd", Printer::BARCODE_CODE128); + $this -> checkOutput("\x1b@\x1dkI\x0d{B012ABCDabcd"); + } + + public function testBarcodeCode128ValidC() + { + $this -> printer -> barcode("{C" . chr(21) . chr(32) . chr(43), Printer::BARCODE_CODE128); + $this -> checkOutput("\x1b@\x1dkI\x05{C\x15 +"); + } + + public function testBarcodeCode128NoCodeSet() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> barcode("ABCD", Printer::BARCODE_CODE128); + } + + /* Pulse */ + function testPulseDefault() + { + $this -> printer -> pulse(); + $this -> checkOutput("\x1b@\x1bp0 printer -> pulse(1); + $this -> checkOutput("\x1b@\x1bp1 printer -> pulse(0, 2, 2); + $this -> checkOutput("\x1b@\x1bp0\x01\x01"); + } + + function testPulseOddMs() + { + $this -> printer -> pulse(0, 3, 3); // Should be rounded down and give same output + $this -> checkOutput("\x1b@\x1bp0\x01\x01"); + } + + function testPulseTooHigh() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> pulse(0, 512, 2); + } + + function testPulseTooLow() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> pulse(0, 0, 2); + } + + function testPulseNotANumber() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> pulse("fish"); + } + + /* Set reverse */ + public function testSetReverseColorsDefault() + { + $this -> printer -> setReverseColors(); + $this -> checkOutput("\x1b@\x1dB\x01"); + } + + public function testSetReverseColorsOn() + { + $this -> printer -> setReverseColors(true); + $this -> checkOutput("\x1b@\x1dB\x01"); + } + + public function testSetReverseColorsOff() + { + $this -> printer -> setReverseColors(false); + $this -> checkOutput("\x1b@\x1dB\x00"); + } + + public function testSetReverseColorsNonBoolean() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setReverseColors(7); + } + + /* Bit image print */ + public function testBitImageBlack() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_black.png"); + $this -> printer -> bitImage($img); + $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x01\x00\x80"); + } + + public function testBitImageWhite() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_white.png"); + $this -> printer -> bitImage($img); + $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x01\x00\x00"); + } + + public function testBitImageBoth() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/black_white.png"); + $this -> printer -> bitImage($img); + $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x02\x00\xc0\x00"); + } + + public function testBitImageTransparent() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/black_transparent.png"); + $this -> printer -> bitImage($img); + $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x02\x00\xc0\x00"); + } + + /* Bit image column format */ + public function testBitImageColumnFormatBlack() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_black.png"); + $this -> printer -> bitImageColumnFormat($img); + $this -> checkOutput("\x1b@\x1b3\x10\x1b*!\x01\x00\x80\x00\x00\x0a\x1b2"); + } + + public function testBitImageColumnFormatWhite() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_white.png"); + $this -> printer -> bitImageColumnFormat($img); + $this -> checkOutput("\x1b@\x1b3\x10\x1b*!\x01\x00\x00\x00\x00\x0a\x1b2"); + } + + public function testBitImageColumnFormatBoth() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/black_white.png"); + $this -> printer -> bitImageColumnFormat($img); + $this -> checkOutput("\x1b@\x1b3\x10\x1b*!\x02\x00\x80\x00\x00\x80\x00\x00\x0a\x1b2"); + } + + public function testBitImageColumnFormatTransparent() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/black_transparent.png"); + $this -> printer -> bitImageColumnFormat($img); + $this -> checkOutput("\x1b@\x1b3\x10\x1b*!\x02\x00\x80\x00\x00\x80\x00\x00\x0a\x1b2"); + } + + /* Graphics print */ + public function testGraphicsWhite() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_white.png"); + $this -> printer -> graphics($img); + $this -> checkOutput("\x1b@\x1d(L\x0b\x000p0\x01\x011\x01\x00\x01\x00\x00\x1d(L\x02\x0002"); + } + + public function testGraphicsBlack() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_black.png"); + $this -> printer -> graphics($img); + $this -> checkOutput("\x1b@\x1d(L\x0b\x000p0\x01\x011\x01\x00\x01\x00\x80\x1d(L\x02\x0002"); + } + + public function testGraphicsBoth() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/black_white.png"); + $this -> printer -> graphics($img); + $this -> checkOutput("\x1b@\x1d(L\x0c\x000p0\x01\x011\x02\x00\x02\x00\xc0\x00\x1d(L\x02\x0002"); + } + + public function testGraphicsTransparent() + { + $this -> requireGraphicsLibrary(); + $img = EscposImage::load(dirname(__FILE__)."/resources/black_transparent.png"); + $this -> printer -> graphics($img); + $this -> checkOutput("\x1b@\x1d(L\x0c\x000p0\x01\x011\x02\x00\x02\x00\xc0\x00\x1d(L\x02\x0002"); + } + + /* PDF417 code */ + public function testPdf417CodeDefaults() + { + $this -> printer -> pdf417Code("1234"); + $this -> checkOutput("\x1b@\x1d(k\x03\x000F\x00\x1d(k\x03\x000A\x00\x1d(k\x03\x000C\x03\x1d(k\x03\x000D\x03\x1d(k\x04\x000E1\x01\x1d(k\x07\x000P01234\x1d(k\x03\x000Q0"); + } + + public function testPdf417CodeEmpty() + { + $this -> printer -> pdf417Code(''); + $this -> checkOutput("\x1b@"); // No commands actually sent + } + + public function testPdf417CodeNotSupported() + { + $this -> setExpectedException('Exception'); + $profile = SimpleCapabilityProfile::getInstance(); + $this -> printer = new Printer($this -> outputConnector, $profile); + $this -> printer -> pdf417Code("1234"); + } + + public function testPdf417CodeChangeGeometry() + { + // 7-dot wide, 4-times height, 4 data columns + $this -> printer -> pdf417Code("1234", 7, 4, 4); + $this -> checkOutput("\x1b@\x1d(k\x03\x000F\x00\x1d(k\x03\x000A\x04\x1d(k\x03\x000C\x07\x1d(k\x03\x000D\x04\x1d(k\x04\x000E1\x01\x1d(k\x07\x000P01234\x1d(k\x03\x000Q0"); + } + + public function testPdf417CodeChangeErrorCorrection() + { + $this -> printer -> pdf417Code("1234", 3, 3, 0, 0.5); + $this -> checkOutput("\x1b@\x1d(k\x03\x000F\x00\x1d(k\x03\x000A\x00\x1d(k\x03\x000C\x03\x1d(k\x03\x000D\x03\x1d(k\x04\x000E1\x05\x1d(k\x07\x000P01234\x1d(k\x03\x000Q0"); + } + + public function testPdf417CodeChangeErrorCorrectionOutOfRange() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> pdf417Code("1234", 3, 3, 0, 5.0); + } + + public function testPdf417CodeChangeErrorCorrectionInvalid() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> pdf417Code("1234", 3, 3, 0, "Foobar"); + } + + public function testPdf417CodeChangeOption() + { + // Use the alternate truncated format + $this -> printer -> pdf417Code("1234", 3, 3, 0, 0.1, Printer::PDF417_TRUNCATED); + $this -> checkOutput("\x1b@\x1d(k\x03\x000F\x01\x1d(k\x03\x000A\x00\x1d(k\x03\x000C\x03\x1d(k\x03\x000D\x03\x1d(k\x04\x000E1\x01\x1d(k\x07\x000P01234\x1d(k\x03\x000Q0"); + } + + /* QR code */ + public function testQRCodeDefaults() + { + // Test will fail if default values change + $this -> printer -> qrCode("1234"); + $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); + } + + public function testQRCodeDefaultsAreCorrect() + { + // Below tests assume that defaults are as written here (output string should be same as above) + $this -> printer -> qrCode("1234", Printer::QR_ECLEVEL_L, 3, Printer::QR_MODEL_2); + $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); + } + + public function testQRCodeEmpty() + { + $this -> printer -> qrCode(''); + $this -> checkOutput("\x1b@"); // No commands actually sent + } + + public function testQRCodeChangeEC() + { + $this -> printer -> qrCode("1234", Printer::QR_ECLEVEL_H); + $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E3\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); + } + + public function testQRCodeChangeSize() + { + $this -> printer -> qrCode("1234", Printer::QR_ECLEVEL_L, 7); + $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x07\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); + } + + public function testQRCodeChangeModel() + { + $this -> printer -> qrCode("1234", Printer::QR_ECLEVEL_L, 3, Printer::QR_MODEL_1); + $this -> checkOutput("\x1b@\x1d(k\x04\x001A1\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); + } + + /* Feed form - Required on page-mode only printers */ + public function testFeedForm() + { + $this -> printer -> feedForm(); + $this -> checkOutput("\x1b@\x0c"); + } + + /* Release */ + public function testRelease() + { + $this -> printer -> release(); + $this -> checkOutput("\x1b@\x1b\x71"); + } + + /* Set text size */ + public function testSetTextSizeNormal() + { + $this -> printer -> setTextSize(1, 1); + $this -> checkOutput("\x1b@\x1d!\x00"); + } + + public function testSetTextSizeWide() + { + $this -> printer -> setTextSize(4, 1); + $this -> checkOutput("\x1b@\x1d!0"); + } + + public function testSetTextSizeNarrow() + { + $this -> printer -> setTextSize(1, 4); + $this -> checkOutput("\x1b@\x1d!\x03"); + } + + public function testSetTextSizeLarge() + { + $this -> printer -> setTextSize(4, 4); + $this -> checkOutput("\x1b@\x1d!3"); + } + + public function testSetTextSizeInvalid() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setTextSize(0, 9); + } + + /* Set color */ + public function testSetColorDefault() + { + $this -> printer -> setColor(Printer::COLOR_1); + $this -> checkOutput("\x1b@\x1br\x00"); + } + + public function testSetColorAlternative() + { + $this -> printer -> setColor(Printer::COLOR_2); + $this -> checkOutput("\x1b@\x1br\x01"); + } + + public function testSetColorInvalid() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setColor(3); + } + + /* Set line spacing */ + public function testSetLineSpacingDefault() + { + $this -> printer -> setLineSpacing(); + $this -> checkOutput("\x1b@\x1b2"); + } + + public function testSetLineSpacingInvalid() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setLineSpacing(300); + } + + public function testSetLineSpacingSmaller() + { + $this -> printer -> setLineSpacing(16); + $this -> checkOutput("\x1b@\x1b3\x10"); + } + + public function testSetLineSpacingLarger() + { + $this -> printer -> setLineSpacing(32); + $this -> checkOutput("\x1b@\x1b3\x20"); + } + + /* Set print width */ + public function testSetPrintWidthDefault() + { + $this -> printer -> setPrintWidth(); + $this -> checkOutput("\x1b@\x1dW\x00\x02"); + } + + public function testSetPrintWidthNarrow() + { + $this -> printer -> setPrintWidth(400); + $this -> checkOutput("\x1b@\x1dW\x90\x01"); + } + + public function testSetPrintWidthInvalid() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setPrintWidth(0); + } + + /* Set print left margin */ + public function testSetPrintLeftMarginDefault() + { + $this -> printer -> setPrintLeftMargin(); + $this -> checkOutput("\x1b@\x1dL\x00\x00"); + } + + public function testSetPrintLeftMarginWide() + { + $this -> printer -> setPrintLeftMargin(32); + $this -> checkOutput("\x1b@\x1dL\x20\x00"); + } + + public function testPrintLeftMarginInvalid() + { + $this -> setExpectedException('InvalidArgumentException'); + $this -> printer -> setPrintLeftMargin(70000); + $this -> checkOutput(); + } + + /* Upside-down print */ + public function testSetUpsideDown() + { + $this -> printer -> setUpsideDown(true); + $this -> checkOutput("\x1b@\x1b{\x01"); + } } /* * For testing that string-castable objects are handled */ -class FooBar { - private $foo; - public function __construct($foo) { - $this -> foo = $foo; - } - - public function __toString() { - return $this -> foo; - } +class FooBar +{ + private $foo; + public function __construct($foo) + { + $this -> foo = $foo; + } + + public function __toString() + { + return $this -> foo; + } } -?> diff --git a/htdocs/includes/mike42/escpos-php/test/unit/FilePrintConnectorTest.php b/htdocs/includes/mike42/escpos-php/test/unit/FilePrintConnectorTest.php new file mode 100644 index 00000000000..63728717017 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/test/unit/FilePrintConnectorTest.php @@ -0,0 +1,26 @@ + finalize(); + $connector -> finalize(); // Silently do nothing if printer already closed + unlink($tmpfname); + } + + public function testReadAfterClose() + { + // Should attempt to send data to the local printer by writing to it + $this -> setExpectedException('Exception'); + $tmpfname = tempnam("/tmp", "php"); + $connector = new FilePrintConnector($tmpfname); + $connector -> finalize(); + $connector -> write("Test"); + unlink($tmpfname); + } +} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/GdEscposImageTest.php b/htdocs/includes/mike42/escpos-php/test/unit/GdEscposImageTest.php new file mode 100644 index 00000000000..da755f7b9ee --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/test/unit/GdEscposImageTest.php @@ -0,0 +1,101 @@ + setExpectedException('Exception'); + $this -> loadAndCheckImg('not a real file.png', 1, 1, null, null); + } + + /** + * @medium + */ + public function testGdEmpty() + { + $this -> loadAndCheckImg(null, 0, 0, "", array()); + } + + /** + * @medium + */ + public function testGdBlack() + { + foreach (array('png', 'jpg', 'gif') as $format) { + $this -> loadAndCheckImg('canvas_black.' . $format, 1, 1, "\x80", array("\x80")); + } + } + + /** + * @medium + */ + public function testGdBlackTransparent() + { + foreach (array('png', 'gif') as $format) { + $this -> loadAndCheckImg('black_transparent.' . $format, 2, 2, "\xc0\x00", array("\x80\x80")); + } + } + + /** + * @medium + */ + public function testGdBlackWhite() + { + foreach (array('png', 'jpg', 'gif') as $format) { + $this -> loadAndCheckImg('black_white.' . $format, 2, 2, "\xc0\x00", array("\x80\x80")); + } + } + + /** + * @medium + */ + public function testGdWhite() + { + foreach (array('png', 'jpg', 'gif') as $format) { + $this -> loadAndCheckImg('canvas_white.' . $format, 1, 1, "\x00", array("\x00")); + } + } + + /** + * Load an EscposImage with (optionally) certain libraries disabled and run a check. + */ + private function loadAndCheckImg($fn, $width, $height, $rasterFormat = null, $columnFormat = null) + { + if (!EscposImage::isGdLoaded()) { + $this -> markTestSkipped("imagick plugin is required for this test"); + } + $onDisk = ($fn === null ? null : (dirname(__FILE__) . "/resources/$fn")); + // With optimisations + $imgOptimised = new GdEscposImage($onDisk, true); + $this -> checkImg($imgOptimised, $width, $height, $rasterFormat, $columnFormat); + // ... and without + $imgUnoptimised = new GdEscposImage($onDisk, false); + $this -> checkImg($imgUnoptimised, $width, $height, $rasterFormat, $columnFormat); + } + + /** + * Check image against known width, height, output. + */ + private function checkImg(EscposImage $img, $width, $height, $rasterFormatExpected = null, $columnFormatExpected = null) + { + $rasterFormatActual = $img -> toRasterFormat(); + $columnFormatActual = $img -> toColumnFormat(); + if ($rasterFormatExpected === null) { + echo "\nImage was: " . $img -> getWidth() . "x" . $img -> getHeight() . ", raster data \"" . friendlyBinary($rasterFormatActual) . "\""; + } + if ($columnFormatExpected === null) { + echo "\nImage was: " . $img -> getWidth() . "x" . $img -> getHeight() . ", column data \"" . friendlyBinary($columnFormatActual) . "\""; + } + $this -> assertTrue($img -> getHeight() == $height); + $this -> assertTrue($img -> getWidth() == $width); + $this -> assertTrue($rasterFormatExpected === $rasterFormatActual); + $this -> assertTrue($columnFormatExpected === $columnFormatActual); + } +} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/ImagickEscposImageTest.php b/htdocs/includes/mike42/escpos-php/test/unit/ImagickEscposImageTest.php new file mode 100644 index 00000000000..76831f761c6 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/test/unit/ImagickEscposImageTest.php @@ -0,0 +1,142 @@ + setExpectedException('Exception'); + $this -> loadAndCheckImg('not a real file.png', 1, 1, null, null); + } + + /** + * @medium + */ + public function testImagickEmpty() + { + $this -> loadAndCheckImg(null, 0, 0, "", array()); + } + + /** + * @medium + */ + public function testImagickBlack() + { + foreach (array('png', 'jpg', 'gif') as $format) { + $this -> loadAndCheckImg('canvas_black.' . $format, 1, 1, "\x80", array("\x80")); + } + } + + /** + * @medium + */ + public function testImagickBlackTransparent() + { + foreach (array('png', 'gif') as $format) { + $this -> loadAndCheckImg('black_transparent.' . $format, 2, 2, "\xc0\x00", array("\x80\x80")); + } + } + + /** + * @medium + */ + public function testImagickBlackWhite() + { + foreach (array('png', 'jpg', 'gif') as $format) { + $this -> loadAndCheckImg('black_white.' . $format, 2, 2, "\xc0\x00", array("\x80\x80")); + } + } + + /** + * @medium + */ + public function testImagickBlackWhiteTall() + { + // We're very interested in correct column format chopping here at 8 pixels + $this -> loadAndCheckImg('black_white_tall.png', 2, 16, + "\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x00\x00\x00\x00\x00\x00\x00\x00", array("\xff\xff", "\x00\x00")); + } + + /** + * @medium + */ + public function testImagickWhite() + { + foreach (array('png', 'jpg', 'gif') as $format) { + $this -> loadAndCheckImg('canvas_white.' . $format, 1, 1, "\x00", array("\x00")); + } + } + + /** + * PDF test - load tiny PDF and check for well-formedness + * These are also skipped if you don't have imagick + * @medium + */ + public function testPdfAllPages() + { + $this -> loadAndCheckPdf('doc.pdf', 1, 1, array("\x00", "\x80"), array(array("\x00"), array("\x80"))); + } + + public function testPdfBadFilename() + { + $this -> setExpectedException('Exception'); + $this -> loadAndCheckPdf('not a real file', 1, 1, array(), array()); + } + + /** + * Load an EscposImage and run a check. + */ + private function loadAndCheckImg($fn, $width, $height, $rasterFormat = null, $columnFormat = null) + { + if (!EscposImage::isImagickLoaded()) { + $this -> markTestSkipped("imagick plugin is required for this test"); + } + $onDisk = ($fn === null ? null : (dirname(__FILE__) . "/resources/$fn")); + // With optimisations + $imgOptimised = new ImagickEscposImage($onDisk, true); + $this -> checkImg($imgOptimised, $width, $height, $rasterFormat, $columnFormat); + // ... and without + $imgUnoptimised = new ImagickEscposImage($onDisk, false); + $this -> checkImg($imgUnoptimised, $width, $height, $rasterFormat, $columnFormat); + } + + /** + * Same as above, loading document and checking pages against some expected values. + */ + private function loadAndCheckPdf($fn, $width, $height, array $rasterFormat = null, array $columnFormat = null) + { + if (!EscposImage::isImagickLoaded()) { + $this -> markTestSkipped("imagick plugin required for this test"); + } + $pdfPages = ImagickEscposImage::loadPdf(dirname(__FILE__) . "/resources/$fn", $width); + $this -> assertTrue(count($pdfPages) == count($rasterFormat), "Got back wrong number of pages"); + foreach ($pdfPages as $id => $img) { + $this -> checkImg($img, $width, $height, $rasterFormat[$id], $columnFormat[$id]); + } + } + + /** + * Check image against known width, height, output. + */ + private function checkImg(EscposImage $img, $width, $height, $rasterFormatExpected = null, $columnFormatExpected = null) + { + $rasterFormatActual = $img -> toRasterFormat(); + $columnFormatActual = $img -> toColumnFormat(); + if ($rasterFormatExpected === null) { + echo "\nImage was: " . $img -> getWidth() . "x" . $img -> getHeight() . ", raster data \"" . friendlyBinary($rasterFormatActual) . "\""; + } + if ($columnFormatExpected === null) { + echo "\nImage was: " . $img -> getWidth() . "x" . $img -> getHeight() . ", column data \"" . friendlyBinary($columnFormatActual) . "\""; + } + $this -> assertEquals($height , $img -> getHeight()); + $this -> assertEquals($width, $img -> getWidth()); + $this -> assertEquals($rasterFormatExpected, $rasterFormatActual, "Raster format did not match expected"); + $this -> assertEquals($columnFormatExpected, $columnFormatActual, "Column format did not match expected"); + } +} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/LegacyCapabilityProfileTest.php b/htdocs/includes/mike42/escpos-php/test/unit/LegacyCapabilityProfileTest.php new file mode 100644 index 00000000000..360dee90fe7 --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/test/unit/LegacyCapabilityProfileTest.php @@ -0,0 +1,79 @@ + profiles = array( + 'Mike42\Escpos\CapabilityProfiles\DefaultCapabilityProfile', + 'Mike42\Escpos\CapabilityProfiles\EposTepCapabilityProfile', + 'Mike42\Escpos\CapabilityProfiles\SimpleCapabilityProfile', + 'Mike42\Escpos\CapabilityProfiles\StarCapabilityProfile', + 'Mike42\Escpos\CapabilityProfiles\P822DCapabilityProfile'); + $this -> checklist = array(); + foreach ($this -> profiles as $profile) { + $this-> checklist[] = $profile::getInstance(); + } + } + + function testSupportedCodePages() + { + foreach ($this -> checklist as $obj) { + $check = $obj -> getCodePages(); + $this -> assertTrue(is_array($check) && isset($check[0])); + foreach ($check as $num => $page) { + $this -> assertTrue(is_numeric($num)); + } + } + } + + function testText() { + /* Smoke test over text rendering with each profile. + * Just makes sure we can attempt to print 'hello world' and a non-ASCII + * char without anything blowing up */ + foreach ($this -> checklist as $obj) { + $connector = new DummyPrintConnector(); + $printer = new Printer($connector, $obj); + $printer -> text("Hello world €\n"); + $printer -> close(); + // Check for character cache + $profileName = $obj -> getId(); + $expected = "Characters-$profileName.ser.z"; + $filename = __DIR__ . "/../../src/Mike42/Escpos/PrintBuffers/cache/$expected"; + $this -> assertFileExists($filename); + } + } + + function testSupportsBitImageRaster() + { + foreach ($this -> checklist as $obj) { + $check = $obj -> getSupportsBitImageRaster(); + $this -> assertTrue(is_bool($check)); + } + } + + function testSupportsGraphics() + { + foreach ($this -> checklist as $obj) { + $check = $obj -> getSupportsGraphics(); + $this -> assertTrue(is_bool($check)); + } + } + + function testSupportsQrCode() + { + foreach ($this -> checklist as $obj) { + $check = $obj -> getSupportsQrCode(); + $this -> assertTrue(is_bool($check)); + } + } +} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/UriPrintConnectorTest.php b/htdocs/includes/mike42/escpos-php/test/unit/UriPrintConnectorTest.php new file mode 100644 index 00000000000..715dd8d77de --- /dev/null +++ b/htdocs/includes/mike42/escpos-php/test/unit/UriPrintConnectorTest.php @@ -0,0 +1,59 @@ + write("AAA"); + $connector -> finalize(); + $this -> assertEquals("AAA", file_get_contents($filename)); + $this -> assertEquals('Mike42\Escpos\PrintConnectors\FilePrintConnector', get_class($connector)); + unlink($filename); + } + + /** + * @expectedException PHPUnit_Framework_Error + * @expectedExceptionMessage not finalized + */ + public function testSmb() + { + $connector = UriPrintConnector::get("smb://windows/printer"); + $this -> assertEquals('Mike42\Escpos\PrintConnectors\WindowsPrintConnector', get_class($connector)); + // We expect that this will throw an exception, we can't + // realistically print to a real printer in this test though... :) + $connector -> __destruct(); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Malformed connector URI + */ + public function testBadUri() + { + $connector = UriPrintConnector::get("foooooo"); + } + + /** + * @expectedException Exception + * @expectedExceptionMessage Connection refused + */ + public function testNetwork() + { + // Port should be closed so we can catch an error and move on + $connector = UriPrintConnector::get("tcp://localhost:45987/"); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage URI sheme is not supported: ldap:// + */ + public function testUnsupportedUri() + { + // Try to print to something silly + $connector = UriPrintConnector::get("ldap://host:1234/"); + } +} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/WindowsPrintConnectorTest.php b/htdocs/includes/mike42/escpos-php/test/unit/WindowsPrintConnectorTest.php index 392775d3277..f6e10fae5f5 100644 --- a/htdocs/includes/mike42/escpos-php/test/unit/WindowsPrintConnectorTest.php +++ b/htdocs/includes/mike42/escpos-php/test/unit/WindowsPrintConnectorTest.php @@ -1,278 +1,304 @@ getMockConnector("LPT1", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> once()) - -> method('runWrite') - -> with($this -> equalTo(''), $this -> equalTo("LPT1")); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } +class WindowsPrintConnectorTest extends PHPUnit_Framework_TestCase +{ + private $connector; - public function testLptMac() { - // Cannot print to local printer on Mac with this connector - $this -> setExpectedException('BadMethodCallException'); - $connector = $this -> getMockConnector("LPT1", WindowsPrintConnector::PLATFORM_MAC); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } + public function testLptWindows() + { + // Should attempt to send data to the local printer by writing to it + $connector = $this -> getMockConnector("LPT1", WindowsPrintConnector::PLATFORM_WIN); + $connector -> expects($this -> once()) + -> method('runWrite') + -> with($this -> equalTo(''), $this -> equalTo("LPT1")); + $connector -> expects($this -> exactly(0)) + -> method('runCommand'); + $connector -> expects($this -> exactly(0)) + -> method('runCopy'); + $connector -> finalize(); + } - public function testLptLinux() { - // Cannot print to local printer on Linux with this connector - $this -> setExpectedException('BadMethodCallException'); - $connector = $this -> getMockConnector("LPT1", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } + public function testLptMac() + { + // Cannot print to local printer on Mac with this connector + $this -> setExpectedException('BadMethodCallException'); + $connector = $this -> getMockConnector("LPT1", WindowsPrintConnector::PLATFORM_MAC); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> expects($this -> exactly(0)) + -> method('runCommand'); + $connector -> expects($this -> exactly(0)) + -> method('runCopy'); + $connector -> finalize(); + } - public function testComWindows() { - // Simple file write - $connector = $this -> getMockConnector("COM1", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> once()) - -> method('runWrite') - -> with($this -> equalTo(''), $this -> equalTo("COM1")); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } + public function testLptLinux() + { + // Cannot print to local printer on Linux with this connector + $this -> setExpectedException('BadMethodCallException'); + $connector = $this -> getMockConnector("LPT1", WindowsPrintConnector::PLATFORM_LINUX); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> expects($this -> exactly(0)) + -> method('runCommand'); + $connector -> expects($this -> exactly(0)) + -> method('runCopy'); + $connector -> finalize(); + } - public function testComMac() { - // Cannot print to local printer on Mac with this connector - $this -> setExpectedException('BadMethodCallException'); - $connector = $this -> getMockConnector("COM1", WindowsPrintConnector::PLATFORM_MAC); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } + public function testComWindows() + { + // Simple file write + $connector = $this -> getMockConnector("COM1", WindowsPrintConnector::PLATFORM_WIN); + $connector -> expects($this -> once()) + -> method('runWrite') + -> with($this -> equalTo(''), $this -> equalTo("COM1")); + $connector -> expects($this -> exactly(0)) + -> method('runCommand'); + $connector -> expects($this -> exactly(0)) + -> method('runCopy'); + $connector -> finalize(); + } - public function testComLinux() { - // Cannot print to local printer on Linux with this connector - $this -> setExpectedException('BadMethodCallException'); - $connector = $this -> getMockConnector("COM1", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } + public function testComMac() + { + // Cannot print to local printer on Mac with this connector + $this -> setExpectedException('BadMethodCallException'); + $connector = $this -> getMockConnector("COM1", WindowsPrintConnector::PLATFORM_MAC); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> expects($this -> exactly(0)) + -> method('runCommand'); + $connector -> expects($this -> exactly(0)) + -> method('runCopy'); + $connector -> finalize(); + } - public function testLocalShareWindows() { - $connector = $this -> getMockConnector("Printer", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> once()) - -> method('runCopy') - -> with($this -> anything(), $this -> stringContains('\\Printer')); - $connector -> finalize(); - } + public function testComLinux() + { + // Cannot print to local printer on Linux with this connector + $this -> setExpectedException('BadMethodCallException'); + $connector = $this -> getMockConnector("COM1", WindowsPrintConnector::PLATFORM_LINUX); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> expects($this -> exactly(0)) + -> method('runCommand'); + $connector -> expects($this -> exactly(0)) + -> method('runCopy'); + $connector -> finalize(); + } - public function testSharedPrinterWindows() { - $connector = $this -> getMockConnector("smb://example-pc/Printer", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> once()) - -> method('runCopy') - -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); - $connector -> finalize(); - } + public function testLocalShareWindows() + { + $connector = $this -> getMockConnector("Printer", WindowsPrintConnector::PLATFORM_WIN); + $connector -> expects($this -> exactly(0)) + -> method('runCommand'); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> expects($this -> once()) + -> method('runCopy') + -> with($this -> anything(), $this -> stringContains('\\Printer')); + $connector -> finalize(); + } - public function testSharedPrinterWindowsUsername() { - $connector = $this -> getMockConnector("smb://bob@example-pc/Printer", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('net use \'\\\\example-pc\\Printer\' \'/user:bob\'')); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> once()) - -> method('runCopy') - -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); - $connector -> finalize(); - } + public function testSharedPrinterWindows() + { + $connector = $this -> getMockConnector("smb://example-pc/Printer", WindowsPrintConnector::PLATFORM_WIN); + $connector -> expects($this -> exactly(0)) + -> method('runCommand'); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> expects($this -> once()) + -> method('runCopy') + -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); + $connector -> finalize(); + } - public function testSharedPrinterWindowsUsernameDomain() { - $connector = $this -> getMockConnector("smb://bob@example-pc/home/Printer", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('net use \'\\\\example-pc\\Printer\' \'/user:home\\bob\'')); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> once()) - -> method('runCopy') - -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); - $connector -> finalize(); - } + public function testSharedPrinterWindowsUsername() + { + $connector = $this -> getMockConnector("smb://bob@example-pc/Printer", WindowsPrintConnector::PLATFORM_WIN); + $connector -> expects($this -> once()) + -> method('runCommand') + -> with($this -> equalTo('net use \'\\\\example-pc\\Printer\' \'/user:bob\'')); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> expects($this -> once()) + -> method('runCopy') + -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); + $connector -> finalize(); + } - public function testSharedPrinterWindowsUsernamePassword() { - $connector = $this -> getMockConnector("smb://bob:secret@example-pc/Printer", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('net use \'\\\\example-pc\\Printer\' \'/user:bob\' \'secret\'')); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> once()) - -> method('runCopy') - -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); - $connector -> finalize(); - } + public function testSharedPrinterWindowsUsernameDomain() + { + $connector = $this -> getMockConnector("smb://bob@example-pc/home/Printer", WindowsPrintConnector::PLATFORM_WIN); + $connector -> expects($this -> once()) + -> method('runCommand') + -> with($this -> equalTo('net use \'\\\\example-pc\\Printer\' \'/user:home\\bob\'')); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> expects($this -> once()) + -> method('runCopy') + -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); + $connector -> finalize(); + } - public function testSharedPrinterMac() { - // Not implemented - $this -> setExpectedException('Exception'); - $connector = $this -> getMockConnector("smb://Guest@example-pc/Printer", WindowsPrintConnector::PLATFORM_MAC); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } + public function testSharedPrinterWindowsUsernamePassword() + { + $connector = $this -> getMockConnector("smb://bob:secret@example-pc/Printer", WindowsPrintConnector::PLATFORM_WIN); + $connector -> expects($this -> once()) + -> method('runCommand') + -> with($this -> equalTo('net use \'\\\\example-pc\\Printer\' \'/user:bob\' \'secret\'')); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> expects($this -> once()) + -> method('runCopy') + -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); + $connector -> finalize(); + } - public function testSharedPrinterLinux() { - $connector = $this -> getMockConnector("smb://example-pc/Printer", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('smbclient \'//example-pc/Printer\' -c \'print -\' -N')); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> finalize(); - } + public function testSharedPrinterMac() + { + // Not implemented + $this -> setExpectedException('Exception'); + $connector = $this -> getMockConnector("smb://Guest@example-pc/Printer", WindowsPrintConnector::PLATFORM_MAC); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> expects($this -> exactly(0)) + -> method('runCommand'); + $connector -> expects($this -> exactly(0)) + -> method('runCopy'); + $connector -> finalize(); + } - public function testSharedPrinterLinuxUsername() { - $connector = $this -> getMockConnector("smb://bob@example-pc/Printer", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('smbclient \'//example-pc/Printer\' -U \'bob\' -c \'print -\' -N')); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> finalize(); - } + public function testSharedPrinterLinux() + { + $connector = $this -> getMockConnector("smb://example-pc/Printer", WindowsPrintConnector::PLATFORM_LINUX); + $connector -> expects($this -> once()) + -> method('runCommand') + -> with($this -> equalTo('smbclient \'//example-pc/Printer\' -c \'print -\' -N -m SMB2')); + $connector -> expects($this -> exactly(0)) + -> method('runCopy'); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> finalize(); + } - public function testSharedPrinterLinuxUsernameDomain() { - $connector = $this -> getMockConnector("smb://bob@example-pc/home/Printer", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('smbclient \'//example-pc/Printer\' -U \'home\\bob\' -c \'print -\' -N')); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> finalize(); - } + public function testSharedPrinterLinuxUsername() + { + $connector = $this -> getMockConnector("smb://bob@example-pc/Printer", WindowsPrintConnector::PLATFORM_LINUX); + $connector -> expects($this -> once()) + -> method('runCommand') + -> with($this -> equalTo('smbclient \'//example-pc/Printer\' -U \'bob\' -c \'print -\' -N -m SMB2')); + $connector -> expects($this -> exactly(0)) + -> method('runCopy'); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> finalize(); + } - public function testSharedPrinterLinuxUsernamePassword() { - $connector = $this -> getMockConnector("smb://bob:secret@example-pc/Printer", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('smbclient \'//example-pc/Printer\' \'secret\' -U \'bob\' -c \'print -\'')); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> finalize(); - } + public function testSharedPrinterLinuxUsernameDomain() + { + $connector = $this -> getMockConnector("smb://bob@example-pc/home/Printer", WindowsPrintConnector::PLATFORM_LINUX); + $connector -> expects($this -> once()) + -> method('runCommand') + -> with($this -> equalTo('smbclient \'//example-pc/Printer\' -U \'home\\bob\' -c \'print -\' -N -m SMB2')); + $connector -> expects($this -> exactly(0)) + -> method('runCopy'); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> finalize(); + } - private function getMockConnector($path, $platform) { - $stub = $this -> getMockBuilder('WindowsPrintConnector') - -> setMethods(array('runCopy', 'runCommand', 'getCurrentPlatform', 'runWrite')) - -> disableOriginalConstructor() - -> getMock(); - $stub -> method('runCommand') - -> willReturn(0); - $stub -> method('runCopy') - -> willReturn(true); - $stub -> method('runWrite') - -> willReturn(true); - $stub -> method('getCurrentPlatform') - -> willReturn($platform); - $stub -> __construct($path); - return $stub; - } + public function testSharedPrinterLinuxUsernamePassword() + { + $connector = $this -> getMockConnector("smb://bob:secret@example-pc/Printer", WindowsPrintConnector::PLATFORM_LINUX); + $connector -> expects($this -> once()) + -> method('runCommand') + -> with($this -> equalTo('smbclient \'//example-pc/Printer\' \'secret\' -U \'bob\' -c \'print -\' -m SMB2')); + $connector -> expects($this -> exactly(0)) + -> method('runCopy'); + $connector -> expects($this -> exactly(0)) + -> method('runWrite'); + $connector -> finalize(); + } - /** - * Test for correct identification of bogus or non-supported Samba strings. - */ - public function testSambaRegex() { - $good = array("smb://foo/bar", - "smb://foo/bar baz", - "smb://bob@foo/bar", - "smb://bob:secret@foo/bar", - "smb://foo-computer/FooPrinter", - "smb://foo-computer/workgroup/FooPrinter", - "smb://foo-computer/Foo-Printer", - "smb://foo-computer/workgroup/Foo-Printer", - "smb://foo-computer/Foo Printer"); - $bad = array("", - "http://google.com", - "smb:/foo/bar", - "smb://", - "smb:///bar", - "smb://@foo/bar", - "smb://bob:@foo/bar", - "smb://:secret@foo/bar", - "smb://foo/bar/baz/quux", - "smb://foo-computer//FooPrinter"); - foreach($good as $item) { - $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_SMB, $item) == 1, "Windows samba regex should pass '$item'."); - } - foreach($bad as $item) { - $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_SMB, $item) != 1, "Windows samba regex should fail '$item'."); - } - } - - public function testPrinterNameRegex() { - $good = array("a", - "ab", - "a b", - "a-b", - "Abcd Efg-", - "-a" - ); - $bad = array("", - " ", - "a ", - " a", - " a ", - "a/B", - "A:b" - ); - foreach($good as $item) { - $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_PRINTERNAME, $item) == 1, "Windows printer name regex should pass '$item'."); - } - foreach($bad as $item) { - $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_PRINTERNAME, $item) != 1, "Windows printer name regex should fail '$item'."); - } - } + private function getMockConnector($path, $platform) + { + $stub = $this -> getMockBuilder('Mike42\Escpos\PrintConnectors\WindowsPrintConnector') + -> setMethods(array('runCopy', 'runCommand', 'getCurrentPlatform', 'runWrite')) + -> disableOriginalConstructor() + -> getMock(); + $stub -> method('runCommand') + -> willReturn(0); + $stub -> method('runCopy') + -> willReturn(true); + $stub -> method('runWrite') + -> willReturn(true); + $stub -> method('getCurrentPlatform') + -> willReturn($platform); + $stub -> __construct($path); + return $stub; + } + + /** + * Test for correct identification of bogus or non-supported Samba strings. + */ + public function testSambaRegex() + { + $good = array("smb://foo/bar", + "smb://foo/bar baz", + "smb://bob@foo/bar", + "smb://bob:secret@foo/bar", + "smb://foo-computer/FooPrinter", + "smb://foo-computer/workgroup/FooPrinter", + "smb://foo-computer/Foo-Printer", + "smb://foo-computer/workgroup/Foo-Printer", + "smb://foo-computer/Foo Printer", + "smb://foo-computer.local/Foo Printer", + "smb://127.0.0.1/abcd" + ); + $bad = array("", + "http://google.com", + "smb:/foo/bar", + "smb://", + "smb:///bar", + "smb://@foo/bar", + "smb://bob:@foo/bar", + "smb://:secret@foo/bar", + "smb://foo/bar/baz/quux", + "smb://foo-computer//FooPrinter"); + foreach ($good as $item) { + $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_SMB, $item) == 1, "Windows samba regex should pass '$item'."); + } + foreach ($bad as $item) { + $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_SMB, $item) != 1, "Windows samba regex should fail '$item'."); + } + } + + public function testPrinterNameRegex() + { + $good = array("a", + "ab", + "a b", + "a-b", + "Abcd Efg-", + "-a", + "OK1" + ); + $bad = array("", + " ", + "a ", + " a", + " a ", + "a/B", + "A:b" + ); + foreach ($good as $item) { + $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_PRINTERNAME, $item) == 1, "Windows printer name regex should pass '$item'."); + } + foreach ($bad as $item) { + $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_PRINTERNAME, $item) != 1, "Windows printer name regex should fail '$item'."); + } + } } diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white_tall.png b/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white_tall.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0869dcbed532acfd38204f6539d22d93b515ef GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Ea0U|e_vV07rI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfBW7Mkas6JV#5+JC+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vjm0>Eal|aXmRff#2ZY|NrwF8yh(fDbHhKSlq|V+q`4SH;`seS3j3^P6 readImage("doc.pdf[5]"); - $im -> destroy(); -} catch(ImagickException $e) { - echo "Error: " . $e -> getMessage() . "\n"; + $im -> readImage("doc.pdf[5]"); + $im -> destroy(); +} catch (ImagickException $e) { + echo "Error: " . $e -> getMessage() . "\n"; } $im = new Imagick(); try { - ob_start(); - @$im -> readImage("doc.pdf[5]"); - ob_end_clean(); - $im -> destroy(); -} catch(ImagickException $e) { - echo "Error: " . $e -> getMessage() . "\n"; + ob_start(); + @$im -> readImage("doc.pdf[5]"); + ob_end_clean(); + $im -> destroy(); +} catch (ImagickException $e) { + echo "Error: " . $e -> getMessage() . "\n"; } - From 6cb5f28db19e6ba14eea0559763d48c994c21f5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 2 Nov 2019 21:16:59 +0100 Subject: [PATCH 846/980] wip ticket printer --- .../mike42/escpos-php/example/README.md | 26 - .../mike42/escpos-php/example/barcode.php | 207 --- .../mike42/escpos-php/example/bit-image.php | 36 - .../character-encodings-with-images.php | 63 - .../example/character-encodings.php | 60 - .../escpos-php/example/character-tables.php | 75 -- .../escpos-php/example/customer-display.php | 51 - .../mike42/escpos-php/example/demo.php | 171 --- .../mike42/escpos-php/example/graphics.php | 36 - .../escpos-php/example/interface/README.md | 8 - .../escpos-php/example/interface/cups.php | 19 - .../escpos-php/example/interface/ethernet.php | 22 - .../example/interface/linux-usb.php | 33 - .../escpos-php/example/interface/smb.php | 52 - .../example/interface/windows-lpt.php | 31 - .../example/interface/windows-usb.php | 34 - .../example/margins-and-spacing.php | 48 - .../mike42/escpos-php/example/pdf417-code.php | 95 -- .../escpos-php/example/print-from-html.php | 86 -- .../escpos-php/example/print-from-pdf.php | 78 -- .../mike42/escpos-php/example/qr-code.php | 86 -- .../escpos-php/example/rawbt-receipt.html | 76 -- .../escpos-php/example/rawbt-receipt.php | 145 --- .../escpos-php/example/receipt-with-logo.php | 104 -- .../character-encoding-test-strings.inc | 35 - .../example/resources/document.html | 40 - .../escpos-php/example/resources/document.odt | Bin 39751 -> 0 bytes .../escpos-php/example/resources/document.pdf | Bin 24389 -> 0 bytes .../escpos-php/example/resources/document.z | Bin 18900 -> 0 bytes .../example/resources/escpos-php-small.png | Bin 1941 -> 0 bytes .../example/resources/escpos-php.png | Bin 7871 -> 0 bytes .../example/resources/rawbtlogo.png | Bin 1358 -> 0 bytes .../escpos-php/example/resources/tulips.png | Bin 379443 -> 0 bytes .../escpos-php/example/resources/tux.png | Bin 5198 -> 0 bytes .../example/specific/123-code128-barcode.php | 21 - .../example/specific/141-custom-command.php | 55 - .../example/specific/148-data-uri.php | 35 - .../example/specific/235-get-data.php | 28 - .../specific/29-latvian-star-tup592.php | 25 - .../32-german-tm-t20-ii-custom-command.php | 39 - .../specific/33-spanish-seypos-prp-300.php | 19 - .../example/specific/37-chinese.php | 24 - .../example/specific/39-currency-symbols.php | 77 -- .../specific/44-pound-symbol-star-tsp650.php | 35 - .../example/specific/50-P-822D-greek.php | 19 - .../example/specific/54-gfx-sidebyside.php | 64 - .../specific/6-arabic-epos-tep-220m.php | 74 -- .../example/specific/62-greek-symbol-swap.php | 15 - .../example/specific/68-redblack.php | 21 - .../example/specific/97-dithering.php | 28 - .../escpos-php/example/specific/README.md | 7 - .../mike42/escpos-php/example/text-size.php | 65 - .../mike42/escpos-php/test/bootstrap.php | 40 - .../test/integration/ExampleTest.php | 187 --- .../integration/resources/output/barcode.bin | Bin 2667 -> 0 bytes .../resources/output/bit-image.bin | Bin 9789 -> 0 bytes .../resources/output/character-encodings.bin | Bin 1930 -> 0 bytes .../resources/output/character-tables.bin | Bin 7969 -> 0 bytes .../integration/resources/output/demo.bin | Bin 73643 -> 0 bytes .../integration/resources/output/graphics.bin | Bin 9635 -> 0 bytes .../resources/output/margins-and-spacing.bin | Bin 339 -> 0 bytes .../resources/output/pdf417-code.bin | Bin 2366 -> 0 bytes .../integration/resources/output/qr-code.bin | Bin 1551 -> 0 bytes .../resources/output/receipt-with-logo.bin | Bin 9579 -> 0 bytes .../resources/output/text-size.bin | Bin 368 -> 0 bytes .../test/unit/AuresCustomerDisplayTest.php | 76 -- .../test/unit/CapabilityProfileTest.php | 59 - .../escpos-php/test/unit/CodePageTest.php | 63 - .../test/unit/CupsPrintConnectorTest.php | 36 - .../escpos-php/test/unit/EscposImageTest.php | 16 - .../test/unit/EscposPrintBufferTest.php | 192 --- .../escpos-php/test/unit/EscposTest.php | 1127 ----------------- .../test/unit/FilePrintConnectorTest.php | 26 - .../test/unit/GdEscposImageTest.php | 101 -- .../test/unit/ImagickEscposImageTest.php | 142 --- .../test/unit/LegacyCapabilityProfileTest.php | 79 -- .../test/unit/UriPrintConnectorTest.php | 59 - .../test/unit/WindowsPrintConnectorTest.php | 304 ----- .../test/unit/resources/black_transparent.gif | Bin 65 -> 0 bytes .../test/unit/resources/black_transparent.png | Bin 167 -> 0 bytes .../test/unit/resources/black_white.bmp | Bin 138 -> 0 bytes .../test/unit/resources/black_white.gif | Bin 65 -> 0 bytes .../test/unit/resources/black_white.jpg | Bin 175 -> 0 bytes .../test/unit/resources/black_white.png | Bin 156 -> 0 bytes .../test/unit/resources/black_white_tall.png | Bin 162 -> 0 bytes .../test/unit/resources/canvas_black.bmp | Bin 142 -> 0 bytes .../test/unit/resources/canvas_black.gif | Bin 72 -> 0 bytes .../test/unit/resources/canvas_black.jpg | Bin 160 -> 0 bytes .../test/unit/resources/canvas_black.png | Bin 239 -> 0 bytes .../test/unit/resources/canvas_white.bmp | Bin 142 -> 0 bytes .../test/unit/resources/canvas_white.gif | Bin 72 -> 0 bytes .../test/unit/resources/canvas_white.jpg | Bin 160 -> 0 bytes .../test/unit/resources/canvas_white.png | Bin 239 -> 0 bytes .../escpos-php/test/unit/resources/demo.php | 18 - .../escpos-php/test/unit/resources/doc.pdf | Bin 6681 -> 0 bytes 95 files changed, 4893 deletions(-) delete mode 100644 htdocs/includes/mike42/escpos-php/example/README.md delete mode 100644 htdocs/includes/mike42/escpos-php/example/barcode.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/bit-image.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/character-encodings-with-images.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/character-encodings.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/character-tables.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/customer-display.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/demo.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/graphics.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/interface/README.md delete mode 100644 htdocs/includes/mike42/escpos-php/example/interface/cups.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/interface/ethernet.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/interface/linux-usb.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/interface/smb.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/interface/windows-lpt.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/interface/windows-usb.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/margins-and-spacing.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/pdf417-code.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/print-from-html.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/print-from-pdf.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/qr-code.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/rawbt-receipt.html delete mode 100644 htdocs/includes/mike42/escpos-php/example/rawbt-receipt.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/receipt-with-logo.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/resources/character-encoding-test-strings.inc delete mode 100644 htdocs/includes/mike42/escpos-php/example/resources/document.html delete mode 100644 htdocs/includes/mike42/escpos-php/example/resources/document.odt delete mode 100644 htdocs/includes/mike42/escpos-php/example/resources/document.pdf delete mode 100644 htdocs/includes/mike42/escpos-php/example/resources/document.z delete mode 100644 htdocs/includes/mike42/escpos-php/example/resources/escpos-php-small.png delete mode 100644 htdocs/includes/mike42/escpos-php/example/resources/escpos-php.png delete mode 100644 htdocs/includes/mike42/escpos-php/example/resources/rawbtlogo.png delete mode 100644 htdocs/includes/mike42/escpos-php/example/resources/tulips.png delete mode 100644 htdocs/includes/mike42/escpos-php/example/resources/tux.png delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/123-code128-barcode.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/141-custom-command.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/148-data-uri.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/235-get-data.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/29-latvian-star-tup592.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/32-german-tm-t20-ii-custom-command.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/33-spanish-seypos-prp-300.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/37-chinese.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/39-currency-symbols.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/44-pound-symbol-star-tsp650.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/50-P-822D-greek.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/54-gfx-sidebyside.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/6-arabic-epos-tep-220m.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/62-greek-symbol-swap.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/68-redblack.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/97-dithering.php delete mode 100644 htdocs/includes/mike42/escpos-php/example/specific/README.md delete mode 100644 htdocs/includes/mike42/escpos-php/example/text-size.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/bootstrap.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/ExampleTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/barcode.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/bit-image.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/character-encodings.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/character-tables.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/demo.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/graphics.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/margins-and-spacing.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/pdf417-code.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/qr-code.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/receipt-with-logo.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/integration/resources/output/text-size.bin delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/AuresCustomerDisplayTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/CapabilityProfileTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/CodePageTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/CupsPrintConnectorTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/EscposImageTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/EscposPrintBufferTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/EscposTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/FilePrintConnectorTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/GdEscposImageTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/ImagickEscposImageTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/LegacyCapabilityProfileTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/UriPrintConnectorTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/WindowsPrintConnectorTest.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/black_transparent.gif delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/black_transparent.png delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.bmp delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.gif delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.jpg delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.png delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/black_white_tall.png delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_black.bmp delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_black.gif delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_black.jpg delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_black.png delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_white.bmp delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_white.gif delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_white.jpg delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_white.png delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/demo.php delete mode 100644 htdocs/includes/mike42/escpos-php/test/unit/resources/doc.pdf diff --git a/htdocs/includes/mike42/escpos-php/example/README.md b/htdocs/includes/mike42/escpos-php/example/README.md deleted file mode 100644 index e59e6c095e4..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/README.md +++ /dev/null @@ -1,26 +0,0 @@ -Examples --------- - -This folder contains a collectoion of feature examples. -Generally, demo.php is the fastest way to find out which features your -printer supports. - -## Subfolders -- `interface/` - contains examples for output interfaces: eg, parallel, serial, USB, network, file-based. -- `specific/` - examples made in response to issues & questions. These cover specific languages, printers and interfaces, so hit narrower use cases. - -## List of examples - -Each example prints to standard output, so either edit the print connector, or redirect the output to your printer to see it in action. They are designed for developers: open them in a text editor before you run them! - -- `bit-image.php` - Prints a images to the printer using the older "bit image" commands. -- `demo.php` - Demonstrates output using a large subset of availale features. -- `qr-code.php` - Prints QR codes, if your printer supports it. -- `character-encodings.php` - Shows available character encodings. Change from the DefaultCapabilityProfile to get more useful output for your specific printer. -- `graphics.php` - The same output as `bit-image.php`, printed with the newer graphics commands (not supported on many non-Epson printers) -- `receipt-with-logo.php` - A simple receipt containing a logo and basic formating. -- `character-encodings-with-images.php` - The same as `character-encodings.php`, but also prints each string using an `ImagePrintBuffer`, showing compatibility gaps. -- `print-from-html.php` - Runs `wkhtmltoimage` to convert HTML to an image, and then prints the image. (This is very slow) -- `character-tables.php` - Prints a compact character code table for each available character set. Used to debug incorrect output from `character-encodings.php`. -- `print-from-pdf.php` - Loads a PDF and prints each page in a few different ways (very slow as well) -- `rawbt-receipt` (.php & .html) - Demonstration of Back and Front for integration between the site and the Android application “RawBT - Printer Driver for Android” diff --git a/htdocs/includes/mike42/escpos-php/example/barcode.php b/htdocs/includes/mike42/escpos-php/example/barcode.php deleted file mode 100644 index d3ef9f2f44a..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/barcode.php +++ /dev/null @@ -1,207 +0,0 @@ -selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_DOUBLE_WIDTH); -$printer->text("Height and bar width\n"); -$printer->selectPrintMode(); -$heights = array(1, 2, 4, 8, 16, 32); -$widths = array(1, 2, 3, 4, 5, 6, 7, 8); -$printer -> text("Default look\n"); -$printer->barcode("ABC", Printer::BARCODE_CODE39); - -foreach($heights as $height) { - $printer -> text("\nHeight $height\n"); - $printer->setBarcodeHeight($height); - $printer->barcode("ABC", Printer::BARCODE_CODE39); -} -foreach($widths as $width) { - $printer -> text("\nWidth $width\n"); - $printer->setBarcodeWidth($width); - $printer->barcode("ABC", Printer::BARCODE_CODE39); -} -$printer->feed(); -// Set to something sensible for the rest of the examples -$printer->setBarcodeHeight(40); -$printer->setBarcodeWidth(2); - -/* Text position */ -$printer->selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_DOUBLE_WIDTH); -$printer->text("Text position\n"); -$printer->selectPrintMode(); -$hri = array ( - Printer::BARCODE_TEXT_NONE => "No text", - Printer::BARCODE_TEXT_ABOVE => "Above", - Printer::BARCODE_TEXT_BELOW => "Below", - Printer::BARCODE_TEXT_ABOVE | Printer::BARCODE_TEXT_BELOW => "Both" -); -foreach ($hri as $position => $caption) { - $printer->text($caption . "\n"); - $printer->setBarcodeTextPosition($position); - $printer->barcode("012345678901", Printer::BARCODE_JAN13); - $printer->feed(); -} - -/* Barcode types */ -$standards = array ( - Printer::BARCODE_UPCA => array ( - "title" => "UPC-A", - "caption" => "Fixed-length numeric product barcodes.", - "example" => array ( - array ( - "caption" => "12 char numeric including (wrong) check digit.", - "content" => "012345678901" - ), - array ( - "caption" => "Send 11 chars to add check digit automatically.", - "content" => "01234567890" - ) - ) - ), - Printer::BARCODE_UPCE => array ( - "title" => "UPC-E", - "caption" => "Fixed-length numeric compact product barcodes.", - "example" => array ( - array ( - "caption" => "6 char numeric - auto check digit & NSC", - "content" => "123456" - ), - array ( - "caption" => "7 char numeric - auto check digit", - "content" => "0123456" - ), - array ( - "caption" => "8 char numeric", - "content" => "01234567" - ), - array ( - "caption" => "11 char numeric - auto check digit", - "content" => "01234567890" - ), - array ( - "caption" => "12 char numeric including (wrong) check digit", - "content" => "012345678901" - ) - ) - ), - Printer::BARCODE_JAN13 => array ( - "title" => "JAN13/EAN13", - "caption" => "Fixed-length numeric barcodes.", - "example" => array ( - array ( - "caption" => "12 char numeric - auto check digit", - "content" => "012345678901" - ), - array ( - "caption" => "13 char numeric including (wrong) check digit", - "content" => "0123456789012" - ) - ) - ), - Printer::BARCODE_JAN8 => array ( - "title" => "JAN8/EAN8", - "caption" => "Fixed-length numeric barcodes.", - "example" => array ( - array ( - "caption" => "7 char numeric - auto check digit", - "content" => "0123456" - ), - array ( - "caption" => "8 char numeric including (wrong) check digit", - "content" => "01234567" - ) - ) - ), - Printer::BARCODE_CODE39 => array ( - "title" => "Code39", - "caption" => "Variable length alphanumeric w/ some special chars.", - "example" => array ( - array ( - "caption" => "Text, numbers, spaces", - "content" => "ABC 012" - ), - array ( - "caption" => "Special characters", - "content" => "$%+-./" - ), - array ( - "caption" => "Extra char (*) Used as start/stop", - "content" => "*TEXT*" - ) - ) - ), - Printer::BARCODE_ITF => array ( - "title" => "ITF", - "caption" => "Variable length numeric w/even number of digits,\nas they are encoded in pairs.", - "example" => array ( - array ( - "caption" => "Numeric- even number of digits", - "content" => "0123456789" - ) - ) - ), - Printer::BARCODE_CODABAR => array ( - "title" => "Codabar", - "caption" => "Varaible length numeric with some allowable\nextra characters. ABCD/abcd must be used as\nstart/stop characters (one at the start, one\nat the end) to distinguish between barcode\napplications.", - "example" => array ( - array ( - "caption" => "Numeric w/ A A start/stop. ", - "content" => "A012345A" - ), - array ( - "caption" => "Extra allowable characters", - "content" => "A012$+-./:A" - ) - ) - ), - Printer::BARCODE_CODE93 => array ( - "title" => "Code93", - "caption" => "Variable length- any ASCII is available", - "example" => array ( - array ( - "caption" => "Text", - "content" => "012abcd" - ) - ) - ), - Printer::BARCODE_CODE128 => array ( - "title" => "Code128", - "caption" => "Variable length- any ASCII is available", - "example" => array ( - array ( - "caption" => "Code set A uppercase & symbols", - "content" => "{A" . "012ABCD" - ), - array ( - "caption" => "Code set B general text", - "content" => "{B" . "012ABCDabcd" - ), - array ( - "caption" => "Code set C compact numbers\n Sending chr(21) chr(32) chr(43)", - "content" => "{C" . chr(21) . chr(32) . chr(43) - ) - ) - ) -); -$printer->setBarcodeTextPosition(Printer::BARCODE_TEXT_BELOW); -foreach ($standards as $type => $standard) { - $printer->selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_DOUBLE_WIDTH); - $printer->text($standard ["title"] . "\n"); - $printer->selectPrintMode(); - $printer->text($standard ["caption"] . "\n\n"); - foreach ($standard ["example"] as $id => $barcode) { - $printer->setEmphasis(true); - $printer->text($barcode ["caption"] . "\n"); - $printer->setEmphasis(false); - $printer->text("Content: " . $barcode ["content"] . "\n"); - $printer->barcode($barcode ["content"], $type); - $printer->feed(); - } -} -$printer->cut(); -$printer->close(); diff --git a/htdocs/includes/mike42/escpos-php/example/bit-image.php b/htdocs/includes/mike42/escpos-php/example/bit-image.php deleted file mode 100644 index befebf80b9f..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/bit-image.php +++ /dev/null @@ -1,36 +0,0 @@ - text("These example images are printed with the older\nbit image print command. You should only use\n\$p -> bitImage() if \$p -> graphics() does not\nwork on your printer.\n\n"); - - $printer -> bitImage($tux); - $printer -> text("Regular Tux (bit image).\n"); - $printer -> feed(); - - $printer -> bitImage($tux, Printer::IMG_DOUBLE_WIDTH); - $printer -> text("Wide Tux (bit image).\n"); - $printer -> feed(); - - $printer -> bitImage($tux, Printer::IMG_DOUBLE_HEIGHT); - $printer -> text("Tall Tux (bit image).\n"); - $printer -> feed(); - - $printer -> bitImage($tux, Printer::IMG_DOUBLE_WIDTH | Printer::IMG_DOUBLE_HEIGHT); - $printer -> text("Large Tux in correct proportion (bit image).\n"); -} catch (Exception $e) { - /* Images not supported on your PHP, or image file not found */ - $printer -> text($e -> getMessage() . "\n"); -} - -$printer -> cut(); -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/character-encodings-with-images.php b/htdocs/includes/mike42/escpos-php/example/character-encodings-with-images.php deleted file mode 100644 index bc99c2f1872..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/character-encodings-with-images.php +++ /dev/null @@ -1,63 +0,0 @@ - selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_EMPHASIZED | Printer::MODE_DOUBLE_WIDTH); - $printer -> text("Implemented languages\n"); - $printer -> selectPrintMode(); - foreach ($inputsOk as $label => $str) { - $printer -> setEmphasis(true); - $printer -> text($label . ":\n"); - $printer -> setEmphasis(false); - foreach ($buffers as $buffer) { - $printer -> setPrintBuffer($buffer); - $printer -> text($str); - } - $printer -> setPrintBuffer($buffers[0]); - } - $printer -> feed(); - - $printer -> selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_EMPHASIZED | Printer::MODE_DOUBLE_WIDTH); - $printer -> text("Works in progress\n"); - $printer -> selectPrintMode(); - foreach ($inputsNotOk as $label => $str) { - $printer -> setEmphasis(true); - $printer -> text($label . ":\n"); - $printer -> setEmphasis(false); - foreach ($buffers as $buffer) { - $printer -> setPrintBuffer($buffer); - $printer -> text($str); - } - $printer -> setPrintBuffer($buffers[0]); - } - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch (Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; -} diff --git a/htdocs/includes/mike42/escpos-php/example/character-encodings.php b/htdocs/includes/mike42/escpos-php/example/character-encodings.php deleted file mode 100644 index a38e99fb9ea..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/character-encodings.php +++ /dev/null @@ -1,60 +0,0 @@ - selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_EMPHASIZED | Printer::MODE_DOUBLE_WIDTH); - $printer -> text("Implemented languages\n"); - $printer -> selectPrintMode(); - foreach ($inputsOk as $label => $str) { - $printer -> setEmphasis(true); - $printer -> text($label . ":\n"); - $printer -> setEmphasis(false); - $printer -> text($str); - } - $printer -> feed(); - - $printer -> selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_EMPHASIZED | Printer::MODE_DOUBLE_WIDTH); - $printer -> text("Works in progress\n"); - $printer -> selectPrintMode(); - foreach ($inputsNotOk as $label => $str) { - $printer -> setEmphasis(true); - $printer -> text($label . ":\n"); - $printer -> setEmphasis(false); - $printer -> text($str); - } - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch (Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; -} diff --git a/htdocs/includes/mike42/escpos-php/example/character-tables.php b/htdocs/includes/mike42/escpos-php/example/character-tables.php deleted file mode 100644 index d2ab8bbcfa1..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/character-tables.php +++ /dev/null @@ -1,75 +0,0 @@ - getCodePages(); -$first = true; // Print larger table for first code-page. -foreach ($codePages as $table => $page) { - /* Change printer code page */ - $printer -> selectCharacterTable(255); - $printer -> selectCharacterTable($table); - /* Select & print a label for it */ - $label = $page -> getId(); - if (!$page -> isEncodable()) { - $label= " (not supported)"; - } - $printer -> setEmphasis(true); - $printer -> textRaw("Table $table: $label\n"); - $printer -> setEmphasis(false); - if (!$page -> isEncodable() && !$verbose) { - continue; // Skip non-recognised - } - /* Print a table of available characters (first table is larger than subsequent ones */ - if ($first) { - $first = false; - compactCharTable($printer, 1, true); - } else { - compactCharTable($printer); - } -} -$printer -> cut(); -$printer -> close(); - -function compactCharTable($printer, $start = 4, $header = false) -{ - /* Output a compact character table for the current encoding */ - $chars = str_repeat(' ', 256); - for ($i = 0; $i < 255; $i++) { - $chars[$i] = ($i > 32 && $i != 127) ? chr($i) : ' '; - } - if ($header) { - $printer -> setEmphasis(true); - $printer -> textRaw(" 0123456789ABCDEF0123456789ABCDEF\n"); - $printer -> setEmphasis(false); - } - for ($y = $start; $y < 8; $y++) { - $printer -> setEmphasis(true); - $printer -> textRaw(strtoupper(dechex($y * 2)) . " "); - $printer -> setEmphasis(false); - $printer -> textRaw(substr($chars, $y * 32, 32) . "\n"); - } -} diff --git a/htdocs/includes/mike42/escpos-php/example/customer-display.php b/htdocs/includes/mike42/escpos-php/example/customer-display.php deleted file mode 100644 index 47947789540..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/customer-display.php +++ /dev/null @@ -1,51 +0,0 @@ - feed(); - $display -> text($line); - usleep(500000); -} - -// Finish by showing "Hello World" -$display -> clear(); -$display -> text("Hello World\n"); - -// Dont forget to close the device -$display -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/demo.php b/htdocs/includes/mike42/escpos-php/example/demo.php deleted file mode 100644 index f0e357ed431..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/demo.php +++ /dev/null @@ -1,171 +0,0 @@ - - */ -require __DIR__ . '/../autoload.php'; -use Mike42\Escpos\Printer; -use Mike42\Escpos\PrintConnectors\FilePrintConnector; -use Mike42\Escpos\EscposImage; - -$connector = new FilePrintConnector("php://stdout"); -$printer = new Printer($connector); - -/* Initialize */ -$printer -> initialize(); - -/* Text */ -$printer -> text("Hello world\n"); -$printer -> cut(); - -/* Line feeds */ -$printer -> text("ABC"); -$printer -> feed(7); -$printer -> text("DEF"); -$printer -> feedReverse(3); -$printer -> text("GHI"); -$printer -> feed(); -$printer -> cut(); - -/* Font modes */ -$modes = array( - Printer::MODE_FONT_B, - Printer::MODE_EMPHASIZED, - Printer::MODE_DOUBLE_HEIGHT, - Printer::MODE_DOUBLE_WIDTH, - Printer::MODE_UNDERLINE); -for ($i = 0; $i < pow(2, count($modes)); $i++) { - $bits = str_pad(decbin($i), count($modes), "0", STR_PAD_LEFT); - $mode = 0; - for ($j = 0; $j < strlen($bits); $j++) { - if (substr($bits, $j, 1) == "1") { - $mode |= $modes[$j]; - } - } - $printer -> selectPrintMode($mode); - $printer -> text("ABCDEFGHIJabcdefghijk\n"); -} -$printer -> selectPrintMode(); // Reset -$printer -> cut(); - -/* Underline */ -for ($i = 0; $i < 3; $i++) { - $printer -> setUnderline($i); - $printer -> text("The quick brown fox jumps over the lazy dog\n"); -} -$printer -> setUnderline(0); // Reset -$printer -> cut(); - -/* Cuts */ -$printer -> text("Partial cut\n(not available on all printers)\n"); -$printer -> cut(Printer::CUT_PARTIAL); -$printer -> text("Full cut\n"); -$printer -> cut(Printer::CUT_FULL); - -/* Emphasis */ -for ($i = 0; $i < 2; $i++) { - $printer -> setEmphasis($i == 1); - $printer -> text("The quick brown fox jumps over the lazy dog\n"); -} -$printer -> setEmphasis(false); // Reset -$printer -> cut(); - -/* Double-strike (looks basically the same as emphasis) */ -for ($i = 0; $i < 2; $i++) { - $printer -> setDoubleStrike($i == 1); - $printer -> text("The quick brown fox jumps over the lazy dog\n"); -} -$printer -> setDoubleStrike(false); -$printer -> cut(); - -/* Fonts (many printers do not have a 'Font C') */ -$fonts = array( - Printer::FONT_A, - Printer::FONT_B, - Printer::FONT_C); -for ($i = 0; $i < count($fonts); $i++) { - $printer -> setFont($fonts[$i]); - $printer -> text("The quick brown fox jumps over the lazy dog\n"); -} -$printer -> setFont(); // Reset -$printer -> cut(); - -/* Justification */ -$justification = array( - Printer::JUSTIFY_LEFT, - Printer::JUSTIFY_CENTER, - Printer::JUSTIFY_RIGHT); -for ($i = 0; $i < count($justification); $i++) { - $printer -> setJustification($justification[$i]); - $printer -> text("A man a plan a canal panama\n"); -} -$printer -> setJustification(); // Reset -$printer -> cut(); - -/* Barcodes - see barcode.php for more detail */ -$printer -> setBarcodeHeight(80); -$printer->setBarcodeTextPosition(Printer::BARCODE_TEXT_BELOW); -$printer -> barcode("9876"); -$printer -> feed(); -$printer -> cut(); - -/* Graphics - this demo will not work on some non-Epson printers */ -try { - $logo = EscposImage::load("resources/escpos-php.png", false); - $imgModes = array( - Printer::IMG_DEFAULT, - Printer::IMG_DOUBLE_WIDTH, - Printer::IMG_DOUBLE_HEIGHT, - Printer::IMG_DOUBLE_WIDTH | Printer::IMG_DOUBLE_HEIGHT - ); - foreach ($imgModes as $mode) { - $printer -> graphics($logo, $mode); - } -} catch (Exception $e) { - /* Images not supported on your PHP, or image file not found */ - $printer -> text($e -> getMessage() . "\n"); -} -$printer -> cut(); - -/* Bit image */ -try { - $logo = EscposImage::load("resources/escpos-php.png", false); - $imgModes = array( - Printer::IMG_DEFAULT, - Printer::IMG_DOUBLE_WIDTH, - Printer::IMG_DOUBLE_HEIGHT, - Printer::IMG_DOUBLE_WIDTH | Printer::IMG_DOUBLE_HEIGHT - ); - foreach ($imgModes as $mode) { - $printer -> bitImage($logo, $mode); - } -} catch (Exception $e) { - /* Images not supported on your PHP, or image file not found */ - $printer -> text($e -> getMessage() . "\n"); -} -$printer -> cut(); - -/* QR Code - see also the more in-depth demo at qr-code.php */ -$testStr = "Testing 123"; -$models = array( - Printer::QR_MODEL_1 => "QR Model 1", - Printer::QR_MODEL_2 => "QR Model 2 (default)", - Printer::QR_MICRO => "Micro QR code\n(not supported on all printers)"); -foreach ($models as $model => $name) { - $printer -> qrCode($testStr, Printer::QR_ECLEVEL_L, 3, $model); - $printer -> text("$name\n"); - $printer -> feed(); -} -$printer -> cut(); - -/* Pulse */ -$printer -> pulse(); - -/* Always close the printer! On some PrintConnectors, no actual - * data is sent until the printer is closed. */ -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/graphics.php b/htdocs/includes/mike42/escpos-php/example/graphics.php deleted file mode 100644 index 49b02b9b0d9..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/graphics.php +++ /dev/null @@ -1,36 +0,0 @@ - graphics($tux); - $printer -> text("Regular Tux.\n"); - $printer -> feed(); - - $printer -> graphics($tux, Printer::IMG_DOUBLE_WIDTH); - $printer -> text("Wide Tux.\n"); - $printer -> feed(); - - $printer -> graphics($tux, Printer::IMG_DOUBLE_HEIGHT); - $printer -> text("Tall Tux.\n"); - $printer -> feed(); - - $printer -> graphics($tux, Printer::IMG_DOUBLE_WIDTH | Printer::IMG_DOUBLE_HEIGHT); - $printer -> text("Large Tux in correct proportion.\n"); - - $printer -> cut(); -} catch (Exception $e) { - /* Images not supported on your PHP, or image file not found */ - $printer -> text($e -> getMessage() . "\n"); -} - -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/interface/README.md b/htdocs/includes/mike42/escpos-php/example/interface/README.md deleted file mode 100644 index 96fe2eed2fb..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/interface/README.md +++ /dev/null @@ -1,8 +0,0 @@ -Interfaces ----------- -This directory contains boilerpalte code to show you how to open a print connector -to printers which are connected in different ways. - -To get a list of supported interfaces and operating systems, see the main README.md file for the project. - -If you have a printer interface with no example, and you want to help put one together, then please lodge a request on the bug tracker: https://github.com/mike42/escpos-php/issues diff --git a/htdocs/includes/mike42/escpos-php/example/interface/cups.php b/htdocs/includes/mike42/escpos-php/example/interface/cups.php deleted file mode 100644 index 8b65ab3d4d9..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/interface/cups.php +++ /dev/null @@ -1,19 +0,0 @@ - text("Hello World!\n"); - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch (Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; -} diff --git a/htdocs/includes/mike42/escpos-php/example/interface/ethernet.php b/htdocs/includes/mike42/escpos-php/example/interface/ethernet.php deleted file mode 100644 index 129af5ce3aa..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/interface/ethernet.php +++ /dev/null @@ -1,22 +0,0 @@ - text("Hello World!\n"); - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch (Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; -} diff --git a/htdocs/includes/mike42/escpos-php/example/interface/linux-usb.php b/htdocs/includes/mike42/escpos-php/example/interface/linux-usb.php deleted file mode 100644 index 2b390f658b2..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/interface/linux-usb.php +++ /dev/null @@ -1,33 +0,0 @@ - text("Hello World!\n"); - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch (Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; -} diff --git a/htdocs/includes/mike42/escpos-php/example/interface/smb.php b/htdocs/includes/mike42/escpos-php/example/interface/smb.php deleted file mode 100644 index fac54b342d1..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/interface/smb.php +++ /dev/null @@ -1,52 +0,0 @@ - testfile - * ## If you need authentication, use "net use" to hook up the printer: - * # net use "\\computername\Receipt Printer" /user:Guest - * # net use "\\computername\Receipt Printer" /user:Bob secret - * # net use "\\computername\Receipt Printer" /user:workgroup\Bob secret - * copy testfile "\\computername\Receipt Printer" - * del testfile - * - * GNU/Linux: - * # No authentication - * echo "Hello World" | smbclient "//computername/Receipt Printer" -c "print -" -N - * # Guest login - * echo "Hello World" | smbclient "//computername/Receipt Printer" -U Guest -c "print -" -N - * # Basic username/password - * echo "Hello World" | smbclient "//computername/Receipt Printer" secret -U "Bob" -c "print -" - * # Including domain name - * echo "Hello World" | smbclient "//computername/Receipt Printer" secret -U "workgroup\\Bob" -c "print -" - */ -try { - // Enter the share name for your printer here, as a smb:// url format - $connector = new WindowsPrintConnector("smb://computername/Receipt Printer"); - //$connector = new WindowsPrintConnector("smb://Guest@computername/Receipt Printer"); - //$connector = new WindowsPrintConnector("smb://FooUser:secret@computername/workgroup/Receipt Printer"); - //$connector = new WindowsPrintConnector("smb://User:secret@computername/Receipt Printer"); - - /* Print a "Hello world" receipt" */ - $printer = new Printer($connector); - $printer -> text("Hello World!\n"); - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch (Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; -} diff --git a/htdocs/includes/mike42/escpos-php/example/interface/windows-lpt.php b/htdocs/includes/mike42/escpos-php/example/interface/windows-lpt.php deleted file mode 100644 index e8fef286bd8..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/interface/windows-lpt.php +++ /dev/null @@ -1,31 +0,0 @@ - LPT1 - */ -try { - $connector = new WindowsPrintConnector("LPT1"); - - // A FilePrintConnector will also work, but on non-Windows systems, writes - // to an actual file called 'LPT1' rather than giving a useful error. - // $connector = new FilePrintConnector("LPT1"); - - /* Print a "Hello world" receipt" */ - $printer = new Printer($connector); - $printer -> text("Hello World!\n"); - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch (Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; -} diff --git a/htdocs/includes/mike42/escpos-php/example/interface/windows-usb.php b/htdocs/includes/mike42/escpos-php/example/interface/windows-usb.php deleted file mode 100644 index 79776994231..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/interface/windows-usb.php +++ /dev/null @@ -1,34 +0,0 @@ - testfile - * copy testfile "\\%COMPUTERNAME%\Receipt Printer" - * del testfile - */ -try { - // Enter the share name for your USB printer here - $connector = null; - //$connector = new WindowsPrintConnector("Receipt Printer"); - - /* Print a "Hello world" receipt" */ - $printer = new Printer($connector); - $printer -> text("Hello World!\n"); - $printer -> cut(); - - /* Close printer */ - $printer -> close(); -} catch (Exception $e) { - echo "Couldn't print to this printer: " . $e -> getMessage() . "\n"; -} diff --git a/htdocs/includes/mike42/escpos-php/example/margins-and-spacing.php b/htdocs/includes/mike42/escpos-php/example/margins-and-spacing.php deleted file mode 100644 index 296a7b0bc73..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/margins-and-spacing.php +++ /dev/null @@ -1,48 +0,0 @@ - setEmphasis(true); -$printer -> text("Line spacing\n"); -$printer -> setEmphasis(false); -foreach(array(16, 32, 64, 128, 255) as $spacing) { - $printer -> setLineSpacing($spacing); - $printer -> text("Spacing $spacing: The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n"); -} -$printer -> setLineSpacing(); // Back to default -*/ - -/* Stuff around with left margin */ -$printer -> setEmphasis(true); -$printer -> text("Left margin\n"); -$printer -> setEmphasis(false); -$printer -> text("Default left\n"); -foreach(array(1, 2, 4, 8, 16, 32, 64, 128, 256, 512) as $margin) { - $printer -> setPrintLeftMargin($margin); - $printer -> text("left margin $margin\n"); -} -/* Reset left */ -$printer -> setPrintLeftMargin(0); - -/* Stuff around with page width */ -$printer -> setEmphasis(true); -$printer -> text("Page width\n"); -$printer -> setEmphasis(false); -$printer -> setJustification(Printer::JUSTIFY_RIGHT); -$printer -> text("Default width\n"); -foreach(array(512, 256, 128, 64) as $width) { - $printer -> setPrintWidth($width); - $printer -> text("page width $width\n"); -} - -/* Printer shutdown */ -$printer -> cut(); -$printer -> close(); - diff --git a/htdocs/includes/mike42/escpos-php/example/pdf417-code.php b/htdocs/includes/mike42/escpos-php/example/pdf417-code.php deleted file mode 100644 index 6735ae6ee4d..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/pdf417-code.php +++ /dev/null @@ -1,95 +0,0 @@ - pdf417Code($testStr); -$printer -> text("Most simple example\n"); -$printer -> feed(); - -// Demo that alignment is the same as text -$printer -> setJustification(Printer::JUSTIFY_CENTER); -$printer -> pdf417Code($testStr, 3, 3, 2); -$printer -> text("Same content, narrow and centred\n"); -$printer -> setJustification(); -$printer -> feed(); - -// Demo of error correction -title($printer, "Error correction\n"); -$ec = array(0.1, 0.5, 1.0, 2.0, 4.0); -foreach ($ec as $level) { - $printer -> pdf417Code($testStr, 3, 3, 0, $level); - $printer -> text("Error correction ratio $level\n"); - $printer -> feed(); -} - -// Change size -title($printer, "Pixel size\n"); -$sizes = array( - 2 => "(minimum)", - 3 => "(default)", - 4 => "", - 8 => "(maximum)"); -foreach ($sizes as $size => $label) { - $printer -> pdf417Code($testStr, $size); - $printer -> text("Module width $size dots $label\n"); - $printer -> feed(); -} - -// Change height -title($printer, "Height multiplier\n"); -$sizes = array( - 2 => "(minimum)", - 3 => "(default)", - 4 => "", - 8 => "(maximum)"); -foreach ($sizes as $size => $label) { - $printer -> pdf417Code($testStr, 3, $size); - $printer -> text("Height multiplier $size $label\n"); - $printer -> feed(); -} - -// Chage data column count -title($printer, "Data column count\n"); -$columnCounts = array( - 0 => "(auto, default)", - 1 => "", - 2 => "", - 3 => "", - 4 => "", - 5 => "", - 30 => "(maximum, doesnt fit!)"); -foreach ($columnCounts as $columnCount => $label) { - $printer -> pdf417Code($testStr, 3, 3, $columnCount); - $printer -> text("Column count $columnCount $label\n"); - $printer -> feed(); -} - -// Change options -title($printer, "Options\n"); -$models = array( - Printer::PDF417_STANDARD => "Standard", - Printer::PDF417_TRUNCATED => "Truncated"); -foreach ($models as $model => $name) { - $printer -> pdf417Code($testStr, 3, 3, 0, 0.10, $model); - $printer -> text("$name\n"); - $printer -> feed(); -} - -// Cut & close -$printer -> cut(); -$printer -> close(); - -function title(Printer $printer, $str) -{ - $printer -> selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_DOUBLE_WIDTH); - $printer -> text($str); - $printer -> selectPrintMode(); -} diff --git a/htdocs/includes/mike42/escpos-php/example/print-from-html.php b/htdocs/includes/mike42/escpos-php/example/print-from-html.php deleted file mode 100644 index 640132e11b0..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/print-from-html.php +++ /dev/null @@ -1,86 +0,0 @@ - 225 below) and printing w/ Escpos::IMG_DOUBLE_WIDTH | Escpos::IMG_DOUBLE_HEIGHT - */ -try { - /* Set up command */ - $source = __DIR__ . "/resources/document.html"; - $width = 550; - $dest = tempnam(sys_get_temp_dir(), 'escpos') . ".png"; - $command = sprintf( - "xvfb-run wkhtmltoimage -n -q --width %s %s %s", - escapeshellarg($width), - escapeshellarg($source), - escapeshellarg($dest) - ); - - /* Test for dependencies */ - foreach (array("xvfb-run", "wkhtmltoimage") as $cmd) { - $testCmd = sprintf("which %s", escapeshellarg($cmd)); - exec($testCmd, $testOut, $testStatus); - if ($testStatus != 0) { - throw new Exception("You require $cmd but it could not be found"); - } - } - - - /* Run wkhtmltoimage */ - $descriptors = array( - 1 => array("pipe", "w"), - 2 => array("pipe", "w"), - ); - $process = proc_open($command, $descriptors, $fd); - if (is_resource($process)) { - /* Read stdout */ - $outputStr = stream_get_contents($fd[1]); - fclose($fd[1]); - /* Read stderr */ - $errorStr = stream_get_contents($fd[2]); - fclose($fd[2]); - /* Finish up */ - $retval = proc_close($process); - if ($retval != 0) { - throw new Exception("Command $cmd failed: $outputStr $errorStr"); - } - } else { - throw new Exception("Command '$cmd' failed to start."); - } - - /* Load up the image */ - try { - $img = EscposImage::load($dest); - } catch (Exception $e) { - unlink($dest); - throw $e; - } - unlink($dest); - - /* Print it */ - $printer -> bitImage($img); // bitImage() seems to allow larger images than graphics() on the TM-T20. bitImageColumnFormat() is another option. - $printer -> cut(); -} catch (Exception $e) { - echo $e -> getMessage(); -} finally { - $printer -> close(); -} diff --git a/htdocs/includes/mike42/escpos-php/example/print-from-pdf.php b/htdocs/includes/mike42/escpos-php/example/print-from-pdf.php deleted file mode 100644 index 23469e8a00f..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/print-from-pdf.php +++ /dev/null @@ -1,78 +0,0 @@ - graphics($page); - } - $printer -> cut(); -} catch (Exception $e) { - /* - * loadPdf() throws exceptions if files or not found, or you don't have the - * imagick extension to read PDF's - */ - echo $e -> getMessage() . "\n"; -} finally { - $printer -> close(); -} - - -/* - * 2: Speed up printing by roughly halving the resolution, and printing double-size. - * This gives a 75% speed increase at the expense of some quality. - * - * Reduce the page width further if necessary: if it extends past the printing area, your prints will be very slow. - */ -$connector = new FilePrintConnector("php://stdout"); -$printer = new Printer($connector); -$pdf = 'resources/document.pdf'; -$pages = ImagickEscposImage::loadPdf($pdf, 260); -foreach ($pages as $page) { - $printer -> graphics($page, Printer::IMG_DOUBLE_HEIGHT | Printer::IMG_DOUBLE_WIDTH); -} -$printer -> cut(); -$printer -> close(); - -/* - * 3: PDF printing still too slow? If you regularly print the same files, serialize & compress your - * EscposImage objects (after printing[1]), instead of throwing them away. - * - * (You can also do this to print logos on computers which don't have an - * image processing library, by preparing a serialized version of your logo on your PC) - * - * [1]After printing, the pixels are loaded and formatted for the print command you used, so even a raspberry pi can print complex PDF's quickly. - */ -$connector = new FilePrintConnector("php://stdout"); -$printer = new Printer($connector); -$pdf = 'resources/document.pdf'; -$ser = 'resources/document.z'; -if (!file_exists($ser)) { - $pages = ImagickEscposImage::loadPdf($pdf); -} else { - $pages = unserialize(gzuncompress(file_get_contents($ser))); -} - -foreach ($pages as $page) { - $printer -> graphics($page); -} -$printer -> cut(); -$printer -> close(); - -if (!file_exists($ser)) { - file_put_contents($ser, gzcompress(serialize($pages))); -} diff --git a/htdocs/includes/mike42/escpos-php/example/qr-code.php b/htdocs/includes/mike42/escpos-php/example/qr-code.php deleted file mode 100644 index f57c2b8270d..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/qr-code.php +++ /dev/null @@ -1,86 +0,0 @@ - qrCode($testStr); -$printer -> text("Most simple example\n"); -$printer -> feed(); - -// Demo that alignment is the same as text -$printer -> setJustification(Printer::JUSTIFY_CENTER); -$printer -> qrCode($testStr); -$printer -> text("Same example, centred\n"); -$printer -> setJustification(); -$printer -> feed(); - -// Demo of numeric data being packed more densly -title($printer, "Data encoding\n"); -$test = array( - "Numeric" => "0123456789012345678901234567890123456789", - "Alphanumeric" => "abcdefghijklmnopqrstuvwxyzabcdefghijklmn", - "Binary" => str_repeat("\0", 40)); -foreach ($test as $type => $data) { - $printer -> qrCode($data); - $printer -> text("$type\n"); - $printer -> feed(); -} - -// Demo of error correction -title($printer, "Error correction\n"); -$ec = array( - Printer::QR_ECLEVEL_L => "L", - Printer::QR_ECLEVEL_M => "M", - Printer::QR_ECLEVEL_Q => "Q", - Printer::QR_ECLEVEL_H => "H"); -foreach ($ec as $level => $name) { - $printer -> qrCode($testStr, $level); - $printer -> text("Error correction $name\n"); - $printer -> feed(); -} - -// Change size -title($printer, "Pixel size\n"); -$sizes = array( - 1 => "(minimum)", - 2 => "", - 3 => "(default)", - 4 => "", - 5 => "", - 10 => "", - 16 => "(maximum)"); -foreach ($sizes as $size => $label) { - $printer -> qrCode($testStr, Printer::QR_ECLEVEL_L, $size); - $printer -> text("Pixel size $size $label\n"); - $printer -> feed(); -} - -// Change model -title($printer, "QR model\n"); -$models = array( - Printer::QR_MODEL_1 => "QR Model 1", - Printer::QR_MODEL_2 => "QR Model 2 (default)", - Printer::QR_MICRO => "Micro QR code\n(not supported on all printers)"); -foreach ($models as $model => $name) { - $printer -> qrCode($testStr, Printer::QR_ECLEVEL_L, 3, $model); - $printer -> text("$name\n"); - $printer -> feed(); -} - -// Cut & close -$printer -> cut(); -$printer -> close(); - -function title(Printer $printer, $str) -{ - $printer -> selectPrintMode(Printer::MODE_DOUBLE_HEIGHT | Printer::MODE_DOUBLE_WIDTH); - $printer -> text($str); - $printer -> selectPrintMode(); -} diff --git a/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.html b/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.html deleted file mode 100644 index c3d307a94d1..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - RawBT Integration Demo - - - - - - - -black & white picture -

    RawBT Integration Demo

    -
    -
    -    window.location.href = ajax_backend_data;
    -
    -
    -
    - - -

    Visit RawBT site

    - - diff --git a/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.php b/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.php deleted file mode 100644 index 45a4e8fcde2..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/rawbt-receipt.php +++ /dev/null @@ -1,145 +0,0 @@ -getSupportsGraphics()) { - $printer->graphics($logo); - } - if ($profile->getSupportsBitImageRaster() && !$profile->getSupportsGraphics()) { - $printer->bitImage($logo); - } - - /* Name of shop */ - $printer->setJustification(Printer::JUSTIFY_CENTER); - $printer->selectPrintMode(Printer::MODE_DOUBLE_WIDTH); - $printer->text("ExampleMart Ltd.\n"); - $printer->selectPrintMode(); - $printer->text("Shop No. 42.\n"); - $printer->feed(); - - - /* Title of receipt */ - $printer->setEmphasis(true); - $printer->text("SALES INVOICE\n"); - $printer->setEmphasis(false); - - /* Items */ - $printer->setJustification(Printer::JUSTIFY_LEFT); - $printer->setEmphasis(true); - $printer->text(new item('', '$')); - $printer->setEmphasis(false); - foreach ($items as $item) { - $printer->text($item->getAsString(32)); // for 58mm Font A - } - $printer->setEmphasis(true); - $printer->text($subtotal->getAsString(32)); - $printer->setEmphasis(false); - $printer->feed(); - - /* Tax and total */ - $printer->text($tax->getAsString(32)); - $printer->selectPrintMode(Printer::MODE_DOUBLE_WIDTH); - $printer->text($total->getAsString(32)); - $printer->selectPrintMode(); - - /* Footer */ - $printer->feed(2); - $printer->setJustification(Printer::JUSTIFY_CENTER); - $printer->text("Thank you for shopping\n"); - $printer->text("at ExampleMart\n"); - $printer->text("For trading hours,\n"); - $printer->text("please visit example.com\n"); - $printer->feed(2); - $printer->text($date . "\n"); - - /* Barcode Default look */ - - $printer->barcode("ABC", Printer::BARCODE_CODE39); - $printer->feed(); - $printer->feed(); - - -// Demo that alignment QRcode is the same as text - $printer2 = new Printer($connector); // dirty printer profile hack !! - $printer2->setJustification(Printer::JUSTIFY_CENTER); - $printer2->qrCode("https://rawbt.ru/mike42", Printer::QR_ECLEVEL_M, 8); - $printer2->text("rawbt.ru/mike42\n"); - $printer2->setJustification(); - $printer2->feed(); - - - /* Cut the receipt and open the cash drawer */ - $printer->cut(); - $printer->pulse(); - -} catch (Exception $e) { - echo $e->getMessage(); -} finally { - $printer->close(); -} - -/* A wrapper to do organise item names & prices into columns */ - -class item -{ - private $name; - private $price; - private $dollarSign; - - public function __construct($name = '', $price = '', $dollarSign = false) - { - $this->name = $name; - $this->price = $price; - $this->dollarSign = $dollarSign; - } - - public function getAsString($width = 48) - { - $rightCols = 10; - $leftCols = $width - $rightCols; - if ($this->dollarSign) { - $leftCols = $leftCols / 2 - $rightCols / 2; - } - $left = str_pad($this->name, $leftCols); - - $sign = ($this->dollarSign ? '$ ' : ''); - $right = str_pad($sign . $this->price, $rightCols, ' ', STR_PAD_LEFT); - return "$left$right\n"; - } - - public function __toString() - { - return $this->getAsString(); - } - -} diff --git a/htdocs/includes/mike42/escpos-php/example/receipt-with-logo.php b/htdocs/includes/mike42/escpos-php/example/receipt-with-logo.php deleted file mode 100644 index b094e9f2b2a..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/receipt-with-logo.php +++ /dev/null @@ -1,104 +0,0 @@ - setJustification(Printer::JUSTIFY_CENTER); -$printer -> graphics($logo); - -/* Name of shop */ -$printer -> selectPrintMode(Printer::MODE_DOUBLE_WIDTH); -$printer -> text("ExampleMart Ltd.\n"); -$printer -> selectPrintMode(); -$printer -> text("Shop No. 42.\n"); -$printer -> feed(); - -/* Title of receipt */ -$printer -> setEmphasis(true); -$printer -> text("SALES INVOICE\n"); -$printer -> setEmphasis(false); - -/* Items */ -$printer -> setJustification(Printer::JUSTIFY_LEFT); -$printer -> setEmphasis(true); -$printer -> text(new item('', '$')); -$printer -> setEmphasis(false); -foreach ($items as $item) { - $printer -> text($item); -} -$printer -> setEmphasis(true); -$printer -> text($subtotal); -$printer -> setEmphasis(false); -$printer -> feed(); - -/* Tax and total */ -$printer -> text($tax); -$printer -> selectPrintMode(Printer::MODE_DOUBLE_WIDTH); -$printer -> text($total); -$printer -> selectPrintMode(); - -/* Footer */ -$printer -> feed(2); -$printer -> setJustification(Printer::JUSTIFY_CENTER); -$printer -> text("Thank you for shopping at ExampleMart\n"); -$printer -> text("For trading hours, please visit example.com\n"); -$printer -> feed(2); -$printer -> text($date . "\n"); - -/* Cut the receipt and open the cash drawer */ -$printer -> cut(); -$printer -> pulse(); - -$printer -> close(); - -/* A wrapper to do organise item names & prices into columns */ -class item -{ - private $name; - private $price; - private $dollarSign; - - public function __construct($name = '', $price = '', $dollarSign = false) - { - $this -> name = $name; - $this -> price = $price; - $this -> dollarSign = $dollarSign; - } - - public function __toString() - { - $rightCols = 10; - $leftCols = 38; - if ($this -> dollarSign) { - $leftCols = $leftCols / 2 - $rightCols / 2; - } - $left = str_pad($this -> name, $leftCols) ; - - $sign = ($this -> dollarSign ? '$ ' : ''); - $right = str_pad($sign . $this -> price, $rightCols, ' ', STR_PAD_LEFT); - return "$left$right\n"; - } -} diff --git a/htdocs/includes/mike42/escpos-php/example/resources/character-encoding-test-strings.inc b/htdocs/includes/mike42/escpos-php/example/resources/character-encoding-test-strings.inc deleted file mode 100644 index 000b3bd59a2..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/resources/character-encoding-test-strings.inc +++ /dev/null @@ -1,35 +0,0 @@ - "Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Wolther spillede på xylofon.\n", - "German" => "Falsches Üben von Xylophonmusik quält jeden größeren Zwerg.\n", - "Greek" => "Ξεσκεπάζω την ψυχοφθόρα βδελυγμία\n", - "English" => "The quick brown fox jumps over the lazy dog.\n", - "Spanish" => "El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y frío, añoraba a su querido cachorro.\n", - "French" => "Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en canoë au delà des îles, près du mälström où brûlent les novæ.\n", - "Irish Gaelic" => "D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh.\n", - "Hungarian" => "Árvíztűrő tükörfúrógép.\n", - "Icelandic" => "Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa.\n", - "Latvian" => "Glāžšķūņa rūķīši dzērumā čiepj Baha koncertflīģeļu vākus.\n", - "Polish" => "Pchnąć w tę łódź jeża lub ośm skrzyń fig.\n", - "Russian" => "В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!\n", - "Turkish" => "Pijamalı hasta, yağız şoföre çabucak güvendi.\n", - "Japanese (Katakana half-width)" => implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウイノオクヤマ ケフコエテ アサキユメミシ エヒモセスン")) . "\n", - "Vietnamese" => "Tiếng Việt, còn gọi tiếng Việt Nam hay Việt ngữ, là ngôn ngữ của người Việt (người Kinh) và là ngôn ngữ chính thức tại Việt Nam.\n" - ); - -/* - * These strings are not expected to print correctly, if at all, even on an Epson printer. This is due to a mix of - * escpos driver, printer, and PHP language support issues. - * - * They are included here as a collection of things not yet implemented. - */ -$inputsNotOk = array( - "Thai (No character encoder available)" => "นายสังฆภัณฑ์ เฮงพิทักษ์ฝั่ง ผู้เฒ่าซึ่งมีอาชีพเป็นฅนขายฃวด ถูกตำรวจปฏิบัติการจับฟ้องศาล ฐานลักนาฬิกาคุณหญิงฉัตรชฎา ฌานสมาธิ\n", - "Japanese (Hiragana)" => implode("\n", array("いろはにほへとちりぬるを", " わかよたれそつねならむ", "うゐのおくやまけふこえて", "あさきゆめみしゑひもせす")) . "\n", - "Japanese (Katakana full-width)" => implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン")) . "\n", - "Arabic (RTL not supported, encoding issues)" => "صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ" . "\n", - "Hebrew (RTL not supported, line break issues)" => "דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה" . "\n" - ); diff --git a/htdocs/includes/mike42/escpos-php/example/resources/document.html b/htdocs/includes/mike42/escpos-php/example/resources/document.html deleted file mode 100644 index bb413aa1d3d..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/resources/document.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - -

    - - This is a simple document. For receipts involving complex formatting, - non-monospace fonts, advanced character encodings, or vector graphics, - you can always create and render HTML instead. -

    -

    - The printing will be a lot slower, but you have full access to things like unicode and SVG. -

    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua.

    -

    Ut enim ad minim veniam, quis nostrud exercitation ullamco - laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor - in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla - pariatur.

    -

    Excepteur sint occaecat cupidatat non proident, sunt in culpa - qui officia deserunt mollit anim id est laborum.

    - - diff --git a/htdocs/includes/mike42/escpos-php/example/resources/document.odt b/htdocs/includes/mike42/escpos-php/example/resources/document.odt deleted file mode 100644 index 4bbd7f98b654dd1f8086589f22bfb9ed7ecb4c9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39751 zcmZUaRZv}Bu&r@-ciFg;1Pd-3cXtT^g1ZNIcL?t8?j8sb+}+*XC3pR&>OP!04^(zh zDGJt_v%AMPMk~oe!{9(bAV5Ia+vH0a{P~PR2LS=`-xu&L2pbCTK%ntn|NrSi4(*exnuy#D8A|zzo6kVHiyLIVB^sG%tkRX2*dSPlMBpW2qvNc!Y$d#^^ zRw>`hsGW$2Kh_iXz3h%0_@(1`j5}q?@#B8cP(738%4+a^E`Tf2F+=Y}{B7G@6$4ZC ziAA+|j27#OL4RO&U{=1fqi*0~F=B#+=}{Sx-d}B$eR}Voj#sN!^m34j5~7gyXlLL%kJG6z89~<^rQu|o{`NIbrc&w`335^;*Y!tI5m~e?Si%A z?6d7!Yakl0c}>@YPQ6LEh{<3CE;R&b=U0SYqxm!Gs`kvju#YKZ~lz^^&e`4MNK!< zKr}J8Yh6Ed(?k0W$JWO-y`q*K63Egci`Qif`DW=yj(53c%}0sQ`*Ae)27!R*-R8#w zclEcOv9vEeZ#Sb6xJ*zKT?j+*0-QX@g^5Po_zgcMeg3^a5_4KMo>q4xxc`YFT(#>F z_^JwnK=8?Uz~}WmwEbn&@B`{Y@cm9T;r;D)Qa+ty`CBNdRD)4pfaz$8da2U(lo&dV z?|_7@)k5Xh>jCUduUmOXp0nEDrRY2#FQ+vO&M$Yzs6-s@=S_>HU)U0e9mUbrt90&x zxApUJ-Ay`HP^;aUVSZN}!r>3$548#n`JEClhM3b41buvxN`TQAX}~jJXjJNm zJ2t%^*Uf_u#xqXQAljdHA}`xdSz)50wOZ}B3#Ak1lBH{h$bRZMPm9M2zR<^FJ0m#=H+LlL(}gOg%K`DRqSpj67L{ge?TcPjn6XG>@@9xZF>$vQ z3%Z0pV~)Odm(!_p1jI?R=bL?k&p3QKKW_F$?(_`~adE;Uw$>L7eY0kmG^^#@e6I)b ztrn}J#dF1+a;)SCWK4nQ0n0RZ2%O!bi6gEtLL_w3Km$x$bA%`=Ut1M;YeI}|mh!vn zA#!L06#90Us=(yEk8<^j0hrCMB7JALbSf>ols%s>P$0F84~AHlfB346Vf(?C#mLNE ztXrhkqCU%E)<^lkaWAfR!4BiFS(zJ5{e48iFCc!cg-P$^<3E_JX&~JUPv%aMX2hch zqvWf%2b7Q@*3?~Tx5eOy10B0(nAE31H%k9bq-u4VG1CCk+`}1Jwx&18O#Saw5lys~ zmzT>_%2$v|Ty7ys?Rg`lyD}(A3~A!oGF$v@jDI;Hb(6{G(U)U;^ROsF3v>9{m}+IOt9lWZmhU$U`Ql?>5ro z|JeRM=qv}qc+|Fz-80Fh+#^ZdNI}n=d6)Cb)1kq3xh34|L?D3qKA!&21$re)5?Gh_Qg-c zvKfEzwT=*Z6zHiVP9{m3#59B-%6gKFTz0?4m~bF1Cim<~Oyqb!5Mof12_B?=r%#W7 z#Mww7f0q=It~O>}PcL}_-HG#j055r$-_j%s!_Nq^`xYOO5_(DCTR#lRjCOu6B}k7JVtXJgyswKzG^>>Vqzfek|9(&UxnrsWM(?fYcDTYRyQ7(gMF!ooO&IP9r>ggUT9W*I z#i}NcT0!vH#Cc?^FYuaGv&NvxC^ZZ-*uPoW{qDP;xbIQyVJB2GzVWnE*t zyS1n5-ARE*y+X7QDMb=lk)Q#JC2@a(*c4WM8B$@ow7E)cY~cbZL~nnh=wufrLb35L ziT^J6D_gb9>KkZv@S{&pbz=*w{ozJMlCNpbbtSMyoo8swX|rUsEntRK5{gZt|BmXz zA_0X&ymYoiaS=nK$LBo`8$sBp7B^A>ikHT1t2;=*c8w{CGyD zI@GiZ40?^n(>e8WwSmg0|Hf7M#o{Q(86{T{UZO15b|jP)DG~SNm*32gcpMWWOe|!D zh=4i7eqMDM1~WvP8p6V^K(0avI(f|IRI9`Hmr`alU&XKcIOP}l{+e4&w-bDBXG@rz z5X^Bf8%%#9H`eM+Wlk>^~~ep0^N z@I&?1Y2quqMvYz@))fEKRv-tA7j#Xx_p9LJnv)t*a>s&>3eUjyIkhWy( z$=oW*Ao%gLy9bfldYSJqILg|AqGvqiFNOG)(1{W)4_`+K-@(B79iK&~k)4T2)$+To zphi&1K;tK$_sR&DakWp`{hYoWifuFoZgpQ<-X?|qc~uznuQxLE6$49Ou!nrxN4|Ts0FR>@C@68WFF!q){^&`c)s2!<0qf*5Pt`#Ea0q6Pj|)K z_NreziW3qr{eS11VSaO%ssT#_gJ|#Hsp%Y_7Yh<76bxIKRuSY4V4UKS5DP)++kyD? z^P&wtaa>-lf2r=fa;6`ITyC0?pj5wsk%-AJ$rzGw!(bK2czS{;w(MwY3=hWkZ6dvV zsVQ9|NJdk!-5q~#W|9>Z!ynd#+V!94miO{rIn+0^uBDH;c@pl3qvcF?{5hp{1hbfU zV~%58$`xhf97nOY4ULC~V=3Mk+uW&HAQ?2B1IlZJZZ4fTlFpX9sbml>FxqCj;MMzqBcq;=1A1Cw=RMJGoQJPQ@0g*li#TH5K-!OA}+(Tr9K-CrK2To#y z;aL(Jc8lOPo@UKv8QRS>Lj9xjL0=f*z|p%)ioC(6`vYPB{RL! z7Yn7alNj0iZ;SYLB$UVr{xYfgtwDf_AVjc~KB4ea;!dElQnJqvAXtjqb|Nd%$))Bh zbN(&D4H6P2H=T&&2n|SK)(+77_Go5-iP^-<0%{5)!QdaB3WYTdtBb3nf?V63p4T)) zMK^ugqP!^aPtGvM6sWKJo-BS^N~a@36#wc@?1_|$0F5~Aj%i3nD|>8f>oh}Y+=V*P zF9;=yRIJ{M*SaMKs1So7d$lk#=gSRJ_za%t>OjFlu_TEHBM4eJbTSmZBY~sa zUxq$}*#?dyG^K7bdF0s3Gp3qVI^xF07NW*cP>_uC6uH7FTjBZJ44g3g!X8dp9Z`?r z#6oIRctnR&Q^Ap*J<+!QI#9fWN^n#(Q*_$i@l#jf`cl|Z>aC@8r}|D?YJ{Fd8?32L zb=NHK4wzJ5wkKXOgs14giy(92B0z49{ni$zzmn>CV6|Y+UlSqU86w5TY!!Jgrx?E; zu?atL%`Lq;e!`VZQh9U9o+$X7PG87}6FQO0RIr3NZF*J;hX;9D?cuP)8Dba`H9!=< zs(16s%gIrOfUywUaLt_gpT^zl^`F6$x#Zho0Z#}Wdrw7Ii*zE z6ircvUzu`ns#I-Fj@SG4V7x>wP4xY$3Xp+fnjzB&*5@lt!|vZXM(OMo{f@ zjqJyz0zc~liefZ{gxEE2g9iDyg_L3cW*RlWs> zTiJj}^zE9Z=Gw1sn?0@$Mp|3)eUFB04>finjyy(+hH31_)$9+}+*|n7xm=qA2S`IuBV`S}5fX*V~*9K~k-~uoG0nzZv?12V`@3 zh!g|cq@(0_0F{N!tqfE73`h;mVcPvZD)*q*eyVy<04!6dZilPQhhv{EF_$%k1Hhbs zQCsG?wVlZL>wc1IsZbwISRONnDsYix-z>O)eGiLxF~2}gfCkxzSVCZmdKv+Y2fFLVnGYHJiw6n-qM-fSl%Er+m_@HG+I<1(X zJrl1&S2?KH;CicqL1O3Lo+(x_z(h6e)ux7&TC6ctEE!_RBe$3DdlB{{6wL%$B29g~ zMKAyKy7V&u7ObR6>gel581Kw5pf@}ofzjsRmoR>=ABwRW2i^tj%s%Zpnp9q<6jhkl z?KpQTSKI(+Jsqk(9)cxiX(t9mAFLK6&5b6rz@ky`0mdWL=ZgZ-w<1+t1xH5xIq5qq zS?s&vf9gcHMQ8C{z}>;p3dtX6a@1&RR;x5gTKr|872aH`+rpYZSc&z5M#6)^88ZwS zfr6p60RN(E*LDBj{JlG@!qkgF>A0gmPnMMH6QDc>c6@YjF-Ck)f;Z-K+(nhvA4ixKApC=AHD?s3}@ zda1fS^iZ6PD)Rc`gG5iEPbj;N5~|HXD(x{afy&HL2e6g~pYYFDTMii%LZH4N5dL;< zry>%kN=@}Lsqt6N6^6Qi2qVIbhxjS&Ihd2meqr84szMj~Cz_Z_Xgmo{k(DT~Wt)%# zQt)#%Il<1vdCO+Zcgp?BXC@+H)nhI4Y7dz5)-7=ZI#eTAR=k;CNMipkl?@`PIkH*A zSXoLOtbEPERw{9!w8)IF281-Y}rrr4P>-pd>`8GSj8c6=e> zFv!619|SN|v3$ltyNlJDT&9Q~e9kWH22@ogch4v}?-voXNCk-7Ym=y2b@d7C5_Ei3 z^tM`6Z-f%WiTgIcDHI{Z%Oy*7D6glS**h!fuSE3qiq5Y3TP(a|1FQH;-o#oBFh1|t zIoEGwNBEk?f2|e>Gy4e#Y?ACM=kL}Amvoh<6Rh!-;3uqHHd^3KyDm%Xu{7M>4fx*T^ z_Ox+6Mewrdh2GQo{eE%uvio7hN;yBs-9!ov06Ykm$#B`eAJ3trt_0S53==#IWt0x& z**>eyHi#Xzt=n*n5NfEsy{Lx0mj9%>n*}0AJ$sBifI@{E|i@Mmpi3UE@jW>^<-c8b6OnVe-mKt8T9z$ z4gePDGX}*2&7}ij3rXu}-}~i`vI3Anzxd2CDS{!6veKTcHiHncg|R;S0NCxD48Ur7 zLnHe^=`R3sn|}Il(A9_`6YvDEQ&Q=>RE)rbmXg$%Xw{ki)pq`S<1l%*RVR!Vg*E#f zfbfO`GQDm_fN?xw_yFs1yHnW|d@$^*(_k@3u3jXn+}_)LWXcfn!$m*sn~ zemlg@nUoqGEA+ur8@LM*xdSvTDH(PdK|eSFNwgJN$@@Z!8y{i* zeuyDIIPqX!fAmliM=8PGI}e}ZCc~oTO17@$Ctc5zUk0yB-Rcy^eS028bx2gM)u-!6r`9d0R6L!TCpu0G(cj$T>J37-`-CFpXK)mJgBFItxI=W zpR?DPbb60SVX7TvTuOW|fZY+xy{<3BAv(5g*ab?rl<)>pdXHjWezWW5FVi^bG@huQ z?7j|9pzTyW>xt2AlwXnzxSdfvOVO7zH%1n${dr@FN*e!PU{WgswUP)%GXwFs#ZLU4 zP>soM^jj<904JjJ?D}+Uugy(aure3?*dX*Cp&eO(o`R5f9(UF!Vz$pKOQ&svGzOcD zR-Rcc;_;l_wMTL!^Gk~so^`oLFZfuE*2`F5z`y3(E%B>pH4BYSrU#LharLK+l-=^U z+oZQic&@}`Y@|vQ-;C6DPu*EQBr))-tlD2rDyB&e&}rZ-GFvX?^IDwkz8CV!&Zyk{ zA#8w6q6th0=U!Dl@EoO8AUI_vZ_@O&@se6*{AajpGgZYSYgZts!boGUGrM?awhJjq ztT23Fefqt?gca@aeISKQNKYhphFDjBdjB@fT_LRV}lDzMBQ%NA=TuGQsq;fb3-1SZPRamAt} zo^l#vr>;yw!`N0kBNc8xf*7BYrXAz50|0`l{qa3PxIqW5_llm~Z&J+K@1>@sL=8Fq6o;i9Q!of+so^NNu~H%|r_!q2ZKB zKKOunQ}ZWvjaD6$B*s6Bsa%mO|2up=dq@TV7BY%*F~w+>N~Gnl3fN+T2joG*P=uA7 z<5XsSgStIF0uDIY1sF0pQ}{ZfSm`p>0UhvvwsGDA%@Wa#ND$MM1CbRhS^NI^Z&J3>Jl zd-zVQI>j78@0CUiw(ciTK&XFV8(@5Ad!Cd5h_jzio=mLN2$tou@j%#rSS~xx&$>yP zp>Hb?U2xd0LZfP!;GA z;B`GKVBTNV_`XN-MNqy1OyKSmGz%y3 z9}gPTSAk>IX++qiKLSXPev2)s{;c>ZeIGX&Jx@U^Ak*Y4Zj?Ja5jrcGgJfXt00Yf} z2&YSL9siUoD59|G3hHZ?^NchA^QO)AVZeLRJwtL3Lja5hsi{HTQ2C0oTtRLg zUEG1RAbq#!KEs*p`C-l6IIKWLhT(ZsNXC)@mNYpj1j=-oIcINw3{@p?{^HQMT+g&3 zeuD$Z(xK6RKAeS%3Y=Cpn7^70@_3Bv(->l)z8bNDU`U)f<>M2s^!R5FYs1X5;iA5A zBriyurATBv&D0@aPm$28gT*&Rhm0BeAhB4mZRVi@w{jT+hu;N4_eG68^_`Ran$lQh zKY%Mhv&RsX;xFB(gI=60Xhifi&kmpkv_FFD>C?>us2yj!J9W0wu6VtZjxbM70FvFl zmmn(@Sm5UwsyUqe_jgc+Z98I?h~SMfhENJDMj+z(LkM#`>${}w)Ngd5DBIZ>=0eFI z<~xMP&&Y@I++X!vmrbcdlok1}!GO*cMt`CZ1A%VtKft3v*~7qd&2|u#CJm z&5tS==qw;~p$Z@U&ypzVU=Xv~iJUW=ATS{#IH<9q0E9UM_<;I(NQ-+R=!H{(Ay<+A zzzzq3R629vLY*N*N~%hI1&pw~L627(CfiqV_i9#-wzo;Wuw`nd!&h)ib7RO#-a*O=rD zVad4)u#YWwV!P#q0bw)rrRe7|+X`+cV}GFrz0>EsL`r>IWDSf)~4l4li|GIRMU({2c9`?q&p44r$f&#X?U zKeTHg>)MwfD7!a7EU``8uwh^RQKH@8XCY52MDJCF-m4n-qZh8r_bjQ3u60-c;*C^r z%+HEufF*{;MI2_UOdyXxbA-@FxQK=Ai^IgAxW3E^npctltF9M*$63*Sh2=ABWL2?P zc5mpZkJf-3AMDr&`G)Wo6g=XepRP4P-nN2m_sd$^;VKc{`#lj{mrn!# z6v*Cxsq&O?DIz^MuZ`1#w7PlFuQCEI0o2T~CMN_W3XeNI`sjkbrt- zwC!F3IDhAm?&Q2*)r5`ZxRKriv&f9ygZLrG zB5P=kww%w${Ve7YKE~o-D%VMzZ_yoKzCA2S?yUw`i0Fb(!iIE7Dw{L&4^Vc9dI6Jy zOwBOY4BcUW8bZ-XJqIu)d#x(u{}4-z;*hG`o>EFw8ul2R61-6|Z<^Vhtu_+k@V%}Z z0O=!4w?-1Z<(G!Ey9Gs|_eT3|QBpeN5*S??X9-Rgb43CjcK;|-o}=6X z1wIRi59s`s6y%>dX#_~ql$m3xK^HGG&vpn`AD zQ~P%TGaO){UjgBzg&IR4pX2zBvwCDiw6A+{z{Llcf=^)@kHZe|;bO-}(QctyZqDmJ zaZ_QF-{gxpHtjL!`?|U*C2=b)(Nm%fPwI@}*7yrC?GhM9OeO|_BO&B;FqWvm8~)cC zaJxC$fWI>=#f^c;1hATp?GGZ^y4jhe+2$ep0gaO ziH?!MWh28W^=Et{i|@6(eU2g_gW#lwQ4DbDMv!=ln9tbZrS!vemwAii# zF`0D$L;`6Qh-3*;i70|;U}^x`J@C3me}W5_pKGnpmg-CbmbRvW^Iu{Y$GXC0-m>nx z%YZVk))GqQDOEz_&xOI|axzEix|F95ie9*99kN36|Hh)Vl(uT*RPml^IS> zF7IkXZNV2$z%x}2>H7J&a4=%p>7DF-s7zG!^YOxM!-Fmkibm+|D)9Jl?fbTG^rX+@ z^~q1%W%pPp8F(62!J20vLg)j$m9x_}1FwU$A4;Lkx50*bT)b|b0N=GI>FzKuPH_Ig z_0nBauz<9C?yq+j+(yBBNK7iMediAVUX0-c2tg&A@%zOg&ruQs(|iVI-uiBem1lYK zI$*YlK50rGNk_7kpK!t>G+qSF&g=f(W}rcfo$E#iK6@C#VX4|`UPn1BvpLh z|3oD!3KA|{A?fY1oL^N&=ROw^kDyvE*Y5-2FeAb&0@hAobSedH14ys5BWpYNlC>*)z0aV-&s zR@Kjy_Hwp(e{2DOXijt@?ZhtDm{j5yo1(%>nvhvXii65iu2$vwNBjLmEXP(Zj4MJ0**u^QZ$ zC-M3k3}yjGWo=GkmQ^RX1Gr*<{nH^OL`o390fcJeSsUdWBb!gT-PA{Io@7^D@L)gu z4}4DNm|59l%Gqm<-tbQ2)O1H3C=JH`$kuX1V-W_T*ZQb{@q~1T;S%QPtNTFZ_&q^x zp(up)G^<(r9dm!3f6^K}?MsGm#i<|J;Cu(oMU^#7@X9vmkKMNHD{5rIBD*R?le6l` zX>C>Q%5)l>F-;IN4%?`K2wdY`RP~HF#}3B8pR}|D)AbMNZk?{au!Y6G-Be^T-)&8b<3_)K7OgR=GYR9i2!Bgbj`=Q`#Rt=v_vv0NPi^2sg z97@?br@~NERq|BtMcNa{4*Hz~%TUUO)wExj=&=*eJFPG{cwW}->UQ{zmZ^GJs?DX& z3|rl4VvsoF3$FGzsZ+X5yHXpX+*+g1*W|oZyhS?oh+X?oRdId1^`;?KW$Ln{@GFzU z9%K;L;yXho-UROeabj$EmFXZ7Rn^AAwo9rLoESD6bCMW6@UW|bkwL8%U$-IjAyC&n zN~@n9a<%?LEBu#CkTLw|el>-&0lOXJlt%~Y^Vc3APE$DT0rR1Y5vyk+CoPc&6bfp& zLB$y^*dte>qa6`s!_wv%hHasA^Xr}Ky+*Xy0p53bU#Zvk=W&OP${rX5Ihb%lZ<^dr zR|cp>BPcuN#M3gS6xVw#2FEYuT$ax1Z2yXd?Cp~X^9zl`x{KXNA-CC z3p-os6Te8rE`v)VT8XU*R6!Zt2Nf$_9lgg11rDR%tDG^`6wLTSF|DD`GtKjsnguwf z{;5LXv%6*iCx;Rr#|Y*h*&^{9ns5z-@M}ls%&G^862bm_SM0paSuK{&`G(hS7i(=m z8!A&c_pjrfNq6+XL>6^mkNAtsjWpz3$O~%$FV;i+ix!OH7WB~?T_6z+glH-XC&SHK zF^rLRvmPAEO6l|Zrt-u-F}ZKCr?;n{3Xj605C}K)Azgm~6$T^Yvku7TG0XIQnP0vE zV*rh?OrwfO8O~U^hQoZyPX*ytYOO+(&8G}KQ`CA34j)%=hd@Uuq7ag>23tny8!u>3 znNTUrFaGZCcs7IE4$T+QwhZN|z29P;IO9pJ$N^q3KeNzQ~ zav`Wn$%zd|i0=E%5|;iroXF~fiOSDT5{EAH!+}6FcPvrJlB$&j@3?;J)JRf7i`j;{ z{S~5=Uu=_zeoo3|P2hk*Q2}%on^4L*6QI`{Nkt${{UX47799|ufZCOEj0 zvsjd2MJU<_LUAaTToJ}U%HegoYly@NMF2f!&1q7AJ*I3rfrprUj?u%icGp+TvRVBpO1M5-2T{;#u+je>q4y9T9Fqbm-Q|>1#3Q?MEA%Qr_ROOWp z_iN*b)1|sypwdb2A2UWgmr)yFiu+l&Go}4+sxTW$$to*>ac?Co(;t?-pX@qcfg^W?fMF%T zCqMS4eIia$$V$@^-^H2nH=Em0#~oz3e-7AOrmB8=da^f3v@Z3C#YRd9$kg3PI?e^r zDq(z`oo$tdvI&k3hav0~hqA_|$aPt9h)Ck_9ZUUGI8A|Fw3};wnKF_{=L^I`uL!-z zyx*v^&MLo&wUex49Xa`jf@yF^t;2aoPKiaatog@MQ$beFsW3fl0GR=;1t4W!D0(-^ zX0cbV#9Cj1Q|NwN^sAiNo%()4cdrap;pm%5#V$=L<>%SudtuZcvOk7rh50ICO?o5S zA$iI}xn}&MhqK>Y7}<7`PNRKUHiK7Y7N>&;G7G778HG*Vvn*G;xohJ?;&SCPxcJ3q zh!KYZOWIsDH^n*qMJM;>*9DK|R9t-HJ4XDZb3)Pq1u~^kLwwMOi-8kESv$pmAP{ zAAy!`E|$e_{wzaiSwd;^B`I1##c6{AUU5X@$Kr1*J~0DS9C&L?Z!V(LzY?Rr=h*HU z2vpRwTI%9aS7(=u#pH8{Q-meY9Bo$DwMz3@@|{%=NlUXWd2nmx>ZgT^KFJT-Yi`O=_dO^1vt*wog(qqV-5wUIf^hJ|-V$5?@kIwzn>9@x&=z~3Elu+e% zS5h|Ty8A;H;%w+jcXaA$M?~G&+2IU%NB>t_;QK6K5xyW zZ2COiJ+<_+lC7OI*(mb+plVLu$5e{L&<|sOw><-{?6I&I;8%m=Jn35}ak`y}>W-Yf-I|6x%#q#c@xZd4ij%}c`YZ!)?= zXPpy!R+##U=+)>*c)kV&(P{1yD$Pg3T6HJuc1fdY=lJH|lZ?&hsG3gUVz>h`Kbs&-U0L5!{ZfKK4$_$aTa1}XZ%f;kRhP0Um8ftr-YZAUh}4hSCSjiktwt3dvG8jh(0 za@7)r{l|0wX#!2Yj2f*IPQ4FaVYBDoyIsK5fZTvEP4V5N`vHylKNtO1jowTPHV%dp4CTMf#Q#ju-S2lBTFPp*w3JA5h`uNyELzdW3G zn2o0chIK44H(C-#cL##jux_H;(f+GMAxpD92bXx*63_sRr7n~}j`MdS9_+bDOUfLa zeU)*z55ZSh$zROI2+n=g3M5edioUpivPp_m5fS=k+iY+2DQ@&I6#_rHQuk3je<7Bw z{Rq^fTYz%+csHxq(*0lfNq%+uL)udu6N#%rug#I#2Uw2)zJ2_&gVmL)wM_r<>i_F^gmnIBLS^WZ%$Q3i_4m@I4l56ZUNc;N`J}*Jgl9 zt{E5R=K4MCyH1WQ;~duZP61?K0)2V0TpXbrvTXYz-LYbm?uQG-gT6v0y# zvg@x2y6v}DHjnZI%lQrNZ(eWy>oC6W9N{KD>hBza2#(7cy^^-!g9+*zDI?S=iMRtp z{&YGgPDTy(iHk=kfII36_^7+FLO!NoUi|3+yCNd%_wVzOrj6_W03P6Sk$6!0Qne4@ z2-$|~F`=>|AW`(6Q|LO}$)@&GHWsP#{Ac0Mw>2+)b31Kj8$>U9I>%bPeOBaqK8L!Z zqngbJF!xomzae)Z1xvc1w`Y^({9pIOW;0`%#yN09+m=*lSmdLvR=tTd;A-mgE23Qg z1E>c;kQ!GSfLIKm%|&DtdtNU(^j(+t55x2t>HNl}8xpYqJfSPkIe&qeK7*2Rm!eVk z-x>p8f@Ww4wjTwur=2y#0%3QUm*;f zA_(A?*hLE-m1Up}C=6uKlN2@;L8ye z87cvLE^z&r;5p}{909er8n9+{s75*fAOgivXg8fd*y|4sOt*s8OY9K^H~+b| zUP1usGJGX>Pz4#2NrktX7i&eV0?qYCD8)lBmyb=Su!O< zpuGLJ5eb}$f|Oc7g$nFDQlS!ijZg!A-^-D9 z%KiWgj=&vssSfElFh=`o7--n8W{U)wV-kmUV0Xzs}O~{Byd{9CP1gm@;$nI9! zj$?F_`qR-~kp1Wl_ALLc;UVDQ%pdL&AaJZs6C|SkUm87Y^)KltI7nb#N0ujs6=rr% z?s8Efs8hk%QTU&~xEcd~Il+Kx64EfVKv*rHOTyADDP%2{a{BUjZr_ry+X_;#QX8&^jE;Q+^)ATKz=?To>l7EF(qE zBWVPYsDKLIYqI&*3b#h*W8r~8vZjak z5s6dz-p~3PgB1LvUVk`I4@5^3w~`E6F7IWa6>T0t_~##HVG9h`8MH#&5yKM55o4>9 z0=x!vOFs%Ybyzp{hGiD1n&K^IC02Q1p}`tJ6vJg&#KM-!5NX74^ttHK)dX8krHcK zhWw#J?tSZ0&1~6Y*d6C*JHZ92hrdZNk6SbD39f!_ESS2b=h$>THn`UJU(C%M@3g$Z-1Zi@dw;!~D`z&TIEI zA&26WMf`RM$5C80z<+3b33@}kj}8rA0PbBP)A%PthR`V$m9BGHvZL^+F_nK?rw|Ed zQejrBt=)1k6gKjOzL%00SNcOSsaO4VX*kv^F1rDN70#c6lzA9~X-J>t{L$B>@GPk8 z>*kLpf4T^Kn68+jZf^ zjoyufo7jJ6LO!svII-=X4m!8{qP=sa=-~o6V;Fr9ZBs_mE?d+Y^dozX^{DyT0xp5w z)t#3$xdy6TK=WNeVsG>KH$Dh%LxmZ^OFy4f)Bq*Vr9TMK+)Ot_6(ffc zDAkKpSV^FpY<`a$?H^g<*nT*|hRxQ5Q{a3ZvA>2p2p00`?0{=;O>&Cqvk;$;&H0F7e9N31Gm8t!G&@Fbx8_M!t^`3~%_F5#i(U zJK{SLlv#Qb*_$b*oGM5`&3<|{3r5Yi$F<5AG10;O_1Y!QI{62@>4h-Q644pdq-s2MA7(;K8|-@6J5Ttoh$NFLR%6ukKY; zpX#nUO;zo)_fL)qn!^vLU0erIJClNCej9GjIvWDnk8+|~;(EoXDik8o`M-+mxj0aB zWcR)!vlYewiZp!IAD)Hc@BO(ZC_onRhYSwye2R!K&fy-suyaSRnasOlKCOUz?k#a> zjn4v|pP0o3nyR|&?tp}reL&3i}Je0J$5}YFRs!kp9?fqIX+yHk|O{Brn9x>+2o$^9)j9PNrtJOT+j!~KgGYqW~nlo0hTD! zz1+i+7I7vD!bZCjGo`c+1$hl1<;9YC)*qEwtGX`jy!duH`YTzEDTyGSJ#w-^mL|YZ zYXhCw5e<0+zq%a_+9ZubcfC*)>SE7sVz%%et@#2FIadK*0nU^*Ha^olApt0$1XHOR;nO@JYPtGZ^& zFW)cTBiwH~&H-P4`k~uuyT%J?o1JIOY+k9Hv^g{2^@m~)zP>~;HKgM^5#k}{W*aa9 z{A?zGWm`h~^maCbbrrHd>BL($O5=$(>}^>|x>Yzr(lR!@XLcXWIh>sx^_ijBS!;XB zkFXMd_yhgAx7@4#oI}*v!0;2>mT_Kz6!Urqb>FQ)5C*)-L-SmdYe*G6-)=@_k?wxQ zoF12La%HJ*^)EavcX~1{_X&y^yjScvCe3>tr^~T`>^n=|G$f|Si!Fw{6U4Fd;!dxR z{RQmlSC$_sslbo9tt)^Mx4tgiQJSu8PC;~zG4=fC;BoNOcH??Ao3q}GLvXna1!&s`)b>~GNUw<_v- zlnYFY@EByT#gZ|XBr5FL>*Ao|@7SF)Ey0%xn&EuPm~l+5ah{UL5^QuJZmc(DzPVP# z`631kWz4Mss|p)^>kEiKs=4Pr3L6IdOP_)VtWRMFz5$r`91V<6!w1a;gs`}`kwVq* z$b;trL}q39VAp+F!OM-t*}aj32%_vBv78y6J*0dlohE1|%n)T>d|uy&OGKuQ9Uzap zSZ}2d?gKDNZ#jO?A23H#Vw_~=0EqxXksngTKCm9h>)cJD1Kpx!IDA7BVUh7em1Jch zX=Fpy*6p)E(Dw=jLOsCn%X|Q)mYS?EVY)!L4+tN!^41E%;z+5%JAmj{e*Ixt&uI>N zR*L;(O+b=mUn$H+DDPuYFW{yTXbEWCpzjx@X~MPgR`*p6Py2tx>=V=jR*l~hTMD&g1Y=WZEp zk#=;Dsvv(iqR=s#5C|dPxavNH!B2dTOi~ON8jSz9=OA70vVZPHMukKriW(j28^jFB zs%0^Ga3UNX#PmGux)fyRfjaI*%BR@n3S*L=wxFhpS9d?xk}%h=trH(6VZNk3drP!r z8A?u&6W6%qo~d$FrDHZ5$l1d=3&;f zc{nP3txIQ-09AATG?B*BodFyD4w-v%7Ep4@mdX|qzA1almRjWlI_#(4D3K2NxPLk8 zlT>N6e!x*`Qk-;gFSzoE2~!1z!u+F&aHHk*0UY5LgvwylTY>;l`i~V6-`4>CWM5Px`DOksJ{tB%B26fk-x%s0@@Eot96u8zK!$=f_C6Aq6E$T09XGmzb6d;}EMy z{FtoS5I)8x!y7}QS#v6!QXr#=?)`3{c_<9g)gTe>rn895Y+nMxNwl=*+(*6?6!Rrb z4R=V}&&{l4>M)CHjQDH4eqRYu*3gkv^t}(#){gZ_Nu)+z$pL@a=&DI~f3Gpo6@=n2wlMoX2Z?bXv3spj&g zvK5ki8KX+|nIB@1sPBqEkZaBwm^PTtURC+kCP2w$k;X`h^2c{78iSY}Zo!*LcEF;l z5OXJW2h*j(bST;jl_TVm=sn(?1s&%&_mliT7ps3hNf;Ol55WEV?tBARPJXq`d<=u3 z?0(bltZ^ig;ELvI+I{z>~w#8~*fK;HMnAb;|`2l9Yg-U*>qbPfP9 ze?zWCQz%5eq`BfwvH)rdw8533fss^bj>{^_@>Z@j?Ki zJ3N5qBA)+(G<(Ri9Q*b8?}`Ktiv$A{HyX6>f)=r|A%c00_t;=ShU1Vv~QQ=EJQ0A0>dJNC`l#VnMWn zthbuVE^|;FQcf)OfRaJ+Dv~*1Nk&chfXuP+0f+nzDBXShj5+r&YmWQ{6s5J=1~(*- zua7ua3INCdI{n1A-gY5@{@4OXaGm(^3N{l1jQQWBb4TN~|dz4T2lOm+!xfx1ur-<4B4qafk0fz!gAlV*Z z{eat`O4->T2-3%p0W8E89!m8WoDXO{iubOL6|tU30wZZB(;4-)0G=7Z?gpn1=t3^3 z(wjAJHTfwd7FqoZ2~V11Y7TFc%Cc{rXCeq&{?Z*o??c*PTO+{PpgGLnW%xaH{7#sWlBr20HR4C9 zhP<(sQB)Z*mSqVSLQk`Vy`lhi;)!U^JQ`y-h=g1^9&kyEy2V~lB$&sd?!4@iFrPf4 z`gRG}?aU{M=tW(-YQbaub4KAqKr0{F3GRovlPl(#gf55hH=$kprOfV*D39t=kK;!E zJQRZqSn_-TM+PT7e@0Zv?3S?_I4_GaW`GvGW%MoTDuHc*MjQ&nA4xUtRPF}MjViVm zHjbYz)!n=YrSrDqfq}q$!pYQSo@){b^E^x=>85ClyAaT!KoQJD;#VawKsmS@CUEMo zCd)db?IC$q6(VavJb=`}N|5^Sd97T50126<$eK@37I%4UgA_s^68aW`4#fV8fLl8D zBLwPak)Ovw`;(_Y@$FOAu)i_}Ujb@z)%>G@Zde(4;RoWoM@u^|3h&Mu^%lt(oNsNI zbB|>tUDgt+Q6uq08-RK-72<>wX813?N{Bxe`GFB2FnMiN3vftMg{O2-;@(1GF#SufjOkZ_%e3zCZ*L{hui^-8A09aVa?gUVj==UVY zg`YIdeWMkezq)4Pa}dH*u*v85tW&f*!dKgcs{<vp3Y&Ahm z=j7@7sQ+73q4!3TZObeC<}xWt`Wr%VPipg)JeiRglQi6KQ!{CH-h@9<&{YhVUz6jM z_S3cPb+U?cB#+AFUleY2-<`-vzM4bXz1f_@AMQIQ<>@^ta8$U{)|Y8c>nWcoIgd;1 z1-|*F$F?(_w%hcRB*{}gK$X9r$U3CXw|*e)=N&LKm2l5xK>h)8Yi7xouF`quW6^UF zh>x6B9TNSquqcJ`G>NWkN_eR;{U?j@L=K#IQIa4Ool&7y9mxX=(0CSEtY=AIE`gDn z)$hfsLg@G0S;7or)II>~017(W2N_0+vbhpuq%X|xEKS>`HbJrx*V#xS_L^0yl(*20 zy_)tVTpzxDkl-XP9Fokg3o8GPyC+8Q70njob1jIFH(0>bRP&lF_25f_9P{}-UQOWrF=YX?vie9ST z8biE+Er3UMjw~DePee)VwG)I-(5ANO04ZlmPAnP(jSs1$95_l6KktW*e5n(vsqH>C zI}BT*KPQ-uIbqdi8UmTdb#NfOUZ~S3-c3O8LW6?~cE5yh{8wUhUsSjDsdjg$Ug z*k%5Y#P$DwqyNfQ^#Azpw2mdwv}RA0@~gd}LD};`Pg%L}xvD-qxTP9J46=XQX{5fUTB9UMxUf(8>3^Ujqgjj{uYmNFM?Lk?Au) zHV5n?Nq|F#$CpVkB`u42LApQ%yjW)f-q^DMJ4AN?ui5;C{vhJ*`vBB?o%(u=^b5DK z50>oEiK9yaG71f#UgA1y+i(OB*YCD~wMKZ($9RA?SPTnT=WGIFw#y=|$+RrtfH%PA z@h8CICjeB?0KZ>wHa+4q7Oppu9_BMqWs^6F)O?cvY4?ki-tpF(R zJ0OCJmJ&@O-C;Ew)_4961F$v4t&BsIu~!jG-xMT#`~Yb49$NC1XuO90g+ z0@(++!vSS9WT9CR?MCp=MG?vpEXLygQlQ3g>jgtTmBS4{X|JMiM4?f?4govRzkrVi z;2h)!aA`>4NhBXYQm`2Sq}l;g1py8D7obEu`Y#q+lj8F70XpAN0Q?8cX%HpEW}lx+ zyM2=Y-T8)sedw?N034S9+3LuQbA^=&(hN7yl~<- z&!tlz`4&L9E1RMafv5tSYotFH`?I$wgKkRe-B$#Fc61mKd<;|P+ zan+g@6!|~je{*7fs?R)qdXI@E-w2Mx7=n4~Q5hTgM4_^PEDHBxRF*6QrAA3prYHu+!6e}5nWf7qLN zJ9)S>nwgkcTbP*}o72pi8yh>Pz+%KAks1$8^pnDv6MpwQAGo?xwiqx~e*RsC zSKWO@$A~Otphvuq$;>6INm7?$@!?Ch#p#_-OMYyup84Ly!~}yZe}rU2bE_J$|!tfeO&8N$vH}tkYsv4)f9p8(71qn}78!^JNo3`>`;5Y6&vT&1m3HPL!dihXG z8fo1$2qdS(oG~KojcjyDGw}$zGY(vY$@191IW>#^y^CYbt0|quvUdL~FcUDA?Sk4P z1aHKT*MGOOOQG*f`7M&bkH$KZz$#M4M3Un?QYq+C8f&^)YBR{sW%0Jp>CeRw21fw& z#7u~q&SQVg$S9BOz+7JMIHC5Q7;dJk*N;K_JkMUn5Y3T^yi)$-0qh}Bns4l54Y!S# z^J$@Xf5!}|g%u(vs6!(iuH5L*7ysl?V-I^vW!A+ektHZ>F@AHa2Iz;s{2NmqT5pBM6zg57uO6a4oByrU zB-TEYc8q&Jr)|g*JPBma*82K^KBV8WZ&y(&Js`+!%2D_a!7gma^57v%-A^9!m=64| z1KFw02j|5esMSwQj((t543e)5k9?5G*QESX7hm#MAiU8^WlHkm@2=ctwmtV8!OIF0 zL`FQ08T=56vt@iJ^HQh8O6kE}WNUck^YV<#Tpgs}o9on+8f6+!_PwWv^!Gn2%`>J7 zeV>K>`bO;e_ABdVeMoa zsfzEb`&ElUe2L{{F4rkV@f&Jd%HdFfKX6*yr+0cf*szJi%d!wC8QZYXepTonv$y@d zavM0t%B|L&h-Sk7I7_n5>l4V^&H1;S5UXbn(yr)t+)?$#DRalNR}aaNV9Yp=fXKHx zBiDl>Y}qN?MEr>`qzx$Bbu8^$AMGsZzo`1S4mq?y_a)Wz; zf)(n(XIVl2^~)@ddAUxgK#40I;RL+9vA76fBoXMXrxM*@Slsbxep_})h(jTR>x#?_ zwaf6Djb7b}nbUPaK*-E6UV4g)?sa_Nkh3e=n~6w~gZ2-UY0vN)SFl8?OBatTjvN`X z9^&&*U>pH6SG`oqSm*52N1e2U>z9?EUW|x7q6$*DdnnD&o!VpvGtwCu=pS+4LQ5Hq z#lJfG#o1e29q=3Q^~c=v(~6ygj5=16UB4O6&pf<%yi9L*``;bT2w%snaFfTF*lG~; z^(=B38tmm7&7ZO_eAbVZ;p&sukoS=BT?e39EzG87;1Z ztbtPVjX%T-9p+%!ml(p+x;C5Yi+cV8C8cNUo?sF%EPUxg$J=(1z*$b97UocG+yD`w z(A+t)BVVZ(V0;lzxH;c6^0 zBS!>Nrg$Azb~QS9sQ;_6n5o%9myF2NxX&kVV{G0*hM!+qX1B@c-sS#&wPNoI2=*{| zki7lcjBX6IsLm_Ag}h=x)2M^Pu_n^^xuUO-&5vV1XwhEmIJOf-22A&1t}${bVPYOt{n6mxjav z*HH%hQ;n*voBlk(sn5XW*#$kOSxY&)q#JSk4^uFE;wLG6#f#u0ljj$z2krM$oDnl( zF~$LwIMHl3^X$`XbJpW*c)QF%{Q%9cUEdBVnfZH}2-q4l-z)?`mlGcM9U-f+jUsx0n?p9tLumMcdL%)Or&Y8S|~ShOTm8IuYYs?wDcAQBD2CT zJ590`aYG(ZR2prje~~0)YJ)P{6Td)Am~^k-sgW&nb<4eE?x$XO-C)w9Pdhc8hf~Y_ z`>FV2$a3l!{4pakxdenftVf9|P5GWE7xpx#?~f1Hr3qQHa52IOIsZM`$cNQ%K=+ma5>wzz|d-MY!Ro@`qv!F_ZQhax*2w4&e9#@a zPC;nP?-g1LD+0gC9Ye^77%Kxh9+W#7wA1qsf_KP6NeV9)2HXQB{XwOaUh}hyakRz4 zh4^fxt_X86#bwou>G5q3A53d_f+|PEQ|OrSFRtK`C7aTmpuqf3(w=2Q0jT4Aqs2nr z@MYRQXzwgZ`#7?`KND5dSa=t(NQgFM*wM=YyAUI;GpI(P9ARX$)FruNONfn(-ufyo z-|m)*1?Ej<)-+m7g&1&eV5B_$v@dp%6>>UaApXEWH=3YKcM`-;I0D4_#Va9YxWqpt zyNQ4`7$Xq{L#Y{(i}h)qq&6zeh528Xw+{_J`wK={4bVG5q$n_psiB6iPUJoo+`<=5 zANfVb1eEBw-PMIhQC5U7+CD{w@gQQjIkDme^Z0!<_rD%1p{=Z%3{IARDPP7BmeeC< zA8r(nB{KPoZXcq~+uJpaKXT-&PVv)(9PMw79LT7D6YeV`sMFwPj^q^#A+C|Y}oAa~E;n@+|;))C?l{32sfo#G;{97*XeX3IVk;IL1>3u(pcuvp2 z-?QXOdOgTiRI-)gm!gGD_Hp&{qA-`qFX3DfGxcqQYkg4i8rr^O%L;KlA}7kGk$t?8 zGS9KAII^}b{;C;urL$!nuiFfLR{H1PYJ%gIem_-J%ql~wQV0&97*QXrXelsd=@Rdv zZ9rX|zdJhCRgc6{u3)ymHS8f0iy-%x@^Ah|Wt>IxC4;wtg-zise+(o%Vn-|#stzg@ zGs~`|S$%bB!S?=A**!nc0`(&muDI9cH*E^WfMHAyb>EANnG&7dcsaP;au3|ojeLTs z>=1Uf70LtCoy0Fs&iRllF}a^!NB&U82rGom!|(SCUE`}BN_XP8^zIJwRMuG;8%I@r zr_^xVF`A(5i%E2F(^f|IOdHg*q?Pwz?J`5urrM9mcIu z+@U<^hLC>=*cYglIP@M3z)u<@t{l`tzk5^ol5{MSUuveW(KniJAe7oe)AIvxcuaH3 zXNk*YCik~=GQRj@X^ua4>c1NO3la{?3%#c>z!WpUyfXiFTJxU?XDr-J{soA*6uE>P z7Ob$puh@~(I7o+cgOF0ci)-*&Rn@AxMjQX2%>>59;>`yb-7t)qt9%c4>pOMxb!Zxq zGvNJGs8?iu5$?akN1C-Omfrb%dO5YxnJ`o#-_!j8Hk5vOi8M|tq$u7YjWJ8MbHnB{ zmV=}m1-OVZ9DONJUw1T}s${NIpYGGP>tB0$akSshTYt!nPB6lrUy0+EU=HjLvK6(+ zhwy?CU?XtC{3CI`$UO8F!G0n5Oxuc&{D9@t@wu-270pu@ypEN>SHAmCZ}jgwHZM0%2$r?kX;c zvqW)f=;}5#tzrpF{Eu zLHwFfQuqjoWPHWo47H|^@e)~Z0#h#-T98jDDkc2S9*@eI^nK&V(POWgUPR~K4tT3U0 zWTlb^+pO2Jmgu#_!N}<_E%zx4v1i_Q?%v39PSH@!QiM4TYsBsIdh_|rfXIfjrGw)b z#Q+l>o4W_pTu)!m1LD6kqqQs8eIEh@qKE$PXU2b@iYVr-WwwtP1p4>-PdaR4=I-HY z;l|9$0zBAQ{zw;dMF41k zG?kN<0D-FG$k~83cxM?MHxLLB^WO^sl${IAc0^S8pBanRffJ_G9}#)!b?C&kjl&l}+qHKPYvUi(rJ& z-aixefBuf-3c1;yUIg)?jQtgQeHOi|YFEsw_W2E7FyQnPQNfb@Uq9da$kU|d(O<2X z7m+o-u(Yw{{N7*d9HRTh##Go))h@pFeRVKJf9!WD@FrhS1g+z5u<{oX+Xt8ch3u^9 zM(60H>NE^Fh_4hglax4EoF30|9Sov^zxDl$?2H04-Fr-=f2xxKq zxAjoj>PdG6HEycF`~StUWhjNk=uFmF8ppn!iPqPWFHD({J2ek>Z-kM|rpz;3aZXw= z{Q)If()>KZ!(%MU?z~@6g#n9!>C8Vu$=kTr;9Q2|iM6o9sYoT%UTrr9dFohiolgq6 zS4f83uk&@ef9kP@UA$)8z9a?_@uqHJ?W@et;apMC2euJP{Tc1u9uTwXyX&>_zuUrnA(+H_1H_ z{aUz*qwRj`Ix{wzcz$5GJvHxu!&|Bv(j~^cu!X&TMAAHElgL`bj#r;JWeWb(OH@jZ z#KxjzL6ynRyrr9lvr%p`{c2umysV!|h35Rgx$`s5LE{LUfQ4Rn#3XK#q-&6SyIyvB zoon0V2S#=cgmb=n>?FD@ijXpW)$-aBLi&WT^hX(=%schbuVhV9{>*-PU3!7-Lqa)4|$UiOC$0; z!+oi#Ki`b9QC{1vVXXy+xi+Ozwp69*e?k<$;&d&zRosmJv0pYQj&;Z?J<&H|*Q6xx z_wyjD-_T{~DX%u8ah|J5{;M~~Y&h!Kec8V5qkgzt^C+9ce*A3Jda0>GGLzz-Y}w-4 z8JBClIvmQV!#o?-`7k+l(ajAzUalADRJ~UC7_qd1@jXdDxj`c7g|~RAQD-HHkQy=f zLAP^zEF=p|<0{KHp5q;T*D=LD>SQ4^@YDr!A5FjP;o6t-7-Fk{9I4T_J(H}4p;R1T zpP?PMI+8u$&A_#A&J$y1J?wk2uK`+irtNZWh|B*GR|`ivrpV*VrV zbHjs9I~WV~kTfPAUV{=IR^vTiF+80;CM%DfuJ~rNUQePfQJT+ww#r^uQv7t-C!0RN zvsyVD>FtNzGR`Mzc(vhk%lYYW)0xkCh(tL20fh>N;Q%Jz91k?nkuGh$-S6kkUt=xB z96le6EZ^3{tlj?;DOS+Fxg$ZhkbOwKc@$642Bw{zrfvHPn&7j_cQiibA$nhnquRYM z;YY_2j;P*NwRhL#1S`64wwU*(ywmCL`fckE&u5RFHNFI+5bdkIvW?xA69uWN)ER^5s|00Wg7KAZGVo7TpUGO+s;}L-HMsgE(^X*t=Y%aA#Fae zv?1wenTnp$meEyATT`VaBXipy3Br+IjgMWjHdSyzc{%QvbP9K8IdC}e(9vfER*mOQVSNgFo_9!WF!9b2u~&nuoq^Y@`tL^%^+M6hq zuX|hEcD3LR8B+zzvN%%Go9c6!?8r^AM>~|^p3F|{kJ?f_6;6nznFM8*Bi3)L7cy*} zP>p+vze);0Fr_(R3V9ylObEi9c1-d5{Z@k2s!i1=(KdA>eb@g;ubCu(raKceEuBFe zWcT^UplvC$OwGfnqUU~pe>WRS<3fGIko;1B+O?3?4a;`Zbh>-I@6BEOi6_LF?X!W0 z`vFA$9&f%Co#!mueA_Z1$@(O*d-H;xJjv(G-x7q9I+f|KCsq|&mj>qaLWc}*<14iu z_u};qZ$j40_o!)SCud2mUzoq$?w9sIW5hc@nO^M`-|t2$e->U}KZz^H?PlaqJ@Shu z*MyL>*J_V{g5#@p$hd|kHe&~A2n?~iSKz|2MGD=P(Wrl={IhW|pJV{>)yiRGD;~om zl{NOSLktx=r1m5*a3#2pTvQ$Gm2duId5x*sFGI}6--FoPFHXdR5L?E<3I?5(~j8DfKn4HP^4XMnmvNRa#%%(Yf#q3_fpCegY zFAt(JgN3c7hVFck+jrO>L^z!A5W!e)L44ztXR6zb+vNrg$Gfekbybz8$oY^WdowC3 z%kL36mO7DXH=#SnZ7F?z*!{fvA{@Hsy;@}_bmJXErrU@M#giP8%cfhb{7EmH?5l!hNU>33tPiCe$?*N7WU_ns^vM=OzGl)?`dR9dUFsl*3vYD^69N=hsn{jeRXRQr`#D9 zbwixkGqde=_I#B?br?fBXgL?>Qv?KUFbww=S@k{psghT zR|xxw`jgbZ$v;n~m9)qB%Gpy;A2Sc`XBl>MzEDd-7(Dhn{tkw11E;Si#%kQ7K$KRo z=*?~!R&q5jrhaQ>aNY7ioB|gH?`eujRGx%ymp+S9C8E`F z5bCj9U*}mQElRP*oH%z!&ui~Il)|v1{$iD%RcGo4H3%s)mw$gY`C0uMJK+lM##_ZJ z>V~!?wCG+_jL>#^v{XbENWL%0DXC4u*ZB5o$LxKAV8c6QUjWTfwW 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 diff --git a/htdocs/includes/mike42/escpos-php/example/resources/document.pdf b/htdocs/includes/mike42/escpos-php/example/resources/document.pdf deleted file mode 100644 index 93a702337f1b09cfcb96ddce75a0c6421b69251e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24389 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 diff --git a/htdocs/includes/mike42/escpos-php/example/resources/escpos-php-small.png b/htdocs/includes/mike42/escpos-php/example/resources/escpos-php-small.png deleted file mode 100644 index 3c74d2d57a29e0398f706efd0e2f4531c036584a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1941 zcmV;G2Wt3004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0063uBQgL0010qNS#tmY3ljhU3ljkVnw%H_00wqRL_t(o!|j=SP?Xmh#(&>l zSaz3-7a$0t#I+JdEt*SdVzto;>J%@jY1LGl#3|#nbtcX8MGaPGe0QlGv(= zv6I%pF&Y)r*2Y2{gP101yfEOUTx>vVKtW`e{ht282Q2JjVw)++4A0D-J?Gu$yyw~X zob#Tu-@*XC05Gg~FH?!>Hx;$KgV`-6+t`~hD7s&iG;#GPxm*Q@WpPDCueVP{{UD}* z4bj-3TMP!N`1&O>33SH5)@|&MsPr7y_CI*}%rPKlK+NY@7_45h{Pl*Tx1p6kP(mEb8BZyH>(g5GH_9Bw zu%^NU+EK6J!^BLd7?TQuOkph<WCW9Kb?&t8UeAG6p+8i(*Pj$abX zbl#(xS$qTd7&wTJ*U2EA06}Zv3meCIkz)*E!p+6xa)T0LSjaFIvxjrcV=0MjpcoI& zk&ekks!8SvMzWd_lrn-R$zTyXC?uOD*ezcM6RBhj%NWK(qyawi7>dbQt`Nm<853zU zGcCHgSe-D{jbJZpi|*AEQbb12`oA?n>lBWF=4ffiC~L(#42l?;j&BrcyBSs}XZO1I z*!rlun8Wx8-fi5Er`ITbOw%VJid7NZM1q$!5t%kt_R-^(#oWpX(ihXXMSj0vKulkV zux6U5U@}*!AcJyTjOATiWKu;2XBkZ;6R~lWcJ8DKA17($F3vHE(_G`L#BdxRHKcK# z%iK*Z!%5=rB=axoxRXm%lSLEpr1c>xB+s1Cd|lJq%2A0@HAzKEQl^SDU4PSDl_*y= zs@Hg>sZ{fIM0Y7!NAyj-r70Ssay97z73pCeP_Dcx(sy-0(xWQW5=Ci;@)V_QTB%pU z@=Szj>bR?PByK+eO#JvU30Ss{dq|+G9l(!h$Fyo#ER%Npn6z6bQD-}7m1fw;pRi^O ztNe7CC4AF%_xv;-K35BPK+J%c&qR#6N`;g?84CG<(#=qhPs3TE%06hFBbUaNs2tI|g2>?I8{aZXAFcCxc1GO+2^ZCJs;7$er7N zTJ*j*yfXo4riL+Gra59ogoTO972|5@ZZ@q;j4%?%*QBsOCDExH&@# zmq_9wP29m{5*b7#L%2Z`!)d0GR9cDdNV}}#r)A8fv0GG+Yv=zLH$4ve4+CPpXku(! zU^guQnEaJ8%YKDj)LZrUIBXsLZS3c)Wv%8-S^*FxUHzKa-PP|T2dxJx0g5?eSue7O zmI(2f=4sxj8FDLMEi$!DiMm}yk}m5pxwJral1epBiF!?@+VreqG)-qDozqNt^^~ql zDpZO_>(7!J^+UO}NFPZ$u1OlKO$sWYjf&S-^ns*W&6ivG`bpPr>JsBx>n zo0J%&kb}4DbuE*XPg|3`~WAjZRg`f z8CiH(@A10>Y#@eA-j0`1!#tw-5iOkPDP|O#nF>G@kMkUf0HpIWOR)h4^V!Te0ODB7 zYAc&hW-B=WI9Sea7zRKp1>{*r&1_yF3ji-aV-2wYjAtuz0C2K`U(oA6l%&87Zp#T5?8FWQhbVF}#ZDnqB07G(R zVRU6=Aa`kWXdp*PO;A^X4i^9b03~!qSaf7zbY(hYa%Ew3WdJfTF*PkPGc7SRR5CI; zH8DChGb=GMIxsLILPgX7001R)MObuXVRU6WZEs|0W_bWIFflbPFf%PNG*mJ$Ix;mn bG%zbMF*-0X?$PJj00000NkvXXu0mjfgfCmX diff --git a/htdocs/includes/mike42/escpos-php/example/resources/escpos-php.png b/htdocs/includes/mike42/escpos-php/example/resources/escpos-php.png deleted file mode 100644 index feee2d71cc280655b1765f2689bbed8299ba394e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7871 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 Q9{>OV07*qoM6N<$g5qCe^8f$< diff --git a/htdocs/includes/mike42/escpos-php/example/resources/tulips.png b/htdocs/includes/mike42/escpos-php/example/resources/tulips.png deleted file mode 100644 index a0e681cf0ffa7498bfff6e26d71b15f82a8bc7f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 379443 zcmV)RK(oJzP)004R=004l4008;_004mL004C`008P>0026e000+nl3&F}00006 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
    ;pHdyGure7GxRzfSq-{YSt0 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 L(g0N{n1A^n;lIUB diff --git a/htdocs/includes/mike42/escpos-php/example/resources/tux.png b/htdocs/includes/mike42/escpos-php/example/resources/tux.png deleted file mode 100644 index e32f8d945345480f7bdd85354b48bbd84dcb4f0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5198 zcmV-U6tU}xP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 diff --git a/htdocs/includes/mike42/escpos-php/example/specific/123-code128-barcode.php b/htdocs/includes/mike42/escpos-php/example/specific/123-code128-barcode.php deleted file mode 100644 index b87e44981e0..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/123-code128-barcode.php +++ /dev/null @@ -1,21 +0,0 @@ - setJustification(Printer::JUSTIFY_CENTER); -$printer -> setBarcodeHeight(48); -$printer->setBarcodeTextPosition(Printer::BARCODE_TEXT_BELOW); -foreach(array($a, $b, $c) as $item) { - $printer -> barcode($item, Printer::BARCODE_CODE128); - $printer -> feed(1); -} -$printer -> cut(); -$printer -> close(); - diff --git a/htdocs/includes/mike42/escpos-php/example/specific/141-custom-command.php b/htdocs/includes/mike42/escpos-php/example/specific/141-custom-command.php deleted file mode 100644 index 6e3bed70d0b..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/141-custom-command.php +++ /dev/null @@ -1,55 +0,0 @@ -getPrintConnector()->write($barcodeCommand); -$printer->cut(); -$printer->close(); - -/** - * Generate two characters for a number: In lower and higher parts, or more parts as needed. - * - * @param int $input - * Input number - * @param int $length - * The number of bytes to output (1 - 4). - */ -function intLowHigh($input, $length) -{ - $outp = ""; - for ($i = 0; $i < $length; $i ++) { - $outp .= chr($input % 256); - $input = (int) ($input / 256); - } - return $outp; -} -?> \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/example/specific/148-data-uri.php b/htdocs/includes/mike42/escpos-php/example/specific/148-data-uri.php deleted file mode 100644 index 74759146712..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/148-data-uri.php +++ /dev/null @@ -1,35 +0,0 @@ - setResourceLimit(6, 1); // Prevent libgomp1 segfaults, grumble grumble. -$imagick -> readImageBlob($imageBlob, "input.png"); - -// Load Imagick straight into an EscposImage object -$im = new ImagickEscposImage(); -$im -> readImageFromImagick($imagick); - -// Do a test print to make sure that this EscposImage object has the right data -// (should see a tiny bullet point) -$connector = new FilePrintConnector("php://output"); -$printer = new Printer($connector); -$printer -> bitImage($im); -$printer -> cut(); -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/235-get-data.php b/htdocs/includes/mike42/escpos-php/example/specific/235-get-data.php deleted file mode 100644 index c3607c868b3..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/235-get-data.php +++ /dev/null @@ -1,28 +0,0 @@ - text("Hello world!\n"); -$printer -> cut(); - -// Get the data out as a string -$data = $connector -> getData(); - -// Return it, check the manual for specifics. -header('Content-type: application/octet-stream'); -header('Content-Length: '.strlen($data)); -echo $data; - -// Close the printer when done. -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/29-latvian-star-tup592.php b/htdocs/includes/mike42/escpos-php/example/specific/29-latvian-star-tup592.php deleted file mode 100644 index 73613100abb..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/29-latvian-star-tup592.php +++ /dev/null @@ -1,25 +0,0 @@ - text("Glāžšķūņa rūķīši dzērumā čiepj Baha koncertflīģeļu vākus\n"); -$printer -> cut(); -$printer -> close(); - -/* Option 2: Image-based output (formatting not available using this output) */ -$buffer = new ImagePrintBuffer(); -$connector = new FilePrintConnector("php://stdout"); -$printer = new Printer($connector, $profile); -$printer -> setPrintBuffer($buffer); -$printer -> text("Glāžšķūņa rūķīši dzērumā čiepj Baha koncertflīģeļu vākus\n"); -$printer -> cut(); -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/32-german-tm-t20-ii-custom-command.php b/htdocs/includes/mike42/escpos-php/example/specific/32-german-tm-t20-ii-custom-command.php deleted file mode 100644 index 29b6b3fc638..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/32-german-tm-t20-ii-custom-command.php +++ /dev/null @@ -1,39 +0,0 @@ - getPrintConnector() -> write($cmd); -$printer -> text("Beispieltext in Deutsch\n"); -$printer -> cut(); -$printer -> close(); -/* - * Hex-dump of output confirms that ESC V 1 being sent: - * - * 0000000 033 @ 033 V 001 B e i s p i e l t e x - * 0000010 t i n D e u t s c h \n 035 V A - * 0000020 003 - */ diff --git a/htdocs/includes/mike42/escpos-php/example/specific/33-spanish-seypos-prp-300.php b/htdocs/includes/mike42/escpos-php/example/specific/33-spanish-seypos-prp-300.php deleted file mode 100644 index 90bdc63fb5c..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/33-spanish-seypos-prp-300.php +++ /dev/null @@ -1,19 +0,0 @@ - text("El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y frío, añoraba a su querido cachorro.\n"); -$printer -> cut(); -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/37-chinese.php b/htdocs/includes/mike42/escpos-php/example/specific/37-chinese.php deleted file mode 100644 index d14790f47d5..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/37-chinese.php +++ /dev/null @@ -1,24 +0,0 @@ - textChinese("艾德蒙 AOC E2450SWH 23.6吋 LED液晶寬螢幕特價$ 19900\n\n"); - -// Note that on the printer tested (ZJ5890), the font only contained simplified characters. -$printer -> textChinese("示例文本打印机!\n\n"); -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/39-currency-symbols.php b/htdocs/includes/mike42/escpos-php/example/specific/39-currency-symbols.php deleted file mode 100644 index b960ee681c3..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/39-currency-symbols.php +++ /dev/null @@ -1,77 +0,0 @@ - text("€ 9,95\n"); -$printer -> text("£ 9.95\n"); -$printer -> text("$ 9.95\n"); -$printer -> text("¥ 9.95\n"); -$printer -> cut(); -$printer -> close(); - -/* Option 2: Image-based output (formatting not available using this output). */ -$buffer = new ImagePrintBuffer(); -$connector = new FilePrintConnector("php://stdout"); -$printer = new Printer($connector, $profile); -$printer -> setPrintBuffer($buffer); -$printer -> text("€ 9,95\n"); -$printer -> text("£ 9.95\n"); -$printer -> text("$ 9.95\n"); -$printer -> text("¥ 9.95\n"); -$printer -> cut(); -$printer -> close(); - -/* - Option 3: If the printer is configured to print in a specific code - page, you can set up a CapabilityProfile which either references its - iconv encoding name, or includes all of the available characters. - - Here, we make use of CP858 for its inclusion of currency symbols which - are not available in CP437. CP858 has good printer support, but is not - included in all iconv builds. -*/ -class CustomCapabilityProfile extends CapabilityProfile -{ - function getCustomCodePages() - { - /* - * Example to print in a specific, user-defined character set - * on a printer which has been configured to use i - */ - return array( - 'CP858' => "ÇüéâäàåçêëèïîìÄÅ" . - "ÉæÆôöòûùÿÖÜø£Ø×ƒ" . - "áíóúñѪº¿®¬½¼¡«»" . - "░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐" . - "└┴┬├─┼ãÃ╚╔╩╦╠═╬¤" . - "ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀" . - "ÓßÔÒõÕµþÞÚÛÙýݯ´" . - " ±‗¾¶§÷¸°¨·¹³²■ "); - } - - function getSupportedCodePages() - { - return array( - 0 => 'custom:CP858'); - } -} - -$connector = new FilePrintConnector("php://stdout"); -$profile = CustomCapabilityProfile::getInstance(); -$printer = new Printer($connector, $profile); -$printer -> text("€ 9,95\n"); -$printer -> text("£ 9.95\n"); -$printer -> text("$ 9.95\n"); -$printer -> text("¥ 9.95\n"); - -$printer -> cut(); -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/44-pound-symbol-star-tsp650.php b/htdocs/includes/mike42/escpos-php/example/specific/44-pound-symbol-star-tsp650.php deleted file mode 100644 index 3e7e6a2e48b..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/44-pound-symbol-star-tsp650.php +++ /dev/null @@ -1,35 +0,0 @@ - textRaw("\x9C"); // based on position in CP437 -$printer -> text(" 1.95\n"); - -// B) Manually encoded UTF8 pound symbol. Tests that the driver correctly -// encodes this as CP437. -$printer -> text(base64_decode("wqM=") . " 2.95\n"); - -// C) Pasted in file. Tests that your files are being saved as UTF-8, which -// escpos-php is able to convert automatically to a mix of code pages. -$printer -> text("£ 3.95\n"); - -$printer -> cut(); -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/50-P-822D-greek.php b/htdocs/includes/mike42/escpos-php/example/specific/50-P-822D-greek.php deleted file mode 100644 index 1651f44a7fa..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/50-P-822D-greek.php +++ /dev/null @@ -1,19 +0,0 @@ - text($text . "\n"); -$printer -> cut(); - -// Close the connection -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/54-gfx-sidebyside.php b/htdocs/includes/mike42/escpos-php/example/specific/54-gfx-sidebyside.php deleted file mode 100644 index 2becce742d4..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/54-gfx-sidebyside.php +++ /dev/null @@ -1,64 +0,0 @@ - setJustification(Printer::JUSTIFY_CENTER); - $printer -> graphics($img); - $printer -> cut(); - } finally { - // Always close the connection - $printer -> close(); - } -} catch (Exception $e) { - // Print out any errors: Eg. printer connection, image loading & external image manipulation. - echo $e -> getMessage() . "\n"; - echo $e -> getTraceAsString(); -} finally { - unlink($imgCombined_path); - unlink($tmpf_path); -} diff --git a/htdocs/includes/mike42/escpos-php/example/specific/6-arabic-epos-tep-220m.php b/htdocs/includes/mike42/escpos-php/example/specific/6-arabic-epos-tep-220m.php deleted file mode 100644 index 5994b7a81c7..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/6-arabic-epos-tep-220m.php +++ /dev/null @@ -1,74 +0,0 @@ - utf8Glyphs($textUtf8, $maxChars); -$textLine = explode("\n", $textLtr); - -/* - * Set up and use an image print buffer with a suitable font - */ -$buffer = new ImagePrintBuffer(); -$buffer -> setFont($fontPath); -$buffer -> setFontSize($fontSize); - -$profile = CapabilityProfile::load("TEP-200M"); -$connector = new FilePrintConnector("php://output"); - // = new WindowsPrintConnector("LPT2"); - // Windows LPT2 was used in the bug tracker - -$printer = new Printer($connector, $profile); -$printer -> setPrintBuffer($buffer); - -$printer -> setJustification(Printer::JUSTIFY_RIGHT); -foreach($textLine as $text) { - // Print each line separately. We need to do this since Imagick thinks - // text is left-to-right - $printer -> text($text . "\n"); -} - -$printer -> cut(); -$printer -> close(); diff --git a/htdocs/includes/mike42/escpos-php/example/specific/62-greek-symbol-swap.php b/htdocs/includes/mike42/escpos-php/example/specific/62-greek-symbol-swap.php deleted file mode 100644 index 5ea995e5aed..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/62-greek-symbol-swap.php +++ /dev/null @@ -1,15 +0,0 @@ - text("Μιχάλης Νίκος\n"); -$printer -> cut(); -$printer -> close(); - -?> diff --git a/htdocs/includes/mike42/escpos-php/example/specific/68-redblack.php b/htdocs/includes/mike42/escpos-php/example/specific/68-redblack.php deleted file mode 100644 index 142a83ab3e7..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/68-redblack.php +++ /dev/null @@ -1,21 +0,0 @@ - text("Hello World!\n"); - $printer -> setColor(Printer::COLOR_2); - $printer -> text("Red?!\n"); - $printer -> setColor(Printer::COLOR_1); - $printer -> text("Default color again?!\n"); - $printer -> cut(); -} finally { - /* Always close the printer! */ - $printer -> close(); -} diff --git a/htdocs/includes/mike42/escpos-php/example/specific/97-dithering.php b/htdocs/includes/mike42/escpos-php/example/specific/97-dithering.php deleted file mode 100644 index 312df749eb1..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/97-dithering.php +++ /dev/null @@ -1,28 +0,0 @@ - bitImage($img1); - - /* Load with optimisations disabled, forcing the use of PHP to convert the - pixels, which uses a threshold and is much slower. - */ - $img2 = EscposImage::load(__DIR__ . '/../resources/tulips.png', false); - $printer -> bitImage($img2); - $printer -> cut(); -} finally { - /* Always close the printer! */ - $printer -> close(); -} diff --git a/htdocs/includes/mike42/escpos-php/example/specific/README.md b/htdocs/includes/mike42/escpos-php/example/specific/README.md deleted file mode 100644 index 7433e7aa247..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/specific/README.md +++ /dev/null @@ -1,7 +0,0 @@ -Specific examples ------------------ - -These examples are designed for specific combinations of language, -printer and interface. - -They are documented here because the general examples all set up the printer in a similar way. diff --git a/htdocs/includes/mike42/escpos-php/example/text-size.php b/htdocs/includes/mike42/escpos-php/example/text-size.php deleted file mode 100644 index 01bf33dd699..00000000000 --- a/htdocs/includes/mike42/escpos-php/example/text-size.php +++ /dev/null @@ -1,65 +0,0 @@ - - */ -require __DIR__ . '/../autoload.php'; -use Mike42\Escpos\Printer; -use Mike42\Escpos\PrintConnectors\FilePrintConnector; - -$connector = new FilePrintConnector("php://stdout"); -$printer = new Printer($connector); - -/* Initialize */ -$printer -> initialize(); - -/* Text of various (in-proportion) sizes */ -title($printer, "Change height & width\n"); -for ($i = 1; $i <= 8; $i++) { - $printer -> setTextSize($i, $i); - $printer -> text($i); -} -$printer -> text("\n"); - -/* Width changing only */ -title($printer, "Change width only (height=4):\n"); -for ($i = 1; $i <= 8; $i++) { - $printer -> setTextSize($i, 4); - $printer -> text($i); -} -$printer -> text("\n"); - -/* Height changing only */ -title($printer, "Change height only (width=4):\n"); -for ($i = 1; $i <= 8; $i++) { - $printer -> setTextSize(4, $i); - $printer -> text($i); -} -$printer -> text("\n"); - -/* Very narrow text */ -title($printer, "Very narrow text:\n"); -$printer -> setTextSize(1, 8); -$printer -> text("The quick brown fox jumps over the lazy dog.\n"); - -/* Very flat text */ -title($printer, "Very wide text:\n"); -$printer -> setTextSize(4, 1); -$printer -> text("Hello world!\n"); - -/* Very large text */ -title($printer, "Largest possible text:\n"); -$printer -> setTextSize(8, 8); -$printer -> text("Hello\nworld!\n"); - -$printer -> cut(); -$printer -> close(); - -function title(Printer $printer, $text) -{ - $printer -> selectPrintMode(Printer::MODE_EMPHASIZED); - $printer -> text("\n" . $text); - $printer -> selectPrintMode(); // Reset -} diff --git a/htdocs/includes/mike42/escpos-php/test/bootstrap.php b/htdocs/includes/mike42/escpos-php/test/bootstrap.php deleted file mode 100644 index 749629ac4af..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/bootstrap.php +++ /dev/null @@ -1,40 +0,0 @@ - $c) { - $code = ord($c); - if ($code < 32 || $code > 126) { - $chars[$i] = "\\x" . bin2hex($c); - } - } - return implode($chars); -} diff --git a/htdocs/includes/mike42/escpos-php/test/integration/ExampleTest.php b/htdocs/includes/mike42/escpos-php/test/integration/ExampleTest.php deleted file mode 100644 index 6ba8e23e59e..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/integration/ExampleTest.php +++ /dev/null @@ -1,187 +0,0 @@ - exampleDir = dirname(__FILE__) . "/../../example/"; - } - - /** - * @medium - */ - public function testBitImage() - { - $this->markTestSkipped('Not repeatable on Travis CI.'); - $this -> requireGraphicsLibrary(); - $outp = $this -> runExample("bit-image.php"); - $this -> outpTest($outp, "bit-image.bin"); - } - - /** - * @medium - */ - public function testCharacterEncodings() - { - $outp = $this -> runExample("character-encodings.php"); - $this -> outpTest($outp, "character-encodings.bin"); - } - - /** - * @medium - */ - public function testCharacterTables() - { - $outp = $this -> runExample("character-tables.php"); - $this -> outpTest($outp, "character-tables.bin"); - } - - private function outpTest($outp, $fn) - { - $file = dirname(__FILE__) . "/resources/output/".$fn; - if (!file_exists($file)) { - file_put_contents($file, $outp); - } - $this -> assertEquals($outp, file_get_contents($file)); - } - - /** - * @medium - */ - public function testDemo() - { - $this->markTestSkipped('Not repeatable on Travis CI.'); - $this -> requireGraphicsLibrary(); - $outp = $this -> runExample("demo.php"); - $this -> outpTest($outp, "demo.bin"); - } - - /** - * @medium - */ - public function testGraphics() - { - $this->markTestSkipped('Not repeatable on Travis CI.'); - $this -> requireGraphicsLibrary(); - $outp = $this -> runExample("graphics.php"); - $this -> outpTest($outp, "graphics.bin"); - } - - /** - * @medium - */ - public function testReceiptWithLogo() - { - $this->markTestSkipped('Not repeatable on Travis CI.'); - $this -> requireGraphicsLibrary(); - $outp = $this -> runExample("receipt-with-logo.php"); - $this -> outpTest($outp, "receipt-with-logo.bin"); - } - - /** - * @medium - */ - public function testQrCode() - { - $outp = $this -> runExample("qr-code.php"); - $this -> outpTest($outp, "qr-code.bin"); - } - - /** - * @medium - */ - public function testBarcode() - { - $outp = $this -> runExample("barcode.php"); - $this -> outpTest($outp, "barcode.bin"); - } - - /** - * @medium - */ - public function testTextSize() - { - $outp = $this -> runExample("text-size.php"); - $this -> outpTest($outp, "text-size.bin"); - } - - /** - * @medium - */ - public function testMarginsAndSpacing() - { - $outp = $this -> runExample("margins-and-spacing.php"); - $this -> outpTest($outp, "margins-and-spacing.bin"); - } - - /** - * @medium - */ - public function testPdf417Code() - { - $outp = $this -> runExample("pdf417-code.php"); - $this -> outpTest($outp, "pdf417-code.bin"); - } - - public function testInterfaceCups() - { - $outp = $this -> runSyntaxCheck("interface/cups.php"); - } - - public function testInterfaceEthernet() - { - $outp = $this -> runSyntaxCheck("interface/ethernet.php"); - } - - public function testInterfaceLinuxUSB() - { - $outp = $this -> runSyntaxCheck("interface/linux-usb.php"); - } - - public function testInterfaceWindowsUSB() - { - $outp = $this -> runSyntaxCheck("interface/windows-usb.php"); - } - - public function testInterfaceSMB() - { - $outp = $this -> runSyntaxCheck("interface/smb.php"); - } - - public function testInterfaceWindowsLPT() - { - $outp = $this -> runSyntaxCheck("interface/windows-lpt.php"); - } - - private function runSyntaxCheck($fn) - { - $this -> runExample($fn, true); - } - - private function runExample($fn, $syntaxCheck = false) - { - // Change directory and check script - chdir($this -> exampleDir); - $this -> assertTrue(file_exists($fn), "Script $fn not found."); - // Run command and save output - $php = "php" . ($syntaxCheck ? " -l" : ""); - ob_start(); - passthru($php . " " . escapeshellarg($fn), $retval); - $outp = ob_get_contents(); - ob_end_clean(); - // Check return value - $this -> assertEquals(0, $retval, "Example $fn exited with status $retval"); - return $outp; - } - - protected function requireGraphicsLibrary() - { - if (!EscposImage::isGdLoaded() && !EscposImage::isImagickLoaded()) { - $this -> markTestSkipped("This test requires a graphics library."); - } - } -} diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/barcode.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/barcode.bin deleted file mode 100644 index ae4070d70a02f0b74946bbc6011ef46379dac870..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2667 zcmbVOT~FIc6osV))@`MI*(Vg~B6X`k$%hjPp)b3R2}||?Rf2Z+bz)DGQ5=tDPcVo- zzh`X6$+$_sgcQctGw0rO?#KAxuY<$(H5cQFA{P2IVlkz{R}<^taO;wPX7fN%Am!Am zO$R$p-?fU(wpE*KS8N^FeyP|_VS84w^AATJVWhjJ=^Um#(*y=-$)Gl=!#{Mq;}41=nFu9hs0F-{ zq+qjZ*ITuz`?76!x~K2X&U+Va+j2(op5qO;RNnM?AXB^nrRp1r#MG`qtnvbz;s4_Y zx8Z2NSK@*Djev(^2o}y~JQf~BvGnJj(kb?&&y%KQ9SpYZ4tWzKeX&b~UNHAXIHr0U z%W!;z*W8PX?XZ)G_%1`8tg)P1!`f$raqu0qi3X?DHuB=@rgbGf-- zeu5CVT&|SUVcW$x=w4_JpI9u|DBx7g4i-ccwipd*ixN5GltkPUEXZ^%rih+=C%PO* zJWfuqgLynL)Wp@H2L^l(_7-cT=XM1P9gEY(sn>tJZ8Tf@&~CBBnZbjKS)SGU@ezGY zxKAvhM6p=45+x%8;`nax-`#NrQ7nrs zdW`x=07Xp1g%UUUv~AE@1S7I#IU%|$YvmCUA}0);QAEkaN>a)w1*UtJ5sXin>bzOV zL!nKsW|JWHWs8kGpJwv})1T8k7tC4;mWi1kpt=k>F{OFtlAaJOR$;+JKhl%j7m30p zF&D`MkSgVnt7v44MNxo}t}j7T6hZ|#_**(|lA(x`Yv4eSzxT_BGUX-Bm3Y56|5{hf z`wZfRhFCo3n(~Wm5LN0NLneGA=hht#NhHMXnFumDfxfM4+wcNVttW!K)_s|+3v|1a zje;M6*Ud)>SI}i1MLhOc!s!hqkF${s%x-wnd~`nHdid+|2|<=9eH!zS$7s*&%VYJv ze(D#;i|B{1Ov@^aON%?SXlje}ZLYryyh&W|*!sI5u6H~6|I_Y~A<>ijC%x5CK7Vq5 J*Q-y?&i{#g_R0VN diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/bit-image.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/bit-image.bin deleted file mode 100644 index 462eb1a0bf32bbe4bd68b8e9dc8304bc6559549b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9789 zcmeI2F>l*O6o4N~Km-iK^i~;FL=GL2p@BvZhRz)ebP9|X-K1KqB~%s#T524iFxjbN zmdwphF^m3y{)0q7hm2K`Au8;Meed0)cvM`p2s#yahROTx9q-<~dptee>7(P5VRR9N z(PjU9I*!88dH*cB2>VGCPLt7O77fD3quDT=4Wlp~529q}>(NZt(iOtf`24&-89WTX zis#|QFrJSGVLTZ>3FjBl&d1a6lWvHQd`9iwe-Mto33b_7(w`1Trx#c@h_S~>JllC3 zC*R_;;gfitNcYLZot=B%bzmQ!!M{wZs8w`|A~y^CqF9<76veH{X;G|AE-)F4%@svf z6)@)&yCgT*BVJVUZANu!3jGrYRDV^q_g-uan4hon52iuX(*kPjtsyn)cimf11|K=^ z@P1H}uZ~PUoUXnP41*soS63!CSF5$jt!=(}T9@BCb-sjJ`|T;Tl+j;s3|?V!22f)( zwOPN792oUmTYLcEn(~7T_Dnv?p;_Y|^pw$Fx9Q}u;c#lthhI(pdFA?s177u@<(a$> z9nWyU^)BQ!Zn&9eIOH1V%dOrBBpg7+IJ*E&<#58A3H8VoonkWppI!4E-V7k%cdvSb z6mz;!I2B%Cvy{>WUDZZmol&KNPRT2(Mw;hz3rY_y`C1efOZhKFVX>tDyC~?tq{qQ~ zBOF|poN-2Jc5lSu>WYiqw=#fKvs3bw?$=q%0M?>M$!|sPwH~)qaw`0%ELExEitdfD z+GagK@AZQ90ky@!bMDxClWV!KUojiReKDy_2zOSRW%$tRrX>|`~zUU!CCqU&>(9&$6hIJ*4?W<6r* zkBq{zoQqj5|&yb^2Rw+y?1WjC-? z`9_o*R`gYpQpwlCb^}Y>#cp7|AVb&w__dkCx&QG7)=7UnzB{~fZFr^E zMH^n(^Fez)XwL@~f5WQI3w8Wx&j)3dwC95uEKs;$&j;=Kpu7|Cc|SSR+gGCr{;VrW ZqSG1v3@e_-$!vr_%c`9j-uvQH_b;K8L%;w4 diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/character-encodings.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/character-encodings.bin deleted file mode 100644 index f93ea377722c34a852f80637b7ba278d7c916b7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1930 zcmZuyTWnNC7zTZ7qEQo{Hkyyb1W2k6J{eySBR3%gwE^SX?Ah5p)15Q3&YZKQeWFlq zQZSfCDxh>*U<>7xGf7!7#Es0{w=12bzd(FO&j-4AZj99`ZQ}4hfN6U zb5v>*39mKqXmeDC{3kXwc*uBg$7 z3)$>(-)M_4tJL5NT^3khBpIX(l7gWcQIpc;V4JmJVFm^p5E*VnM8jc@tBujcGft-? zJEgqL;c!C!GaCbg$k0Flj|mGo@h6WYmVy7P55;~?Qc~vV;2#TfkK&R1j$sM*w@*hR z@f@b~eXxKgWFOru9!hS@kuZZ65yHGJt#9%k^q(ZlUy{rMS^%Y!cZ+;x8PX3k7?;8+ zO8?fxs2ecrFd@;cEi1=0X7AHzX98MmNjIfwZsaWd?DB3rShJ^y| zVuR{9Sr-G9&C$SvYC(AI1%YHrLdVb)F+9PFP;;11Nhw)!23dQ;k}JJKmxme5<)Qjs zfk@3t6L?FI5j;_eH<`;2*OYPNM`is|em_8R2^ByQYo2~&uz8NFE-XhC{47>9N4AiW zHr{q+#kpEPA zbqzM@XoKNc&ccDi;)vBIIjLDZ!`oyS#VyCA+018gR>&li(U+@4#CIo;6x{ed*H3?c zuKPQ5Ug^5J6+e7^>FBj1ICk>H#W_e5!aQt5rRQ0`S)T969y^^$Z#|mX`_(Y|&ZQ6c?9Zf54Ij!3 zrt$67p}swX*|tlA>CWEn?DpQneFq0RwsbUSkF|8|!`D|+?H7-CwI1Bvb0E{+lgb`% z%^Wx~)SW(=J%KN?9VarWj_g_bzWK`DGdp|I+cNFPx9`egN4Dd1XZD+(g0%nTZl*9S zM!737oATIIhQ|kwy-z6{GZ+K+$O_Rw%EzrRvZaJMf?RrxqK%oFGP0yVb}BVL;b79c z6?3S=_|yaw32o^2R8GB$1f~`XVQs+esJyTC=5OF!uK&jz-S3{y<7Vzw{!D)!UHv_| zTNm>B8;Y+5WE19B$>WUFpi?3p{4> zu;Eqz%R>tK1=1{)$XF&XEm@4U>l#1CXDd*>PuBd%HV#00?w1J>>t-F3>EHF9=>Gy?uO3`S}L~mM&u~TMpQu@)asps!Ui93k9n1t6sk0-s zOV@7Qd-UwpyN^IYje>pq^&c>B(BL6MhYcSwa@6QCW5^T$+ zrr_Lp^A{{!w0OzVWy@ErT(x@5+I8zUY}~YY%hqk%ckJA?dk+O|6x_RS|AB*t4j(ys z?D&b3r%s{~EYcyiN@nr{>BvJI^3yZeSUX0ssZ=aue4fRWPeb~FkDMk=IRtO#JF5V^&Q0>%rx;tZ3>OvTyaBaM<#L^TT~ zzyeuCE(^G}6}f@9?iCVmA$b9&p8-@A*BPuN=yx80WnB8bLBHz^jBBU(fPOvxH3io; z@df>^^v9JKr9i(k{S_;!O6v#uN&2%hFs?=9&rDcI;xQ8NF?V7xZ~)d1tY0H50-C<8`H~1IFu0 gMF7U@O2sft<7xZNFp?FVCfA>TI5&S=EI!!tFDPdJG5`Po diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/demo.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/demo.bin deleted file mode 100644 index 6b426d91ff0563a2ec43c93217f26a492e8d9396..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73643 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 M5AW>X{`!mPPivkA#sB~S diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/margins-and-spacing.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/margins-and-spacing.bin deleted file mode 100644 index 0b3a4676033f93f4b13ba388d573ae18975b5086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmY+>qf5_d!m*jAca;gz+ z*GGK~k72wOs)0k-hvyXagj|%Z06Ki{wLy_gEXtC}7G=d`hq7j3Y9!5QLrIQNO;Ix= zV<`+oUdmRK1~RwGP#gg6JBFdtukjo&G*1QjTllfkgS`Kr==9Np$SCFe88S*WyvvEo Hp7x736xCmM diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/pdf417-code.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/pdf417-code.bin deleted file mode 100644 index ab2d7c54958650ba4b50fa76d5fec1a8a69e3cb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2366 zcmb_e&riZI6rO^K*};=Hf_dC#LQJ<|$>m#_`bf^&TXehrlZNgzkw)a92iehx6^aF-bc$J6Kn6Ry>G47N5-}tGWL(~;mjdZ zGUu5V@(uhTTaA%O>{m>b)NJj3yi-mYPf52T7GmKY>aH z5iTgs(2s+8kTHHxxKSw{X_3l9<@OgB6h(L-SHA21$*;6_C%Cb!cBS~&)$vUrHSudi ze_kIws2;mlAANx0LNSXak5P4Bd<)f9a#dx_a#ZlAVEP>bV5!c)ON10jo?KSXX!}Xo za1mM;jK9)6*5xkRSR*`04YC-lT$BcX+8BAbt`A+>`XDC{T)e$&NH80*hy_<$s9ARy zL($F-QvgPO4opqaMF`$bYSvj8iW+1wfKqDK$cCZ@$V05pCN(3fDYnNrPb8XL>I&3U zYX0{dm_Wdzxla2yUP?4=heEv}@XLo^tXZSU@(VO5f?5Lhh%_vM+M~P&=s%J%^9B3E z9-!C7NH6vV4N(nNgD8lUXHvtf&^>H)*ejkEW=v;?lHp9_rGP5-bDpfwn%!vTDwh$} Lc)f7DFL$kP%6Aqq diff --git a/htdocs/includes/mike42/escpos-php/test/integration/resources/output/qr-code.bin b/htdocs/includes/mike42/escpos-php/test/integration/resources/output/qr-code.bin deleted file mode 100644 index a1e687f151c8f8db633da3fa63fcc0d67fbb6671..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1551 zcmbW1%}>HG6u_t8We4M(m^^M6J#6Dcy@^WVK@6zzUbhOBwVhq3gTLN4zC;SLLcwb^4Fs%YZ^axwI=)>$o;5TW;ISE+xyoDb3D~gXf{;_MB%LYbFNZdi7bT z?{sCXA!a-ZDbSQ;r)^ir9>$GXPlPWaXW&zz6%7z(p`3F|Gyy757!7vWo@TZVYBrj! z^NY*vx5ckKB%CVd+x9m1DVeteJ5hw$8y10bHnYCKyln$-3me8OwupM3J#v(WyfXo0TM?&e18G=`?b5 z4$KhE97Hy8CJALw;# k<|_&F8YT^J0>~w5QL=Ip$*1cQ(OqxX~7|PHI^$;+biUCaG-b< zbkNsYg1nc0z4RhHU7dT3|(d)C_d?ac6hZ+6UB)o-dT=fRgd zpFgbk>W0|726xg0-U0->UoL0HJX{(VYKP7ZxnIhPHVA``3=CP%Cj z)(PW)x!Rogn@(h!TjJOMkctJMfLO3m27V5VHXZk-fGi$t`eOX{#ni!!#C|Pk>xBS` z`hakY$!44yirQVwNsRVY#6gS$aOrxBBEZa0ZkBtZ@UUQr4q}q~iKG(5G@xC(jF2bJ zy=0SWmd0-8Cz(eSp*Tu|iz#Z8C8U6fV3@LNMP*DBZW;^<)0b>dK-K;*^{!=<-P9Ag zn+3#_BdT7ABKafXUCZ59QO*qI72ppfbtSwM6QTt5^=AsvL!l^kCEQfHG9)USrCiJ= zRE&2}fcb>-aX7y(2#N{i;pIF^&Q?=u_7LCPK|wrrLVzcf6Em}?zJQD+NmuWnJnIe$ZtAnUuvO3s6 zW`qyyf~HMMi4s&ve+DMMx*chEjGd7H?6XwD8}cEb5r-e6X4 z0!BL8Oh74l(p1V*rzfh`l%GN=0dx$f#ZoZRRFFZb6apikPAW=iDy9PttqfwLAO|B& z$s;?hoQ|7H#dO+NN>TKmGCHzTDjY0DM}1>ys=(ot+yY5Xf$xk88FtL$t0|50m^94e zOCwEX!S7Rgp9Q3=Ecjrgsno}X(v)CylCwaXN<3UBO$}VUQw}w03LIQ0MNzdt=c*Op zmxbC;tpK0R(-#2KlJ47L9k333yaV*Ln0rufR#*A?xaAL znZFHB`9av{CltG$bgC6i$F}kvwMG5bzHI7*r~Q-1oWkBBgWhycx)E>dJgB`6k1Evf uZg{-kddr_i9UdO=tzN%-$eZ=XIv)hMO>9TUc%2ib6th}+ZV#S^)@eM5#$Umje%7B$&R5Dh^tV~#$w#q`7 z2J74y?a_(7i}%morNHl9wfe**k7``&J#KbiTZ{Tf7<4>V`Jur=mv`Y)0pk1OKhu8^ fN@?`ksDeWFnwwHshg)rJwNxjy4|Ni2SUh!)7zJM* diff --git a/htdocs/includes/mike42/escpos-php/test/unit/AuresCustomerDisplayTest.php b/htdocs/includes/mike42/escpos-php/test/unit/AuresCustomerDisplayTest.php deleted file mode 100644 index c0f803afa97..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/AuresCustomerDisplayTest.php +++ /dev/null @@ -1,76 +0,0 @@ - outputConnector = new DummyPrintConnector(); - $profile = CapabilityProfile::load('OCD-300'); - $this -> printer = new AuresCustomerDisplay($this -> outputConnector, $profile); - } - - protected function checkOutput($expected = null) - { - /* Check those output strings */ - $outp = $this -> outputConnector -> getData(); - if ($expected === null) { - echo "\nOutput was:\n\"" . friendlyBinary($outp) . "\"\n"; - } - $this -> assertEquals($expected, $outp); - } - - protected function tearDown() - { - $this -> outputConnector -> finalize(); - } - - public function testInitializeOutput() - { - $this -> checkOutput("\x02\x05C1\x03\x1b@\x1bt\x00\x1f\x02"); - } - - public function testselectTextScrollMode() { - $this -> outputConnector -> clear(); - $this -> printer -> selectTextScrollMode(AuresCustomerDisplay::TEXT_OVERWRITE); - $this -> checkOutput("\x1f\x01"); - } - - public function testClear() { - $this -> outputConnector -> clear(); - $this -> printer -> clear(); - $this -> checkOutput("\x0c"); - } - - public function testShowFirmwareVersion() { - $this -> outputConnector -> clear(); - $this -> printer -> showFirmwareVersion(); - $this -> checkOutput("\x02\x05V\x01\x03"); - } - - public function testSelfTest() { - $this -> outputConnector -> clear(); - $this -> printer -> selfTest(); - $this -> checkOutput("\x02\x05D\x08\x03"); - } - - public function testShowLogo() { - $this -> outputConnector -> clear(); - $this -> printer -> showLogo(); - $this -> checkOutput("\x02\xfcU\xaaU\xaa"); - } - - public function testTest() { - $this -> outputConnector -> clear(); - // Handling of line-endings differs to regular printers, need to use \r\n - $this -> printer -> text("Hello\nWorld\n"); - $this -> checkOutput("Hello\x0d\x0aWorld\x0d\x0a"); - } -} \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/test/unit/CapabilityProfileTest.php b/htdocs/includes/mike42/escpos-php/test/unit/CapabilityProfileTest.php deleted file mode 100644 index 923811e7042..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/CapabilityProfileTest.php +++ /dev/null @@ -1,59 +0,0 @@ -assertFalse(array_search('simple', $names) === false); - $this->assertFalse(array_search('default', $names) === false); - $this->assertTrue(array_search('lalalalala', $names) === false); - } - - public function testLoadDefault() - { - // Just load the default profile and check it out - $profile = CapabilityProfile::load('default'); - $this->assertEquals("default", $profile->getId()); - $this->assertEquals("Default", $profile->getName()); - $this->assertTrue($profile->getSupportsBarcodeB()); - $this->assertTrue($profile->getSupportsBitImageRaster()); - $this->assertTrue($profile->getSupportsGraphics()); - $this->assertTrue($profile->getSupportsQrCode()); - $this->assertTrue($profile->getSupportsPdf417Code()); - $this->assertFalse($profile->getSupportsStarCommands()); - $this->assertArrayHasKey('0', $profile->getCodePages()); - } - - public function testCodePageCacheKey() - { - $default = CapabilityProfile::load('default'); - $simple = CapabilityProfile::load('simple'); - $this->assertNotEquals($default->getCodePageCacheKey(), $simple->getCodePageCacheKey()); - } - - public function testBadProfileNameSuggestion() - { - $this->setExpectedException('\InvalidArgumentException', 'simple'); - $profile = CapabilityProfile::load('simpel'); - } - - public function testBadFeatureNameSuggestion() - { - $this->setExpectedException('\InvalidArgumentException', 'graphics'); - $profile = CapabilityProfile::load('default'); - $profile->getFeature('graphicx'); - } - - public function testSuggestions() - { - $input = "orangee"; - $choices = array("apple", "orange", "pear"); - $suggestions = CapabilityProfile::suggestNearest($input, $choices, 1); - $this->assertEquals(1, count($suggestions)); - $this->assertEquals("orange", $suggestions[0]); - } -} \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/test/unit/CodePageTest.php b/htdocs/includes/mike42/escpos-php/test/unit/CodePageTest.php deleted file mode 100644 index 0e7b661f94d..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/CodePageTest.php +++ /dev/null @@ -1,63 +0,0 @@ -markTestSkipped("Requires iconv"); - } - } - - public function testDataIconv() - { - // Set up CP437 - $this->requiresIconv(); - $cp = new CodePage("CP437", array( - "name" => "CP437", - "iconv" => "CP437" - )); - $this->assertTrue($cp->isEncodable()); - $this->assertEquals($cp->getIconv(), "CP437"); - $this->assertEquals($cp->getName(), "CP437"); - $this->assertEquals($cp->getId(), "CP437"); - $this->assertEquals($cp->getNotes(), null); - // Get data and see if it's right - $data = $cp->getData(); - $expected = "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "; - $this->assertEquals($expected, $data); - } - - public function testDataIconvBogus() - { - // No errors raised, you just get an empty list of supported characters if you try to compute a fake code page - $this->requiresIconv(); - $cp = new CodePage("foo", array( - "name" => "foo", - "iconv" => "foo" - )); - $this->assertTrue($cp->isEncodable()); - $this->assertEquals($cp->getIconv(), "foo"); - $this->assertEquals($cp->getName(), "foo"); - $this->assertEquals($cp->getId(), "foo"); - $this->assertEquals($cp->getNotes(), null); - $data = $cp->getData(); - $expected = str_repeat(" ", 128); - $this->assertEquals($expected, $data); - // Do this twice (caching behaviour) - $data = $cp->getData(); - $this->assertEquals($expected, $data); - } - - public function testDataCannotEncode() - { - $this->setExpectedException('\InvalidArgumentException'); - $cp = new CodePage("foo", array( - "name" => "foo" - )); - $this->assertFalse($cp->isEncodable()); - $cp->getData(); - } -} \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/test/unit/CupsPrintConnectorTest.php b/htdocs/includes/mike42/escpos-php/test/unit/CupsPrintConnectorTest.php deleted file mode 100644 index 41499ee4b27..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/CupsPrintConnectorTest.php +++ /dev/null @@ -1,36 +0,0 @@ -getMockConnector("FooPrinter", array("FooPrinter")); - $connector->expects($this->once())->method('getCmdOutput')->with($this->stringContains("lp -d 'FooPrinter' ")); - $connector->finalize(); - } - public function testPrinterDoesntExist() - { - $this -> setExpectedException('BadMethodCallException'); - $connector = $this->getMockConnector("FooPrinter", array("OtherPrinter")); - $connector->expects($this->once())->method('getCmdOutput')->with($this->stringContains("lp -d 'FooPrinter' ")); - $connector->finalize(); - } - public function testNoPrinter() - { - $this -> setExpectedException('BadMethodCallException'); - $connector = $this->getMockConnector("FooPrinter", array("")); - } - private function getMockConnector($path, array $printers) - { - $stub = $this->getMockBuilder('Mike42\Escpos\PrintConnectors\CupsPrintConnector')->setMethods(array ( - 'getCmdOutput', - 'getLocalPrinters' - ))->disableOriginalConstructor()->getMock(); - $stub->method('getCmdOutput')->willReturn(""); - $stub->method('getLocalPrinters')->willReturn($printers); - $stub->__construct($path); - return $stub; - } -} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/EscposImageTest.php b/htdocs/includes/mike42/escpos-php/test/unit/EscposImageTest.php deleted file mode 100644 index 08e1be91c50..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/EscposImageTest.php +++ /dev/null @@ -1,16 +0,0 @@ - setExpectedException('Exception'); - $img = EscposImage::load('not-a-real-file.png'); - } - public function testImageNotSupportedException() - { - $this -> setExpectedException('InvalidArgumentException'); - $img = EscposImage::load('/dev/null', false, array()); - } -} \ No newline at end of file diff --git a/htdocs/includes/mike42/escpos-php/test/unit/EscposPrintBufferTest.php b/htdocs/includes/mike42/escpos-php/test/unit/EscposPrintBufferTest.php deleted file mode 100644 index af0ee2b9b73..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/EscposPrintBufferTest.php +++ /dev/null @@ -1,192 +0,0 @@ - outputConnector = new DummyPrintConnector(); - $printer = new Printer($this -> outputConnector); - $this -> buffer = $printer -> getPrintBuffer(); - } - - protected function checkOutput($expected = null) - { - /* Check those output strings */ - $outp = $this -> outputConnector -> getData(); - if ($expected === null) { - echo "\nOutput was:\n\"" . friendlyBinary($outp) . "\"\n"; - } - $this -> assertEquals($expected, $outp); - } - - protected function tearDown() - { - $this -> outputConnector -> finalize(); - } - - public function testRawTextNonprintable() - { - $this -> buffer -> writeTextRaw("Test" . Printer::ESC . "v1\n"); - $this -> checkOutput("\x1b@Test?v1\x0a"); // ASCII ESC character is substituted for '?' - } - - public function testDanish() - { - $this -> buffer -> writeText("Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Wolther spillede på xylofon.\n"); - $this -> checkOutput("\x1b@Quizdeltagerne spiste jordb\x91r med fl\x1bt\x02\x9bde, mens cirkusklovnen Wolther spillede p\x86 xylofon.\x0a"); - } - - public function testGerman() - { - $this -> buffer -> writeText("Falsches Üben von Xylophonmusik quält jeden größeren Zwerg.\n"); - $this -> checkOutput("\x1b@Falsches \x9aben von Xylophonmusik qu\x84lt jeden gr\x94\xe1eren Zwerg.\x0a"); - } - - public function testGreek() - { - $this -> buffer -> writeText("Ξεσκεπάζω την ψυχοφθόρα βδελυγμία"); - $this -> checkOutput("\x1b@\x1bt\x0e\x8d\x9c\xa9\xa1\x9c\xa7\xe1\x9d\xe0 \xab\x9e\xa4 \xaf\xac\xae\xa6\xad\x9f\xe6\xa8\x98 \x99\x9b\x9c\xa2\xac\x9a\xa3\xe5\x98"); - } - - public function testGreekWithDiacritics() - { - // This is a string which is known to be un-printable in ESC/POS (the grave-accented letters are not in any code page), - // so we are checking the substitution '?' for unknown characters. - $this -> buffer -> writeText("Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο.\n"); - $this -> checkOutput("\x1b@\xe2\xe0\x1bt\x0e\x9d\xe2\x9c\xaa \xa1\x98? \xa3\xac\xa8\xab\xa0?\xaa \x9b?\xa4 \x9f? \x99\xa8? \xa7\xa0? \xa9\xab? \xae\xa8\xac\xa9\x98\xad? \xa5\xe2\xad\xe0\xab\xa6.\x0a"); - } - - public function testEnglish() - { - $this -> buffer -> writeText("The quick brown fox jumps over the lazy dog.\n"); - $this -> checkOutput("\x1b@The quick brown fox jumps over the lazy dog.\n"); - } - - public function testSpanish() - { - // This one does not require changing code-pages at all, so characters are just converted from Unicode to CP437. - $this -> buffer -> writeText("El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y frío, añoraba a su querido cachorro.\n"); - $this -> checkOutput("\x1b@El ping\x81ino Wenceslao hizo kil\xa2metros bajo exhaustiva lluvia y fr\xa1o, a\xa4oraba a su querido cachorro.\x0a"); - } - - public function testFrench() - { - $this -> buffer -> writeText("Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en canoë au delà des îles, près du mälström où brûlent les novæ.\n"); - $this -> checkOutput("\x1b@Le c\x1bt\x10\x9cur d\xe9\xe7u mais l'\xe2me plut\xf4t na\xefve, Lou\xffs r\xeava de crapa\xfcter en cano\xeb au del\xe0 des \xeeles, pr\xe8s du m\xe4lstr\xf6m o\xf9 br\xfblent les nov\xe6.\x0a"); - } - - public function testIrishGaelic() - { - // Note that some letters with diacritics cannot be printed for Irish Gaelic text, so text may need to be simplified. - $this -> buffer -> writeText("D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh.\n"); - $this -> checkOutput("\x1b@D'fhuascail \x1bt\x02\xd6osa, \xe9rmhac na h\xe0ighe Beannaithe, p\xa2r \x90ava agus \xb5dhaimh.\x0a"); - } - - public function testHungarian() - { - $this -> buffer -> writeText("Árvíztűrő tükörfúrógép.\n"); - $this -> checkOutput("\x1b@\x1bt\x02\xb5rv\xa1zt\x1bt\x12\xfbr\x8b t\x81k\x94rf\xa3r\xa2g\x82p.\x0a"); - } - - public function testIcelandic() - { - $this -> buffer -> writeText("Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa."); - $this -> checkOutput("\x1b@K\x91mi n\x1bt\x02\xec \x94xi h\x82r ykist \xe7j\xa2fum n\xa3 b\x91\xd0i v\xa1l og \xa0drepa."); - } - - public function testJapaneseHiragana() - { - $this -> markTestIncomplete("Non-ASCII character sets not yet supported."); - $this -> buffer -> writeText(implode("\n", array("いろはにほへとちりぬるを", " わかよたれそつねならむ", "うゐのおくやまけふこえて", "あさきゆめみしゑひもせす")) . "\n"); - $this -> checkOutput(); - } - - public function testJapaneseKatakana() - { - $this -> markTestIncomplete("Non-ASCII character sets not yet supported."); - $this -> buffer -> writeText(implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン")) . "\n"); - $this -> checkOutput("\x1b@\x1bt\x01\xb2\xdb\xca\xc6\xce\xcd\xc4 \xc1\xd8\xc7\xd9\xa6 \xdc\xb6\xd6\xc0\xda\xbf \xc2\xc8\xc5\xd7\xd1\x0a\xb3\xb2\xc9\xb5\xb8\xd4\xcf \xb9\xcc\xba\xb4\xc3 \xb1\xbb\xb7\xd5\xd2\xd0\xbc \xb4\xcb\xd3\xbe\xbd\xdd\x0a"); - } - - public function testJapaneseKataKanaHalfWidth() - { - $this -> buffer -> writeText(implode("\n", array("イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム", "ウイノオクヤマ ケフコエテ アサキユメミシ エヒモセスン")) . "\n"); - $this -> checkOutput("\x1b@\x1bt\x01\xb2\xdb\xca\xc6\xce\xcd\xc4 \xc1\xd8\xc7\xd9\xa6 \xdc\xb6\xd6\xc0\xda\xbf \xc2\xc8\xc5\xd7\xd1\x0a\xb3\xb2\xc9\xb5\xb8\xd4\xcf \xb9\xcc\xba\xb4\xc3 \xb1\xbb\xb7\xd5\xd2\xd0\xbc \xb4\xcb\xd3\xbe\xbd\xdd\x0a"); - } - - public function testLatvian() - { - $this -> buffer -> writeText("Glāžšķūņa rūķīši dzērumā čiepj Baha koncertflīģeļu vākus.\n"); - $this -> checkOutput("\x1b@Gl\x1bt!\x83\xd8\xd5\xe9\xd7\xeca r\xd7\xe9\x8c\xd5i dz\x89rum\x83 \xd1iepj Baha koncertfl\x8c\x85e\xebu v\x83kus.\x0a"); - } - - public function testPolish() - { - $this -> buffer -> writeText("Pchnąć w tę łódź jeża lub ośm skrzyń fig.\n"); - $this -> checkOutput("\x1b@Pchn\x1bt\x12\xa5\x86 w t\xa9 \x88\xa2d\xab je\xbea lub o\x98m skrzy\xe4 fig.\x0a"); - } - - public function testRussian() - { - $this -> buffer -> writeText("В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!\n"); - $this -> checkOutput("\x1b@\x1bt\x11\x82 \xe7\xa0\xe9\xa0\xe5 \xee\xa3\xa0 \xa6\xa8\xab \xa1\xeb \xe6\xa8\xe2\xe0\xe3\xe1? \x84\xa0, \xad\xae \xe4\xa0\xab\xec\xe8\xa8\xa2\xeb\xa9 \xed\xaa\xa7\xa5\xac\xaf\xab\xef\xe0!\x0a"); - } - - public function testThai() - { - $this -> markTestIncomplete("Non-ASCII character sets not yet supported."); - $this -> buffer -> writeText("นายสังฆภัณฑ์ เฮงพิทักษ์ฝั่ง ผู้เฒ่าซึ่งมีอาชีพเป็นฅนขายฃวด ถูกตำรวจปฏิบัติการจับฟ้องศาล ฐานลักนาฬิกาคุณหญิงฉัตรชฎา ฌานสมาธิ\n"); // Quotation from Wikipedia - $this -> checkOutput(); - } - - public function testTurkish() - { - $this -> buffer -> writeText("Pijamalı hasta, yağız şoföre çabucak güvendi.\n"); - $this -> checkOutput("\x1b@Pijamal\x1bt\x02\xd5 hasta, ya\x1bt\x0d\xa7\x8dz \x9fof\x94re \x87abucak g\x81vendi.\x0a"); - } - - public function testArabic() - { - $this -> markTestIncomplete("Right-to-left text not yet supported."); - $this -> buffer -> writeText("صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت — يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ" . "\n"); // Quotation from Wikipedia - $this -> checkOutput(); - } - - public function testHebrew() - { - // RTL text is more complex than the above. - $this -> markTestIncomplete("Right-to-left text not yet supported."); - $this -> buffer -> writeText("דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה" . "\n"); - $this -> checkOutput(); - } - - public function testVietnamese() { - $this -> buffer -> writeText("Tiếng Việt, còn gọi tiếng Việt Nam hay Việt ngữ, là ngôn ngữ của người Việt (người Kinh) và là ngôn ngữ chính thức tại Việt Nam.\n"); - $this -> checkOutput("\x1b@Ti\x1bt\x1e\xd5ng Vi\xd6t, c\xdfn g\xe4i ti\xd5ng Vi\xd6t Nam hay Vi\xd6t ng\xf7, l\xb5 ng\xabn ng\xf7 c\xf1a ng\xad\xeai Vi\xd6t (ng\xad\xeai Kinh) v\xb5 l\xb5 ng\xabn ng\xf7 ch\xddnh th\xf8c t\xb9i Vi\xd6t Nam.\x0a"); - } - - public function testWindowsLineEndings() { - $this -> buffer -> writeText("Hello World!\r\n"); - $this -> checkOutput("\x1b@Hello World!\x0a"); - } - - public function testWindowsLineEndingsRaw() { - $this -> buffer -> writeTextRaw("Hello World!\r\n"); - $this -> checkOutput("\x1b@Hello World!\x0a"); - } -} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/EscposTest.php b/htdocs/includes/mike42/escpos-php/test/unit/EscposTest.php deleted file mode 100644 index 0b70e96b370..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/EscposTest.php +++ /dev/null @@ -1,1127 +0,0 @@ - outputConnector = new DummyPrintConnector(); - $this -> printer = new Printer($this -> outputConnector); - } - - protected function checkOutput($expected = null) - { - /* Check those output strings */ - $outp = $this -> outputConnector -> getData(); - if ($expected === null) { - echo "\nOutput was:\n\"" . friendlyBinary($outp) . "\"\n"; - } - $this -> assertEquals($expected, $outp); - } - - protected function tearDown() - { - $this -> outputConnector -> finalize(); - } - - protected function requireGraphicsLibrary() - { - if (!EscposImage::isGdLoaded() && !EscposImage::isImagickLoaded()) { - // If the test is about to do something which requires a library, - // something must throw an exception. - $this -> setExpectedException('Exception'); - } - } - - public function testInitializeOutput() - { - $this -> checkOutput("\x1b\x40"); - } - - public function testTextStringOutput() - { - $this -> printer -> text("The quick brown fox jumps over the lazy dog\n"); - $this -> checkOutput("\x1b@The quick brown fox jumps over the lazy dog\n"); - } - - public function testTextDefault() - { - $this -> printer -> text(); - $this -> checkOutput("\x1b@"); - } - - public function testTextChinese() - { - // Switch to chinese print mode, GBK output, switch back to alphanumeric. - $this -> printer -> textChinese("示例文本打印机!\n"); - $this -> checkOutput("\x1b@\x1c&\xca\xbe\xc0\xfd\xce\xc4\xb1\xbe\xb4\xf2\xd3\xa1\xbb\xfa!\x0a\x1c."); - } - - public function testTextRaw() - { - // Under raw output, the raw bytes are sent to the printer, so typing a UTF-8 euro literally causes \xE2 \x82 \xAC to be sent. - // Under text(), this would cause a code-page change (to a page that contains a Euro symbol), and single byte. - $this -> printer -> textRaw("€\n"); - $this -> checkOutput("\x1b@\xe2\x82\xac\x0a"); - } - - public function testTextString() - { - $this -> printer -> text("String"); - $this -> printer -> text(123); - $this -> printer -> text(); - $this -> printer -> text(null); - $this -> printer -> text(1.2); - $this -> printer -> text(new FooBar("FooBar")); - $this -> checkOutput("\x1b@String1231.2FooBar"); - } - - public function testTextObject() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> text(new DateTime()); - } - - public function testFeedDefault() - { - $this -> printer -> feed(); - $this -> checkOutput("\x1b@\x0a"); - } - - public function testFeed3Lines() - { - $this -> printer -> feed(3); - $this -> checkOutput("\x1b@\x1bd\x03"); - } - - public function testFeedZero() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feed(0); - } - - public function testFeedNonInteger() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feed("ab"); - } - - public function testFeedTooLarge() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feed(256); - } - - /* Print mode */ - public function testSelectPrintModeDefault() - { - $this -> printer -> selectPrintMode(); - $this -> checkOutput("\x1b@\x1b!\x00"); - } - - public function testSelectPrintModeAcceptedValues() - { - /* This iterates over a bunch of numbers, figures out which - ones contain invalid flags, and checks that the driver - rejects those, but accepts the good inputs */ - - for ($i = -1; $i <= 256; $i++) { - $invalid = ($i < 0) || ($i > 255) || (($i & 2) == 2) || (($i & 4) == 4) || (($i & 64) == 64); - $failed = false; - try { - $this -> printer -> selectPrintMode($i); - } catch (Exception $e) { - $failed = true; - } - $this -> assertEquals($failed, $invalid); - } - } - - /* Underline */ - public function testSetUnderlineDefault() - { - $this -> printer -> setUnderline(); - $this -> checkOutput("\x1b@\x1b-\x01"); - } - - public function testSetUnderlineOff() - { - $this -> printer -> setUnderline(Printer::UNDERLINE_NONE); - $this -> checkOutput("\x1b@\x1b-\x00"); - } - - public function testSetUnderlineOn() - { - $this -> printer -> setUnderline(Printer::UNDERLINE_SINGLE); - $this -> checkOutput("\x1b@\x1b-\x01"); - } - - public function testSetUnderlineDbl() - { - $this -> printer -> setUnderline(Printer::UNDERLINE_DOUBLE); - $this -> checkOutput("\x1b@\x1b-\x02"); - } - - public function testSetUnderlineAcceptedValues() - { - $this -> printer -> setUnderline(0); - $this -> printer -> setUnderline(1); - $this -> printer -> setUnderline(2); - /* These map to 0 & 1 for interchangeability with setEmphasis */ - $this -> printer -> setUnderline(true); - $this -> printer -> setUnderline(false); - $this -> checkOutput("\x1b@\x1b-\x00\x1b-\x01\x1b-\x02\x1b-\x01\x1b-\x00"); - } - - public function testSetUnderlineTooLarge() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setUnderline(3); - } - - public function testSetUnderlineNegative() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setUnderline(-1); - } - - public function testSetUnderlineNonInteger() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setUnderline("Hello"); - } - - /* Emphasis */ - public function testSetEmphasisDefault() - { - $this -> printer -> setEmphasis(); - $this -> checkOutput("\x1b@\x1bE\x01"); - } - - public function testSetEmphasisOn() - { - $this -> printer -> setEmphasis(true); - $this -> checkOutput("\x1b@\x1bE\x01"); - } - - public function testSetEmphasisOff() - { - $this -> printer -> setEmphasis(false); - $this -> checkOutput("\x1b@\x1bE\x00"); - } - - public function testSetEmphasisNonBoolean() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setEmphasis(7); - } - - /* Double strike */ - public function testSetDoubleStrikeDefault() - { - $this -> printer -> setDoubleStrike(); - $this -> checkOutput("\x1b@\x1bG\x01"); - } - - public function testSetDoubleStrikeOn() - { - $this -> printer -> setDoubleStrike(true); - $this -> checkOutput("\x1b@\x1bG\x01"); - } - - public function testSetDoubleStrikeOff() - { - $this -> printer -> setDoubleStrike(false); - $this -> checkOutput("\x1b@\x1bG\x00"); - } - - public function testSetDoubleStrikeNonBoolean() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setDoubleStrike(4); - } - - /* Font */ - public function testSetFontDefault() - { - $this -> printer -> setFont(); - $this -> checkOutput("\x1b@\x1bM\x00"); - } - - public function testSetFontAcceptedValues() - { - $this -> printer -> setFont(Printer::FONT_A); - $this -> printer -> setFont(Printer::FONT_B); - $this -> printer -> setFont(Printer::FONT_C); - $this -> checkOutput("\x1b@\x1bM\x00\x1bM\x01\x1bM\x02"); - } - - public function testSetFontNegative() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setFont(-1); - } - - - public function testSetFontTooLarge() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setFont(3); - } - - public function testSetFontNonInteger() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setFont('hello'); - } - - /* Justification */ - public function testSetJustificationDefault() - { - $this -> printer -> setJustification(); - $this -> checkOutput("\x1b@\x1ba\x00"); - } - - public function testSetJustificationLeft() - { - $this -> printer -> setJustification(Printer::JUSTIFY_LEFT); - $this -> checkOutput("\x1b@\x1ba\x00"); - } - - public function testSetJustificationRight() - { - $this -> printer -> setJustification(Printer::JUSTIFY_RIGHT); - $this -> checkOutput("\x1b@\x1ba\x02"); - } - - public function testSetJustificationCenter() - { - $this -> printer -> setJustification(Printer::JUSTIFY_CENTER); - $this -> checkOutput("\x1b@\x1ba\x01"); - } - - public function testSetJustificationNegative() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setJustification(-1); - } - - - public function testSetJustificationTooLarge() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setFont(3); - } - - public function testSetJustificationNonInteger() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setJustification('hello'); - } - - /* Reverse feed */ - public function testFeedReverseDefault() - { - $this -> printer -> feedReverse(); - $this -> checkOutput("\x1b@\x1be\x01"); - } - - public function testFeedReverse3() - { - $this -> printer -> feedReverse(3); - $this -> checkOutput("\x1b@\x1be\x03"); - } - - public function testFeedReverseNegative() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feedReverse(-1); - } - - public function testFeedReverseTooLarge() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feedReverse(256); - } - - public function testFeedReverseNonInteger() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> feedReverse('hello'); - } - - /* Cut */ - public function testCutDefault() - { - // TODO check what the accepted range of values should be for $line - // cut($mode = self::CUT_FULL, $lines = 3) - $this -> printer -> cut(); - $this -> checkOutput("\x1b@\x1dVA\x03"); - } - - /* Set barcode height */ - public function testSetBarcodeHeightDefault() - { - $this -> printer -> setBarcodeHeight(); - $this -> checkOutput("\x1b@\x1dh\x08"); - } - - public function testBarcodeHeight10() - { - $this -> printer -> setBarcodeHeight(10); - $this -> checkOutput("\x1b@\x1dh\x0a"); - } - - public function testSetBarcodeHeightNegative() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeHeight(-1); - } - - public function testSetBarcodeHeightTooLarge() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeHeight(256); - } - - public function testSetBarcodeHeightNonInteger() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeHeight('hello'); - } - - /* Set barcode width */ - public function testSetBarcodeWidthDefault() - { - $this -> printer -> setBarcodeWidth(); - $this -> checkOutput("\x1b@\x1dw\x03"); - } - - public function testBarcodeWidth1() - { - $this -> printer -> setBarcodeWidth(1); - $this -> checkOutput("\x1b@\x1dw\x01"); - } - - public function testSetBarcodeWidthNegative() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeWidth(-1); - } - - public function testSetBarcodeWidthTooLarge() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeWidth(256); - } - - public function testSetBarcodeWidthNonInteger() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeWidth('hello'); - } - - /* Barcode text position */ - public function testSetBarcodeTextPositionDefault() - { - $this -> printer -> setBarcodeTextPosition(); - $this -> checkOutput("\x1b@\x1dH\x00"); - } - - public function testSetBarcodeTextPositionBelow() - { - $this -> printer -> setBarcodeTextPosition(Printer::BARCODE_TEXT_BELOW); - $this -> checkOutput("\x1b@\x1dH\x02"); - } - - public function testSetBarcodeTextPositionBoth() - { - $this -> printer -> setBarcodeTextPosition(Printer::BARCODE_TEXT_BELOW | Printer::BARCODE_TEXT_ABOVE); - $this -> checkOutput("\x1b@\x1dH\x03"); - } - - public function testSetBarcodeTextPositionNegative() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeTextPosition(-1); - } - - public function testSetBarcodeTextPositionTooLarge() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeTextPosition(4); - } - - public function tesSetBarcodeTextPositionNonInteger() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setBarcodeTextPosition('hello'); - } - - /* Barcode - UPC-A */ - public function testBarcodeUpcaNumeric11Char() - { - $this -> printer -> barcode("01234567890", Printer::BARCODE_UPCA); - $this -> checkOutput("\x1b@\x1dkA\x0b01234567890"); - } - - public function testBarcodeUpcaNumeric12Char() - { - $this -> printer -> barcode("012345678901", Printer::BARCODE_UPCA); - $this -> checkOutput("\x1b@\x1dkA\x0c012345678901"); - } - - public function testBarcodeUpcaNumeric13Char() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("0123456789012", Printer::BARCODE_UPCA); - } - - public function testBarcodeUpcaNonNumeric12Char() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("A12345678901", Printer::BARCODE_UPCA); - } - - /* Barcode - UPC-E */ - public function testBarcodeUpceNumeric6Char() - { - $this -> printer -> barcode("123456", Printer::BARCODE_UPCE); - $this -> checkOutput("\x1b@\x1dkB\x06123456"); - } - - public function testBarcodeUpceNumeric7Char() - { - $this -> printer -> barcode("0123456", Printer::BARCODE_UPCE); - $this -> checkOutput("\x1b@\x1dkB\x070123456"); - } - - public function testBarcodeUpceNumeric8Char() - { - $this -> printer -> barcode("01234567", Printer::BARCODE_UPCE); - $this -> checkOutput("\x1b@\x1dkB\x0801234567"); - } - - public function testBarcodeUpceNumeric11Char() - { - $this -> printer -> barcode("01234567890", Printer::BARCODE_UPCE); - $this -> checkOutput("\x1b@\x1dkB\x0b01234567890"); - } - - public function testBarcodeUpceNumeric12Char() - { - $this -> printer -> barcode("012345678901", Printer::BARCODE_UPCE); - $this -> checkOutput("\x1b@\x1dkB\x0c012345678901"); - } - - public function testBarcodeUpceNumeric9Char() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("012345678", Printer::BARCODE_UPCE); - } - - public function testBarcodeUpceNonNumeric12Char() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("A12345678901", Printer::BARCODE_UPCE); - } - - /* Barcode - JAN13 */ - public function testBarcodeJan13Numeric12Char() - { - $this -> printer -> barcode("012345678901", Printer::BARCODE_JAN13); - $this -> checkOutput("\x1b@\x1dkC\x0c012345678901"); - } - - public function testBarcodeJan13Numeric13Char() - { - $this -> printer -> barcode("0123456789012", Printer::BARCODE_JAN13); - $this -> checkOutput("\x1b@\x1dkC\x0d0123456789012"); - } - - public function testBarcodeJan13Numeric11Char() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("01234567890", Printer::BARCODE_JAN13); - } - - public function testBarcodeJan13NonNumeric13Char() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("A123456789012", Printer::BARCODE_JAN13); - } - - /* Barcode - JAN8 */ - public function testBarcodeJan8Numeric7Char() - { - $this -> printer -> barcode("0123456", Printer::BARCODE_JAN8); - $this -> checkOutput("\x1b@\x1dkD\x070123456"); - } - - public function testBarcodeJan8Numeric8Char() - { - $this -> printer -> barcode("01234567", Printer::BARCODE_JAN8); - $this -> checkOutput("\x1b@\x1dkD\x0801234567"); - } - - public function testBarcodeJan8Numeric9Char() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("012345678", Printer::BARCODE_JAN8); - } - - public function testBarcodeJan8NonNumeric8Char() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("A1234567", Printer::BARCODE_JAN8); - } - - /* Barcode - Code39 */ - public function testBarcodeCode39AsDefault() - { - $this -> printer -> barcode("1234"); - $this -> checkOutput("\x1b@\x1dkE\x041234"); - } - - public function testBarcodeCode39Text() - { - $this -> printer -> barcode("ABC 012", Printer::BARCODE_CODE39); - $this -> checkOutput("\x1b@\x1dkE\x07ABC 012"); - } - - public function testBarcodeCode39SpecialChars() - { - $this -> printer -> barcode("$%+-./", Printer::BARCODE_CODE39); - $this -> checkOutput("\x1b@\x1dkE\x06$%+-./"); - } - - public function testBarcodeCode39Asterisks() - { - $this -> printer -> barcode("*TEXT*", Printer::BARCODE_CODE39); - $this -> checkOutput("\x1b@\x1dkE\x06*TEXT*"); - } - - public function testBarcodeCode39AsterisksUnmatched() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("*TEXT", Printer::BARCODE_CODE39); - } - - public function testBarcodeCode39AsteriskInText() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("12*34", Printer::BARCODE_CODE39); - } - - public function testBarcodeCode39Lowercase() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("abcd", Printer::BARCODE_CODE39); - } - - public function testBarcodeCode39Empty() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("**", Printer::BARCODE_CODE39); - } - - /* Barcode - ITF */ - public function testBarcodeItfNumericEven() - { - $this -> printer -> barcode("1234", Printer::BARCODE_ITF); - $this -> checkOutput("\x1b@\x1dkF\x041234"); - } - - public function testBarcodeItfNumericOdd() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("123", Printer::BARCODE_ITF); - } - - public function testBarcodeItfNonNumericEven() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("A234", Printer::BARCODE_ITF); - } - - /* Barcode - Codabar */ - public function testBarcodeCodabarNumeric() - { - $this -> printer -> barcode("A012345A", Printer::BARCODE_CODABAR); - $this -> checkOutput("\x1b@\x1dkG\x08A012345A"); - } - - public function testBarcodeCodabarSpecialChars() - { - $this -> printer -> barcode("A012$+-./:A", Printer::BARCODE_CODABAR); - $this -> checkOutput("\x1b@\x1dkG\x0bA012$+-./:A"); - } - - public function testBarcodeCodabarNotWrapped() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("012345", Printer::BARCODE_CODABAR); - } - - public function testBarcodeCodabarStartStopWrongPlace() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("012A45", Printer::BARCODE_CODABAR); - } - - /* Barcode - Code93 */ - public function testBarcodeCode93Valid() - { - $this -> printer -> barcode("012abcd", Printer::BARCODE_CODE93); - $this -> checkOutput("\x1b@\x1dkH\x07012abcd"); - } - - public function testBarcodeCode93Empty() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("", Printer::BARCODE_CODE93); - } - - /* Barcode - Code128 */ - public function testBarcodeCode128ValidA() - { - $this -> printer -> barcode("{A" . "012ABCD", Printer::BARCODE_CODE128); - $this -> checkOutput("\x1b@\x1dkI\x09{A012ABCD"); - } - - public function testBarcodeCode128ValidB() - { - $this -> printer -> barcode("{B" . "012ABCDabcd", Printer::BARCODE_CODE128); - $this -> checkOutput("\x1b@\x1dkI\x0d{B012ABCDabcd"); - } - - public function testBarcodeCode128ValidC() - { - $this -> printer -> barcode("{C" . chr(21) . chr(32) . chr(43), Printer::BARCODE_CODE128); - $this -> checkOutput("\x1b@\x1dkI\x05{C\x15 +"); - } - - public function testBarcodeCode128NoCodeSet() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> barcode("ABCD", Printer::BARCODE_CODE128); - } - - /* Pulse */ - function testPulseDefault() - { - $this -> printer -> pulse(); - $this -> checkOutput("\x1b@\x1bp0 printer -> pulse(1); - $this -> checkOutput("\x1b@\x1bp1 printer -> pulse(0, 2, 2); - $this -> checkOutput("\x1b@\x1bp0\x01\x01"); - } - - function testPulseOddMs() - { - $this -> printer -> pulse(0, 3, 3); // Should be rounded down and give same output - $this -> checkOutput("\x1b@\x1bp0\x01\x01"); - } - - function testPulseTooHigh() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> pulse(0, 512, 2); - } - - function testPulseTooLow() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> pulse(0, 0, 2); - } - - function testPulseNotANumber() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> pulse("fish"); - } - - /* Set reverse */ - public function testSetReverseColorsDefault() - { - $this -> printer -> setReverseColors(); - $this -> checkOutput("\x1b@\x1dB\x01"); - } - - public function testSetReverseColorsOn() - { - $this -> printer -> setReverseColors(true); - $this -> checkOutput("\x1b@\x1dB\x01"); - } - - public function testSetReverseColorsOff() - { - $this -> printer -> setReverseColors(false); - $this -> checkOutput("\x1b@\x1dB\x00"); - } - - public function testSetReverseColorsNonBoolean() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setReverseColors(7); - } - - /* Bit image print */ - public function testBitImageBlack() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_black.png"); - $this -> printer -> bitImage($img); - $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x01\x00\x80"); - } - - public function testBitImageWhite() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_white.png"); - $this -> printer -> bitImage($img); - $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x01\x00\x00"); - } - - public function testBitImageBoth() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/black_white.png"); - $this -> printer -> bitImage($img); - $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x02\x00\xc0\x00"); - } - - public function testBitImageTransparent() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/black_transparent.png"); - $this -> printer -> bitImage($img); - $this -> checkOutput("\x1b@\x1dv0\x00\x01\x00\x02\x00\xc0\x00"); - } - - /* Bit image column format */ - public function testBitImageColumnFormatBlack() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_black.png"); - $this -> printer -> bitImageColumnFormat($img); - $this -> checkOutput("\x1b@\x1b3\x10\x1b*!\x01\x00\x80\x00\x00\x0a\x1b2"); - } - - public function testBitImageColumnFormatWhite() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_white.png"); - $this -> printer -> bitImageColumnFormat($img); - $this -> checkOutput("\x1b@\x1b3\x10\x1b*!\x01\x00\x00\x00\x00\x0a\x1b2"); - } - - public function testBitImageColumnFormatBoth() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/black_white.png"); - $this -> printer -> bitImageColumnFormat($img); - $this -> checkOutput("\x1b@\x1b3\x10\x1b*!\x02\x00\x80\x00\x00\x80\x00\x00\x0a\x1b2"); - } - - public function testBitImageColumnFormatTransparent() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/black_transparent.png"); - $this -> printer -> bitImageColumnFormat($img); - $this -> checkOutput("\x1b@\x1b3\x10\x1b*!\x02\x00\x80\x00\x00\x80\x00\x00\x0a\x1b2"); - } - - /* Graphics print */ - public function testGraphicsWhite() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_white.png"); - $this -> printer -> graphics($img); - $this -> checkOutput("\x1b@\x1d(L\x0b\x000p0\x01\x011\x01\x00\x01\x00\x00\x1d(L\x02\x0002"); - } - - public function testGraphicsBlack() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/canvas_black.png"); - $this -> printer -> graphics($img); - $this -> checkOutput("\x1b@\x1d(L\x0b\x000p0\x01\x011\x01\x00\x01\x00\x80\x1d(L\x02\x0002"); - } - - public function testGraphicsBoth() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/black_white.png"); - $this -> printer -> graphics($img); - $this -> checkOutput("\x1b@\x1d(L\x0c\x000p0\x01\x011\x02\x00\x02\x00\xc0\x00\x1d(L\x02\x0002"); - } - - public function testGraphicsTransparent() - { - $this -> requireGraphicsLibrary(); - $img = EscposImage::load(dirname(__FILE__)."/resources/black_transparent.png"); - $this -> printer -> graphics($img); - $this -> checkOutput("\x1b@\x1d(L\x0c\x000p0\x01\x011\x02\x00\x02\x00\xc0\x00\x1d(L\x02\x0002"); - } - - /* PDF417 code */ - public function testPdf417CodeDefaults() - { - $this -> printer -> pdf417Code("1234"); - $this -> checkOutput("\x1b@\x1d(k\x03\x000F\x00\x1d(k\x03\x000A\x00\x1d(k\x03\x000C\x03\x1d(k\x03\x000D\x03\x1d(k\x04\x000E1\x01\x1d(k\x07\x000P01234\x1d(k\x03\x000Q0"); - } - - public function testPdf417CodeEmpty() - { - $this -> printer -> pdf417Code(''); - $this -> checkOutput("\x1b@"); // No commands actually sent - } - - public function testPdf417CodeNotSupported() - { - $this -> setExpectedException('Exception'); - $profile = SimpleCapabilityProfile::getInstance(); - $this -> printer = new Printer($this -> outputConnector, $profile); - $this -> printer -> pdf417Code("1234"); - } - - public function testPdf417CodeChangeGeometry() - { - // 7-dot wide, 4-times height, 4 data columns - $this -> printer -> pdf417Code("1234", 7, 4, 4); - $this -> checkOutput("\x1b@\x1d(k\x03\x000F\x00\x1d(k\x03\x000A\x04\x1d(k\x03\x000C\x07\x1d(k\x03\x000D\x04\x1d(k\x04\x000E1\x01\x1d(k\x07\x000P01234\x1d(k\x03\x000Q0"); - } - - public function testPdf417CodeChangeErrorCorrection() - { - $this -> printer -> pdf417Code("1234", 3, 3, 0, 0.5); - $this -> checkOutput("\x1b@\x1d(k\x03\x000F\x00\x1d(k\x03\x000A\x00\x1d(k\x03\x000C\x03\x1d(k\x03\x000D\x03\x1d(k\x04\x000E1\x05\x1d(k\x07\x000P01234\x1d(k\x03\x000Q0"); - } - - public function testPdf417CodeChangeErrorCorrectionOutOfRange() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> pdf417Code("1234", 3, 3, 0, 5.0); - } - - public function testPdf417CodeChangeErrorCorrectionInvalid() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> pdf417Code("1234", 3, 3, 0, "Foobar"); - } - - public function testPdf417CodeChangeOption() - { - // Use the alternate truncated format - $this -> printer -> pdf417Code("1234", 3, 3, 0, 0.1, Printer::PDF417_TRUNCATED); - $this -> checkOutput("\x1b@\x1d(k\x03\x000F\x01\x1d(k\x03\x000A\x00\x1d(k\x03\x000C\x03\x1d(k\x03\x000D\x03\x1d(k\x04\x000E1\x01\x1d(k\x07\x000P01234\x1d(k\x03\x000Q0"); - } - - /* QR code */ - public function testQRCodeDefaults() - { - // Test will fail if default values change - $this -> printer -> qrCode("1234"); - $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); - } - - public function testQRCodeDefaultsAreCorrect() - { - // Below tests assume that defaults are as written here (output string should be same as above) - $this -> printer -> qrCode("1234", Printer::QR_ECLEVEL_L, 3, Printer::QR_MODEL_2); - $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); - } - - public function testQRCodeEmpty() - { - $this -> printer -> qrCode(''); - $this -> checkOutput("\x1b@"); // No commands actually sent - } - - public function testQRCodeChangeEC() - { - $this -> printer -> qrCode("1234", Printer::QR_ECLEVEL_H); - $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E3\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); - } - - public function testQRCodeChangeSize() - { - $this -> printer -> qrCode("1234", Printer::QR_ECLEVEL_L, 7); - $this -> checkOutput("\x1b@\x1d(k\x04\x001A2\x00\x1d(k\x03\x001C\x07\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); - } - - public function testQRCodeChangeModel() - { - $this -> printer -> qrCode("1234", Printer::QR_ECLEVEL_L, 3, Printer::QR_MODEL_1); - $this -> checkOutput("\x1b@\x1d(k\x04\x001A1\x00\x1d(k\x03\x001C\x03\x1d(k\x03\x001E0\x1d(k\x07\x001P01234\x1d(k\x03\x001Q0"); - } - - /* Feed form - Required on page-mode only printers */ - public function testFeedForm() - { - $this -> printer -> feedForm(); - $this -> checkOutput("\x1b@\x0c"); - } - - /* Release */ - public function testRelease() - { - $this -> printer -> release(); - $this -> checkOutput("\x1b@\x1b\x71"); - } - - /* Set text size */ - public function testSetTextSizeNormal() - { - $this -> printer -> setTextSize(1, 1); - $this -> checkOutput("\x1b@\x1d!\x00"); - } - - public function testSetTextSizeWide() - { - $this -> printer -> setTextSize(4, 1); - $this -> checkOutput("\x1b@\x1d!0"); - } - - public function testSetTextSizeNarrow() - { - $this -> printer -> setTextSize(1, 4); - $this -> checkOutput("\x1b@\x1d!\x03"); - } - - public function testSetTextSizeLarge() - { - $this -> printer -> setTextSize(4, 4); - $this -> checkOutput("\x1b@\x1d!3"); - } - - public function testSetTextSizeInvalid() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setTextSize(0, 9); - } - - /* Set color */ - public function testSetColorDefault() - { - $this -> printer -> setColor(Printer::COLOR_1); - $this -> checkOutput("\x1b@\x1br\x00"); - } - - public function testSetColorAlternative() - { - $this -> printer -> setColor(Printer::COLOR_2); - $this -> checkOutput("\x1b@\x1br\x01"); - } - - public function testSetColorInvalid() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setColor(3); - } - - /* Set line spacing */ - public function testSetLineSpacingDefault() - { - $this -> printer -> setLineSpacing(); - $this -> checkOutput("\x1b@\x1b2"); - } - - public function testSetLineSpacingInvalid() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setLineSpacing(300); - } - - public function testSetLineSpacingSmaller() - { - $this -> printer -> setLineSpacing(16); - $this -> checkOutput("\x1b@\x1b3\x10"); - } - - public function testSetLineSpacingLarger() - { - $this -> printer -> setLineSpacing(32); - $this -> checkOutput("\x1b@\x1b3\x20"); - } - - /* Set print width */ - public function testSetPrintWidthDefault() - { - $this -> printer -> setPrintWidth(); - $this -> checkOutput("\x1b@\x1dW\x00\x02"); - } - - public function testSetPrintWidthNarrow() - { - $this -> printer -> setPrintWidth(400); - $this -> checkOutput("\x1b@\x1dW\x90\x01"); - } - - public function testSetPrintWidthInvalid() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setPrintWidth(0); - } - - /* Set print left margin */ - public function testSetPrintLeftMarginDefault() - { - $this -> printer -> setPrintLeftMargin(); - $this -> checkOutput("\x1b@\x1dL\x00\x00"); - } - - public function testSetPrintLeftMarginWide() - { - $this -> printer -> setPrintLeftMargin(32); - $this -> checkOutput("\x1b@\x1dL\x20\x00"); - } - - public function testPrintLeftMarginInvalid() - { - $this -> setExpectedException('InvalidArgumentException'); - $this -> printer -> setPrintLeftMargin(70000); - $this -> checkOutput(); - } - - /* Upside-down print */ - public function testSetUpsideDown() - { - $this -> printer -> setUpsideDown(true); - $this -> checkOutput("\x1b@\x1b{\x01"); - } -} - -/* - * For testing that string-castable objects are handled - */ -class FooBar -{ - private $foo; - public function __construct($foo) - { - $this -> foo = $foo; - } - - public function __toString() - { - return $this -> foo; - } -} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/FilePrintConnectorTest.php b/htdocs/includes/mike42/escpos-php/test/unit/FilePrintConnectorTest.php deleted file mode 100644 index 63728717017..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/FilePrintConnectorTest.php +++ /dev/null @@ -1,26 +0,0 @@ - finalize(); - $connector -> finalize(); // Silently do nothing if printer already closed - unlink($tmpfname); - } - - public function testReadAfterClose() - { - // Should attempt to send data to the local printer by writing to it - $this -> setExpectedException('Exception'); - $tmpfname = tempnam("/tmp", "php"); - $connector = new FilePrintConnector($tmpfname); - $connector -> finalize(); - $connector -> write("Test"); - unlink($tmpfname); - } -} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/GdEscposImageTest.php b/htdocs/includes/mike42/escpos-php/test/unit/GdEscposImageTest.php deleted file mode 100644 index da755f7b9ee..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/GdEscposImageTest.php +++ /dev/null @@ -1,101 +0,0 @@ - setExpectedException('Exception'); - $this -> loadAndCheckImg('not a real file.png', 1, 1, null, null); - } - - /** - * @medium - */ - public function testGdEmpty() - { - $this -> loadAndCheckImg(null, 0, 0, "", array()); - } - - /** - * @medium - */ - public function testGdBlack() - { - foreach (array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('canvas_black.' . $format, 1, 1, "\x80", array("\x80")); - } - } - - /** - * @medium - */ - public function testGdBlackTransparent() - { - foreach (array('png', 'gif') as $format) { - $this -> loadAndCheckImg('black_transparent.' . $format, 2, 2, "\xc0\x00", array("\x80\x80")); - } - } - - /** - * @medium - */ - public function testGdBlackWhite() - { - foreach (array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('black_white.' . $format, 2, 2, "\xc0\x00", array("\x80\x80")); - } - } - - /** - * @medium - */ - public function testGdWhite() - { - foreach (array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('canvas_white.' . $format, 1, 1, "\x00", array("\x00")); - } - } - - /** - * Load an EscposImage with (optionally) certain libraries disabled and run a check. - */ - private function loadAndCheckImg($fn, $width, $height, $rasterFormat = null, $columnFormat = null) - { - if (!EscposImage::isGdLoaded()) { - $this -> markTestSkipped("imagick plugin is required for this test"); - } - $onDisk = ($fn === null ? null : (dirname(__FILE__) . "/resources/$fn")); - // With optimisations - $imgOptimised = new GdEscposImage($onDisk, true); - $this -> checkImg($imgOptimised, $width, $height, $rasterFormat, $columnFormat); - // ... and without - $imgUnoptimised = new GdEscposImage($onDisk, false); - $this -> checkImg($imgUnoptimised, $width, $height, $rasterFormat, $columnFormat); - } - - /** - * Check image against known width, height, output. - */ - private function checkImg(EscposImage $img, $width, $height, $rasterFormatExpected = null, $columnFormatExpected = null) - { - $rasterFormatActual = $img -> toRasterFormat(); - $columnFormatActual = $img -> toColumnFormat(); - if ($rasterFormatExpected === null) { - echo "\nImage was: " . $img -> getWidth() . "x" . $img -> getHeight() . ", raster data \"" . friendlyBinary($rasterFormatActual) . "\""; - } - if ($columnFormatExpected === null) { - echo "\nImage was: " . $img -> getWidth() . "x" . $img -> getHeight() . ", column data \"" . friendlyBinary($columnFormatActual) . "\""; - } - $this -> assertTrue($img -> getHeight() == $height); - $this -> assertTrue($img -> getWidth() == $width); - $this -> assertTrue($rasterFormatExpected === $rasterFormatActual); - $this -> assertTrue($columnFormatExpected === $columnFormatActual); - } -} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/ImagickEscposImageTest.php b/htdocs/includes/mike42/escpos-php/test/unit/ImagickEscposImageTest.php deleted file mode 100644 index 76831f761c6..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/ImagickEscposImageTest.php +++ /dev/null @@ -1,142 +0,0 @@ - setExpectedException('Exception'); - $this -> loadAndCheckImg('not a real file.png', 1, 1, null, null); - } - - /** - * @medium - */ - public function testImagickEmpty() - { - $this -> loadAndCheckImg(null, 0, 0, "", array()); - } - - /** - * @medium - */ - public function testImagickBlack() - { - foreach (array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('canvas_black.' . $format, 1, 1, "\x80", array("\x80")); - } - } - - /** - * @medium - */ - public function testImagickBlackTransparent() - { - foreach (array('png', 'gif') as $format) { - $this -> loadAndCheckImg('black_transparent.' . $format, 2, 2, "\xc0\x00", array("\x80\x80")); - } - } - - /** - * @medium - */ - public function testImagickBlackWhite() - { - foreach (array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('black_white.' . $format, 2, 2, "\xc0\x00", array("\x80\x80")); - } - } - - /** - * @medium - */ - public function testImagickBlackWhiteTall() - { - // We're very interested in correct column format chopping here at 8 pixels - $this -> loadAndCheckImg('black_white_tall.png', 2, 16, - "\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x00\x00\x00\x00\x00\x00\x00\x00", array("\xff\xff", "\x00\x00")); - } - - /** - * @medium - */ - public function testImagickWhite() - { - foreach (array('png', 'jpg', 'gif') as $format) { - $this -> loadAndCheckImg('canvas_white.' . $format, 1, 1, "\x00", array("\x00")); - } - } - - /** - * PDF test - load tiny PDF and check for well-formedness - * These are also skipped if you don't have imagick - * @medium - */ - public function testPdfAllPages() - { - $this -> loadAndCheckPdf('doc.pdf', 1, 1, array("\x00", "\x80"), array(array("\x00"), array("\x80"))); - } - - public function testPdfBadFilename() - { - $this -> setExpectedException('Exception'); - $this -> loadAndCheckPdf('not a real file', 1, 1, array(), array()); - } - - /** - * Load an EscposImage and run a check. - */ - private function loadAndCheckImg($fn, $width, $height, $rasterFormat = null, $columnFormat = null) - { - if (!EscposImage::isImagickLoaded()) { - $this -> markTestSkipped("imagick plugin is required for this test"); - } - $onDisk = ($fn === null ? null : (dirname(__FILE__) . "/resources/$fn")); - // With optimisations - $imgOptimised = new ImagickEscposImage($onDisk, true); - $this -> checkImg($imgOptimised, $width, $height, $rasterFormat, $columnFormat); - // ... and without - $imgUnoptimised = new ImagickEscposImage($onDisk, false); - $this -> checkImg($imgUnoptimised, $width, $height, $rasterFormat, $columnFormat); - } - - /** - * Same as above, loading document and checking pages against some expected values. - */ - private function loadAndCheckPdf($fn, $width, $height, array $rasterFormat = null, array $columnFormat = null) - { - if (!EscposImage::isImagickLoaded()) { - $this -> markTestSkipped("imagick plugin required for this test"); - } - $pdfPages = ImagickEscposImage::loadPdf(dirname(__FILE__) . "/resources/$fn", $width); - $this -> assertTrue(count($pdfPages) == count($rasterFormat), "Got back wrong number of pages"); - foreach ($pdfPages as $id => $img) { - $this -> checkImg($img, $width, $height, $rasterFormat[$id], $columnFormat[$id]); - } - } - - /** - * Check image against known width, height, output. - */ - private function checkImg(EscposImage $img, $width, $height, $rasterFormatExpected = null, $columnFormatExpected = null) - { - $rasterFormatActual = $img -> toRasterFormat(); - $columnFormatActual = $img -> toColumnFormat(); - if ($rasterFormatExpected === null) { - echo "\nImage was: " . $img -> getWidth() . "x" . $img -> getHeight() . ", raster data \"" . friendlyBinary($rasterFormatActual) . "\""; - } - if ($columnFormatExpected === null) { - echo "\nImage was: " . $img -> getWidth() . "x" . $img -> getHeight() . ", column data \"" . friendlyBinary($columnFormatActual) . "\""; - } - $this -> assertEquals($height , $img -> getHeight()); - $this -> assertEquals($width, $img -> getWidth()); - $this -> assertEquals($rasterFormatExpected, $rasterFormatActual, "Raster format did not match expected"); - $this -> assertEquals($columnFormatExpected, $columnFormatActual, "Column format did not match expected"); - } -} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/LegacyCapabilityProfileTest.php b/htdocs/includes/mike42/escpos-php/test/unit/LegacyCapabilityProfileTest.php deleted file mode 100644 index 360dee90fe7..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/LegacyCapabilityProfileTest.php +++ /dev/null @@ -1,79 +0,0 @@ - profiles = array( - 'Mike42\Escpos\CapabilityProfiles\DefaultCapabilityProfile', - 'Mike42\Escpos\CapabilityProfiles\EposTepCapabilityProfile', - 'Mike42\Escpos\CapabilityProfiles\SimpleCapabilityProfile', - 'Mike42\Escpos\CapabilityProfiles\StarCapabilityProfile', - 'Mike42\Escpos\CapabilityProfiles\P822DCapabilityProfile'); - $this -> checklist = array(); - foreach ($this -> profiles as $profile) { - $this-> checklist[] = $profile::getInstance(); - } - } - - function testSupportedCodePages() - { - foreach ($this -> checklist as $obj) { - $check = $obj -> getCodePages(); - $this -> assertTrue(is_array($check) && isset($check[0])); - foreach ($check as $num => $page) { - $this -> assertTrue(is_numeric($num)); - } - } - } - - function testText() { - /* Smoke test over text rendering with each profile. - * Just makes sure we can attempt to print 'hello world' and a non-ASCII - * char without anything blowing up */ - foreach ($this -> checklist as $obj) { - $connector = new DummyPrintConnector(); - $printer = new Printer($connector, $obj); - $printer -> text("Hello world €\n"); - $printer -> close(); - // Check for character cache - $profileName = $obj -> getId(); - $expected = "Characters-$profileName.ser.z"; - $filename = __DIR__ . "/../../src/Mike42/Escpos/PrintBuffers/cache/$expected"; - $this -> assertFileExists($filename); - } - } - - function testSupportsBitImageRaster() - { - foreach ($this -> checklist as $obj) { - $check = $obj -> getSupportsBitImageRaster(); - $this -> assertTrue(is_bool($check)); - } - } - - function testSupportsGraphics() - { - foreach ($this -> checklist as $obj) { - $check = $obj -> getSupportsGraphics(); - $this -> assertTrue(is_bool($check)); - } - } - - function testSupportsQrCode() - { - foreach ($this -> checklist as $obj) { - $check = $obj -> getSupportsQrCode(); - $this -> assertTrue(is_bool($check)); - } - } -} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/UriPrintConnectorTest.php b/htdocs/includes/mike42/escpos-php/test/unit/UriPrintConnectorTest.php deleted file mode 100644 index 715dd8d77de..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/UriPrintConnectorTest.php +++ /dev/null @@ -1,59 +0,0 @@ - write("AAA"); - $connector -> finalize(); - $this -> assertEquals("AAA", file_get_contents($filename)); - $this -> assertEquals('Mike42\Escpos\PrintConnectors\FilePrintConnector', get_class($connector)); - unlink($filename); - } - - /** - * @expectedException PHPUnit_Framework_Error - * @expectedExceptionMessage not finalized - */ - public function testSmb() - { - $connector = UriPrintConnector::get("smb://windows/printer"); - $this -> assertEquals('Mike42\Escpos\PrintConnectors\WindowsPrintConnector', get_class($connector)); - // We expect that this will throw an exception, we can't - // realistically print to a real printer in this test though... :) - $connector -> __destruct(); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Malformed connector URI - */ - public function testBadUri() - { - $connector = UriPrintConnector::get("foooooo"); - } - - /** - * @expectedException Exception - * @expectedExceptionMessage Connection refused - */ - public function testNetwork() - { - // Port should be closed so we can catch an error and move on - $connector = UriPrintConnector::get("tcp://localhost:45987/"); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage URI sheme is not supported: ldap:// - */ - public function testUnsupportedUri() - { - // Try to print to something silly - $connector = UriPrintConnector::get("ldap://host:1234/"); - } -} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/WindowsPrintConnectorTest.php b/htdocs/includes/mike42/escpos-php/test/unit/WindowsPrintConnectorTest.php deleted file mode 100644 index f6e10fae5f5..00000000000 --- a/htdocs/includes/mike42/escpos-php/test/unit/WindowsPrintConnectorTest.php +++ /dev/null @@ -1,304 +0,0 @@ - getMockConnector("LPT1", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> once()) - -> method('runWrite') - -> with($this -> equalTo(''), $this -> equalTo("LPT1")); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } - - public function testLptMac() - { - // Cannot print to local printer on Mac with this connector - $this -> setExpectedException('BadMethodCallException'); - $connector = $this -> getMockConnector("LPT1", WindowsPrintConnector::PLATFORM_MAC); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } - - public function testLptLinux() - { - // Cannot print to local printer on Linux with this connector - $this -> setExpectedException('BadMethodCallException'); - $connector = $this -> getMockConnector("LPT1", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } - - public function testComWindows() - { - // Simple file write - $connector = $this -> getMockConnector("COM1", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> once()) - -> method('runWrite') - -> with($this -> equalTo(''), $this -> equalTo("COM1")); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } - - public function testComMac() - { - // Cannot print to local printer on Mac with this connector - $this -> setExpectedException('BadMethodCallException'); - $connector = $this -> getMockConnector("COM1", WindowsPrintConnector::PLATFORM_MAC); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } - - public function testComLinux() - { - // Cannot print to local printer on Linux with this connector - $this -> setExpectedException('BadMethodCallException'); - $connector = $this -> getMockConnector("COM1", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } - - public function testLocalShareWindows() - { - $connector = $this -> getMockConnector("Printer", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> once()) - -> method('runCopy') - -> with($this -> anything(), $this -> stringContains('\\Printer')); - $connector -> finalize(); - } - - public function testSharedPrinterWindows() - { - $connector = $this -> getMockConnector("smb://example-pc/Printer", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> once()) - -> method('runCopy') - -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); - $connector -> finalize(); - } - - public function testSharedPrinterWindowsUsername() - { - $connector = $this -> getMockConnector("smb://bob@example-pc/Printer", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('net use \'\\\\example-pc\\Printer\' \'/user:bob\'')); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> once()) - -> method('runCopy') - -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); - $connector -> finalize(); - } - - public function testSharedPrinterWindowsUsernameDomain() - { - $connector = $this -> getMockConnector("smb://bob@example-pc/home/Printer", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('net use \'\\\\example-pc\\Printer\' \'/user:home\\bob\'')); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> once()) - -> method('runCopy') - -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); - $connector -> finalize(); - } - - public function testSharedPrinterWindowsUsernamePassword() - { - $connector = $this -> getMockConnector("smb://bob:secret@example-pc/Printer", WindowsPrintConnector::PLATFORM_WIN); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('net use \'\\\\example-pc\\Printer\' \'/user:bob\' \'secret\'')); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> once()) - -> method('runCopy') - -> with($this -> anything(), $this -> equalTo('\\\\example-pc\\Printer')); - $connector -> finalize(); - } - - public function testSharedPrinterMac() - { - // Not implemented - $this -> setExpectedException('Exception'); - $connector = $this -> getMockConnector("smb://Guest@example-pc/Printer", WindowsPrintConnector::PLATFORM_MAC); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> expects($this -> exactly(0)) - -> method('runCommand'); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> finalize(); - } - - public function testSharedPrinterLinux() - { - $connector = $this -> getMockConnector("smb://example-pc/Printer", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('smbclient \'//example-pc/Printer\' -c \'print -\' -N -m SMB2')); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> finalize(); - } - - public function testSharedPrinterLinuxUsername() - { - $connector = $this -> getMockConnector("smb://bob@example-pc/Printer", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('smbclient \'//example-pc/Printer\' -U \'bob\' -c \'print -\' -N -m SMB2')); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> finalize(); - } - - public function testSharedPrinterLinuxUsernameDomain() - { - $connector = $this -> getMockConnector("smb://bob@example-pc/home/Printer", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('smbclient \'//example-pc/Printer\' -U \'home\\bob\' -c \'print -\' -N -m SMB2')); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> finalize(); - } - - public function testSharedPrinterLinuxUsernamePassword() - { - $connector = $this -> getMockConnector("smb://bob:secret@example-pc/Printer", WindowsPrintConnector::PLATFORM_LINUX); - $connector -> expects($this -> once()) - -> method('runCommand') - -> with($this -> equalTo('smbclient \'//example-pc/Printer\' \'secret\' -U \'bob\' -c \'print -\' -m SMB2')); - $connector -> expects($this -> exactly(0)) - -> method('runCopy'); - $connector -> expects($this -> exactly(0)) - -> method('runWrite'); - $connector -> finalize(); - } - - private function getMockConnector($path, $platform) - { - $stub = $this -> getMockBuilder('Mike42\Escpos\PrintConnectors\WindowsPrintConnector') - -> setMethods(array('runCopy', 'runCommand', 'getCurrentPlatform', 'runWrite')) - -> disableOriginalConstructor() - -> getMock(); - $stub -> method('runCommand') - -> willReturn(0); - $stub -> method('runCopy') - -> willReturn(true); - $stub -> method('runWrite') - -> willReturn(true); - $stub -> method('getCurrentPlatform') - -> willReturn($platform); - $stub -> __construct($path); - return $stub; - } - - /** - * Test for correct identification of bogus or non-supported Samba strings. - */ - public function testSambaRegex() - { - $good = array("smb://foo/bar", - "smb://foo/bar baz", - "smb://bob@foo/bar", - "smb://bob:secret@foo/bar", - "smb://foo-computer/FooPrinter", - "smb://foo-computer/workgroup/FooPrinter", - "smb://foo-computer/Foo-Printer", - "smb://foo-computer/workgroup/Foo-Printer", - "smb://foo-computer/Foo Printer", - "smb://foo-computer.local/Foo Printer", - "smb://127.0.0.1/abcd" - ); - $bad = array("", - "http://google.com", - "smb:/foo/bar", - "smb://", - "smb:///bar", - "smb://@foo/bar", - "smb://bob:@foo/bar", - "smb://:secret@foo/bar", - "smb://foo/bar/baz/quux", - "smb://foo-computer//FooPrinter"); - foreach ($good as $item) { - $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_SMB, $item) == 1, "Windows samba regex should pass '$item'."); - } - foreach ($bad as $item) { - $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_SMB, $item) != 1, "Windows samba regex should fail '$item'."); - } - } - - public function testPrinterNameRegex() - { - $good = array("a", - "ab", - "a b", - "a-b", - "Abcd Efg-", - "-a", - "OK1" - ); - $bad = array("", - " ", - "a ", - " a", - " a ", - "a/B", - "A:b" - ); - foreach ($good as $item) { - $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_PRINTERNAME, $item) == 1, "Windows printer name regex should pass '$item'."); - } - foreach ($bad as $item) { - $this -> assertTrue(preg_match(WindowsPrintConnector::REGEX_PRINTERNAME, $item) != 1, "Windows printer name regex should fail '$item'."); - } - } -} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/black_transparent.gif b/htdocs/includes/mike42/escpos-php/test/unit/resources/black_transparent.gif deleted file mode 100644 index 6c54bad9eea0d1cd39e55504d181b6607b6028d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmZ?wbhEHbWMW`q_`m=Kia%Kx85kHD6#of27o{eaq^2m8XO?6rxO@5rFzA33fs`{a LF|!D<>&kwgnNLhfd<&=O9H5Y7iEBiObAE1aYF-J0b5UwyNotBh zd1gt5g1e`0KzJjcI8YJ4r;B3<$MxitgoGdG8+aJ_#26XR&Dh)tlw$C7^>bP0l+XkK D$`C0q diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.bmp b/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.bmp deleted file mode 100644 index 0acbf66506f8ae152df4bfabc835e03505112878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 ycmZ?r?P7p{Dj<~u#7t1k$RGih5CD?G+z<>F01{5_LB%jOu{6kBWbhvh5F!BXKMAt{ diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.gif b/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.gif deleted file mode 100644 index 0a044a671f59c3c4a5f859eb6a09a71d809be683..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmZ?wbhEHbWMW`q_`t{j1poj4SNzEWVlgQG6Lc<0O)N=GQ7F$W$xv|j^bKIp0m*=r NGcYl;2(dC)0{}064pjgE diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.jpg b/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.jpg deleted file mode 100644 index 6539cece59e6c5ce41bf50f1ced121096ead5aed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmex=>ukC3pCfH06P@c#e52OWR?s5zX<@pgBjQW diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.png b/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white.png deleted file mode 100644 index 33ba331fa1e8642247b0cd1e48e03e7bb24a624b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^Od!kwBL7~QRScv!3p^r$G`BDaGcwGYBLNg-FY)ws zWxvnN$08&+x9_71P)M@GHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypc~Fs7TDy o#W95AdU65;{Q3Xio|&1MfuD`(|Am>%Vn7uPp00i_>zopr06?22>i_@% diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white_tall.png b/htdocs/includes/mike42/escpos-php/test/unit/resources/black_white_tall.png deleted file mode 100644 index 7e0869dcbed532acfd38204f6539d22d93b515ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Ea0U|e_vV07rI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfBW7Mkas6JV#5+JC+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vjm0>Eal|aXmRff#2ZY|NrwF8yh(fDbHhKSlq|V+q`4SH;`seS3j3^P6uW{_V`Jfl cv@|t`v^2H_GiP$za9w9siRm{&HU*ox0Ab1$MF0Q* diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_black.gif b/htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_black.gif deleted file mode 100644 index 49b19dbc179f5995e4ff5338e7039d3a47b4a888..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 zcmZ?wbhEHbWMp7u_`t{j1poj4SNzEWVlgQG=l0A^Oi%SqOwUZt=1ot`%}um5&@(YL UF*Rk-0jU6KV_;%(VPvod0K2{rbpQYW diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_black.jpg b/htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_black.jpg deleted file mode 100644 index d059f431b267596da878937214280915c89f51ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmZ9GK@P$|3!+y-7X048hz>mPHCTnRfR>gOhxmUMTR+ao=IO?3^7bqx(d49u-eEv*bK owG9oe3=Ayq=dVT4kei>9nO2EggGbYKL7)Z(Pgg&ebxsLQ05fwqK>z>% diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_white.bmp b/htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_white.bmp deleted file mode 100644 index e47e0ef617583acde08ae6d8ddf8045fb1a4e55e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmZ?r?PGv|E+AC{#Eft(0hV9^ljy{M1_lTMN&I(m4=Qdr^i?Bahn%QF>uW{_V`Jfl hv@|t`v^2H_GiP$za9w9siRm{&HU-_>|Ns9p003&i7eW94 diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_white.gif b/htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_white.gif deleted file mode 100644 index 7881ce629acf8d6918eb5ac07169bc67b99a904b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 zcmZ?wbhEHbWMp7u_`t{j1poj4SNzEWVlgQG=l0A^Oi%SqOwUZt=1ot`%}um5&@(YL UF*Rk-0jU6KV_;(PVPvod0K480eEnh z;e>7%gm;ZT^#P}}Pr|CgB3h=RdCVe19mdJ5nwEK)ZE4y3hRm@?RN;3VV)+M&*8W@g M3*4UIi0j**UsypDH2?qr diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_white.png b/htdocs/includes/mike42/escpos-php/test/unit/resources/canvas_white.png deleted file mode 100644 index 4231a4bb5400c5554d146b0f8b32b717c109c1bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^j35jm7|ip2ssJgLbVpxD28NCO++aH!(Ecb readImage("doc.pdf[5]"); - $im -> destroy(); -} catch (ImagickException $e) { - echo "Error: " . $e -> getMessage() . "\n"; -} - -$im = new Imagick(); -try { - ob_start(); - @$im -> readImage("doc.pdf[5]"); - ob_end_clean(); - $im -> destroy(); -} catch (ImagickException $e) { - echo "Error: " . $e -> getMessage() . "\n"; -} diff --git a/htdocs/includes/mike42/escpos-php/test/unit/resources/doc.pdf b/htdocs/includes/mike42/escpos-php/test/unit/resources/doc.pdf deleted file mode 100644 index 22247b918dbbcbfb0981d9442c966c99a47361b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6681 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 bQ5=#CZ9g8L&gBcKi39DzR8)+usIdP4$C)m7 From d797ea590e94770d77f7e08563540c5d482eeaca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 00:50:58 +0100 Subject: [PATCH 847/980] rework an experimental module --- COPYRIGHT | 8 +- htdocs/admin/receiptprinter.php | 37 ++--- htdocs/core/class/dolreceiptprinter.class.php | 131 ++++++++++-------- htdocs/langs/en_US/receiptprinter.lang | 3 + htdocs/takepos/admin/setup.php | 10 ++ htdocs/takepos/admin/terminal.php | 15 ++ htdocs/takepos/invoice.php | 21 ++- htdocs/takepos/takepos.php | 22 ++- 8 files changed, 161 insertions(+), 86 deletions(-) diff --git a/COPYRIGHT b/COPYRIGHT index 1af09e6fdaf..fe707c1d63d 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -2,7 +2,7 @@ License ------- -Dolibarr is released under the terms of the GNU General Public License as +Dolibarr is released under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version (GPL-3+). More information: https://www.gnu.org/licenses/gpl-3.0.txt @@ -15,13 +15,13 @@ PHP libraries: AdoDb-Date 0.36 Modified BSD License Yes Date convertion (not into rpm package) CKEditor 4.12.1 LGPL-2.1+ Yes Editor WYSIWYG EvalMath 1.0 BSD Yes Safe math expressions evaluation -Escpos-php ? MIT License Yes Thermal receipt printer library, for use with ESC/POS compatible printers +Escpos-php 2.2 MIT License Yes Thermal receipt printer library, for use with ESC/POS compatible printers GeoIP 1.4 LGPL-2.1+ Yes Sample code to make geoip convert (not into deb package) Mobiledetect 2.8.33 MIT License Yes Detect mobile devices browsers NuSoap 0.9.5 LGPL 2.1+ Yes Library to develop SOAP Web services (not into rpm and deb package) PEAR Mail_MIME 1.8.9 BSD Yes NuSoap dependency ParseDown 1.6 MIT License Yes Markdown parser -PHPDebugBar 1.15.0 MIT License Yes Used only by the module "debugbar" for developers +PHPDebugBar 1.15.0 MIT License Yes Used only by the module "debugbar" for developers PHPExcel 1.8.1 LGPL-2.1+ Yes Read/Write XLS files, read ODS files PHPSpreadSheet ? LGPL-2.1+ Yes Read/Write XLS files, read ODS files php-iban 1.4.7 LGPL-3+ Yes Parse and validate IBAN (and IIBAN) bank account information in PHP @@ -37,7 +37,7 @@ TCPDF 6.3.2 LGPL-3+ Yes TCPDI 1.0.0 LGPL-3+ / Apache 2.0 Yes FPDI replacement JS libraries: -Ace 1.4.6 BSD Yes JS library to get code syntaxique coloration in a textarea. +Ace 1.4.6 BSD Yes JS library to get code syntaxique coloration in a textarea. jQuery 3.4.1 MIT License Yes JS library jQuery UI 1.12.1 GPL and MIT License Yes JS library plugin UI jQuery select2 4.0.5 GPL and Apache License Yes JS library plugin for sexier multiselect diff --git a/htdocs/admin/receiptprinter.php b/htdocs/admin/receiptprinter.php index 42b0ecb9ea9..e01fc4402a8 100644 --- a/htdocs/admin/receiptprinter.php +++ b/htdocs/admin/receiptprinter.php @@ -174,14 +174,19 @@ if ($action == 'testtemplate' && $user->admin) { // } // if (! $error) { - // // test - // $ret = $printer->sendTestToPrinter($printerid); - // if ($ret == 0) { - setEventMessages($langs->trans("TestTemplateToPrinter", $printername), null); - // } else { - // setEventMessages($printer->error, $printer->errors, 'errors'); - // } - // } + // test + require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; + $object = new Facture($db); + //$object->initAsSpecimen(); + $object->fetch(8); + //var_dump($object->lines); + $ret = $printer->sendToPrinter($object, $templateid, 1); + if ($ret == 0) { + setEventMessages($langs->trans("TestTemplateToPrinter", $printername), null); + } else { + setEventMessages($printer->error, $printer->errors, 'errors'); + } + //} $action = ''; } @@ -310,7 +315,7 @@ if ($mode == 'config' && $user->admin) { } } - if ($action!='editprinter') { + if ($action != 'editprinter') { if ($nbofprinters > 0) { print ''; print ''.$langs->trans("Name").''; @@ -446,7 +451,7 @@ if ($mode == 'template' && $user->admin) { } print ''; print '

    '; - print ''."\n"; + print '
    '."\n"; print ''; print ''; print ''; @@ -462,18 +467,6 @@ if ($mode == 'template' && $user->admin) { dol_fiche_end(); } -// to remove after test -// $object=new stdClass(); -// $object->date_time = '2015-11-02 22:30:25'; -// $object->id = 1234; -// $object->customer_firstname = 'John'; -// $object->customer_lastname = 'Deuf'; -// $object->vendor_firstname = 'Jim'; -// $object->vendor_lastname = 'Big'; -// $object->barcode = '3700123862396'; -//$printer->sendToPrinter($object, 1, 16); -//setEventMessages($printer->error, $printer->errors, 'errors'); - // End of page llxFooter(); $db->close(); diff --git a/htdocs/core/class/dolreceiptprinter.class.php b/htdocs/core/class/dolreceiptprinter.class.php index 1f9ea78bf95..c18c6e0be9b 100644 --- a/htdocs/core/class/dolreceiptprinter.class.php +++ b/htdocs/core/class/dolreceiptprinter.class.php @@ -59,12 +59,12 @@ * Print payment method * Print logo stored on printer. Example : 32|32 * Print logo stored on printer. Must be followed by logo code. For old printers. - * Print order lines - * Print order total tax - * Print order local tax - * Print order total - * Print order number - * Print order number after validation + * Print object lines + * Print object total tax + * Print object local tax + * Print object total + * Print object number + * Print object number after validation * Print customer firstname * Print customer name * Print customer mail @@ -77,15 +77,15 @@ * Print vendor firstname * Print vendor mail * Print customer points - * Print number of points for this order + * Print number of points for this object * * Conditional code at line start (if�then Print) - * Print the line IF a customer is affected to the order - * Print the line IF a vendor is affected to the order + * Print the line IF a customer is affected to the object + * Print the line IF a vendor is affected to the object * Print the line IF Happy Hour - * Print the line IF order is validated + * Print the line IF object is validated * Print the line IF customer points > 0 - * Print the line IF points of the order > 0 + * Print the line IF points of the object > 0 * Print the line IF customer has vat number * Print the line IF customer balance > 0 * @@ -141,6 +141,7 @@ class dolReceiptPrinter extends Printer { $this->db=$db; $this->tags = array( + 'dol_line_feed', 'dol_align_left', 'dol_align_center', 'dol_align_right', @@ -167,7 +168,8 @@ class dolReceiptPrinter extends Printer 'dol_cut_paper_full', 'dol_cut_paper_partial', 'dol_open_drawer', - 'dol_activate_buzzer', + //'dol_activate_buzzer', + 'dol_print_text', 'dol_print_qrcode', 'dol_print_date', 'dol_print_date_time', @@ -181,12 +183,14 @@ class dolReceiptPrinter extends Printer 'dol_print_payment', 'dol_print_logo', 'dol_print_logo_old', - 'dol_print_order_lines', - 'dol_print_order_tax', - 'dol_print_order_local_tax', - 'dol_print_order_total', - 'dol_print_order_number', - 'dol_print_order_number_unique', + 'dol_print_object_id', + 'dol_print_object_ref', + 'dol_print_object_lines', + 'dol_print_object_tax', + 'dol_print_object_local_tax', + 'dol_print_object_total', + 'dol_print_object_number', + 'dol_print_object_number_unique', 'dol_print_customer_firstname', 'dol_print_customer_lastname', 'dol_print_customer_mail', @@ -199,13 +203,13 @@ class dolReceiptPrinter extends Printer 'dol_print_vendor_firstname', 'dol_print_vendor_mail', 'dol_print_customer_points', - 'dol_print_order_points', + 'dol_print_object_points', 'dol_print_if_customer', 'dol_print_if_vendor', 'dol_print_if_happy_hour', - 'dol_print_if_num_order_unique', + 'dol_print_if_num_object_unique', 'dol_print_if_customer_points', - 'dol_print_if_order_points', + 'dol_print_if_object_points', 'dol_print_if_customer_tax_number', 'dol_print_if_customer_account_balance_positive', ); @@ -521,12 +525,13 @@ class dolReceiptPrinter extends Printer */ public function sendToPrinter($object, $templateid, $printerid) { - global $conf; + global $conf, $mysoc; $error = 0; $ret = $this->loadTemplate($templateid); // tags a remplacer par leur valeur avant de parser - $this->template = str_replace('', $object->id, $this->template); + $this->template = str_replace('', $object->id, $this->template); + $this->template = str_replace('', $object->ref, $this->template); $this->template = str_replace('', $object->customer_firstname, $this->template); $this->template = str_replace('', $object->customer_lastname, $this->template); $this->template = str_replace('', $object->customer_mail, $this->template); @@ -536,7 +541,7 @@ class dolReceiptPrinter extends Printer $this->template = str_replace('', $object->customer_tax_number, $this->template); $this->template = str_replace('', $object->customer_account_balance, $this->template); $this->template = str_replace('', $object->customer_points, $this->template); - $this->template = str_replace('', $object->order_points, $this->template); + $this->template = str_replace('', $object->object_points, $this->template); $this->template = str_replace('', $object->vendor_firstname, $this->template); $this->template = str_replace('', $object->vendor_lastname, $this->template); $this->template = str_replace('', $object->vendor_mail, $this->template); @@ -558,78 +563,92 @@ class dolReceiptPrinter extends Printer //print '
    '.print_r($vals, true).'
    '; // print ticket $level = 0; - $html = '
    '.$langs->trans("Tag").''.$langs->trans("Description").'
    ';
    +        $nbcaractbyline = 47;
             $ret = $this->initPrinter($printerid);
             if ($ret>0) {
                 setEventMessages($this->error, $this->errors, 'errors');
             } else {
                 $nboflines = count($vals);
    -            for ($line=0; $line < $nboflines; $line++) {
    -                switch ($vals[$line]['tag']) {
    +            for ($tplline=0; $tplline < $nboflines; $tplline++) {
    +                //var_dump($vals[$tplline]['value']);
    +                switch ($vals[$tplline]['tag']) {
    +                    case 'DOL_PRINT_TEXT':
    +                        $this->printer->text($vals[$tplline]['value']);
    +                        break;
    +                    case 'DOL_PRINT_OBJECT_LINES':
    +                        foreach ($object->lines as $line) {
    +                            $spacestoadd = $nbcaractbyline - strlen($line->ref) - strlen(price($line->total_ttc, 'MT'));
    +                            $spaces = str_repeat(' ', $spacestoadd);
    +                            $this->printer->text($line->ref.$spaces.price($line->total_ttc, 'MT')."\n");
    +                            //var_dump($line->ref);
    +                        }
    +                        break;
    +                    case 'DOL_LINE_FEED':
    +                        $this->printer->feed();
    +                        break;
                         case 'DOL_ALIGN_CENTER':
    -                        $this->printer->setJustification(Escpos::JUSTIFY_CENTER);
    -                        $html.='
    '; - $this->printer->text($vals[$line]['value']); + $this->printer->setJustification(Printer::JUSTIFY_CENTER); break; case 'DOL_ALIGN_RIGHT': - $this->printer->setJustification(Escpos::JUSTIFY_RIGHT); - $html.=''; + $this->printer->setJustification(Printer::JUSTIFY_RIGHT); break; case 'DOL_ALIGN_LEFT': - $this->printer->setJustification(Escpos::JUSTIFY_LEFT); - $html.=''; + $this->printer->setJustification(Printer::JUSTIFY_LEFT); break; case 'DOL_OPEN_DRAWER': $this->printer->pulse(); - $html.= ' ϟ'.nl2br($vals[$line]['value']); break; case 'DOL_ACTIVATE_BUZZER': //$this->printer->buzzer(); - $html.= ' ♫'.nl2br($vals[$line]['value']); break; case 'DOL_PRINT_BARCODE': - // $vals[$line]['value'] -> barcode($content, $type) + // $vals[$tplline]['value'] -> barcode($content, $type) $this->printer->barcode($object->barcode); break; + case 'DOL_PRINT_LOGO': + // $vals[$tplline]['value'] -> barcode($content, $type) + $img = EscposImage::load(DOL_DATA_ROOT .'/mycompany/logos/'.$mysoc->logo); + $this->printer->graphics($img); + break; + case 'DOL_PRINT_LOGO_OLD': + // $vals[$tplline]['value'] -> barcode($content, $type) + $img = EscposImage::load(DOL_DATA_ROOT .'/mycompany/logos/'.$mysoc->logo); + $this->printer->bitImage($img); + break; case 'DOL_PRINT_BARCODE_CUSTOMER_ID': - // $vals[$line]['value'] -> barcode($content, $type) + // $vals[$tplline]['value'] -> barcode($content, $type) $this->printer->barcode($object->customer_id); break; case 'DOL_PRINT_QRCODE': - // $vals[$line]['value'] -> qrCode($content, $ec, $size, $model) - $this->printer->qrcode($vals[$line]['value']); - $html.='QRCODE: '.$vals[$line]['value']; + // $vals[$tplline]['value'] -> qrCode($content, $ec, $size, $model) + $this->printer->qrcode($vals[$tplline]['value']); break; case 'DOL_CUT_PAPER_FULL': - $this->printer->cut(Escpos::CUT_FULL); - $html.= ' ✂'.nl2br($vals[$line]['value']); + $this->printer->cut(Printer::CUT_FULL); break; case 'DOL_CUT_PAPER_PARTIAL': - $this->printer->cut(Escpos::CUT_PARTIAL); - $html.= ' ✂'.nl2br($vals[$line]['value']); + $this->printer->cut(Printer::CUT_PARTIAL); break; case 'DOL_USE_FONT_A': - $this->printer->setFont(Escpos::FONT_A); - $this->printer->text($vals[$line]['value']); + $this->printer->setFont(Printer::FONT_A); + $this->printer->text($vals[$tplline]['value']); break; case 'DOL_USE_FONT_B': - $this->printer->setFont(Escpos::FONT_B); - $this->printer->text($vals[$line]['value']); + $this->printer->setFont(Printer::FONT_B); + $this->printer->text($vals[$tplline]['value']); break; case 'DOL_USE_FONT_C': - $this->printer->setFont(Escpos::FONT_C); - $this->printer->text($vals[$line]['value']); + $this->printer->setFont(Printer::FONT_C); + $this->printer->text($vals[$tplline]['value']); break; default: - $this->printer->text($vals[$line]['value']); - $html.= nl2br($vals[$line]['value']); - $this->errors[] = 'UnknowTag: <'.strtolower($vals[$line]['tag']).'>'; + $this->printer->text($vals[$tplline]['value']); + $html.= nl2br($vals[$tplline]['value']); + $this->errors[] = 'UnknowTag: <'.strtolower($vals[$tplline]['tag']).'>'; $error++; break; } } - $html.= '
    '; - print $html; // Close and print // uncomment next line to see content sent to printer //print '
    '.print_r($this->connector, true).'
    '; diff --git a/htdocs/langs/en_US/receiptprinter.lang b/htdocs/langs/en_US/receiptprinter.lang index aa61848fc9d..5714ba78151 100644 --- a/htdocs/langs/en_US/receiptprinter.lang +++ b/htdocs/langs/en_US/receiptprinter.lang @@ -29,6 +29,7 @@ PROFILE_SIMPLE_HELP=Simple Profile No Graphics PROFILE_EPOSTEP_HELP=Epos Tep Profile PROFILE_P822D_HELP=P822D Profile No Graphics PROFILE_STAR_HELP=Star Profile +DOL_LINE_FEED=Skip line DOL_ALIGN_LEFT=Left align text DOL_ALIGN_CENTER=Center text DOL_ALIGN_RIGHT=Right align text @@ -42,3 +43,5 @@ DOL_CUT_PAPER_PARTIAL=Cut ticket partially DOL_OPEN_DRAWER=Open cash drawer DOL_ACTIVATE_BUZZER=Activate buzzer DOL_PRINT_QRCODE=Print QR Code +DOL_PRINT_LOGO=Print logo of my company +DOL_PRINT_LOGO_OLD=Print logo of my company (old printers) diff --git a/htdocs/takepos/admin/setup.php b/htdocs/takepos/admin/setup.php index a1f07f4f7ad..2c9cc3cb495 100644 --- a/htdocs/takepos/admin/setup.php +++ b/htdocs/takepos/admin/setup.php @@ -68,6 +68,7 @@ if (GETPOST('action', 'alpha') == 'set') $res = dolibarr_set_const($db, "TAKEPOS_ROOT_CATEGORY_ID", GETPOST('TAKEPOS_ROOT_CATEGORY_ID', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOSCONNECTOR", GETPOST('TAKEPOSCONNECTOR', 'alpha'), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "TAKEPOS_DOLIBARR_PRINTER", GETPOST('TAKEPOS_DOLIBARR_PRINTER', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_BAR_RESTAURANT", GETPOST('TAKEPOS_BAR_RESTAURANT', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_TICKET_VAT_GROUPPED", GETPOST('TAKEPOS_TICKET_VAT_GROUPPED', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_PRINT_SERVER", GETPOST('TAKEPOS_PRINT_SERVER', 'alpha'), 'chaine', 0, '', $conf->entity); @@ -163,6 +164,15 @@ print $form->select_all_categories(Categorie::TYPE_PRODUCT, $conf->global->TAKEP print ajax_combobox('TAKEPOS_ROOT_CATEGORY_ID'); print "\n"; +if ($conf->receiptprinter->enabled) { + // Use Dolibarr printing + print ''; + print $langs->trans("DolibarrReceiptPrinterModule"); + print ''; + print $form->selectyesno("TAKEPOS_DOLIBARR_PRINTER", $conf->global->TAKEPOS_DOLIBARR_PRINTER, 1); + print "\n"; +} + // Use Takepos printing print ''; print $langs->trans("DolibarrReceiptPrinter").' (
    '.$langs->trans("TakeposConnectorNecesary").')'; diff --git a/htdocs/takepos/admin/terminal.php b/htdocs/takepos/admin/terminal.php index 167735e901d..1bbe339c852 100644 --- a/htdocs/takepos/admin/terminal.php +++ b/htdocs/takepos/admin/terminal.php @@ -81,6 +81,7 @@ if (GETPOST('action', 'alpha') == 'set') } $res = dolibarr_set_const($db, "CASHDESK_ID_WAREHOUSE".$terminaltouse, (GETPOST('CASHDESK_ID_WAREHOUSE'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_WAREHOUSE'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "CASHDESK_NO_DECREASE_STOCK".$terminaltouse, GETPOST('CASHDESK_NO_DECREASE_STOCK'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "TAKEPOS_PRINTER_TO_USE".$terminaltouse, GETPOST('TAKEPOS_PRINTER_TO_USE'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity); dol_syslog("admin/cashdesk: level ".GETPOST('level', 'alpha')); @@ -193,6 +194,20 @@ if (! empty($conf->stock->enabled)) print ''.$langs->trans("StockDecreaseForPointOfSaleDisabled").''; } print ''; + if ($conf->receiptprinter->enabled) { + // Select printer to use with terminal + require_once DOL_DOCUMENT_ROOT.'/core/class/dolreceiptprinter.class.php'; + $printer = new dolReceiptPrinter($db); + $printer->listprinters(); + $printers = array(); + foreach ($printer->listprinters as $key => $value) { + $printers[$key] = $value['name']; + } + print ''.$langs->trans("TakeposTerminalPrinterToUse").''; + print ''; + print $form->selectarray('TAKEPOS_PRINTER_TO_USE'.$terminal, $printers, (empty($conf->global->{'TAKEPOS_PRINTER_TO_USE'.$terminal})?'0':$conf->global->{'TAKEPOS_PRINTER_TO_USE'.$terminal}), 1); + print ''; + } } print ''; diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 126fea907a9..df2a839fb0e 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -444,8 +444,13 @@ if ($action=="valid" || $action=="history") else $sectionwithinvoicelink.=$langs->trans('BillShortStatusValidated'); } $sectionwithinvoicelink.=''; - if ($conf->global->TAKEPOSCONNECTOR) $sectionwithinvoicelink.=' '; - else $sectionwithinvoicelink.=' '; + if ($conf->global->TAKEPOSCONNECTOR) { + $sectionwithinvoicelink.=' '; + } elseif ($conf->global->TAKEPOS_DOLIBARR_PRINTER) { + $sectionwithinvoicelink.=' '; + } else { + $sectionwithinvoicelink.=' '; + } if ($conf->global->TAKEPOS_AUTO_PRINT_TICKETS) $sectionwithinvoicelink.=''; } @@ -548,6 +553,18 @@ function TakeposPrinting(id){ }); }); } +function DolibarrTakeposPrinting(id) { + console.log('Printing ticket ' + id) + var receipt; + // $.get("receipt.php?facid="+id, function(data, status) { + // receipt=data.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, ''); + // $.ajax({ + // type: "POST", + // url: 'http://global->TAKEPOS_PRINT_SERVER; ?>:8111/print', + // data: receipt + // }); + // }); +} global->TAKEPOS_BAR_RESTAURANT) //add temp ticket button if ($conf->global->TAKEPOS_BAR_RESTAURANT) { - if ($conf->global->TAKEPOSCONNECTOR) $menus[$r++]=array('title'=>'
    '.$langs->trans("Receipt").'
    ','action'=>'TakeposPrinting(placeid);'); - else $menus[$r++]=array('title'=>'
    '.$langs->trans("Receipt").'
    ','action'=>'Print(placeid);'); + if ($conf->global->TAKEPOSCONNECTOR) { + $menus[$r++]=array('title'=>'
    '.$langs->trans("Receipt").'
    ','action'=>'TakeposPrinting(placeid);'); + } else { + $menus[$r++]=array('title'=>'
    '.$langs->trans("Receipt").'
    ','action'=>'Print(placeid);'); + } } if ($conf->global->TAKEPOSCONNECTOR && $conf->global->TAKEPOS_ORDER_NOTES==1) { @@ -713,6 +725,12 @@ if ($conf->global->TAKEPOS_BAR_RESTAURANT) if ($conf->global->TAKEPOSCONNECTOR) { $menus[$r++]=array('title'=>'
    '.$langs->trans("DOL_OPEN_DRAWER").'
    ', 'action'=>'OpenDrawer();'); } +if ($conf->global->TAKEPOS_DOLIBARR_PRINTER) { + $menus[$r++] = array( + 'title' => '
    '.$langs->trans("DOL_OPEN_DRAWER").'
    ', + 'action' => 'DolibarrOpenDrawer();', + ); +} $hookmanager->initHooks(array('takeposfrontend')); $reshook=$hookmanager->executeHooks('ActionButtons'); From c2d66a9e64d5e8307f53a2faa2d2972f2982b120 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sat, 2 Nov 2019 23:53:11 +0000 Subject: [PATCH 848/980] Fixing style errors. --- .../includes/mike42/escpos-php/autoload.php | 18 ++-- .../src/Mike42/Escpos/CapabilityProfile.php | 4 +- .../src/Mike42/Escpos/EscposImage.php | 56 +++++------ .../src/Mike42/Escpos/GdEscposImage.php | 4 +- .../src/Mike42/Escpos/ImagickEscposImage.php | 6 +- .../Escpos/PrintBuffers/EscposPrintBuffer.php | 6 +- .../Escpos/PrintBuffers/ImagePrintBuffer.php | 2 +- .../PrintConnectors/CupsPrintConnector.php | 24 ++--- .../PrintConnectors/DummyPrintConnector.php | 2 +- .../PrintConnectors/FilePrintConnector.php | 4 +- .../escpos-php/src/Mike42/Escpos/Printer.php | 92 +++++++++---------- 11 files changed, 109 insertions(+), 109 deletions(-) diff --git a/htdocs/includes/mike42/escpos-php/autoload.php b/htdocs/includes/mike42/escpos-php/autoload.php index 7779486b824..47ed7d9e9c3 100644 --- a/htdocs/includes/mike42/escpos-php/autoload.php +++ b/htdocs/includes/mike42/escpos-php/autoload.php @@ -1,26 +1,26 @@ imgHeight; } - + /** * @return int Number of bytes to represent a row of this image */ public function getHeightBytes() { - return (int)(($this -> imgHeight + 7) / 8); + return (int) (($this -> imgHeight + 7) / 8); } - + /** * @return int Width of the image */ @@ -117,13 +117,13 @@ abstract class EscposImage { return $this -> imgWidth; } - + /** * @return int Number of bytes to represent a row of this image */ public function getWidthBytes() { - return (int)(($this -> imgWidth + 7) / 8); + return (int) (($this -> imgWidth + 7) / 8); } /** @@ -155,7 +155,7 @@ abstract class EscposImage } return $this -> imgRasterData; } - + /** * Output the image in column format. * @@ -199,7 +199,7 @@ abstract class EscposImage $this -> setImgHeight(0); $this -> setImgData(""); } - + /** * Set image data. * @@ -209,7 +209,7 @@ abstract class EscposImage { $this -> imgData = $data; } - + /** * Set image width. * @@ -219,7 +219,7 @@ abstract class EscposImage { $this -> imgWidth = $width; } - + /** * Set image height. * @@ -229,7 +229,7 @@ abstract class EscposImage { $this -> imgHeight = $height; } - + /** * @param string $filename * Filename to load from @@ -242,7 +242,7 @@ abstract class EscposImage // No optimised implementation to provide return null; } - + /** * @param string $filename * Filename to load from @@ -257,7 +257,7 @@ abstract class EscposImage // No optimised implementation to provide return null; } - + /** * Get column fromat from loaded image pixels, line by line. * @@ -279,7 +279,7 @@ abstract class EscposImage return $data; } do { - $byteVal |= (int)$this -> imgData[$y * $widthPixels + $x] << (7 - $bit); + $byteVal |= (int) $this -> imgData[$y * $widthPixels + $x] << (7 - $bit); $x++; $bit++; if ($x >= $widthPixels) { @@ -303,7 +303,7 @@ abstract class EscposImage } return $data; } - + /** * Get column fromat from loaded image pixels, line by line. * @@ -322,7 +322,7 @@ abstract class EscposImage } return $out; } - + /** * Output image in column format. Must be called once for each line of output. * @@ -356,7 +356,7 @@ abstract class EscposImage do { $yReal = $y + $yStart; if ($yReal < $heightPixels) { - $byteVal |= (int)$this -> imgData[$yReal * $widthPixels + $x] << (7 - $bit); + $byteVal |= (int) $this -> imgData[$yReal * $widthPixels + $x] << (7 - $bit); } $y++; $bit++; @@ -381,7 +381,7 @@ abstract class EscposImage } return $data; } - + /** * @return boolean True if GD is loaded, false otherwise */ @@ -389,7 +389,7 @@ abstract class EscposImage { return extension_loaded('gd'); } - + /** * @return boolean True if Imagick is loaded, false otherwise */ @@ -397,7 +397,7 @@ abstract class EscposImage { return extension_loaded('imagick'); } - + /** * This is a convinience method to load an image from file, auto-selecting diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php index 32edf76ef7c..41b17ff4749 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php @@ -33,7 +33,7 @@ class GdEscposImage extends EscposImage /* Set to blank image */ return parent::loadImageData($filename); } - + $ext = pathinfo($filename, PATHINFO_EXTENSION); switch ($ext) { case "png": @@ -73,7 +73,7 @@ class GdEscposImage extends EscposImage /* Faster to average channels, blend alpha and negate the image here than via filters (tested!) */ $cols = imagecolorsforindex($im, imagecolorat($im, $x, $y)); // 1 for white, 0 for black, ignoring transparency - $greyness = (int)(($cols['red'] + $cols['green'] + $cols['blue']) / 3) >> 7; + $greyness = (int) (($cols['red'] + $cols['green'] + $cols['blue']) / 3) >> 7; // 1 for black, 0 for white, taking into account transparency $black = (1 - $greyness) >> ($cols['alpha'] >> 6); $imgData[$y * $imgWidth + $x] = $black; diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php index 13851a4d034..8905e6eb051 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php @@ -44,7 +44,7 @@ class ImagickEscposImage extends EscposImage /* Faster to average channels, blend alpha and negate the image here than via filters (tested!) */ $cols = $im -> getImagePixelColor($x, $y); $cols = $cols -> getcolor(); - $greyness = (int)(($cols['r'] + $cols['g'] + $cols['b']) / 3) >> 7; // 1 for white, 0 for black + $greyness = (int) (($cols['r'] + $cols['g'] + $cols['b']) / 3) >> 7; // 1 for white, 0 for black $imgData[$y * $imgWidth + $x] = (1 - $greyness); // 1 for black, 0 for white } } @@ -70,7 +70,7 @@ class ImagickEscposImage extends EscposImage $im = $this -> getImageFromFile($filename); $this -> setImgWidth($im -> getimagewidth()); $this -> setImgHeight($im -> getimageheight()); - + /* Strip transparency */ $im = self::alphaRemove($im); $im -> setformat('pbm'); @@ -95,7 +95,7 @@ class ImagickEscposImage extends EscposImage /* Set to blank image */ return parent::loadImageData($filename); } - + $im = $this -> getImageFromFile($filename); $this -> readImageFromImagick($im); } diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php index 4e04176521e..f564132ea9f 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php @@ -136,7 +136,7 @@ class EscposPrintBuffer implements PrintBuffer if ($c == "\r") { /* Skip past Windows line endings (raw usage). */ continue; - } else if (self::asciiCheck($c, true)) { + } elseif (self::asciiCheck($c, true)) { $outp[$j] = $c; } $j++; @@ -167,7 +167,7 @@ class EscposPrintBuffer implements PrintBuffer } return false; } - + /** * Based on the printer's connector, compute (or load a cached copy of) maps * of UTF character to unicode characters for later use. @@ -219,7 +219,7 @@ class EscposPrintBuffer implements PrintBuffer $encode[$num][$utf8] = chr($char); } } - + /* Use generated data */ $dataArray = ["available" => $available, "encode" => $encode, "key" => $cacheKey]; $this -> available = $dataArray["available"]; diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php index d4fdefaf130..c59db99e60b 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php @@ -74,7 +74,7 @@ class ImagePrintBuffer implements PrintBuffer $draw = new \ImagickDraw(); $color = new \ImagickPixel('#000000'); $background = new \ImagickPixel('white'); - + /* Create annotation */ if ($this->font !== null) { // Allow fallback on defaults as necessary diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php index 497887f37cd..fb3c3c24d35 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php @@ -21,20 +21,20 @@ use BadMethodCallException; */ class CupsPrintConnector implements PrintConnector { - + /** * @var array $buffer * Buffer of accumilated data. */ private $buffer; - + /** * * @var string $printerName * The name of the target printer. */ private $printerName; - + /** * Construct new CUPS print connector. * @@ -49,7 +49,7 @@ class CupsPrintConnector implements PrintConnector throw new BadMethodCallException("You do not have any printers installed on " . "this system via CUPS. Check 'lpr -a'."); } - + if (array_search($dest, $valid, true) === false) { throw new BadMethodCallException("'$dest' is not a printer on this system. " . "Printers are: [" . implode(", ", $valid) . "]"); @@ -57,7 +57,7 @@ class CupsPrintConnector implements PrintConnector $this->buffer = array (); $this->printerName = $dest; } - + /** * Cause a NOTICE if deconstructed before the job was printed. */ @@ -67,7 +67,7 @@ class CupsPrintConnector implements PrintConnector trigger_error("Print connector was not finalized. Did you forget to close the printer?", E_USER_NOTICE); } } - + /** * Send job to printer. */ @@ -75,7 +75,7 @@ class CupsPrintConnector implements PrintConnector { $data = implode($this->buffer); $this->buffer = null; - + // Build command to work on data $tmpfname = tempnam(sys_get_temp_dir(), 'print-'); file_put_contents($tmpfname, $data); @@ -92,7 +92,7 @@ class CupsPrintConnector implements PrintConnector } unlink($tmpfname); } - + /** * Run a command and throw an exception if it fails, or return the output if it works. * (Basically exec() with good error handling) @@ -129,7 +129,7 @@ class CupsPrintConnector implements PrintConnector } return $outputStr; } - + /** * Read data from the printer. * @@ -140,7 +140,7 @@ class CupsPrintConnector implements PrintConnector { return false; } - + /** * @param string $data */ @@ -148,7 +148,7 @@ class CupsPrintConnector implements PrintConnector { $this->buffer [] = $data; } - + /** * Load a list of CUPS printers. * @@ -164,7 +164,7 @@ class CupsPrintConnector implements PrintConnector } return $ret; } - + /** * Get the item before the first space in a string * diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php index b376cd87d83..07c7d7358b1 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php @@ -41,7 +41,7 @@ final class DummyPrintConnector implements PrintConnector { $this -> buffer = []; } - + public function __destruct() { if ($this -> buffer !== null) { diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php index ca44ad0ad7e..04c4c66a1d5 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php @@ -55,7 +55,7 @@ class FilePrintConnector implements PrintConnector $this -> fp = false; } } - + /* (non-PHPdoc) * @see PrintConnector::read() */ @@ -66,7 +66,7 @@ class FilePrintConnector implements PrintConnector } return fread($this -> fp, $len); } - + /** * Write data to the file * diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php index 753d2ea8ad3..b7f6767b533 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php @@ -362,7 +362,7 @@ class Printer { /* Set connector */ $this -> connector = $connector; - + /* Set capability profile */ if ($profile === null) { $profile = CapabilityProfile::load('default'); @@ -374,18 +374,18 @@ class Printer $this -> setPrintBuffer($buffer); $this -> initialize(); } - + /** * Print a barcode. * * @param string $content The information to encode. * @param int $type The barcode standard to output. Supported values are - * `Printer::BARCODE_UPCA`, `Printer::BARCODE_UPCE`, `Printer::BARCODE_JAN13`, - * `Printer::BARCODE_JAN8`, `Printer::BARCODE_CODE39`, `Printer::BARCODE_ITF`, - * `Printer::BARCODE_CODABAR`, `Printer::BARCODE_CODE93`, and `Printer::BARCODE_CODE128`. - * If not specified, `Printer::BARCODE_CODE39` will be used. Note that some - * barcode formats only support specific lengths or sets of characters, and that - * available barcode types vary between printers. + * `Printer::BARCODE_UPCA`, `Printer::BARCODE_UPCE`, `Printer::BARCODE_JAN13`, + * `Printer::BARCODE_JAN8`, `Printer::BARCODE_CODE39`, `Printer::BARCODE_ITF`, + * `Printer::BARCODE_CODABAR`, `Printer::BARCODE_CODE93`, and `Printer::BARCODE_CODE128`. + * If not specified, `Printer::BARCODE_CODE39` will be used. Note that some + * barcode formats only support specific lengths or sets of characters, and that + * available barcode types vary between printers. * @throws InvalidArgumentException Where the length or characters used in $content is invalid for the requested barcode format. */ public function barcode($content, $type = Printer::BARCODE_CODE39) @@ -441,7 +441,7 @@ class Printer // More advanced function B, used in preference $this -> connector -> write(self::GS . "k" . chr($type) . chr(strlen($content)) . $content); } - + /** * Print an image, using the older "bit image" command. This creates padding on the right of the image, * if its width is not divisible by 8. @@ -451,8 +451,8 @@ class Printer * * @param EscposImage $img The image to print * @param int $size Size modifier for the image. Must be either `Printer::IMG_DEFAULT` - * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and - * `Printer::IMG_DOUBLE_WIDTH` flags. + * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and + * `Printer::IMG_DOUBLE_WIDTH` flags. */ public function bitImage(EscposImage $img, $size = Printer::IMG_DEFAULT) { @@ -471,8 +471,8 @@ class Printer * * @param EscposImage $img The image to print * @param int $size Size modifier for the image. Must be either `Printer::IMG_DEFAULT` - * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and - * `Printer::IMG_DOUBLE_WIDTH` flags. + * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and + * `Printer::IMG_DOUBLE_WIDTH` flags. */ public function bitImageColumnFormat(EscposImage $img, $size = Printer::IMG_DEFAULT) { @@ -502,7 +502,7 @@ class Printer { $this -> connector -> finalize(); } - + /** * Cut the paper. * @@ -514,7 +514,7 @@ class Printer // TODO validation on cut() inputs $this -> connector -> write(self::GS . "V" . chr($mode) . chr($lines)); } - + /** * Print and feed line / Print and feed n lines. * @@ -565,7 +565,7 @@ class Printer { return $this -> characterTable; } - + /** * @return PrintBuffer */ @@ -606,8 +606,8 @@ class Printer * * @param EscposImage $img The image to print. * @param int $size Size modifier for the image. Must be either `Printer::IMG_DEFAULT` - * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and - * `Printer::IMG_DOUBLE_WIDTH` flags. + * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and + * `Printer::IMG_DOUBLE_WIDTH` flags. */ public function graphics(EscposImage $img, $size = Printer::IMG_DEFAULT) { @@ -622,7 +622,7 @@ class Printer $this -> wrapperSendGraphicsData('0', 'p', $header . $rasterData); $this -> wrapperSendGraphicsData('0', '2'); } - + /** * Initialize printer. This resets formatting back to the defaults. */ @@ -637,15 +637,15 @@ class Printer * * @param string $content Text or numbers to store in the code * @param int $width Width of a module (pixel) in the printed code. - * Default is 3 dots. + * Default is 3 dots. * @param int $heightMultiplier Multiplier for height of a module. - * Default is 3 times the width. + * Default is 3 times the width. * @param int $dataColumnCount Number of data columns to use. 0 (default) - * is to auto-calculate. Smaller numbers will result in a narrower code, - * making larger pixel sizes possible. Larger numbers require smaller pixel sizes. + * is to auto-calculate. Smaller numbers will result in a narrower code, + * making larger pixel sizes possible. Larger numbers require smaller pixel sizes. * @param float $ec Error correction ratio, from 0.01 to 4.00. Default is 0.10 (10%). * @param int $options Standard code Printer::PDF417_STANDARD with - * start/end bars, or truncated code Printer::PDF417_TRUNCATED with start bars only. + * start/end bars, or truncated code Printer::PDF417_TRUNCATED with start bars only. * @throws Exception If this profile indicates that PDF417 code is not supported */ public function pdf417Code($content, $width = 3, $heightMultiplier = 3, $dataColumnCount = 0, $ec = 0.10, $options = Printer::PDF417_STANDARD) @@ -672,7 +672,7 @@ class Printer $this -> wrapperSend2dCodeData(chr(67), $cn, chr($width)); $this -> wrapperSend2dCodeData(chr(68), $cn, chr($heightMultiplier)); // Set error correction ratio: 1% to 400% - $ec_int = (int)ceil(floatval($ec) * 10); + $ec_int = (int) ceil(floatval($ec) * 10); $this -> wrapperSend2dCodeData(chr(69), $cn, chr($ec_int), '1'); // Send content & print $this -> wrapperSend2dCodeData(chr(80), $cn, $content, '0'); @@ -772,7 +772,7 @@ class Printer $this -> connector -> write(self::ESC . "!" . chr($mode)); } - + /** * Set barcode height. * @@ -788,27 +788,27 @@ class Printer * Set barcode bar width. * * @param int $width Bar width in dots. If not specified, 3 will be used. - * Values above 6 appear to have no effect. + * Values above 6 appear to have no effect. */ public function setBarcodeWidth($width = 3) { self::validateInteger($width, 1, 255, __FUNCTION__); $this -> connector -> write(self::GS . "w" . chr($width)); } - + /** * Set the position for the Human Readable Interpretation (HRI) of barcode characters. * * @param int $position. Use Printer::BARCODE_TEXT_NONE to hide the text (default), - * or any combination of Printer::BARCODE_TEXT_ABOVE and Printer::BARCODE_TEXT_BELOW - * flags to display the text. + * or any combination of Printer::BARCODE_TEXT_ABOVE and Printer::BARCODE_TEXT_BELOW + * flags to display the text. */ public function setBarcodeTextPosition($position = Printer::BARCODE_TEXT_NONE) { self::validateInteger($position, 0, 3, __FUNCTION__, "Barcode text position"); $this -> connector -> write(self::GS . "H" . chr($position)); } - + /** * Turn double-strike mode on/off. * @@ -841,7 +841,7 @@ class Printer self::validateBoolean($on, __FUNCTION__); $this -> connector -> write(self::ESC . "E". ($on ? chr(1) : chr(0))); } - + /** * Select font. Most printers have two fonts (Fonts A and B), and some have a third (Font C). * @@ -852,7 +852,7 @@ class Printer self::validateInteger($font, 0, 2, __FUNCTION__); $this -> connector -> write(self::ESC . "M" . chr($font)); } - + /** * Select justification. * @@ -870,7 +870,7 @@ class Printer * Some printers will allow you to overlap lines with a smaller line feed. * * @param int|null $height The height of each line, in dots. If not set, the printer - * will reset to its default line spacing. + * will reset to its default line spacing. */ public function setLineSpacing($height = null) { @@ -926,7 +926,7 @@ class Printer $this -> buffer = $buffer; $this -> buffer -> setPrinter($this); } - + /** * Set black/white reverse mode on or off. In this mode, text is printed white on a black background. * @@ -995,7 +995,7 @@ class Printer public function text($str = "") { self::validateString($str, __FUNCTION__); - $this -> buffer -> writeText((string)$str); + $this -> buffer -> writeText((string) $str); } /** @@ -1010,7 +1010,7 @@ class Printer self::validateString($str, __FUNCTION__); $this -> connector -> write(self::FS . "&"); $str = iconv("UTF-8", "GBK//IGNORE", $str); - $this -> buffer -> writeTextRaw((string)$str); + $this -> buffer -> writeTextRaw((string) $str); $this -> connector -> write(self::FS . "."); } @@ -1025,9 +1025,9 @@ class Printer public function textRaw($str = "") { self::validateString($str, __FUNCTION__); - $this -> buffer -> writeTextRaw((string)$str); + $this -> buffer -> writeTextRaw((string) $str); } - + /** * Wrapper for GS ( k, to calculate and send correct data length. * @@ -1045,7 +1045,7 @@ class Printer $header = $this -> intLowHigh(strlen($data) + strlen($m) + 2, 2); $this -> connector -> write(self::GS . "(k" . $header . $cn . $fn . $m . $data); } - + /** * Wrapper for GS ( L, to calculate and send correct data length. * @@ -1062,7 +1062,7 @@ class Printer $header = $this -> intLowHigh(strlen($data) + 2, 2); $this -> connector -> write(self::GS . "(L" . $header . $m . $fn . $data); } - + /** * Convert widths and heights to characters. Used before sending graphics to set the size. * @@ -1083,7 +1083,7 @@ class Printer } return implode("", $outp); } - + /** * Generate two characters for a number: In lower and higher parts, or more parts as needed. * @@ -1098,11 +1098,11 @@ class Printer $outp = ""; for ($i = 0; $i < $length; $i++) { $outp .= chr($input % 256); - $input = (int)($input / 256); + $input = (int) ($input / 256); } return $outp; } - + /** * Throw an exception if the argument given is not a boolean * @@ -1148,7 +1148,7 @@ class Printer { self::validateIntegerMulti($test, [[$min, $max]], $source, $argument); } - + /** * Throw an exception if the argument given is not an integer within one of the specified ranges * @@ -1198,7 +1198,7 @@ class Printer throw new InvalidArgumentException("$argument to $source must be a string"); } } - + /** * Throw an exception if the argument doesn't match the given regex. * From 871b6d9dd64bfafb9fc1ac54003827b12537a31a Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 3 Nov 2019 12:35:05 +0100 Subject: [PATCH 849/980] NEW change duration membertype --- .../adherents/class/adherent_type.class.php | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index b4bdb119b29..412b76ea15e 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -70,6 +70,18 @@ class AdherentType extends CommonObject * @var string Adherent type nature */ public $morphy; + + public $duration; + + /* + * type expiration + */ + public $duration_value; + + /** + * Expiration unit + */ + public $duration_unit; /** * @var int Subsription required (0 or 1) @@ -373,8 +385,9 @@ class AdherentType extends CommonObject $sql.= "SET "; $sql.= "statut = ".$this->statut.","; $sql.= "libelle = '".$this->db->escape($this->label) ."',"; - $sql.= "morphy = '".$this->db->escape($this->morphy) ."',"; + $sql.= "morphy = '".$this->db->escape($this->morphy) ."',"; $sql.= "subscription = '".$this->db->escape($this->subscription)."',"; + $sql.= "duration = '" . $this->db->escape($this->duration_value . $this->duration_unit) ."',"; $sql.= "note = '".$this->db->escape($this->note)."',"; $sql.= "vote = ".(integer) $this->db->escape($this->vote).","; $sql.= "mail_valid = '".$this->db->escape($this->mail_valid)."'"; @@ -476,7 +489,7 @@ class AdherentType extends CommonObject { global $langs, $conf; - $sql = "SELECT d.rowid, d.libelle as label, d.morphy, d.statut, d.subscription, d.mail_valid, d.note, d.vote"; + $sql = "SELECT d.rowid, d.libelle as label, d.morphy, d.statut, d.duration, d.subscription, d.mail_valid, d.note, d.vote"; $sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as d"; $sql .= " WHERE d.rowid = ".(int) $rowid; @@ -494,6 +507,9 @@ class AdherentType extends CommonObject $this->label = $obj->label; $this->morphy = $obj->morphy; $this->statut = $obj->statut; + $this->duration = $obj->duration; + $this->duration_value = substr($obj->duration, 0, dol_strlen($obj->duration)-1); + $this->duration_unit = substr($obj->duration, -1); $this->subscription = $obj->subscription; $this->mail_valid = $obj->mail_valid; $this->note = $obj->note; From 44b80fdc441f63a4e2829e79ecd152c1a2b8ecce Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 3 Nov 2019 12:35:52 +0100 Subject: [PATCH 850/980] Update type.php --- htdocs/adherents/type.php | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 94978e7f8a9..139f4b1fb73 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -32,6 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; +require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; $langs->load("members"); @@ -61,6 +62,8 @@ $label=GETPOST("label", "alpha"); $morphy=GETPOST("morphy", "alpha"); $statut=GETPOST("statut", "int"); $subscription=GETPOST("subscription", "int"); +$duration_value = GETPOST('duration_value', 'int'); +$duration_unit = GETPOST('duration_unit', 'alpha'); $vote=GETPOST("vote", "int"); $comment=GETPOST("comment", 'alphanohtml'); $mail_valid=GETPOST("mail_valid", 'none'); @@ -104,9 +107,11 @@ if ($cancel) { if ($action == 'add' && $user->rights->adherent->configurer) { $object->label = trim($label); - $object->morphy = trim($morphy); + $object->morphy = trim($morphy); $object->statut = (int) $statut; $object->subscription = (int) $subscription; + $object->duration_value = $duration_value; + $object->duration_unit = $duration_unit; $object->note = trim($comment); $object->mail_valid = trim($mail_valid); $object->vote = (int) $vote; @@ -159,9 +164,11 @@ if ($action == 'update' && $user->rights->adherent->configurer) $object->oldcopy = clone $object; $object->label = trim($label); - $object->morphy = trim($morphy); + $object->morphy = trim($morphy); $object->statut = (int) $statut; $object->subscription = (int) $subscription; + $object->duration_value = $duration_value; + $object->duration_unit = $duration_unit; $object->note = trim($comment); $object->mail_valid = trim($mail_valid); $object->vote = (boolean) trim($vote); @@ -209,6 +216,7 @@ if ($action == 'confirm_delete' && $user->rights->adherent->configurer) */ $form=new Form($db); +$formproduct = new FormProduct($db); llxHeader('', $langs->trans("MembersTypeSetup"), 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros'); @@ -353,6 +361,11 @@ if ($action == 'create') print ''.$langs->trans("VoteAllowed").''; print $form->selectyesno("vote", 0, 1); print ''; + + print ''.$langs->trans("Duration").''; + print ' '; + print $formproduct->selectMeasuringUnits("duration_unit", "time", $_POST["duration_unit"], 0, 1); + print ''; print ''.$langs->trans("Description").''; print ''; @@ -438,6 +451,18 @@ if ($rowid > 0) print ''.$langs->trans("VoteAllowed").''; print yn($object->vote); print ''; + + print ''.$langs->trans("Duration").''.$object->duration_value.' '; + if ($object->duration_value > 1) + { + $dur=array("i"=>$langs->trans("Minute"),"h"=>$langs->trans("Hours"),"d"=>$langs->trans("Days"),"w"=>$langs->trans("Weeks"),"m"=>$langs->trans("Months"),"y"=>$langs->trans("Years")); + } + elseif ($object->duration_value > 0) + { + $dur=array("i"=>$langs->trans("Minute"),"h"=>$langs->trans("Hour"),"d"=>$langs->trans("Day"),"w"=>$langs->trans("Week"),"m"=>$langs->trans("Month"),"y"=>$langs->trans("Year")); + } + print (! empty($object->duration_unit) && isset($dur[$object->duration_unit]) ? $langs->trans($dur[$object->duration_unit]) : '')." "; + print ''; print ''.$langs->trans("Description").''; print nl2br($object->note).""; @@ -786,6 +811,11 @@ if ($rowid > 0) print ''.$langs->trans("VoteAllowed").''; print $form->selectyesno("vote", $object->vote, 1); print ''; + + print ''.$langs->trans("Duration").''; + print ' '; + print $formproduct->selectMeasuringUnits("duration_unit", "time", $object->duration_unit, 0, 1); + print ''; print ''.$langs->trans("Description").''; print ''; From 8007b22030ea0d384b15fcb142d4a36d7ea7cf12 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Sun, 3 Nov 2019 11:37:44 +0000 Subject: [PATCH 851/980] Fixing style errors. --- .../adherents/class/adherent_type.class.php | 12 ++-- htdocs/adherents/type.php | 56 +++++++++---------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index 412b76ea15e..5d992b168d4 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -70,7 +70,7 @@ class AdherentType extends CommonObject * @var string Adherent type nature */ public $morphy; - + public $duration; /* @@ -385,9 +385,9 @@ class AdherentType extends CommonObject $sql.= "SET "; $sql.= "statut = ".$this->statut.","; $sql.= "libelle = '".$this->db->escape($this->label) ."',"; - $sql.= "morphy = '".$this->db->escape($this->morphy) ."',"; + $sql.= "morphy = '".$this->db->escape($this->morphy) ."',"; $sql.= "subscription = '".$this->db->escape($this->subscription)."',"; - $sql.= "duration = '" . $this->db->escape($this->duration_value . $this->duration_unit) ."',"; + $sql.= "duration = '" . $this->db->escape($this->duration_value . $this->duration_unit) ."',"; $sql.= "note = '".$this->db->escape($this->note)."',"; $sql.= "vote = ".(integer) $this->db->escape($this->vote).","; $sql.= "mail_valid = '".$this->db->escape($this->mail_valid)."'"; @@ -507,9 +507,9 @@ class AdherentType extends CommonObject $this->label = $obj->label; $this->morphy = $obj->morphy; $this->statut = $obj->statut; - $this->duration = $obj->duration; - $this->duration_value = substr($obj->duration, 0, dol_strlen($obj->duration)-1); - $this->duration_unit = substr($obj->duration, -1); + $this->duration = $obj->duration; + $this->duration_value = substr($obj->duration, 0, dol_strlen($obj->duration)-1); + $this->duration_unit = substr($obj->duration, -1); $this->subscription = $obj->subscription; $this->mail_valid = $obj->mail_valid; $this->note = $obj->note; diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 139f4b1fb73..97b0eae7ed0 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -107,11 +107,11 @@ if ($cancel) { if ($action == 'add' && $user->rights->adherent->configurer) { $object->label = trim($label); - $object->morphy = trim($morphy); + $object->morphy = trim($morphy); $object->statut = (int) $statut; $object->subscription = (int) $subscription; - $object->duration_value = $duration_value; - $object->duration_unit = $duration_unit; + $object->duration_value = $duration_value; + $object->duration_unit = $duration_unit; $object->note = trim($comment); $object->mail_valid = trim($mail_valid); $object->vote = (int) $vote; @@ -164,11 +164,11 @@ if ($action == 'update' && $user->rights->adherent->configurer) $object->oldcopy = clone $object; $object->label = trim($label); - $object->morphy = trim($morphy); + $object->morphy = trim($morphy); $object->statut = (int) $statut; $object->subscription = (int) $subscription; - $object->duration_value = $duration_value; - $object->duration_unit = $duration_unit; + $object->duration_value = $duration_value; + $object->duration_unit = $duration_unit; $object->note = trim($comment); $object->mail_valid = trim($mail_valid); $object->vote = (boolean) trim($vote); @@ -361,11 +361,11 @@ if ($action == 'create') print ''.$langs->trans("VoteAllowed").''; print $form->selectyesno("vote", 0, 1); print ''; - - print ''.$langs->trans("Duration").''; - print ' '; - print $formproduct->selectMeasuringUnits("duration_unit", "time", $_POST["duration_unit"], 0, 1); - print ''; + + print ''.$langs->trans("Duration").''; + print ' '; + print $formproduct->selectMeasuringUnits("duration_unit", "time", $_POST["duration_unit"], 0, 1); + print ''; print ''.$langs->trans("Description").''; print ''; @@ -451,18 +451,18 @@ if ($rowid > 0) print ''.$langs->trans("VoteAllowed").''; print yn($object->vote); print ''; - - print ''.$langs->trans("Duration").''.$object->duration_value.' '; - if ($object->duration_value > 1) - { - $dur=array("i"=>$langs->trans("Minute"),"h"=>$langs->trans("Hours"),"d"=>$langs->trans("Days"),"w"=>$langs->trans("Weeks"),"m"=>$langs->trans("Months"),"y"=>$langs->trans("Years")); - } - elseif ($object->duration_value > 0) - { - $dur=array("i"=>$langs->trans("Minute"),"h"=>$langs->trans("Hour"),"d"=>$langs->trans("Day"),"w"=>$langs->trans("Week"),"m"=>$langs->trans("Month"),"y"=>$langs->trans("Year")); - } - print (! empty($object->duration_unit) && isset($dur[$object->duration_unit]) ? $langs->trans($dur[$object->duration_unit]) : '')." "; - print ''; + + print ''.$langs->trans("Duration").''.$object->duration_value.' '; + if ($object->duration_value > 1) + { + $dur=array("i"=>$langs->trans("Minute"),"h"=>$langs->trans("Hours"),"d"=>$langs->trans("Days"),"w"=>$langs->trans("Weeks"),"m"=>$langs->trans("Months"),"y"=>$langs->trans("Years")); + } + elseif ($object->duration_value > 0) + { + $dur=array("i"=>$langs->trans("Minute"),"h"=>$langs->trans("Hour"),"d"=>$langs->trans("Day"),"w"=>$langs->trans("Week"),"m"=>$langs->trans("Month"),"y"=>$langs->trans("Year")); + } + print (! empty($object->duration_unit) && isset($dur[$object->duration_unit]) ? $langs->trans($dur[$object->duration_unit]) : '')." "; + print ''; print ''.$langs->trans("Description").''; print nl2br($object->note).""; @@ -811,11 +811,11 @@ if ($rowid > 0) print ''.$langs->trans("VoteAllowed").''; print $form->selectyesno("vote", $object->vote, 1); print ''; - - print ''.$langs->trans("Duration").''; - print ' '; - print $formproduct->selectMeasuringUnits("duration_unit", "time", $object->duration_unit, 0, 1); - print ''; + + print ''.$langs->trans("Duration").''; + print ' '; + print $formproduct->selectMeasuringUnits("duration_unit", "time", $object->duration_unit, 0, 1); + print ''; print ''.$langs->trans("Description").''; print ''; From 5a3347104f2413b6a034f280dd68f94db6672aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 12:57:06 +0100 Subject: [PATCH 852/980] rework an experimental module --- htdocs/admin/receiptprinter.php | 30 +- htdocs/core/class/dolreceiptprinter.class.php | 280 +++++++++++------- .../PrintConnectors/ApiPrintConnector.php | 8 +- htdocs/product/class/product.class.php | 1 - htdocs/product/fournisseurs.php | 3 +- 5 files changed, 188 insertions(+), 134 deletions(-) diff --git a/htdocs/admin/receiptprinter.php b/htdocs/admin/receiptprinter.php index e01fc4402a8..9d3d125f3da 100644 --- a/htdocs/admin/receiptprinter.php +++ b/htdocs/admin/receiptprinter.php @@ -178,7 +178,7 @@ if ($action == 'testtemplate' && $user->admin) { require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $object = new Facture($db); //$object->initAsSpecimen(); - $object->fetch(8); + $object->fetch(18); //var_dump($object->lines); $ret = $printer->sendToPrinter($object, $templateid, 1); if ($ret == 0) { @@ -263,15 +263,13 @@ if ($mode == 'config' && $user->admin) { print $langs->trans("ReceiptPrinterDesc")."

    \n"; - print ''."\n"; + print '
    '."\n"; print ''; print ''; print ''; print ''; print ''; print ''; - print ''; - print ''; print "\n"; $ret = $printer->listprinters(); $nbofprinters = count($printer->listprinters); @@ -290,8 +288,6 @@ if ($mode == 'config' && $user->admin) { print ''; print ''; print ''; - print ''; - print ''; print ''; } else { print ''; @@ -301,13 +297,13 @@ if ($mode == 'config' && $user->admin) { // edit icon print ''; + print ''; // delete icon - print ''; + print ''; // test icon - print ''; print ''; @@ -323,8 +319,6 @@ if ($mode == 'config' && $user->admin) { print ''; print ''; print ''; - print ''; - print ''; print "\n"; } @@ -413,21 +407,19 @@ if ($mode == 'template' && $user->admin) { print ''; print ''; - print ''; - print ''; } else { print ''; print ''; // edit icon print ''; + print ''; // delete icon - print ''; + print ''; // test icon - print ''; } @@ -442,8 +434,6 @@ if ($mode == 'template' && $user->admin) { print ''; print ''; - print ''; - print ''; print '
    '; } else { diff --git a/htdocs/core/class/dolreceiptprinter.class.php b/htdocs/core/class/dolreceiptprinter.class.php index c18c6e0be9b..309f8fcc061 100644 --- a/htdocs/core/class/dolreceiptprinter.class.php +++ b/htdocs/core/class/dolreceiptprinter.class.php @@ -37,55 +37,65 @@ * Underline with double line * Emphasized text * Print in white on black - * Print barcode - * Print barcode customer id * Ticket print width of 57mm * Cut ticket completely * Cut ticket partially * Open cash drawer * Activate buzzer - * - * Code which can be placed everywhere + * Print barcode * Print QR Code - * Print date AAAA-MM-DD - * Print date and time AAAA-MM-DD HH:MM:SS - * Print Year - * Print month in letters (example : november) - * Print month number - * Print day number - * Print day number - * Print table number (for restaurant, bar...) - * Print number of cutlery (for restaurant) - * Print payment method * Print logo stored on printer. Example : 32|32 * Print logo stored on printer. Must be followed by logo code. For old printers. - * Print object lines - * Print object total tax - * Print object local tax - * Print object total - * Print object number - * Print object number after validation - * Print customer firstname - * Print customer name - * Print customer mail - * Print customer phone - * Print customer mobile - * Print customer skype - * Print customer VAT number - * Print customer account balance - * Print vendor name - * Print vendor firstname - * Print vendor mail - * Print customer points - * Print number of points for this object + * Print object lines + * Print object total tax + * Print object local tax + * Print object total + * Print payment method * - * Conditional code at line start (if�then Print) + * Code which can be placed everywhere + * Replaced by date AAAA-MM-DD + * Replaced by date and time AAAA-MM-DD HH:MM:SS + * Replaced by Year + * Replaced by month in letters (example : november) + * Replaced by month number + * Replaced by day number + * Replaced by day number + * Replaced by table number (for restaurant, bar...) + * Replaced by number of cutlery (for restaurant) + * Replaced by object id + * Replaced by object ref + * Replaced by customer firstname + * Replaced by customer name + * Replaced by customer mail + * Replaced by customer phone + * Replaced by customer mobile + * Replaced by customer skype + * Replaced by customer VAT number + * Replaced by customer account balance + * Replaced by mysoc name + * Replaced by mysoc address + * Replaced by mysoc zip + * Replaced by mysoc town + * Replaced by mysoc country + * Replaced by mysoc idprof1 + * Replaced by mysoc idprof2 + * Replaced by mysoc idprof3 + * Replaced by mysoc idprof4 + * Replaced by mysoc idprof5 + * Replaced by mysoc idprof6 + * Replaced by vendor name + * Replaced by vendor firstname + * Replaced by vendor mail + * Replaced by customer points + * Replaced by number of points for this object + * + * Conditional code at line start (if then Print) * Print the line IF a customer is affected to the object * Print the line IF a vendor is affected to the object * Print the line IF Happy Hour - * Print the line IF object is validated + * Print the line IF object is validated * Print the line IF customer points > 0 - * Print the line IF points of the object > 0 + * Print the line IF points of the object > 0 * Print the line IF customer has vat number * Print the line IF customer balance > 0 * @@ -116,6 +126,9 @@ class dolReceiptPrinter extends Printer */ public $db; + /* + * @var string[] array of tags + */ public $tags; public $printer; public $template; @@ -130,8 +143,6 @@ class dolReceiptPrinter extends Printer */ public $errors = array(); - - /** * Constructor * @@ -142,6 +153,7 @@ class dolReceiptPrinter extends Printer $this->db=$db; $this->tags = array( 'dol_line_feed', + 'dol_line_feed_reverse', 'dol_align_left', 'dol_align_center', 'dol_align_right', @@ -162,8 +174,6 @@ class dolReceiptPrinter extends Printer '/dol_emphasized', 'dol_switch_colors', '/dol_switch_colors', - 'dol_print_barcode', - 'dol_print_barcode_customer_id', 'dol_set_print_width_57', 'dol_cut_paper_full', 'dol_cut_paper_partial', @@ -171,39 +181,52 @@ class dolReceiptPrinter extends Printer //'dol_activate_buzzer', 'dol_print_text', 'dol_print_qrcode', - 'dol_print_date', - 'dol_print_date_time', - 'dol_print_year', - 'dol_print_month_letters', - 'dol_print_month', - 'dol_print_day', - 'dol_print_day_letters', - 'dol_print_table', - 'dol_print_cutlery', + 'dol_print_barcode', + 'dol_value_date', + 'dol_value_date_time', + 'dol_value_year', + 'dol_value_month_letters', + 'dol_value_month', + 'dol_value_day', + 'dol_value_day_letters', + 'dol_value_table', + 'dol_value_cutlery', 'dol_print_payment', 'dol_print_logo', 'dol_print_logo_old', - 'dol_print_object_id', - 'dol_print_object_ref', + 'dol_value_object_id', + 'dol_value_object_ref', 'dol_print_object_lines', 'dol_print_object_tax', 'dol_print_object_local_tax', 'dol_print_object_total', 'dol_print_object_number', - 'dol_print_object_number_unique', - 'dol_print_customer_firstname', - 'dol_print_customer_lastname', - 'dol_print_customer_mail', - 'dol_print_customer_phone', - 'dol_print_customer_mobile', - 'dol_print_customer_skype', - 'dol_print_customer_tax_number', - 'dol_print_customer_account_balance', - 'dol_print_vendor_lastname', - 'dol_print_vendor_firstname', - 'dol_print_vendor_mail', - 'dol_print_customer_points', - 'dol_print_object_points', + 'dol_value_customer_firstname', + 'dol_value_customer_lastname', + 'dol_value_customer_mail', + 'dol_value_customer_phone', + 'dol_value_customer_mobile', + 'dol_value_customer_skype', + 'dol_value_customer_tax_number', + 'dol_value_customer_account_balance', + 'dol_value_mysoc_name', + 'dol_value_mysoc_address', + 'dol_value_mysoc_zip', + 'dol_value_mysoc_town', + 'dol_value_mysoc_country', + 'dol_value_mysoc_idprof1', + 'dol_value_mysoc_idprof2', + 'dol_value_mysoc_idprof3', + 'dol_value_mysoc_idprof4', + 'dol_value_mysoc_idprof5', + 'dol_value_mysoc_idprof6', + 'dol_value_mysoc_tva_intra', + 'dol_value_mysoc_capital', + 'dol_value_vendor_lastname', + 'dol_value_vendor_firstname', + 'dol_value_vendor_mail', + 'dol_value_customer_points', + 'dol_value_object_points', 'dol_print_if_customer', 'dol_print_if_vendor', 'dol_print_if_happy_hour', @@ -328,7 +351,7 @@ class dolReceiptPrinter extends Printer 1 => $langs->trans('CONNECTOR_DUMMY'), 2 => $langs->trans('CONNECTOR_FILE_PRINT'), 3 => $langs->trans('CONNECTOR_NETWORK_PRINT'), - 4 => $langs->trans('CONNECTOR_WINDOWS_PRINT') + 4 => $langs->trans('CONNECTOR_WINDOWS_PRINT'), ); $this->resprint = Form::selectarray($htmlname, $options, $selected); @@ -353,7 +376,7 @@ class dolReceiptPrinter extends Printer 1 => $langs->trans('PROFILE_SIMPLE'), 2 => $langs->trans('PROFILE_EPOSTEP'), 3 => $langs->trans('PROFILE_P822D'), - 4 => $langs->trans('PROFILE_STAR') + 4 => $langs->trans('PROFILE_STAR'), ); $this->profileresprint = Form::selectarray($htmlname, $options, $selected); @@ -502,6 +525,7 @@ class dolReceiptPrinter extends Printer $this->printer->text("Hello World!\n"); $testStr = "1234567890"; $this->printer->barcode($testStr); + //$this->printer->qrcode($testStr, Printer::QR_ECLEVEL_M, 5, Printer::QR_MODEL_1); $this->printer->text("Most simple example\n"); $this->printer->feed(); $this->printer->cut(); @@ -525,35 +549,48 @@ class dolReceiptPrinter extends Printer */ public function sendToPrinter($object, $templateid, $printerid) { - global $conf, $mysoc; + global $conf, $mysoc, $langs; $error = 0; $ret = $this->loadTemplate($templateid); - // tags a remplacer par leur valeur avant de parser - $this->template = str_replace('', $object->id, $this->template); - $this->template = str_replace('', $object->ref, $this->template); - $this->template = str_replace('', $object->customer_firstname, $this->template); - $this->template = str_replace('', $object->customer_lastname, $this->template); - $this->template = str_replace('', $object->customer_mail, $this->template); - $this->template = str_replace('', $object->customer_phone, $this->template); - $this->template = str_replace('', $object->customer_mobile, $this->template); - $this->template = str_replace('', $object->customer_skype, $this->template); - $this->template = str_replace('', $object->customer_tax_number, $this->template); - $this->template = str_replace('', $object->customer_account_balance, $this->template); - $this->template = str_replace('', $object->customer_points, $this->template); - $this->template = str_replace('', $object->object_points, $this->template); - $this->template = str_replace('', $object->vendor_firstname, $this->template); - $this->template = str_replace('', $object->vendor_lastname, $this->template); - $this->template = str_replace('', $object->vendor_mail, $this->template); - $this->template = str_replace('', $object->date, $this->template); - $this->template = str_replace('', $object->date_time, $this->template); - $this->template = str_replace('', $object->date_time, $this->template); - $this->template = str_replace('', $object->date_time, $this->template); - $this->template = str_replace('', $object->date_time, $this->template); - $this->template = str_replace('', $object->date_time, $this->template); - $this->template = str_replace('', $object->date_time, $this->template); - $this->template = str_replace('', $object->table, $this->template); - $this->template = str_replace('', $object->cutlery, $this->template); + // tags a remplacer par leur valeur avant de parser (dol_value_xxx) + $this->template = str_replace('', $object->id, $this->template); + $this->template = str_replace('', $object->ref, $this->template); + $this->template = str_replace('', $object->points, $this->template); + $this->template = str_replace('', $object->customer_firstname, $this->template); + $this->template = str_replace('', $object->customer_lastname, $this->template); + $this->template = str_replace('', $object->customer_mail, $this->template); + $this->template = str_replace('', $object->customer_phone, $this->template); + $this->template = str_replace('', $object->customer_mobile, $this->template); + $this->template = str_replace('', $object->customer_skype, $this->template); + $this->template = str_replace('', $object->customer_tax_number, $this->template); + $this->template = str_replace('', $object->customer_account_balance, $this->template); + $this->template = str_replace('', $object->customer_points, $this->template); + $this->template = str_replace('', $mysoc->name, $this->template); + $this->template = str_replace('', $mysoc->address, $this->template); + $this->template = str_replace('', $mysoc->zip, $this->template); + $this->template = str_replace('', $mysoc->town, $this->template); + $this->template = str_replace('', $mysoc->country, $this->template); + $this->template = str_replace('', $mysoc->idprof1, $this->template); + $this->template = str_replace('', $mysoc->idprof2, $this->template); + $this->template = str_replace('', $mysoc->idprof3, $this->template); + $this->template = str_replace('', $mysoc->idprof4, $this->template); + $this->template = str_replace('', $mysoc->idprof5, $this->template); + $this->template = str_replace('', $mysoc->idprof6, $this->template); + $this->template = str_replace('', $mysoc->tva_intra, $this->template); + $this->template = str_replace('', $mysoc->capital, $this->template); + $this->template = str_replace('', $object->vendor_firstname, $this->template); + $this->template = str_replace('', $object->vendor_lastname, $this->template); + $this->template = str_replace('', $object->vendor_mail, $this->template); + $this->template = str_replace('', $object->date, $this->template); + $this->template = str_replace('', $object->date_time, $this->template); + $this->template = str_replace('', $object->date_time, $this->template); + $this->template = str_replace('', $object->date_time, $this->template); + $this->template = str_replace('', $object->date_time, $this->template); + $this->template = str_replace('', $object->date_time, $this->template); + $this->template = str_replace('', $object->date_time, $this->template); + $this->template = str_replace('', $object->table, $this->template); + $this->template = str_replace('', $object->cutlery, $this->template); // parse template $p = xml_parser_create(); @@ -563,7 +600,7 @@ class dolReceiptPrinter extends Printer //print '
    '.print_r($vals, true).'
    '; // print ticket $level = 0; - $nbcaractbyline = 47; + $nbcharactbyline = 48; $ret = $this->initPrinter($printerid); if ($ret>0) { setEventMessages($this->error, $this->errors, 'errors'); @@ -577,15 +614,45 @@ class dolReceiptPrinter extends Printer break; case 'DOL_PRINT_OBJECT_LINES': foreach ($object->lines as $line) { - $spacestoadd = $nbcaractbyline - strlen($line->ref) - strlen(price($line->total_ttc, 'MT')); + //var_dump($line); + $spacestoadd = $nbcharactbyline - strlen($line->ref)- strlen($line->qty) - 10 - 1; $spaces = str_repeat(' ', $spacestoadd); - $this->printer->text($line->ref.$spaces.price($line->total_ttc, 'MT')."\n"); - //var_dump($line->ref); + $this->printer->text($line->ref.$spaces.$line->qty.' '.str_pad(price($line->total_ttc, 'MT'), 10, ' ', STR_PAD_LEFT)."\n"); + $this->printer->text(strip_tags(htmlspecialchars_decode($line->desc))."\n"); } break; + case 'DOL_PRINT_OBJECT_TAX': + //var_dump($object); + $vatarray = array(); + foreach ($object->lines as $line) { + $vatarray[$line->tva_tx] += $line->total_tva; + } + foreach($vatarray as $vatkey => $vatvalue) { + $spacestoadd = $nbcharactbyline - strlen($vatkey)- 12; + $spaces = str_repeat(' ', $spacestoadd); + $this->printer->text($spaces. $vatkey.'% '.str_pad(price($vatvalue, 'MT'), 10, ' ', STR_PAD_LEFT)."\n"); + } + break; + case 'DOL_PRINT_OBJECT_TOTAL': + $title = $langs->trans('TotalHT'); + $spacestoadd = $nbcharactbyline - strlen($title) - 10; + $spaces = str_repeat(' ', $spacestoadd); + $this->printer->text($title.$spaces.str_pad(price($object->total_ht, 'MT'), 10, ' ', STR_PAD_LEFT)."\n"); + $title = $langs->trans('TotalVAT'); + $spacestoadd = $nbcharactbyline - strlen($title) - 10; + $spaces = str_repeat(' ', $spacestoadd); + $this->printer->text($title.$spaces.str_pad(price($object->total_tva, 'MT'), 10, ' ', STR_PAD_LEFT)."\n"); + $title = $langs->trans('TotalTTC'); + $spacestoadd = $nbcharactbyline - strlen($title) - 10; + $spaces = str_repeat(' ', $spacestoadd); + $this->printer->text($title.$spaces.str_pad(price($object->total_ttc, 'MT'), 10, ' ', STR_PAD_LEFT)."\n"); + break; case 'DOL_LINE_FEED': $this->printer->feed(); break; + case 'DOL_LINE_FEED_REVERSE': + $this->printer->feedReverse(); + break; case 'DOL_ALIGN_CENTER': $this->printer->setJustification(Printer::JUSTIFY_CENTER); break; @@ -603,22 +670,22 @@ class dolReceiptPrinter extends Printer break; case 'DOL_PRINT_BARCODE': // $vals[$tplline]['value'] -> barcode($content, $type) - $this->printer->barcode($object->barcode); + // var_dump($vals[$tplline]['value']); + try { + $this->printer->barcode($vals[$tplline]['value']); + } catch (Exception $e) { + $this->errors[] = 'Invalid Barcode value: '.$vals[$tplline]['value']; + $error++; + } break; case 'DOL_PRINT_LOGO': - // $vals[$tplline]['value'] -> barcode($content, $type) $img = EscposImage::load(DOL_DATA_ROOT .'/mycompany/logos/'.$mysoc->logo); $this->printer->graphics($img); break; case 'DOL_PRINT_LOGO_OLD': - // $vals[$tplline]['value'] -> barcode($content, $type) $img = EscposImage::load(DOL_DATA_ROOT .'/mycompany/logos/'.$mysoc->logo); $this->printer->bitImage($img); break; - case 'DOL_PRINT_BARCODE_CUSTOMER_ID': - // $vals[$tplline]['value'] -> barcode($content, $type) - $this->printer->barcode($object->customer_id); - break; case 'DOL_PRINT_QRCODE': // $vals[$tplline]['value'] -> qrCode($content, $ec, $size, $model) $this->printer->qrcode($vals[$tplline]['value']); @@ -631,19 +698,16 @@ class dolReceiptPrinter extends Printer break; case 'DOL_USE_FONT_A': $this->printer->setFont(Printer::FONT_A); - $this->printer->text($vals[$tplline]['value']); break; case 'DOL_USE_FONT_B': $this->printer->setFont(Printer::FONT_B); - $this->printer->text($vals[$tplline]['value']); break; case 'DOL_USE_FONT_C': $this->printer->setFont(Printer::FONT_C); - $this->printer->text($vals[$tplline]['value']); break; default: + $this->printer->text($vals[$tplline]['tag']); $this->printer->text($vals[$tplline]['value']); - $html.= nl2br($vals[$tplline]['value']); $this->errors[] = 'UnknowTag: <'.strtolower($vals[$tplline]['tag']).'>'; $error++; break; diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/ApiPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/ApiPrintConnector.php index 893a4858c8e..80e8c1302af 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/ApiPrintConnector.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/ApiPrintConnector.php @@ -30,9 +30,9 @@ class ApiPrintConnector implements PrintConnector /** * Construct new connector * - * @param string $host - * @param string $printerId - * @param string $apiToken + * @param string $host Host + * @param string $printerId Printer Id + * @param string $apiToken Api Token */ public function __construct($host, $printerId, $apiToken) { @@ -57,6 +57,7 @@ class ApiPrintConnector implements PrintConnector /** * Finish using this print connector (close file, socket, send * accumulated output, etc). + * @return void */ public function finalize() { @@ -94,6 +95,7 @@ class ApiPrintConnector implements PrintConnector * Write data to the print connector. * * @param string $data The data to write + * @return void */ public function write($data) { diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index de14a5621a2..4d8afaad9aa 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -2093,7 +2093,6 @@ class Product extends CommonObject $resql = $this->db->query($sql); if ($resql) { - unset($this->oldcopy); if ($this->db->num_rows($resql) > 0) { diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index f0bedbcd7f5..e1940864dd0 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -269,7 +269,6 @@ if (empty($reshook)) $resql = $db->query("SELECT * FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields WHERE fk_object = " . $object->product_fourn_price_id); // Insert a new extrafields row, if none exists if ($db->num_rows($resql) != 1) { - $sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields (fk_object, "; foreach ($extrafield_values as $key => $value) { $sql .= str_replace('options_', '', $key) . ', '; @@ -291,7 +290,7 @@ if (empty($reshook)) // Execute the sql command from above $db->query($sql); - + $newprice = price2num(GETPOST("price", "alpha")); if ($conf->multicurrency->enabled) From b048a2b4084507fe420eeac6e945b5784e247cd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 15:06:20 +0100 Subject: [PATCH 853/980] can print from takepos --- htdocs/takepos/admin/terminal.php | 17 ++++++++++++++++- htdocs/takepos/ajax/ajax.php | 23 ++++++++++++++++++++++- htdocs/takepos/invoice.php | 15 +++++---------- htdocs/takepos/takepos.php | 19 +++++++++---------- 4 files changed, 52 insertions(+), 22 deletions(-) diff --git a/htdocs/takepos/admin/terminal.php b/htdocs/takepos/admin/terminal.php index 1bbe339c852..24418654457 100644 --- a/htdocs/takepos/admin/terminal.php +++ b/htdocs/takepos/admin/terminal.php @@ -82,6 +82,8 @@ if (GETPOST('action', 'alpha') == 'set') $res = dolibarr_set_const($db, "CASHDESK_ID_WAREHOUSE".$terminaltouse, (GETPOST('CASHDESK_ID_WAREHOUSE'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_WAREHOUSE'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "CASHDESK_NO_DECREASE_STOCK".$terminaltouse, GETPOST('CASHDESK_NO_DECREASE_STOCK'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_PRINTER_TO_USE".$terminaltouse, GETPOST('TAKEPOS_PRINTER_TO_USE'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES".$terminaltouse, GETPOST('TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS".$terminaltouse, GETPOST('TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity); dol_syslog("admin/cashdesk: level ".GETPOST('level', 'alpha')); @@ -201,12 +203,25 @@ if (! empty($conf->stock->enabled)) $printer->listprinters(); $printers = array(); foreach ($printer->listprinters as $key => $value) { - $printers[$key] = $value['name']; + $printers[$value['rowid']] = $value['name']; } print '
    '; print ''; + $printer->listPrintersTemplates(); + $templates = array(); + foreach ($printer->listprinterstemplates as $key => $value) { + $templates[$value['rowid']] = $value['name']; + } + print ''; + print ''; + print ''; + print ''; } } diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 2a27094bb90..40cf0f2f0d3 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -22,7 +22,7 @@ //if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Not disabled cause need to load personalized language //if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Not disabled cause need to load personalized language -if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); +//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); //if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); @@ -36,6 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $category = GETPOST('category', 'alpha'); $action = GETPOST('action', 'alpha'); $term = GETPOST('term', 'alpha'); +$id = GETPOST('id', 'int'); /* @@ -81,4 +82,24 @@ elseif ($action=="search" && $term != '') { else { echo 'Failed to search product : '.$db->lasterror(); } +} elseif ($action == "opendrawer" && $term != '') { + require_once DOL_DOCUMENT_ROOT.'/core/class/dolreceiptprinter.class.php'; + $printer = new dolReceiptPrinter($db); + // chek printer for terminal + if ($conf->global->{'TAKEPOS_PRINTER_TO_USE'.$term} > 0) { + $printer->initPrinter($conf->global->{'TAKEPOS_PRINTER_TO_USE'.$term}); + // open cashdrawer + $printer->pulse(); + $printer->close(); + } +} elseif ($action == "printinvoiceticket" && $term != '' && $id > 0) { + require_once DOL_DOCUMENT_ROOT.'/core/class/dolreceiptprinter.class.php'; + require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; + $printer = new dolReceiptPrinter($db); + // check printer for terminal + if ($conf->global->{'TAKEPOS_PRINTER_TO_USE'.$term} > 0 && $conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$term} > 0) { + $object = new Facture($db); + $object->fetch($id); + $ret = $printer->sendToPrinter($object, $conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$term}, $conf->global->{'TAKEPOS_PRINTER_TO_USE'.$term}); + } } diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index df2a839fb0e..fb40169fa5a 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -554,16 +554,11 @@ function TakeposPrinting(id){ }); } function DolibarrTakeposPrinting(id) { - console.log('Printing ticket ' + id) - var receipt; - // $.get("receipt.php?facid="+id, function(data, status) { - // receipt=data.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, ''); - // $.ajax({ - // type: "POST", - // url: 'http://global->TAKEPOS_PRINT_SERVER; ?>:8111/print', - // data: receipt - // }); - // }); + console.log('Printing invoice ticket ' + id) + $.ajax({ + type: "GET", + url: "" + id, + }); } diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index cf86e8eb635..8966c575f9f 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -539,19 +539,18 @@ function TakeposPrintingTemp(){ function OpenDrawer(){ console.log("OpenDrawer"); $.ajax({ - type: "POST", - url: 'http://global->TAKEPOS_PRINT_SERVER;?>:8111/print', - data: "opendrawer" - }); + type: "POST", + url: 'http://global->TAKEPOS_PRINT_SERVER;?>:8111/print', + data: "opendrawer" + }); } -function DolibarrOpenDrawer(){ +function DolibarrOpenDrawer() { console.log("DolibarrOpenDrawer"); - // $.ajax({ - // type: "POST", - // url: 'http://', - // data: "opendrawer" - // }); + $.ajax({ + type: "GET", + url: "", + }); } function MoreActions(totalactions){ From dd952ace2c8509bb6de7b1de51ff594d53fe4152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 17:09:29 +0100 Subject: [PATCH 854/980] stickler --- .stickler.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.stickler.yml b/.stickler.yml index b68804448b2..6819f76db7d 100644 --- a/.stickler.yml +++ b/.stickler.yml @@ -8,3 +8,7 @@ linters: fixers: enable: true + +files: + ignore: + - 'dev/htdocs/includes/*' From 8a247339c3e303a6b20c0f77e7948f02b4053070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 17:10:47 +0100 Subject: [PATCH 855/980] stickler --- .stickler.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.stickler.yml b/.stickler.yml index 6819f76db7d..642dec27412 100644 --- a/.stickler.yml +++ b/.stickler.yml @@ -11,4 +11,4 @@ fixers: files: ignore: - - 'dev/htdocs/includes/*' + - 'htdocs/includes/*' From 430be760f30018192550db3a61bc47484be1bbf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 17:13:27 +0100 Subject: [PATCH 856/980] restore files modified by stickler --- .../src/Mike42/Escpos/CapabilityProfile.php | 4 +- .../src/Mike42/Escpos/EscposImage.php | 56 +++++------ .../src/Mike42/Escpos/GdEscposImage.php | 4 +- .../src/Mike42/Escpos/ImagickEscposImage.php | 6 +- .../Escpos/PrintBuffers/EscposPrintBuffer.php | 6 +- .../Escpos/PrintBuffers/ImagePrintBuffer.php | 2 +- .../PrintConnectors/ApiPrintConnector.php | 8 +- .../PrintConnectors/CupsPrintConnector.php | 24 ++--- .../PrintConnectors/DummyPrintConnector.php | 2 +- .../PrintConnectors/FilePrintConnector.php | 4 +- .../escpos-php/src/Mike42/Escpos/Printer.php | 92 +++++++++---------- 11 files changed, 103 insertions(+), 105 deletions(-) diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfile.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfile.php index 5c989258201..9a91390594e 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfile.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/CapabilityProfile.php @@ -83,13 +83,13 @@ class CapabilityProfile */ protected $profileId; - + /** * @var string $vendor * Name of manufacturer. */ protected $vendor; - + /** * * @var array $encodings diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/EscposImage.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/EscposImage.php index 0465f0889c5..9a625acb47c 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/EscposImage.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/EscposImage.php @@ -42,51 +42,51 @@ abstract class EscposImage * height of the image. */ protected $imgHeight = 0; - + /** * @var int $imgWidth * width of the image */ protected $imgWidth = 0; - + /** * @var string $imgData * Image data in rows: 1 for black, 0 for white. */ private $imgData = null; - + /** * @var array:string $imgColumnData * Cached column-format data to avoid re-computation */ private $imgColumnData = []; - + /** * @var string $imgRasterData * Cached raster format data to avoid re-computation */ private $imgRasterData = null; - + /** * @var string $filename * Filename of image on disk - null if not loaded from disk. */ private $filename = null; - + /** * @var boolean $allowOptimisations * True to allow faster library-specific rendering shortcuts, false to always just use * image libraries to read pixels (more reproducible between systems). */ private $allowOptimisations = true; - + /** * Construct a new EscposImage. * * @param string $filename Path to image filename, or null to create an empty image. * @param boolean $allowOptimisations True (default) to use any library-specific tricks - * to speed up rendering, false to force the image to be read in pixel-by-pixel, - * which is easier to unit test and more reproducible between systems, but slower. + * to speed up rendering, false to force the image to be read in pixel-by-pixel, + * which is easier to unit test and more reproducible between systems, but slower. */ public function __construct($filename = null, $allowOptimisations = true) { @@ -101,15 +101,15 @@ abstract class EscposImage { return $this -> imgHeight; } - + /** * @return int Number of bytes to represent a row of this image */ public function getHeightBytes() { - return (int) (($this -> imgHeight + 7) / 8); + return (int)(($this -> imgHeight + 7) / 8); } - + /** * @return int Width of the image */ @@ -117,13 +117,13 @@ abstract class EscposImage { return $this -> imgWidth; } - + /** * @return int Number of bytes to represent a row of this image */ public function getWidthBytes() { - return (int) (($this -> imgWidth + 7) / 8); + return (int)(($this -> imgWidth + 7) / 8); } /** @@ -155,7 +155,7 @@ abstract class EscposImage } return $this -> imgRasterData; } - + /** * Output the image in column format. * @@ -199,7 +199,7 @@ abstract class EscposImage $this -> setImgHeight(0); $this -> setImgData(""); } - + /** * Set image data. * @@ -209,7 +209,7 @@ abstract class EscposImage { $this -> imgData = $data; } - + /** * Set image width. * @@ -219,7 +219,7 @@ abstract class EscposImage { $this -> imgWidth = $width; } - + /** * Set image height. * @@ -229,7 +229,7 @@ abstract class EscposImage { $this -> imgHeight = $height; } - + /** * @param string $filename * Filename to load from @@ -242,7 +242,7 @@ abstract class EscposImage // No optimised implementation to provide return null; } - + /** * @param string $filename * Filename to load from @@ -257,7 +257,7 @@ abstract class EscposImage // No optimised implementation to provide return null; } - + /** * Get column fromat from loaded image pixels, line by line. * @@ -279,7 +279,7 @@ abstract class EscposImage return $data; } do { - $byteVal |= (int) $this -> imgData[$y * $widthPixels + $x] << (7 - $bit); + $byteVal |= (int)$this -> imgData[$y * $widthPixels + $x] << (7 - $bit); $x++; $bit++; if ($x >= $widthPixels) { @@ -303,7 +303,7 @@ abstract class EscposImage } return $data; } - + /** * Get column fromat from loaded image pixels, line by line. * @@ -322,7 +322,7 @@ abstract class EscposImage } return $out; } - + /** * Output image in column format. Must be called once for each line of output. * @@ -356,7 +356,7 @@ abstract class EscposImage do { $yReal = $y + $yStart; if ($yReal < $heightPixels) { - $byteVal |= (int) $this -> imgData[$yReal * $widthPixels + $x] << (7 - $bit); + $byteVal |= (int)$this -> imgData[$yReal * $widthPixels + $x] << (7 - $bit); } $y++; $bit++; @@ -381,7 +381,7 @@ abstract class EscposImage } return $data; } - + /** * @return boolean True if GD is loaded, false otherwise */ @@ -389,7 +389,7 @@ abstract class EscposImage { return extension_loaded('gd'); } - + /** * @return boolean True if Imagick is loaded, false otherwise */ @@ -397,7 +397,7 @@ abstract class EscposImage { return extension_loaded('imagick'); } - + /** * This is a convinience method to load an image from file, auto-selecting diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php index 41b17ff4749..32edf76ef7c 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/GdEscposImage.php @@ -33,7 +33,7 @@ class GdEscposImage extends EscposImage /* Set to blank image */ return parent::loadImageData($filename); } - + $ext = pathinfo($filename, PATHINFO_EXTENSION); switch ($ext) { case "png": @@ -73,7 +73,7 @@ class GdEscposImage extends EscposImage /* Faster to average channels, blend alpha and negate the image here than via filters (tested!) */ $cols = imagecolorsforindex($im, imagecolorat($im, $x, $y)); // 1 for white, 0 for black, ignoring transparency - $greyness = (int) (($cols['red'] + $cols['green'] + $cols['blue']) / 3) >> 7; + $greyness = (int)(($cols['red'] + $cols['green'] + $cols['blue']) / 3) >> 7; // 1 for black, 0 for white, taking into account transparency $black = (1 - $greyness) >> ($cols['alpha'] >> 6); $imgData[$y * $imgWidth + $x] = $black; diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php index 8905e6eb051..13851a4d034 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/ImagickEscposImage.php @@ -44,7 +44,7 @@ class ImagickEscposImage extends EscposImage /* Faster to average channels, blend alpha and negate the image here than via filters (tested!) */ $cols = $im -> getImagePixelColor($x, $y); $cols = $cols -> getcolor(); - $greyness = (int) (($cols['r'] + $cols['g'] + $cols['b']) / 3) >> 7; // 1 for white, 0 for black + $greyness = (int)(($cols['r'] + $cols['g'] + $cols['b']) / 3) >> 7; // 1 for white, 0 for black $imgData[$y * $imgWidth + $x] = (1 - $greyness); // 1 for black, 0 for white } } @@ -70,7 +70,7 @@ class ImagickEscposImage extends EscposImage $im = $this -> getImageFromFile($filename); $this -> setImgWidth($im -> getimagewidth()); $this -> setImgHeight($im -> getimageheight()); - + /* Strip transparency */ $im = self::alphaRemove($im); $im -> setformat('pbm'); @@ -95,7 +95,7 @@ class ImagickEscposImage extends EscposImage /* Set to blank image */ return parent::loadImageData($filename); } - + $im = $this -> getImageFromFile($filename); $this -> readImageFromImagick($im); } diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php index f564132ea9f..4e04176521e 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php @@ -136,7 +136,7 @@ class EscposPrintBuffer implements PrintBuffer if ($c == "\r") { /* Skip past Windows line endings (raw usage). */ continue; - } elseif (self::asciiCheck($c, true)) { + } else if (self::asciiCheck($c, true)) { $outp[$j] = $c; } $j++; @@ -167,7 +167,7 @@ class EscposPrintBuffer implements PrintBuffer } return false; } - + /** * Based on the printer's connector, compute (or load a cached copy of) maps * of UTF character to unicode characters for later use. @@ -219,7 +219,7 @@ class EscposPrintBuffer implements PrintBuffer $encode[$num][$utf8] = chr($char); } } - + /* Use generated data */ $dataArray = ["available" => $available, "encode" => $encode, "key" => $cacheKey]; $this -> available = $dataArray["available"]; diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php index c59db99e60b..d4fdefaf130 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintBuffers/ImagePrintBuffer.php @@ -74,7 +74,7 @@ class ImagePrintBuffer implements PrintBuffer $draw = new \ImagickDraw(); $color = new \ImagickPixel('#000000'); $background = new \ImagickPixel('white'); - + /* Create annotation */ if ($this->font !== null) { // Allow fallback on defaults as necessary diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/ApiPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/ApiPrintConnector.php index 80e8c1302af..893a4858c8e 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/ApiPrintConnector.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/ApiPrintConnector.php @@ -30,9 +30,9 @@ class ApiPrintConnector implements PrintConnector /** * Construct new connector * - * @param string $host Host - * @param string $printerId Printer Id - * @param string $apiToken Api Token + * @param string $host + * @param string $printerId + * @param string $apiToken */ public function __construct($host, $printerId, $apiToken) { @@ -57,7 +57,6 @@ class ApiPrintConnector implements PrintConnector /** * Finish using this print connector (close file, socket, send * accumulated output, etc). - * @return void */ public function finalize() { @@ -95,7 +94,6 @@ class ApiPrintConnector implements PrintConnector * Write data to the print connector. * * @param string $data The data to write - * @return void */ public function write($data) { diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php index fb3c3c24d35..497887f37cd 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/CupsPrintConnector.php @@ -21,20 +21,20 @@ use BadMethodCallException; */ class CupsPrintConnector implements PrintConnector { - + /** * @var array $buffer * Buffer of accumilated data. */ private $buffer; - + /** * * @var string $printerName * The name of the target printer. */ private $printerName; - + /** * Construct new CUPS print connector. * @@ -49,7 +49,7 @@ class CupsPrintConnector implements PrintConnector throw new BadMethodCallException("You do not have any printers installed on " . "this system via CUPS. Check 'lpr -a'."); } - + if (array_search($dest, $valid, true) === false) { throw new BadMethodCallException("'$dest' is not a printer on this system. " . "Printers are: [" . implode(", ", $valid) . "]"); @@ -57,7 +57,7 @@ class CupsPrintConnector implements PrintConnector $this->buffer = array (); $this->printerName = $dest; } - + /** * Cause a NOTICE if deconstructed before the job was printed. */ @@ -67,7 +67,7 @@ class CupsPrintConnector implements PrintConnector trigger_error("Print connector was not finalized. Did you forget to close the printer?", E_USER_NOTICE); } } - + /** * Send job to printer. */ @@ -75,7 +75,7 @@ class CupsPrintConnector implements PrintConnector { $data = implode($this->buffer); $this->buffer = null; - + // Build command to work on data $tmpfname = tempnam(sys_get_temp_dir(), 'print-'); file_put_contents($tmpfname, $data); @@ -92,7 +92,7 @@ class CupsPrintConnector implements PrintConnector } unlink($tmpfname); } - + /** * Run a command and throw an exception if it fails, or return the output if it works. * (Basically exec() with good error handling) @@ -129,7 +129,7 @@ class CupsPrintConnector implements PrintConnector } return $outputStr; } - + /** * Read data from the printer. * @@ -140,7 +140,7 @@ class CupsPrintConnector implements PrintConnector { return false; } - + /** * @param string $data */ @@ -148,7 +148,7 @@ class CupsPrintConnector implements PrintConnector { $this->buffer [] = $data; } - + /** * Load a list of CUPS printers. * @@ -164,7 +164,7 @@ class CupsPrintConnector implements PrintConnector } return $ret; } - + /** * Get the item before the first space in a string * diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php index 07c7d7358b1..b376cd87d83 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/DummyPrintConnector.php @@ -41,7 +41,7 @@ final class DummyPrintConnector implements PrintConnector { $this -> buffer = []; } - + public function __destruct() { if ($this -> buffer !== null) { diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php index 04c4c66a1d5..ca44ad0ad7e 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/FilePrintConnector.php @@ -55,7 +55,7 @@ class FilePrintConnector implements PrintConnector $this -> fp = false; } } - + /* (non-PHPdoc) * @see PrintConnector::read() */ @@ -66,7 +66,7 @@ class FilePrintConnector implements PrintConnector } return fread($this -> fp, $len); } - + /** * Write data to the file * diff --git a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php index b7f6767b533..753d2ea8ad3 100644 --- a/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php +++ b/htdocs/includes/mike42/escpos-php/src/Mike42/Escpos/Printer.php @@ -362,7 +362,7 @@ class Printer { /* Set connector */ $this -> connector = $connector; - + /* Set capability profile */ if ($profile === null) { $profile = CapabilityProfile::load('default'); @@ -374,18 +374,18 @@ class Printer $this -> setPrintBuffer($buffer); $this -> initialize(); } - + /** * Print a barcode. * * @param string $content The information to encode. * @param int $type The barcode standard to output. Supported values are - * `Printer::BARCODE_UPCA`, `Printer::BARCODE_UPCE`, `Printer::BARCODE_JAN13`, - * `Printer::BARCODE_JAN8`, `Printer::BARCODE_CODE39`, `Printer::BARCODE_ITF`, - * `Printer::BARCODE_CODABAR`, `Printer::BARCODE_CODE93`, and `Printer::BARCODE_CODE128`. - * If not specified, `Printer::BARCODE_CODE39` will be used. Note that some - * barcode formats only support specific lengths or sets of characters, and that - * available barcode types vary between printers. + * `Printer::BARCODE_UPCA`, `Printer::BARCODE_UPCE`, `Printer::BARCODE_JAN13`, + * `Printer::BARCODE_JAN8`, `Printer::BARCODE_CODE39`, `Printer::BARCODE_ITF`, + * `Printer::BARCODE_CODABAR`, `Printer::BARCODE_CODE93`, and `Printer::BARCODE_CODE128`. + * If not specified, `Printer::BARCODE_CODE39` will be used. Note that some + * barcode formats only support specific lengths or sets of characters, and that + * available barcode types vary between printers. * @throws InvalidArgumentException Where the length or characters used in $content is invalid for the requested barcode format. */ public function barcode($content, $type = Printer::BARCODE_CODE39) @@ -441,7 +441,7 @@ class Printer // More advanced function B, used in preference $this -> connector -> write(self::GS . "k" . chr($type) . chr(strlen($content)) . $content); } - + /** * Print an image, using the older "bit image" command. This creates padding on the right of the image, * if its width is not divisible by 8. @@ -451,8 +451,8 @@ class Printer * * @param EscposImage $img The image to print * @param int $size Size modifier for the image. Must be either `Printer::IMG_DEFAULT` - * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and - * `Printer::IMG_DOUBLE_WIDTH` flags. + * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and + * `Printer::IMG_DOUBLE_WIDTH` flags. */ public function bitImage(EscposImage $img, $size = Printer::IMG_DEFAULT) { @@ -471,8 +471,8 @@ class Printer * * @param EscposImage $img The image to print * @param int $size Size modifier for the image. Must be either `Printer::IMG_DEFAULT` - * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and - * `Printer::IMG_DOUBLE_WIDTH` flags. + * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and + * `Printer::IMG_DOUBLE_WIDTH` flags. */ public function bitImageColumnFormat(EscposImage $img, $size = Printer::IMG_DEFAULT) { @@ -502,7 +502,7 @@ class Printer { $this -> connector -> finalize(); } - + /** * Cut the paper. * @@ -514,7 +514,7 @@ class Printer // TODO validation on cut() inputs $this -> connector -> write(self::GS . "V" . chr($mode) . chr($lines)); } - + /** * Print and feed line / Print and feed n lines. * @@ -565,7 +565,7 @@ class Printer { return $this -> characterTable; } - + /** * @return PrintBuffer */ @@ -606,8 +606,8 @@ class Printer * * @param EscposImage $img The image to print. * @param int $size Size modifier for the image. Must be either `Printer::IMG_DEFAULT` - * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and - * `Printer::IMG_DOUBLE_WIDTH` flags. + * (default), or any combination of the `Printer::IMG_DOUBLE_HEIGHT` and + * `Printer::IMG_DOUBLE_WIDTH` flags. */ public function graphics(EscposImage $img, $size = Printer::IMG_DEFAULT) { @@ -622,7 +622,7 @@ class Printer $this -> wrapperSendGraphicsData('0', 'p', $header . $rasterData); $this -> wrapperSendGraphicsData('0', '2'); } - + /** * Initialize printer. This resets formatting back to the defaults. */ @@ -637,15 +637,15 @@ class Printer * * @param string $content Text or numbers to store in the code * @param int $width Width of a module (pixel) in the printed code. - * Default is 3 dots. + * Default is 3 dots. * @param int $heightMultiplier Multiplier for height of a module. - * Default is 3 times the width. + * Default is 3 times the width. * @param int $dataColumnCount Number of data columns to use. 0 (default) - * is to auto-calculate. Smaller numbers will result in a narrower code, - * making larger pixel sizes possible. Larger numbers require smaller pixel sizes. + * is to auto-calculate. Smaller numbers will result in a narrower code, + * making larger pixel sizes possible. Larger numbers require smaller pixel sizes. * @param float $ec Error correction ratio, from 0.01 to 4.00. Default is 0.10 (10%). * @param int $options Standard code Printer::PDF417_STANDARD with - * start/end bars, or truncated code Printer::PDF417_TRUNCATED with start bars only. + * start/end bars, or truncated code Printer::PDF417_TRUNCATED with start bars only. * @throws Exception If this profile indicates that PDF417 code is not supported */ public function pdf417Code($content, $width = 3, $heightMultiplier = 3, $dataColumnCount = 0, $ec = 0.10, $options = Printer::PDF417_STANDARD) @@ -672,7 +672,7 @@ class Printer $this -> wrapperSend2dCodeData(chr(67), $cn, chr($width)); $this -> wrapperSend2dCodeData(chr(68), $cn, chr($heightMultiplier)); // Set error correction ratio: 1% to 400% - $ec_int = (int) ceil(floatval($ec) * 10); + $ec_int = (int)ceil(floatval($ec) * 10); $this -> wrapperSend2dCodeData(chr(69), $cn, chr($ec_int), '1'); // Send content & print $this -> wrapperSend2dCodeData(chr(80), $cn, $content, '0'); @@ -772,7 +772,7 @@ class Printer $this -> connector -> write(self::ESC . "!" . chr($mode)); } - + /** * Set barcode height. * @@ -788,27 +788,27 @@ class Printer * Set barcode bar width. * * @param int $width Bar width in dots. If not specified, 3 will be used. - * Values above 6 appear to have no effect. + * Values above 6 appear to have no effect. */ public function setBarcodeWidth($width = 3) { self::validateInteger($width, 1, 255, __FUNCTION__); $this -> connector -> write(self::GS . "w" . chr($width)); } - + /** * Set the position for the Human Readable Interpretation (HRI) of barcode characters. * * @param int $position. Use Printer::BARCODE_TEXT_NONE to hide the text (default), - * or any combination of Printer::BARCODE_TEXT_ABOVE and Printer::BARCODE_TEXT_BELOW - * flags to display the text. + * or any combination of Printer::BARCODE_TEXT_ABOVE and Printer::BARCODE_TEXT_BELOW + * flags to display the text. */ public function setBarcodeTextPosition($position = Printer::BARCODE_TEXT_NONE) { self::validateInteger($position, 0, 3, __FUNCTION__, "Barcode text position"); $this -> connector -> write(self::GS . "H" . chr($position)); } - + /** * Turn double-strike mode on/off. * @@ -841,7 +841,7 @@ class Printer self::validateBoolean($on, __FUNCTION__); $this -> connector -> write(self::ESC . "E". ($on ? chr(1) : chr(0))); } - + /** * Select font. Most printers have two fonts (Fonts A and B), and some have a third (Font C). * @@ -852,7 +852,7 @@ class Printer self::validateInteger($font, 0, 2, __FUNCTION__); $this -> connector -> write(self::ESC . "M" . chr($font)); } - + /** * Select justification. * @@ -870,7 +870,7 @@ class Printer * Some printers will allow you to overlap lines with a smaller line feed. * * @param int|null $height The height of each line, in dots. If not set, the printer - * will reset to its default line spacing. + * will reset to its default line spacing. */ public function setLineSpacing($height = null) { @@ -926,7 +926,7 @@ class Printer $this -> buffer = $buffer; $this -> buffer -> setPrinter($this); } - + /** * Set black/white reverse mode on or off. In this mode, text is printed white on a black background. * @@ -995,7 +995,7 @@ class Printer public function text($str = "") { self::validateString($str, __FUNCTION__); - $this -> buffer -> writeText((string) $str); + $this -> buffer -> writeText((string)$str); } /** @@ -1010,7 +1010,7 @@ class Printer self::validateString($str, __FUNCTION__); $this -> connector -> write(self::FS . "&"); $str = iconv("UTF-8", "GBK//IGNORE", $str); - $this -> buffer -> writeTextRaw((string) $str); + $this -> buffer -> writeTextRaw((string)$str); $this -> connector -> write(self::FS . "."); } @@ -1025,9 +1025,9 @@ class Printer public function textRaw($str = "") { self::validateString($str, __FUNCTION__); - $this -> buffer -> writeTextRaw((string) $str); + $this -> buffer -> writeTextRaw((string)$str); } - + /** * Wrapper for GS ( k, to calculate and send correct data length. * @@ -1045,7 +1045,7 @@ class Printer $header = $this -> intLowHigh(strlen($data) + strlen($m) + 2, 2); $this -> connector -> write(self::GS . "(k" . $header . $cn . $fn . $m . $data); } - + /** * Wrapper for GS ( L, to calculate and send correct data length. * @@ -1062,7 +1062,7 @@ class Printer $header = $this -> intLowHigh(strlen($data) + 2, 2); $this -> connector -> write(self::GS . "(L" . $header . $m . $fn . $data); } - + /** * Convert widths and heights to characters. Used before sending graphics to set the size. * @@ -1083,7 +1083,7 @@ class Printer } return implode("", $outp); } - + /** * Generate two characters for a number: In lower and higher parts, or more parts as needed. * @@ -1098,11 +1098,11 @@ class Printer $outp = ""; for ($i = 0; $i < $length; $i++) { $outp .= chr($input % 256); - $input = (int) ($input / 256); + $input = (int)($input / 256); } return $outp; } - + /** * Throw an exception if the argument given is not a boolean * @@ -1148,7 +1148,7 @@ class Printer { self::validateIntegerMulti($test, [[$min, $max]], $source, $argument); } - + /** * Throw an exception if the argument given is not an integer within one of the specified ranges * @@ -1198,7 +1198,7 @@ class Printer throw new InvalidArgumentException("$argument to $source must be a string"); } } - + /** * Throw an exception if the argument doesn't match the given regex. * From 630a150b09dfbf53c179bf04f26a72771755d980 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 3 Nov 2019 17:48:16 +0100 Subject: [PATCH 857/980] Fix multicurrency rate must be visible if currency differs only --- htdocs/comm/propal/card.php | 50 +++++++++++++++-------------- htdocs/commande/card.php | 37 ++++++++++++---------- htdocs/compta/facture/card.php | 52 ++++++++++++++++--------------- htdocs/fourn/commande/card.php | 50 +++++++++++++++-------------- htdocs/fourn/facture/card.php | 47 +++++++++++++++------------- htdocs/supplier_proposal/card.php | 49 +++++++++++++++-------------- 6 files changed, 151 insertions(+), 134 deletions(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 17a4c485b3e..8f28a65473c 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -2202,11 +2202,11 @@ if ($action == 'create') print '
    '.$langs->trans("Name").''.$langs->trans("Type").''.$langs->trans("Profile").''.$langs->trans("Parameters").'
    '.$printer->profileresprint.'
    '.$printer->listprinters[$line]['name'].''; print img_picto($langs->trans("Edit"), 'edit'); - print ''; + print ''; print img_picto($langs->trans("Delete"), 'delete'); - print ''; + print ''; print img_picto($langs->trans("TestPrinter"), 'printer'); print '
    '.$langs->trans("Profile").''.$langs->trans("Parameters").'
    '; print ''.$printer->listprinterstemplates[$line]['name'].''.nl2br(htmlentities($printer->listprinterstemplates[$line]['template'])).''; print img_picto($langs->trans("Edit"), 'edit'); - print ''; + print ''; print img_picto($langs->trans("Delete"), 'delete'); - print ''; + print ''; print img_picto($langs->trans("TestPrinterTemplate"), 'printer'); print ''; print '
    '.$langs->trans("TakeposTerminalPrinterToUse").''; print $form->selectarray('TAKEPOS_PRINTER_TO_USE'.$terminal, $printers, (empty($conf->global->{'TAKEPOS_PRINTER_TO_USE'.$terminal})?'0':$conf->global->{'TAKEPOS_PRINTER_TO_USE'.$terminal}), 1); print '
    '.$langs->trans("TakeposTerminalTemplateToUseForInvoicesTicket").''; + print $form->selectarray('TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal, $templates, (empty($conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal})?'0':$conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal}), 1); + print '
    '.$langs->trans("TakeposTerminalTemplateToUseForOrdersTicket").''; + print $form->selectarray('TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminal, $templates, (empty($conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminal})?'0':$conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminal}), 1); + print '
    '; - if ($action != 'editmulticurrencycode' && $object->statut == Propal::STATUS_DRAFT && $usercancreate) + if ($action != 'editmulticurrencycode' && $object->statut == $object::STATUS_DRAFT && $usercancreate) print ''; print '
    '; print $form->editfieldkey('Currency', 'multicurrency_code', '', $object, 0); print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; print ''; - if ($object->statut == Propal::STATUS_DRAFT && $action == 'editmulticurrencycode' && $usercancreate) { + if ($object->statut == $object::STATUS_DRAFT && $action == 'editmulticurrencycode' && $usercancreate) { $form->form_multicurrency_code($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_code, 'multicurrency_code'); } else { $form->form_multicurrency_code($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_code, 'none'); @@ -2214,29 +2214,33 @@ if ($action == 'create') print ''; // Multicurrency rate - print ''; - print ''; - print ''; - if ($action != 'editmulticurrencyrate' && $object->statut == Propal::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency && $usercancreate) - print ''; - print '
    '; - print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); - print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; - print ''; - if ($object->statut == Propal::STATUS_DRAFT && ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') && $usercancreate) { - if($action == 'actualizemulticurrencyrate') { - list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); - } - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx', $object->multicurrency_code); - } else { - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); - if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { - print '
            '; - print ''.$langs->trans("ActualizeCurrency").''; - print '
    '; + if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) + { + print ''; + print ''; + print ''; + print ''; + if ($action != 'editmulticurrencyrate' && $object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency && $usercancreate) + print ''; + print '
    '; + print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); + print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; + print ''; + if ($object->statut ==$object::STATUS_DRAFT && ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') && $usercancreate) { + if($action == 'actualizemulticurrencyrate') { + list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); + } + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx', $object->multicurrency_code); + } else { + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); + if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { + print '
            '; + print ''.$langs->trans("ActualizeCurrency").''; + print '
    '; + } } + print ''; } - print ''; } if ($soc->outstanding_limit) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 1b7636c70f9..a6427dbd045 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -2287,25 +2287,28 @@ if ($action == 'create' && $usercancreate) print ''; // Multicurrency rate - print ''; - print ''; - $editenable = $usercancreate && $object->multicurrency_code && $object->multicurrency_code != $conf->currency && $object->statut == Commande::STATUS_DRAFT; - print $form->editfieldkey("CurrencyRate", 'multicurrencyrate', '', $object, $editenable); - print ''; - if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { - if($action == 'actualizemulticurrencyrate') { - list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); - } - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx', $object->multicurrency_code); - } else { - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); - if($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { - print '
            '; - print ''.$langs->trans("ActualizeCurrency").''; - print '
    '; + if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) + { + print ''; + print ''; + $editenable = $usercancreate && $object->multicurrency_code && $object->multicurrency_code != $conf->currency && $object->statut == $object::STATUS_DRAFT; + print $form->editfieldkey("CurrencyRate", 'multicurrencyrate', '', $object, $editenable); + print ''; + if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { + if($action == 'actualizemulticurrencyrate') { + list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); + } + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx', $object->multicurrency_code); + } else { + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); + if($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { + print '
            '; + print ''.$langs->trans("ActualizeCurrency").''; + print '
    '; + } } + print ''; } - print ''; } // Delivery delay diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 7296bc524e2..7aff05a8c03 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4030,29 +4030,33 @@ elseif ($id > 0 || ! empty($ref)) $form->form_multicurrency_code($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_code, $htmlname); print ''; - print ''; - print ''; - print ''; - if ($usercancreate && $action != 'editmulticurrencyrate' && ! empty($object->brouillon) && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) - print ''; - print '
    '; - print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); - print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; - print ''; - if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { - if($action == 'actualizemulticurrencyrate') { - list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); - } - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, ($usercancreate?'multicurrency_tx':'none'), $object->multicurrency_code); - } else { - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); - if($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { - print '
            '; - print ''.$langs->trans("ActualizeCurrency").''; - print '
    '; + // Multicurrency rate + if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) + { + print ''; + print ''; + print ''; + if ($usercancreate && $action != 'editmulticurrencyrate' && ! empty($object->brouillon) && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) + print ''; + print '
    '; + print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); + print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; + print ''; + if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { + if($action == 'actualizemulticurrencyrate') { + list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); + } + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, ($usercancreate?'multicurrency_tx':'none'), $object->multicurrency_code); + } else { + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); + if($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { + print '
            '; + print ''.$langs->trans("ActualizeCurrency").''; + print '
    '; + } } + print ''; } - print ''; } // Bank Account @@ -4099,7 +4103,7 @@ elseif ($id > 0 || ! empty($ref)) } $displayWarranty = false; - if( ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)) ) ) + if (($object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)))) { // Check if this situation invoice is 100% for real if(!empty($object->situation_final) && !empty($object->lines)){ @@ -4179,9 +4183,7 @@ elseif ($id > 0 || ! empty($ref)) print ''; - - - if($displayWarranty) + if ($displayWarranty) { // Retained Warranty payment date limit print ''; diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index af9dbac8c0b..aa3bc8fcbea 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2071,7 +2071,7 @@ elseif (! empty($object->id)) print ''; - if ($action != 'editmulticurrencycode' && $object->statut == CommandeFournisseur::STATUS_DRAFT) + if ($action != 'editmulticurrencycode' && $object->statut == $object::STATUS_DRAFT) print ''; print '
    '; print $form->editfieldkey('Currency', 'multicurrency_code', '', $object, 0); print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; print ''; @@ -2083,29 +2083,33 @@ elseif (! empty($object->id)) print ''; // Multicurrency rate - print ''; - print ''; - print ''; - if ($action != 'editmulticurrencyrate' && $object->statut == CommandeFournisseur::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) - print ''; - print '
    '; - print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); - print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; - print ''; - if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { - if($action == 'actualizemulticurrencyrate') { - list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); - } - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx', $object->multicurrency_code); - } else { - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); - if($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { - print '
            '; - print ''.$langs->trans("ActualizeCurrency").''; - print '
    '; + if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) + { + print ''; + print ''; + print ''; + print ''; + if ($action != 'editmulticurrencyrate' && $object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) + print ''; + print '
    '; + print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); + print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; + print ''; + if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { + if($action == 'actualizemulticurrencyrate') { + list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); + } + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx', $object->multicurrency_code); + } else { + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); + if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { + print '
            '; + print ''.$langs->trans("ActualizeCurrency").''; + print '
    '; + } } + print ''; } - print ''; } // Bank Account @@ -2894,8 +2898,6 @@ elseif (! empty($object->id)) } } - - // End of page llxFooter(); $db->close(); diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 310f0fc065f..eeed4354ce0 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -2557,7 +2557,7 @@ else print ''; - if ($action != 'editmulticurrencycode' && $object->statut == FactureFournisseur::STATUS_DRAFT) + if ($action != 'editmulticurrencycode' && $object->statut == $object::STATUS_DRAFT) print ''; print '
    '; print $form->editfieldkey('Currency', 'multicurrency_code', '', $object, 0); print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; print ''; @@ -2569,29 +2569,32 @@ else print ''; // Multicurrency rate - print ''; - print ''; - print ''; - if ($action != 'editmulticurrencyrate' && $object->statut == FactureFournisseur::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) - print ''; - print '
    '; - print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); - print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; - print ''; - if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { - if ($action == 'actualizemulticurrencyrate') { - list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); - } - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx', $object->multicurrency_code); - } else { - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); - if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { - print '
            '; - print ''.$langs->trans("ActualizeCurrency").''; - print '
    '; + if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) + { + print ''; + print ''; + print ''; + if ($action != 'editmulticurrencyrate' && $object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) + print ''; + print '
    '; + print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); + print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; + print ''; + if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { + if ($action == 'actualizemulticurrencyrate') { + list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); + } + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx', $object->multicurrency_code); + } else { + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); + if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { + print '
            '; + print ''.$langs->trans("ActualizeCurrency").''; + print '
    '; + } } + print ''; } - print ''; } // Bank Account diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 1a8aa755e71..340a959d1a2 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1572,7 +1572,7 @@ if ($action == 'create') print ''; - if ($action != 'editmode' && $object->statut == SupplierProposal::STATUS_VALIDATED) + if ($action != 'editmode' && $object->statut == $object::STATUS_VALIDATED) print ''; print '
    '; print $langs->trans('PaymentMode'); print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMode'), 1) . '
    '; print ''; @@ -1592,7 +1592,7 @@ if ($action == 'create') print ''; - if ($action != 'editmulticurrencycode' && $object->statut == SupplierProposal::STATUS_VALIDATED) + if ($action != 'editmulticurrencycode' && $object->statut == $object::STATUS_VALIDATED) print ''; print '
    '; print $form->editfieldkey('Currency', 'multicurrency_code', '', $object, 0); print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; print ''; @@ -1604,29 +1604,32 @@ if ($action == 'create') print ''; // Multicurrency rate - print ''; - print ''; - print ''; - if ($action != 'editmulticurrencyrate' && $object->statut == SupplierProposal::STATUS_VALIDATED && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) - print ''; - print '
    '; - print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); - print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; - print ''; - if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { - if ($action == 'actualizemulticurrencyrate') { - list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); - } - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx', $object->multicurrency_code); - } else { - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); - if ($object->statut == SupplierProposal::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { - print '
            '; - print ''.$langs->trans("ActualizeCurrency").''; - print '
    '; + if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) + { + print ''; + print ''; + print ''; + if ($action != 'editmulticurrencyrate' && $object->statut == $object::STATUS_VALIDATED && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) + print ''; + print '
    '; + print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); + print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; + print ''; + if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { + if ($action == 'actualizemulticurrencyrate') { + list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); + } + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx', $object->multicurrency_code); + } else { + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); + if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { + print '
            '; + print ''.$langs->trans("ActualizeCurrency").''; + print '
    '; + } } + print ''; } - print ''; } /* Not for supplier proposals From 2da87bcdc7c1c0d7530724f1251830025192bec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 17:52:58 +0100 Subject: [PATCH 858/980] Update UserTest.php --- test/phpunit/UserTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/phpunit/UserTest.php b/test/phpunit/UserTest.php index e46d1ac084a..7451b7ba920 100644 --- a/test/phpunit/UserTest.php +++ b/test/phpunit/UserTest.php @@ -192,7 +192,7 @@ class UserTest extends PHPUnit\Framework\TestCase $newlocalobject=new User($this->savdb); $newlocalobject->initAsSpecimen(); $this->changeProperties($newlocalobject); - $this->assertEquals($this->objCompare($localobject, $newlocalobject, true, array('id','socid','societe_id','ref','pass','pass_indatabase','pass_indatabase_crypted','datec','datem','datelastlogin','datepreviouslogin')), array()); // Actual, Expected + $this->assertEquals($this->objCompare($localobject, $newlocalobject, true, array('id','ref','pass','pass_indatabase','pass_indatabase_crypted','datec','datem','datelastlogin','datepreviouslogin')), array()); // Actual, Expected return $localobject; } @@ -304,7 +304,7 @@ class UserTest extends PHPUnit\Framework\TestCase /** * Edit an object to test updates * - * @param mixed $localobject Object Facture + * @param mixed $localobject Object User * @return void */ public function changeProperties(&$localobject) From b8202f6ed4df3a7fbaebc182352d6531415f29a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 18:15:24 +0100 Subject: [PATCH 859/980] wip --- htdocs/core/lib/ticket.lib.php | 4 ++-- htdocs/product/class/product.class.php | 1 - htdocs/product/fournisseurs.php | 3 +-- test/phpunit/UserTest.php | 4 ++-- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index e89e9a79194..a85d8bad2d7 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -834,7 +834,7 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no $filePath = DOL_DATA_ROOT . '/'. $doc->filepath . '/'. $doc->filename; $mime = dol_mimetype($filePath); $file = $actionstatic->id.'/'.$doc->filename; - $thumb = $actionstatic->id.'/thumbs/'.substr($doc->filename, 0, strrpos($doc->filename,'.')).'_mini'.substr($doc->filename, strrpos($doc->filename,'.')); + $thumb = $actionstatic->id.'/thumbs/'.substr($doc->filename, 0, strrpos($doc->filename, '.')).'_mini'.substr($doc->filename, strrpos($doc->filename, '.')); $doclink = dol_buildpath('document.php', 1).'?modulepart=actions&attachment=0&file='.urlencode($file).'&entity='.$conf->entity; $viewlink = dol_buildpath('viewimage.php', 1).'?modulepart=actions&file='.urlencode($thumb).'&entity='.$conf->entity; @@ -881,7 +881,7 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no /** - * @var $object ActionComm + * @var ActionComm $object ActionComm * @return array */ function getTicketActionCommEcmList($object) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index de14a5621a2..4d8afaad9aa 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -2093,7 +2093,6 @@ class Product extends CommonObject $resql = $this->db->query($sql); if ($resql) { - unset($this->oldcopy); if ($this->db->num_rows($resql) > 0) { diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index f0bedbcd7f5..e1940864dd0 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -269,7 +269,6 @@ if (empty($reshook)) $resql = $db->query("SELECT * FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields WHERE fk_object = " . $object->product_fourn_price_id); // Insert a new extrafields row, if none exists if ($db->num_rows($resql) != 1) { - $sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields (fk_object, "; foreach ($extrafield_values as $key => $value) { $sql .= str_replace('options_', '', $key) . ', '; @@ -291,7 +290,7 @@ if (empty($reshook)) // Execute the sql command from above $db->query($sql); - + $newprice = price2num(GETPOST("price", "alpha")); if ($conf->multicurrency->enabled) diff --git a/test/phpunit/UserTest.php b/test/phpunit/UserTest.php index 7451b7ba920..94b2830ffdf 100644 --- a/test/phpunit/UserTest.php +++ b/test/phpunit/UserTest.php @@ -192,7 +192,7 @@ class UserTest extends PHPUnit\Framework\TestCase $newlocalobject=new User($this->savdb); $newlocalobject->initAsSpecimen(); $this->changeProperties($newlocalobject); - $this->assertEquals($this->objCompare($localobject, $newlocalobject, true, array('id','ref','pass','pass_indatabase','pass_indatabase_crypted','datec','datem','datelastlogin','datepreviouslogin')), array()); // Actual, Expected + $this->assertEquals($this->objCompare($localobject, $newlocalobject, true, array('id','socid','societe_id','ref','pass','pass_indatabase','pass_indatabase_crypted','datec','datem','datelastlogin','datepreviouslogin')), array()); // Actual, Expected return $localobject; } @@ -309,7 +309,7 @@ class UserTest extends PHPUnit\Framework\TestCase */ public function changeProperties(&$localobject) { - $localobject->note='New note after update'; + $localobject->note_private='New note after update'; } /** From f25196dcdcb4cc22f137c879021506e3394d12dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 18:27:36 +0100 Subject: [PATCH 860/980] wip --- htdocs/core/lib/ticket.lib.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index a85d8bad2d7..1aa4de3192c 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -881,7 +881,8 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no /** - * @var ActionComm $object ActionComm + * get ticket Actioncomm Ecm List + * @param ActionComm $object ActionComm * @return array */ function getTicketActionCommEcmList($object) From 99a4781a429224356592bfc8299120f029ebca70 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 3 Nov 2019 18:58:26 +0100 Subject: [PATCH 861/980] Fix better support for multicurrency for template invoices --- .../facture/{fiche-rec.php => card-rec.php} | 61 ++++++++++++++++++- htdocs/compta/facture/card.php | 30 +++++---- .../facture/class/facture-rec.class.php | 9 +-- htdocs/core/lib/invoice.lib.php | 2 +- 4 files changed, 83 insertions(+), 19 deletions(-) rename htdocs/compta/facture/{fiche-rec.php => card-rec.php} (95%) diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/card-rec.php similarity index 95% rename from htdocs/compta/facture/fiche-rec.php rename to htdocs/compta/facture/card-rec.php index 2c5cd1a87c7..10eb2ac03c8 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/card-rec.php @@ -25,7 +25,7 @@ */ /** - * \file htdocs/compta/facture/fiche-rec.php + * \file htdocs/compta/facture/card-rec.php * \ingroup facture * \brief Page to show predefined invoice */ @@ -387,6 +387,15 @@ if (empty($reshook)) setEventMessages($object->error, $object->errors, 'errors'); } } + // Multicurrency Code + elseif ($action == 'setmulticurrencycode' && $usercancreate) { + $result = $object->setMulticurrencyCode(GETPOST('multicurrency_code', 'alpha')); + } + + // Multicurrency rate + elseif ($action == 'setmulticurrencyrate' && $usercancreate) { + $result = $object->setMulticurrencyRate(price2num(GETPOST('multicurrency_tx')), GETPOST('calculation_mode', 'int')); + } // Delete line if ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->facture->creer) @@ -1346,6 +1355,52 @@ else } print ''; + // Multicurrency + if (! empty($conf->multicurrency->enabled)) + { + // Multicurrency code + print ''; + print ''; + print ''; + if ($usercancreate && $action != 'editmulticurrencycode' && ! empty($object->brouillon)) + print ''; + print '
    '; + print $form->editfieldkey('Currency', 'multicurrency_code', '', $object, 0); + print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; + print ''; + $htmlname = (($usercancreate && $action == 'editmulticurrencycode')?'multicurrency_code':'none'); + $form->form_multicurrency_code($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_code, $htmlname); + print ''; + + // Multicurrency rate + if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) + { + print ''; + print ''; + print ''; + if ($usercancreate && $action != 'editmulticurrencyrate' && ! empty($object->brouillon) && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) + print ''; + print '
    '; + print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); + print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; + print ''; + if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { + if($action == 'actualizemulticurrencyrate') { + list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); + } + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, ($usercancreate?'multicurrency_tx':'none'), $object->multicurrency_code); + } else { + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); + if($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { + print '
            '; + print ''.$langs->trans("ActualizeCurrency").''; + print '
    '; + } + } + print ''; + } + } + // Help of substitution key $dateexample=dol_now(); if (! empty($object->frequency) && ! empty($object->date_when)) $dateexample=$object->date_when; @@ -1701,11 +1756,11 @@ else { if (empty($object->suspended)) { - print ''; + print ''; } else { - print ''; + print ''; } } diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 7aff05a8c03..fce1fb7cb25 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -2579,7 +2579,6 @@ $title = $langs->trans('InvoiceCustomer') . " - " . $langs->trans('Card'); $helpurl = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; llxHeader('', $title, $helpurl); - // Mode creation if ($action == 'create') @@ -2600,18 +2599,19 @@ if ($action == 'create') { // Parse element/subelement (ex: project_task) $element = $subelement = $origin; + $regs = array(); if (preg_match('/^([^_]+)_([^_]+)/i', $origin, $regs)) { - $element = $regs [1]; - $subelement = $regs [2]; + $element = $reg[1]; + $subelement = $regs[2]; } if ($element == 'project') { $projectid = $originid; - if (!$cond_reglement_id) { + if (empty($cond_reglement_id)) { $cond_reglement_id = $soc->cond_reglement_id; } - if (!$mode_reglement_id) { + if (empty($mode_reglement_id)) { $mode_reglement_id = $soc->mode_reglement_id; } if (!$remise_percent) { @@ -2754,7 +2754,7 @@ if ($action == 'create') // Thirdparty print '' . $langs->trans('Customer') . ''; - if ($soc->id > 0 && ! GETPOST('fac_rec', 'alpha')) + if ($soc->id > 0 && ! GETPOST('fac_rec', 'int')) { print ''; print $soc->getNomUrl(1); @@ -2797,7 +2797,7 @@ if ($action == 'create') $exampletemplateinvoice=new FactureRec($db); - // Overwrite value if creation of invoice is from a predefined invoice + // Overwrite some values if creation of invoice is from a predefined invoice if (empty($origin) && empty($originid) && GETPOST('fac_rec', 'int') > 0) { $invoice_predefined = new FactureRec($db); @@ -2811,6 +2811,9 @@ if ($action == 'create') $note_public = $invoice_predefined->note_public; $note_private = $invoice_predefined->note_private; + if (! empty($invoice_predefined->multicurrency_code)) $currency_code = $invoice_predefined->multicurrency_code; + if (! empty($invoice_predefined->multicurrency_tx)) $currency_tx = $invoice_predefined->multicurrency_tx; + $sql = 'SELECT r.rowid, r.titre as title, r.total_ttc'; $sql .= ' FROM ' . MAIN_DB_PREFIX . 'facture_rec as r'; $sql .= ' WHERE r.fk_soc = ' . $invoice_predefined->socid; @@ -2833,7 +2836,7 @@ if ($action == 'create') if (GETPOST('fac_rec') == $objp->rowid) { print ' selected'; - $exampletemplateinvoice->fetch(GETPOST('fac_rec')); + $exampletemplateinvoice->fetch(GETPOST('fac_rec', 'int')); } print '>' . $objp->title . ' (' . price($objp->total_ttc) . ' ' . $langs->trans("TTC") . ')'; $i ++; @@ -2921,12 +2924,17 @@ if ($action == 'create') // Next situation invoice $opt = $form->selectSituationInvoices(GETPOST('originid'), $socid); + print '
    '; $tmp='' . $langs->trans('NoSituations') . '') || (GETPOST('origin') && GETPOST('origin') != 'facture' && GETPOST('origin') != 'commande')) $tmp.=' disabled'; + if ($opt == ('') || (GETPOST('origin') && GETPOST('origin') != 'facture' && GETPOST('origin') != 'commande')) + $tmp.=' disabled'; $tmp.= '> '; $text = ' '; - $text .= '' . $langs->trans('NoSituations') . '') || (GETPOST('origin') && GETPOST('origin') != 'facture' && GETPOST('origin') != 'commande')) + $text .= ' disabled'; + $text .='>'; $text .= $opt; $text .= ''; $desc = $form->textwithpicto($text, $langs->transnoentities("InvoiceSituationDesc"), 1, 'help', '', 0, 3); @@ -5026,7 +5034,7 @@ elseif ($id > 0 || ! empty($ref)) { if (! $objectidnext && count($object->lines) > 0) { - print '' . $langs->trans("ChangeIntoRepeatableInvoice") . ''; + print '' . $langs->trans("ChangeIntoRepeatableInvoice") . ''; } } diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index 9ff90b7b025..408ce2c1303 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -896,7 +896,7 @@ class FactureRec extends CommonInvoice * @param int $date_start_fill 1=Flag to fill start date when generating invoice * @param int $date_end_fill 1=Flag to fill end date when generating invoice * @param int $fk_fournprice Id of origin supplier price - * @param int $pa_ht Price (without tax) of product when it was bought + * @param int $pa_ht Price (without tax) of product for margin calculation * @return int <0 if KO, Id of line if OK */ public function updateline($rowid, $desc, $pu_ht, $qty, $txtva, $txlocaltax1 = 0, $txlocaltax2 = 0, $fk_product = 0, $remise_percent = 0, $price_base_type = 'HT', $info_bits = 0, $fk_remise_except = '', $pu_ttc = 0, $type = 0, $rang = -1, $special_code = 0, $label = '', $fk_unit = null, $pu_ht_devise = 0, $notrigger = 0, $date_start_fill = 0, $date_end_fill = 0, $fk_fournprice = null, $pa_ht = 0) @@ -920,8 +920,9 @@ class FactureRec extends CommonInvoice $remise_percent=price2num($remise_percent); $qty=price2num($qty); if (empty($info_bits)) $info_bits=0; - $pu_ht=price2num($pu_ht); - $pu_ttc=price2num($pu_ttc); + $pu_ht = price2num($pu_ht); + $pu_ttc = price2num($pu_ttc); + $pu_ht_devise = price2num($pu_ht_devise); $txtva=price2num($txtva); $txlocaltax1 = price2num($txlocaltax1); $txlocaltax2 = price2num($txlocaltax2); @@ -1258,7 +1259,7 @@ class FactureRec extends CommonInvoice } } - $url = DOL_URL_ROOT.'/compta/facture/fiche-rec.php?facid='.$this->id; + $url = DOL_URL_ROOT.'/compta/facture/card-rec.php?facid='.$this->id; if ($short) return $url; diff --git a/htdocs/core/lib/invoice.lib.php b/htdocs/core/lib/invoice.lib.php index 004f355a27a..7dfee37666a 100644 --- a/htdocs/core/lib/invoice.lib.php +++ b/htdocs/core/lib/invoice.lib.php @@ -189,7 +189,7 @@ function invoice_rec_prepare_head($object) $h = 0; $head = array(); - $head[$h][0] = DOL_URL_ROOT.'/compta/facture/fiche-rec.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/compta/facture/card-rec.php?id='.$object->id; $head[$h][1] = $langs->trans("CardBill"); $head[$h][2] = 'card'; $h++; From 06021b23a3aefc733ab226a0d642b2d4e076c891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 19:04:18 +0100 Subject: [PATCH 862/980] wip --- htdocs/user/class/user.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 76d4d431561..6c9ede1a3b2 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -1520,6 +1520,7 @@ class User extends CommonObject $this->signature = trim($this->signature); $this->note_public = trim($this->note_public); $this->note_private = trim($this->note_private); + $this->note = trim($this->note_private); $this->openid = trim(empty($this->openid)?'':$this->openid); // Avoid warning $this->admin = $this->admin?$this->admin:0; $this->address = empty($this->address)?'':$this->address; From f242cf4cc1357ddf4bd6b99edb5a747f18df017a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 3 Nov 2019 19:15:32 +0100 Subject: [PATCH 863/980] Debug modulebuilder --- .../template/myobject_agenda.php | 4 ++- .../modulebuilder/template/myobject_card.php | 30 +++++++++---------- .../template/myobject_document.php | 6 ++-- .../modulebuilder/template/myobject_note.php | 6 ++-- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/htdocs/modulebuilder/template/myobject_agenda.php b/htdocs/modulebuilder/template/myobject_agenda.php index c452d908538..f75e7d352f1 100644 --- a/htdocs/modulebuilder/template/myobject_agenda.php +++ b/htdocs/modulebuilder/template/myobject_agenda.php @@ -93,6 +93,8 @@ if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mymodule->multidir_output[$ob //if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mymodule', $object->id); +$permissiontoadd = $user->rights->mymodule->myobject->write; // Used by the include of actions_addupdatedelete.inc.php + /* * Actions @@ -156,7 +158,7 @@ if ($object->id > 0) { $langs->load("projects"); $morehtmlref.='
    '.$langs->trans('Project') . ' '; - if ($user->rights->mymodule->creer) + if ($permissiontoadd) { if ($action != 'classify') //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index ec70df73583..111e190bcf3 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -105,11 +105,11 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be inclu //$isdraft = (($object->statut == MyObject::STATUS_DRAFT) ? 1 : 0); //$result = restrictedArea($user, 'mymodule', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); -$permissionnote = $user->rights->mymodule->write; // Used by the include of actions_setnotes.inc.php -$permissiondellink = $user->rights->mymodule->write; // Used by the include of actions_dellink.inc.php -$permissionedit = $user->rights->mymodule->write; // Used by the include of actions_lineupdown.inc.php -$permissiontoadd = $user->rights->mymodule->write; // Used by the include of actions_addupdatedelete.inc.php -$permissiontodelete = $user->rights->mymodule->delete || ($permissiontoadd && $object->status == 0); +$permissionnote = $user->rights->mymodule->myobject->write; // Used by the include of actions_setnotes.inc.php +$permissiondellink = $user->rights->mymodule->myobject->write; // Used by the include of actions_dellink.inc.php +$permissionedit = $user->rights->mymodule->myobject->write; // Used by the include of actions_lineupdown.inc.php +$permissiontoadd = $user->rights->mymodule->myobject->write; // Used by the include of actions_addupdatedelete.inc.php +$permissiontodelete = $user->rights->mymodule->myobject->delete || ($permissiontoadd && $object->status == 0); @@ -319,8 +319,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $morehtmlref='
    '; /* // Ref bis - $morehtmlref.=$form->editfieldkey("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->mymodule->creer, 'string', '', 0, 1); - $morehtmlref.=$form->editfieldval("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->mymodule->creer, 'string', '', null, null, '', 1); + $morehtmlref.=$form->editfieldkey("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->mymodule->myobject->creer, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->mymodule->myobject->creer, 'string', '', null, null, '', 1); // Thirdparty $morehtmlref.='
    '.$langs->trans('ThirdParty') . ' : ' . (is_object($object->thirdparty) ? $object->thirdparty->getNomUrl(1) : ''); // Project @@ -328,7 +328,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea { $langs->load("projects"); $morehtmlref.='
    '.$langs->trans('Project') . ' '; - if ($user->rights->mymodule->write) + if ($permissiontoadd) { if ($action != 'classify') $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; @@ -451,13 +451,13 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print '' . $langs->trans('SendMail') . ''."\n"; // Back to draft - if (! empty($user->rights->mymodule->write) && $object->status == BOM::STATUS_VALIDATED) + if (! empty($user->rights->mymodule->myobject->write) && $object->status == BOM::STATUS_VALIDATED) { print '' . $langs->trans("SetToDraft") . ''; } // Modify - if (! empty($user->rights->mymodule->write)) + if (! empty($user->rights->mymodule->myobject->write)) { print ''.$langs->trans("Modify").''."\n"; } @@ -467,13 +467,13 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Clone - if (! empty($user->rights->mymodule->write)) + if (! empty($user->rights->mymodule->myobject->write)) { print '' . $langs->trans("ToClone") . ''."\n"; } /* - if ($user->rights->mymodule->write) + if ($user->rights->mymodule->myobject->write) { if ($object->status == 1) { @@ -487,7 +487,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea */ // Delete (need delete permission, or if draft, just need create/modify permission) - if (! empty($user->rights->mymodule->delete) || (! empty($object->fields['status']) && $object->status == $object::STATUS_DRAFT && ! empty($user->rights->mymodule->write))) + if (! empty($user->rights->mymodule->myobject->delete) || (! empty($object->fields['status']) && $object->status == $object::STATUS_DRAFT && ! empty($user->rights->mymodule->myobject->write))) { print ''.$langs->trans('Delete').''."\n"; } @@ -515,8 +515,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $relativepath = $objref . '/' . $objref . '.pdf'; $filedir = $conf->mymodule->dir_output . '/' . $objref; $urlsource = $_SERVER["PHP_SELF"] . "?id=" . $object->id; - $genallowed = $user->rights->mymodule->read; // If you can read, you can build the PDF to read content - $delallowed = $user->rights->mymodule->create; // If you can create/edit, you can remove a file on card + $genallowed = $user->rights->mymodule->myobject->read; // If you can read, you can build the PDF to read content + $delallowed = $user->rights->mymodule->myobject->create; // If you can create/edit, you can remove a file on card print $formfile->showdocuments('mymodule', $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang); */ diff --git a/htdocs/modulebuilder/template/myobject_document.php b/htdocs/modulebuilder/template/myobject_document.php index f4b918692ca..9d0954d277e 100644 --- a/htdocs/modulebuilder/template/myobject_document.php +++ b/htdocs/modulebuilder/template/myobject_document.php @@ -84,6 +84,8 @@ if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mymodule->multidir_output[$ob //if ($user->socid > 0) $socid = $user->socid; //$result = restrictedArea($user, 'mymodule', $object->id); +$permissiontoadd = $user->rights->mymodule->myobject->write; // Used by the include of actions_addupdatedelete.inc.php + /* @@ -146,9 +148,9 @@ if ($object->id) dol_fiche_end(); $modulepart = 'mymodule'; - //$permission = $user->rights->mymodule->create; + //$permission = $user->rights->mymodule->myobject->write; $permission = 1; - //$permtoedit = $user->rights->mymodule->create; + //$permtoedit = $user->rights->mymodule->myobject->write; $permtoedit = 1; $param = '&id=' . $object->id; diff --git a/htdocs/modulebuilder/template/myobject_note.php b/htdocs/modulebuilder/template/myobject_note.php index 7cf5f418ff1..89a8ed5513b 100644 --- a/htdocs/modulebuilder/template/myobject_note.php +++ b/htdocs/modulebuilder/template/myobject_note.php @@ -67,8 +67,8 @@ $extrafields->fetch_name_optionals_label($object->table_element); include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mymodule->multidir_output[$object->entity] . "/" . $object->id; -$permissionnote=1; -//$permissionnote=$user->rights->mymodule->creer; // Used by the include of actions_setnotes.inc.php +$permissionnote=$user->rights->mymodule->myobject->write; // Used by the include of actions_setnotes.inc.php +$permissiontoadd = $user->rights->mymodule->myobject->write; // Used by the include of actions_addupdatedelete.inc.php @@ -113,7 +113,7 @@ if ($id > 0 || ! empty($ref)) { $langs->load("projects"); $morehtmlref.='
    '.$langs->trans('Project') . ' '; - if ($user->rights->mymodule->creer) + if ($permissiontoadd) { if ($action != 'classify') //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; From fecc9e86a5e9a09a45b018398e05ecc62f533e93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 19:55:56 +0100 Subject: [PATCH 864/980] wip --- test/phpunit/UserTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/phpunit/UserTest.php b/test/phpunit/UserTest.php index 94b2830ffdf..3c89bd52d06 100644 --- a/test/phpunit/UserTest.php +++ b/test/phpunit/UserTest.php @@ -192,7 +192,7 @@ class UserTest extends PHPUnit\Framework\TestCase $newlocalobject=new User($this->savdb); $newlocalobject->initAsSpecimen(); $this->changeProperties($newlocalobject); - $this->assertEquals($this->objCompare($localobject, $newlocalobject, true, array('id','socid','societe_id','ref','pass','pass_indatabase','pass_indatabase_crypted','datec','datem','datelastlogin','datepreviouslogin')), array()); // Actual, Expected + $this->assertEquals($this->objCompare($localobject, $newlocalobject, true, array('id','socid','societe_id','note','ref','pass','pass_indatabase','pass_indatabase_crypted','datec','datem','datelastlogin','datepreviouslogin')), array()); // Actual, Expected return $localobject; } From 877f40a1c85a386fc7affeda1d2cad00425d82bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 20:07:11 +0100 Subject: [PATCH 865/980] price --- htdocs/core/class/dolreceiptprinter.class.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/core/class/dolreceiptprinter.class.php b/htdocs/core/class/dolreceiptprinter.class.php index 309f8fcc061..1d445614981 100644 --- a/htdocs/core/class/dolreceiptprinter.class.php +++ b/htdocs/core/class/dolreceiptprinter.class.php @@ -617,7 +617,7 @@ class dolReceiptPrinter extends Printer //var_dump($line); $spacestoadd = $nbcharactbyline - strlen($line->ref)- strlen($line->qty) - 10 - 1; $spaces = str_repeat(' ', $spacestoadd); - $this->printer->text($line->ref.$spaces.$line->qty.' '.str_pad(price($line->total_ttc, 'MT'), 10, ' ', STR_PAD_LEFT)."\n"); + $this->printer->text($line->ref.$spaces.$line->qty.' '.str_pad(price($line->total_ttc), 10, ' ', STR_PAD_LEFT)."\n"); $this->printer->text(strip_tags(htmlspecialchars_decode($line->desc))."\n"); } break; @@ -630,22 +630,22 @@ class dolReceiptPrinter extends Printer foreach($vatarray as $vatkey => $vatvalue) { $spacestoadd = $nbcharactbyline - strlen($vatkey)- 12; $spaces = str_repeat(' ', $spacestoadd); - $this->printer->text($spaces. $vatkey.'% '.str_pad(price($vatvalue, 'MT'), 10, ' ', STR_PAD_LEFT)."\n"); + $this->printer->text($spaces. $vatkey.'% '.str_pad(price($vatvalue), 10, ' ', STR_PAD_LEFT)."\n"); } break; case 'DOL_PRINT_OBJECT_TOTAL': $title = $langs->trans('TotalHT'); $spacestoadd = $nbcharactbyline - strlen($title) - 10; $spaces = str_repeat(' ', $spacestoadd); - $this->printer->text($title.$spaces.str_pad(price($object->total_ht, 'MT'), 10, ' ', STR_PAD_LEFT)."\n"); + $this->printer->text($title.$spaces.str_pad(price($object->total_ht), 10, ' ', STR_PAD_LEFT)."\n"); $title = $langs->trans('TotalVAT'); $spacestoadd = $nbcharactbyline - strlen($title) - 10; $spaces = str_repeat(' ', $spacestoadd); - $this->printer->text($title.$spaces.str_pad(price($object->total_tva, 'MT'), 10, ' ', STR_PAD_LEFT)."\n"); + $this->printer->text($title.$spaces.str_pad(price($object->total_tva), 10, ' ', STR_PAD_LEFT)."\n"); $title = $langs->trans('TotalTTC'); $spacestoadd = $nbcharactbyline - strlen($title) - 10; $spaces = str_repeat(' ', $spacestoadd); - $this->printer->text($title.$spaces.str_pad(price($object->total_ttc, 'MT'), 10, ' ', STR_PAD_LEFT)."\n"); + $this->printer->text($title.$spaces.str_pad(price($object->total_ttc), 10, ' ', STR_PAD_LEFT)."\n"); break; case 'DOL_LINE_FEED': $this->printer->feed(); From c580aab54307b0ac33d64a5c41d9e03388310659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 20:13:01 +0100 Subject: [PATCH 866/980] wip --- htdocs/user/class/user.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 6c9ede1a3b2..76d4d431561 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -1520,7 +1520,6 @@ class User extends CommonObject $this->signature = trim($this->signature); $this->note_public = trim($this->note_public); $this->note_private = trim($this->note_private); - $this->note = trim($this->note_private); $this->openid = trim(empty($this->openid)?'':$this->openid); // Avoid warning $this->admin = $this->admin?$this->admin:0; $this->address = empty($this->address)?'':$this->address; From 4909a21f8a44fd18823f04fb6c7c130b8a266490 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 3 Nov 2019 22:09:20 +0100 Subject: [PATCH 867/980] Fix css --- htdocs/comm/action/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index 65852d053b4..48faa5ca2c0 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -488,7 +488,7 @@ if ($resql) if (! empty($arrayfields['a.tms']['checked'])) print ''; if (! empty($arrayfields['a.percent']['checked'])) { print ''; - $formactions->form_select_status_action('formaction', $status, 1, 'status', 1, 2); + $formactions->form_select_status_action('formaction', $status, 1, 'status', 1, 2, 'minwidth100imp maxwidth125'); print ajax_combobox('selectstatus'); print ''; } From 569c543ca007872f73b8aad70ad1eb085d655c40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 22:34:57 +0100 Subject: [PATCH 868/980] search --- htdocs/contact/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 6694c363977..1f90e109c5b 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -289,7 +289,6 @@ $title = (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans(" $sql = "SELECT s.rowid as socid, s.nom as name,"; $sql.= " p.rowid, p.lastname as lastname, p.statut, p.firstname, p.zip, p.town, p.poste, p.email, p.no_email,"; -// socialnetworks->>'$.facebook' as facebook $sql.= " p.socialnetworks,"; $sql.= " p.phone as phone_pro, p.phone_mobile, p.phone_perso, p.fax, p.fk_pays, p.priv, p.datec as date_creation, p.tms as date_update,"; $sql.= " co.label as country, co.code as country_code"; @@ -355,7 +354,8 @@ if (strlen($search_fax)) $sql.= natural_search('p.fax', $search_fax); if (! empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { if ($value['active'] && strlen($search_{$key})) { - $sql.= natural_search("p.socialnetworks->'$.".$key."'", $search_{$key}); + //$sql.= natural_search("p.socialnetworks->'$.".$key."'", $search_{$key}); + $sql.= ' AND p.socialnetworks LIKE \'%"'.$key.'":"'.$search_{$key}.'%\''; } } } From d2b7961e873073d52623bad2834066cdae8da88d Mon Sep 17 00:00:00 2001 From: Pierre Ardoin <32256817+mapiolca@users.noreply.github.com> Date: Sun, 3 Nov 2019 22:45:50 +0100 Subject: [PATCH 869/980] Update customerMargins.php --- htdocs/margin/customerMargins.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/margin/customerMargins.php b/htdocs/margin/customerMargins.php index 32ef5030cb8..78d105ad5cb 100644 --- a/htdocs/margin/customerMargins.php +++ b/htdocs/margin/customerMargins.php @@ -220,7 +220,7 @@ if ($socid > 0) $sql.= ' AND s.rowid = '.$socid; if (!$user->rights->societe->client->voir && ! $socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " AND f.fk_statut NOT IN (" . implode(', ', $invoice_status_except_list) . ")"; $sql.= ' AND s.entity IN ('.getEntity('societe').')'; -$sql.= ' AND f.entity IN ('.getEntity('').')'; +$sql.= ' AND f.entity IN ('.getEntity('invoice').')'; $sql.= " AND d.fk_facture = f.rowid"; $sql.= " AND (d.product_type = 0 OR d.product_type = 1)"; if(! empty($TSelectedProducts)) { From 7ecdfa7c96c43f014f267ba748d9b3508f59bfad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 22:51:42 +0100 Subject: [PATCH 870/980] oups --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index a343215c611..6ac83f249ed 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -149,10 +149,9 @@ ALTER TABLE llx_oauth_token ADD COLUMN fk_soc integer DEFAULT NULL after token; ALTER TABLE llx_adherent_type ADD COLUMN duration varchar(6) DEFAULT NULL after morphy; -https://www.royalmail.com/track-your-item#/ -https://www.royalmail.com/track-your-item#/ -https://www.royalmail.com/track-your-item#/ -https://www.royalmail.com/track-your-item#/ +ALTER TABLE llx_mailing ADD COLUMN tms timestamp; +ALTER TABLE llx_mailing_cibles ADD COLUMN tms timestamp; + ALTER TABLE llx_projet ADD COLUMN usage_opportunity integer DEFAULT 0; ALTER TABLE llx_projet ADD COLUMN usage_task integer DEFAULT 1; ALTER TABLE llx_projet CHANGE COLUMN bill_time usage_bill_time integer DEFAULT 0; -- rename existing field From 0de1c5b69ddff24b845bbde3dd7538b0538b34db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 23:29:28 +0100 Subject: [PATCH 871/980] Update list.php Invalid argument supplied for foreach() in /htdocs/asset/list.php on line 410 --- htdocs/asset/list.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/asset/list.php b/htdocs/asset/list.php index 8ea4f46c89d..11bb989a0ed 100644 --- a/htdocs/asset/list.php +++ b/htdocs/asset/list.php @@ -407,9 +407,13 @@ print ''."\n"; // Detect if we need a fetch on each output line $needToFetchEachLine=0; -foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) -{ - if (preg_match('/\$object/', $val)) $needToFetchEachLine++; // There is at least one compute field that use $object +if (is_array($extrafields->attributes[$object->table_element]['computed'])) { + foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) { + if (preg_match('/\$object/', $val)) { + // There is at least one compute field that use $object + $needToFetchEachLine++; + } + } } From 60198190fccb34ee4b8524df5477e81a9e6cb1af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 3 Nov 2019 23:55:04 +0100 Subject: [PATCH 872/980] Update box_propales.php --- htdocs/core/boxes/box_propales.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/core/boxes/box_propales.php b/htdocs/core/boxes/box_propales.php index 1fe8c2a0ed8..0c679e8b02a 100644 --- a/htdocs/core/boxes/box_propales.php +++ b/htdocs/core/boxes/box_propales.php @@ -2,7 +2,7 @@ /* Copyright (C) 2003-2007 Rodolphe Quiedeville * Copyright (C) 2004-2007 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin - * Copyright (C) 2015 Frederic France + * Copyright (C) 2015-2019 Frederic 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 @@ -84,7 +84,7 @@ class box_propales extends ModeleBoxes if ($user->rights->propale->lire) { - $sql = "SELECT s.nom as name, s.rowid as socid, s.code_client, s.logo,"; + $sql = "SELECT s.nom as name, s.rowid as socid, s.code_client, s.logo, s.email,"; $sql.= " p.rowid, p.ref, p.fk_statut, p.datep as dp, p.datec, p.fin_validite, p.date_cloture, p.total_ht, p.tva as total_tva, p.total as total_ttc, p.tms"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql.= ", ".MAIN_DB_PREFIX."propal as p"; @@ -121,6 +121,7 @@ class box_propales extends ModeleBoxes $societestatic->name = $objp->name; $societestatic->code_client = $objp->code_client; $societestatic->logo = $objp->logo; + $societestatic->email = $objp->email; $late = ''; if ($objp->fk_statut == 1 && $dateterm < ($now - $conf->propal->cloture->warning_delay)) { From ed3f95b4a6f106343f3b005b2af919ca32dee38c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 10:55:08 +0100 Subject: [PATCH 873/980] Responsive --- htdocs/core/boxes/box_contracts.php | 2 +- htdocs/core/boxes/box_factures_imp.php | 2 +- htdocs/core/boxes/box_services_expired.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/boxes/box_contracts.php b/htdocs/core/boxes/box_contracts.php index 37fdf45f118..36a4f5416f9 100644 --- a/htdocs/core/boxes/box_contracts.php +++ b/htdocs/core/boxes/box_contracts.php @@ -136,7 +136,7 @@ class box_contracts extends ModeleBoxes // if ($objp->fk_statut == 1 && $dateterm < ($now - $conf->contrat->cloture->warning_delay)) { $late = img_warning($langs->trans("Late")); } $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $contractstatic->getNomUrl(1), 'text2'=> $late, 'asis'=>1 diff --git a/htdocs/core/boxes/box_factures_imp.php b/htdocs/core/boxes/box_factures_imp.php index 992e1333390..563f745f237 100644 --- a/htdocs/core/boxes/box_factures_imp.php +++ b/htdocs/core/boxes/box_factures_imp.php @@ -150,7 +150,7 @@ class box_factures_imp extends ModeleBoxes } $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $facturestatic->getNomUrl(1), 'text2'=> $late, 'asis' => 1, diff --git a/htdocs/core/boxes/box_services_expired.php b/htdocs/core/boxes/box_services_expired.php index 9ddfa229e55..11080eddd82 100644 --- a/htdocs/core/boxes/box_services_expired.php +++ b/htdocs/core/boxes/box_services_expired.php @@ -133,7 +133,7 @@ class box_services_expired extends ModeleBoxes if (($dateline + $conf->contrat->services->expires->warning_delay) < $now) $late=img_warning($langs->trans("Late")); $this->info_box_contents[$i][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $contract->getNomUrl(1), 'asis' => 1 ); From 1053112843c281b3d04d09a08f58299c30dd2783 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 11:07:08 +0100 Subject: [PATCH 874/980] css --- htdocs/core/boxes/box_factures_imp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_factures_imp.php b/htdocs/core/boxes/box_factures_imp.php index 563f745f237..cee85e3e8dc 100644 --- a/htdocs/core/boxes/box_factures_imp.php +++ b/htdocs/core/boxes/box_factures_imp.php @@ -163,7 +163,7 @@ class box_factures_imp extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="nowrap right"', + 'td' => 'class="nowraponall right"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); From 666e60a883961edd2b3e13707ba34cbda2164a0a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 11:40:54 +0100 Subject: [PATCH 875/980] Responsive --- htdocs/contrat/class/contrat.class.php | 14 +++++++------- .../boxes/box_accountancy_last_manual_entries.php | 2 +- htdocs/core/boxes/box_activity.php | 8 ++++---- htdocs/core/boxes/box_boms.php | 2 +- htdocs/core/boxes/box_commandes.php | 4 ++-- htdocs/core/boxes/box_comptes.php | 2 +- htdocs/core/boxes/box_contacts.php | 4 ++-- htdocs/core/boxes/box_factures_fourn_imp.php | 4 ++-- htdocs/core/boxes/box_factures_imp.php | 2 +- htdocs/core/boxes/box_ficheinter.php | 4 ++-- htdocs/core/boxes/box_last_modified_ticket.php | 8 ++++---- htdocs/core/boxes/box_last_ticket.php | 8 ++++---- htdocs/core/boxes/box_lastlogin.php | 4 ++-- htdocs/core/boxes/box_members.php | 4 ++-- htdocs/core/boxes/box_mos.php | 2 +- htdocs/core/boxes/box_project.php | 2 +- htdocs/core/boxes/box_propales.php | 2 +- htdocs/core/boxes/box_supplier_orders.php | 6 +++--- .../box_supplier_orders_awaiting_reception.php | 6 +++--- htdocs/theme/eldy/global.inc.php | 6 ++++++ 20 files changed, 50 insertions(+), 44 deletions(-) diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 0b9c6768eda..7049ce77076 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -1875,8 +1875,8 @@ class Contrat extends CommonObject /** * Return label of a contract status * - * @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Long label of all services, 5=Libelle court + Picto, 6=Picto of all services, 7=Same than 6 with fixed length - * @return string Label + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto, 7=Same than 6 with fixed length + * @return string Label */ public function getLibStatut($mode) { @@ -1888,7 +1888,7 @@ class Contrat extends CommonObject * Renvoi label of a given contrat status * * @param int $status Id status - * @param int $mode 0=Long label, 1=Short label, 2=Picto + Libelle court, 3=Picto, 4=Picto + Long label of all services, 5=Libelle court + Picto, 6=Picto of all services, 7=Same than 6 with fixed length + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto, 7=Same than 6 with fixed length * @return string Label */ public function LibStatut($status, $mode) @@ -1921,13 +1921,13 @@ class Contrat extends CommonObject $text.=':     '; $text.=''; } - $text.=($mode == 7?'':''); + $text.=($mode == 7?'':''); $text.=($mode != 7 || $this->nbofserviceswait > 0) ? ($this->nbofserviceswait.ContratLigne::LibStatut(0, 3, -1, 'class="marginleft2"')).(($mode != 7 || $this->nbofservicesopened || $this->nbofservicesexpired || $this->nbofservicesclosed)?'   ':'') : ''; - $text.=($mode == 7?'':''); + $text.=($mode == 7?'':''); $text.=($mode != 7 || $this->nbofservicesopened > 0) ? ($this->nbofservicesopened.ContratLigne::LibStatut(4, 3, 0, 'class="marginleft2"')).(($mode != 7 || $this->nbofservicesexpired || $this->nbofservicesclosed)?'   ':'') : ''; - $text.=($mode == 7?'':''); + $text.=($mode == 7?'':''); $text.=($mode != 7 || $this->nbofservicesexpired > 0) ? ($this->nbofservicesexpired.ContratLigne::LibStatut(4, 3, 1, 'class="marginleft2"')).(($mode != 7 || $this->nbofservicesclosed)?'   ':'') : ''; - $text.=($mode == 7?'':''); + $text.=($mode == 7?'':''); $text.=($mode != 7 || $this->nbofservicesclosed > 0) ? ($this->nbofservicesclosed.ContratLigne::LibStatut(5, 3, -1, 'class="marginleft2"')) : ''; $text.=($mode == 7?'':''); return $text; diff --git a/htdocs/core/boxes/box_accountancy_last_manual_entries.php b/htdocs/core/boxes/box_accountancy_last_manual_entries.php index 2c788b66b71..474280d17a7 100644 --- a/htdocs/core/boxes/box_accountancy_last_manual_entries.php +++ b/htdocs/core/boxes/box_accountancy_last_manual_entries.php @@ -133,7 +133,7 @@ class box_accountancy_last_manual_entries extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="nowrap right"', + 'td' => 'class="nowraponall right"', 'text' => price($amount, 0, $langs, 0, -1, -1, $conf->currency), ); diff --git a/htdocs/core/boxes/box_activity.php b/htdocs/core/boxes/box_activity.php index 9609f596618..4864bcad371 100644 --- a/htdocs/core/boxes/box_activity.php +++ b/htdocs/core/boxes/box_activity.php @@ -173,7 +173,7 @@ class box_activity extends ModeleBoxes $totalnb += $data[$j]->nb; $this->info_box_contents[$line][3] = array( - 'td' => 'class="nowrap right"', + 'td' => 'class="nowraponall right"', 'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency), ); $this->info_box_contents[$line][4] = array( @@ -255,7 +255,7 @@ class box_activity extends ModeleBoxes $totalnb += $data[$j]->nb; $this->info_box_contents[$line][3] = array( - 'td' => 'class="nowrap right"', + 'td' => 'class="nowraponall right"', 'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency), ); $this->info_box_contents[$line][4] = array( @@ -339,7 +339,7 @@ class box_activity extends ModeleBoxes ); $this->info_box_contents[$line][3] = array( - 'td' => 'class="nowrap right"', + 'td' => 'class="nowraponall right"', 'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency) ); @@ -421,7 +421,7 @@ class box_activity extends ModeleBoxes ); $totalnb += $data[$j]->nb; $this->info_box_contents[$line][3] = array( - 'td' => 'class="nowrap right"', + 'td' => 'class="nowraponall right"', 'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency), ); $this->info_box_contents[$line][4] = array( diff --git a/htdocs/core/boxes/box_boms.php b/htdocs/core/boxes/box_boms.php index b4ac04b3051..8f27ff739e0 100644 --- a/htdocs/core/boxes/box_boms.php +++ b/htdocs/core/boxes/box_boms.php @@ -116,7 +116,7 @@ class box_boms extends ModeleBoxes $productstatic->ref = $objp->product_ref; $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $bomstatic->getNomUrl(1), 'asis' => 1, ); diff --git a/htdocs/core/boxes/box_commandes.php b/htdocs/core/boxes/box_commandes.php index 40d809fd6e7..c8a050ea1d4 100644 --- a/htdocs/core/boxes/box_commandes.php +++ b/htdocs/core/boxes/box_commandes.php @@ -135,7 +135,7 @@ class box_commandes extends ModeleBoxes $societestatic->logo = $objp->logo; $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $commandestatic->getNomUrl(1), 'asis' => 1, ); @@ -147,7 +147,7 @@ class box_commandes extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="nowrap right"', + 'td' => 'class="nowraponall right"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); diff --git a/htdocs/core/boxes/box_comptes.php b/htdocs/core/boxes/box_comptes.php index c4259b6252a..00f5722076c 100644 --- a/htdocs/core/boxes/box_comptes.php +++ b/htdocs/core/boxes/box_comptes.php @@ -154,7 +154,7 @@ class box_comptes extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="liste_total right"', + 'td' => 'class="liste_total right nowraponall"', 'text' => price($solde, 0, $langs, 0, -1, -1, $key) ); $line++; diff --git a/htdocs/core/boxes/box_contacts.php b/htdocs/core/boxes/box_contacts.php index 5bdb17ba0b9..6df28e03e30 100644 --- a/htdocs/core/boxes/box_contacts.php +++ b/htdocs/core/boxes/box_contacts.php @@ -136,13 +136,13 @@ class box_contacts extends ModeleBoxes $societestatic->fournisseur = $objp->fournisseur; $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $contactstatic->getNomUrl(1), 'asis' => 1, ); $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => ($objp->fk_soc > 0 ? $societestatic->getNomUrl(1) : ''), 'asis' => 1, ); diff --git a/htdocs/core/boxes/box_factures_fourn_imp.php b/htdocs/core/boxes/box_factures_fourn_imp.php index 3c0fc6444a2..d4cb4143463 100644 --- a/htdocs/core/boxes/box_factures_fourn_imp.php +++ b/htdocs/core/boxes/box_factures_fourn_imp.php @@ -145,13 +145,13 @@ class box_factures_fourn_imp extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $thirdpartytmp->getNomUrl(1, '', 40), 'asis' => 1, ); $this->info_box_contents[$line][] = array( - 'td' => 'class="nowrap right"', + 'td' => 'class="nowraponall right"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); diff --git a/htdocs/core/boxes/box_factures_imp.php b/htdocs/core/boxes/box_factures_imp.php index cee85e3e8dc..bb6eb95b32f 100644 --- a/htdocs/core/boxes/box_factures_imp.php +++ b/htdocs/core/boxes/box_factures_imp.php @@ -157,7 +157,7 @@ class box_factures_imp extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $societestatic->getNomUrl(1, '', 44), 'asis' => 1, ); diff --git a/htdocs/core/boxes/box_ficheinter.php b/htdocs/core/boxes/box_ficheinter.php index b0851ed28c0..a81b0cf3b86 100644 --- a/htdocs/core/boxes/box_ficheinter.php +++ b/htdocs/core/boxes/box_ficheinter.php @@ -120,13 +120,13 @@ class box_ficheinter extends ModeleBoxes $companystatic->email = $objp->semail; $this->info_box_contents[$i][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $ficheinterstatic->getNomUrl(1), 'asis' => 1, ); $this->info_box_contents[$i][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $companystatic->getNomUrl(1), 'asis' => 1, ); diff --git a/htdocs/core/boxes/box_last_modified_ticket.php b/htdocs/core/boxes/box_last_modified_ticket.php index de2bbd79181..18c2ebfe340 100644 --- a/htdocs/core/boxes/box_last_modified_ticket.php +++ b/htdocs/core/boxes/box_last_modified_ticket.php @@ -140,7 +140,7 @@ class box_last_modified_ticket extends ModeleBoxes // Ticket $this->info_box_contents[$i][0] = array( - 'td' => 'class="left"', + 'td' => 'class="nowraponall"', 'text' => $ticket->getNomUrl(1), 'asis' => 1, ); @@ -148,7 +148,7 @@ class box_last_modified_ticket extends ModeleBoxes // Subject $this->info_box_contents[$i][$r] = array( - 'td' => 'class="left"', + 'td' => 'class="nowrap"', 'text' => $objp->subject, // Some event have no ref 'url' => DOL_URL_ROOT."/ticket/card.php?track_id=".$objp->track_id, ); @@ -156,7 +156,7 @@ class box_last_modified_ticket extends ModeleBoxes // Customer $this->info_box_contents[$i][$r] = array( - 'td' => 'class="left"', + 'td' => 'class="tdoverflowmax150 maxwidth300onsmartphone"', 'text' => $link, 'asis' => 1, ); @@ -172,7 +172,7 @@ class box_last_modified_ticket extends ModeleBoxes // Statut $this->info_box_contents[$i][$r] = array( - 'td' => 'class="right"', + 'td' => 'class="right nowraponall"', 'text' => $ticket->getLibStatut(3) ); $r++; diff --git a/htdocs/core/boxes/box_last_ticket.php b/htdocs/core/boxes/box_last_ticket.php index 4c66c647477..4a0842139d6 100644 --- a/htdocs/core/boxes/box_last_ticket.php +++ b/htdocs/core/boxes/box_last_ticket.php @@ -141,7 +141,7 @@ class box_last_ticket extends ModeleBoxes // Ticket $this->info_box_contents[$i][$r] = array( - 'td' => 'class="left"', + 'td' => 'class="nowraponall"', 'text' => $ticket->getNomUrl(1), 'asis' => 1 ); @@ -149,7 +149,7 @@ class box_last_ticket extends ModeleBoxes // Subject $this->info_box_contents[$i][$r] = array( - 'td' => 'class="left"', + 'td' => '', 'text' => $objp->subject, // Some event have no ref 'url' => DOL_URL_ROOT."/ticket/card.php?track_id=" . $objp->track_id, ); @@ -157,7 +157,7 @@ class box_last_ticket extends ModeleBoxes // Customer $this->info_box_contents[$i][$r] = array( - 'td' => 'class="left"', + 'td' => '', 'text' => $link, 'asis' => 1, ); @@ -172,7 +172,7 @@ class box_last_ticket extends ModeleBoxes // Statut $this->info_box_contents[$i][$r] = array( - 'td' => 'class="right"', + 'td' => 'class="right nowraponall"', 'text' => $ticket->getLibStatut(3), ); $r++; diff --git a/htdocs/core/boxes/box_lastlogin.php b/htdocs/core/boxes/box_lastlogin.php index 970619ee7ac..7a6c74e216c 100644 --- a/htdocs/core/boxes/box_lastlogin.php +++ b/htdocs/core/boxes/box_lastlogin.php @@ -78,11 +78,11 @@ class box_lastlogin extends ModeleBoxes $line=0; $this->info_box_contents[$line][0] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $langs->trans("User"), ); $this->info_box_contents[$line][1] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $user->getNomUrl(-1), 'asis' => 1 ); diff --git a/htdocs/core/boxes/box_members.php b/htdocs/core/boxes/box_members.php index 29f37751ce9..242f26e5d60 100644 --- a/htdocs/core/boxes/box_members.php +++ b/htdocs/core/boxes/box_members.php @@ -124,13 +124,13 @@ class box_members extends ModeleBoxes } $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $memberstatic->getNomUrl(1), 'asis' => 1, ); $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $memberstatic->company, 'url' => DOL_URL_ROOT."/adherents/card.php?rowid=".$objp->rowid, ); diff --git a/htdocs/core/boxes/box_mos.php b/htdocs/core/boxes/box_mos.php index 32ae864fc2f..949f63776f6 100644 --- a/htdocs/core/boxes/box_mos.php +++ b/htdocs/core/boxes/box_mos.php @@ -116,7 +116,7 @@ class box_mos extends ModeleBoxes $productstatic->ref = $objp->product_ref; $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $mostatic->getNomUrl(1), 'asis' => 1, ); diff --git a/htdocs/core/boxes/box_project.php b/htdocs/core/boxes/box_project.php index 48a6d260e2c..edd6c89054d 100644 --- a/htdocs/core/boxes/box_project.php +++ b/htdocs/core/boxes/box_project.php @@ -123,7 +123,7 @@ class box_project extends ModeleBoxes ); $this->info_box_contents[$i][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth200onsmartphone"', 'text' => $objp->title, ); diff --git a/htdocs/core/boxes/box_propales.php b/htdocs/core/boxes/box_propales.php index 1fe8c2a0ed8..58b97c89386 100644 --- a/htdocs/core/boxes/box_propales.php +++ b/htdocs/core/boxes/box_propales.php @@ -128,7 +128,7 @@ class box_propales extends ModeleBoxes } $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $propalstatic->getNomUrl(1), 'text2'=> $late, 'asis' => 1, diff --git a/htdocs/core/boxes/box_supplier_orders.php b/htdocs/core/boxes/box_supplier_orders.php index a95c008688b..881e17f73ec 100644 --- a/htdocs/core/boxes/box_supplier_orders.php +++ b/htdocs/core/boxes/box_supplier_orders.php @@ -124,19 +124,19 @@ class box_supplier_orders extends ModeleBoxes $thirdpartytmp->logo = $objp->logo; $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $supplierorderstatic->getNomUrl(1), 'asis' => 1 ); $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $thirdpartytmp->getNomUrl(1, 'supplier'), 'asis' => 1, ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right nowrap"', + 'td' => 'class="right nowraponall"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); diff --git a/htdocs/core/boxes/box_supplier_orders_awaiting_reception.php b/htdocs/core/boxes/box_supplier_orders_awaiting_reception.php index 326a9297ce8..416dc7f2f2a 100644 --- a/htdocs/core/boxes/box_supplier_orders_awaiting_reception.php +++ b/htdocs/core/boxes/box_supplier_orders_awaiting_reception.php @@ -130,19 +130,19 @@ class box_supplier_orders_awaiting_reception extends ModeleBoxes $thirdpartytmp->logo = $objp->logo; $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $supplierorderstatic->getNomUrl(1), 'asis' => 1 ); $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $thirdpartytmp->getNomUrl(1, 'supplier'), 'asis' => 1, ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right nowrap"', + 'td' => 'class="right nowraponall"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 6db99927fb1..8cab8f2cf5f 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -681,6 +681,12 @@ select.flat.selectlimit { -webkit-line-clamp: 2; overflow: hidden; } +.twolinesmax { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; +} .tablelistofcalendars { margin-top: 25px !important; From 5497e1e10314116e06f0fe5d0712374997a148e5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 11:42:27 +0100 Subject: [PATCH 876/980] css --- htdocs/core/boxes/box_contacts.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_contacts.php b/htdocs/core/boxes/box_contacts.php index 6df28e03e30..129a85208ea 100644 --- a/htdocs/core/boxes/box_contacts.php +++ b/htdocs/core/boxes/box_contacts.php @@ -164,7 +164,7 @@ class box_contacts extends ModeleBoxes if ($num==0) $this->info_box_contents[$line][0] = array( 'td' => 'class="center"', - 'text'=>$langs->trans("NoRecordedContacts"), + 'text'=> ''.$langs->trans("NoRecordedContacts").'', ); $this->db->free($result); From abc6f6ccae4ba3a8377ae2841a0edd61766510a7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 11:43:07 +0100 Subject: [PATCH 877/980] Fix css --- htdocs/core/boxes/box_contacts.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/boxes/box_contacts.php b/htdocs/core/boxes/box_contacts.php index 129a85208ea..9140b9b9d43 100644 --- a/htdocs/core/boxes/box_contacts.php +++ b/htdocs/core/boxes/box_contacts.php @@ -165,6 +165,7 @@ class box_contacts extends ModeleBoxes $this->info_box_contents[$line][0] = array( 'td' => 'class="center"', 'text'=> ''.$langs->trans("NoRecordedContacts").'', + 'asis'=> 1 ); $this->db->free($result); From d934f5e9206734ff55ddd55433483c6e2ee21638 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 11:44:46 +0100 Subject: [PATCH 878/980] Fix wrap --- htdocs/core/boxes/box_services_expired.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_services_expired.php b/htdocs/core/boxes/box_services_expired.php index 11080eddd82..582b5101aa1 100644 --- a/htdocs/core/boxes/box_services_expired.php +++ b/htdocs/core/boxes/box_services_expired.php @@ -145,7 +145,7 @@ class box_services_expired extends ModeleBoxes ); $this->info_box_contents[$i][] = array( - 'td' => 'class="center"', + 'td' => 'class="center nowraponall"', 'text' => dol_print_date($dateline, 'day'), 'text2'=> $late, ); From 8aa2fd04ad59ad431cd4702727103da5670f1b93 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 13:23:48 +0100 Subject: [PATCH 879/980] NEW The integrity checker now show the expected size of files --- build/generate_filelist_xml.php | 4 ++-- htdocs/admin/system/filecheck.php | 11 ++++++++++- htdocs/core/lib/files.lib.php | 5 +++-- htdocs/langs/en_US/admin.lang | 2 ++ htdocs/ticket/class/ticket.class.php | 4 ++-- htdocs/ticket/list.php | 1 + 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/build/generate_filelist_xml.php b/build/generate_filelist_xml.php index d5af14f9171..8a3096ef72a 100755 --- a/build/generate_filelist_xml.php +++ b/build/generate_filelist_xml.php @@ -164,7 +164,7 @@ foreach ($files as $filetmp) { if (filetype($file)=="file") { $md5=md5_file($file); $checksumconcat[]=$md5; - fputs($fp, ' '.$md5.''."\n"); + fputs($fp, ' '.$md5.''."\n"); } } fputs($fp, ' '."\n"); @@ -207,7 +207,7 @@ foreach ($files as $filetmp) { if (filetype($file)=="file") { $md5=md5_file($file); $checksumconcat[]=$md5; - fputs($fp, ' '.$md5.''."\n"); + fputs($fp, ' '.$md5.''."\n"); } } fputs($fp, ' '."\n"); diff --git a/htdocs/admin/system/filecheck.php b/htdocs/admin/system/filecheck.php index 94864123220..fabc0fc9812 100644 --- a/htdocs/admin/system/filecheck.php +++ b/htdocs/admin/system/filecheck.php @@ -239,6 +239,7 @@ if (! $error && $xml) $out.=''; $out.='#'; $out.='' . $langs->trans("Filename") . ''; + $out.='' . $langs->trans("ExpectedSize") . ''; $out.='' . $langs->trans("ExpectedChecksum") . ''; $out.=''."\n"; $tmpfilelist = dol_sort_array($file_list['missing'], 'filename'); @@ -251,6 +252,9 @@ if (! $error && $xml) $out.=''; $out.=''.$i.'' . "\n"; $out.=''.$file['filename'].'' . "\n"; + $out.=''; + if (! empty($file['expectedsize'])) $out.=dol_print_size($file['expectedsize']); + $out.='' . "\n"; $out.=''.$file['expectedmd5'].'' . "\n"; $out.="\n"; } @@ -275,7 +279,8 @@ if (! $error && $xml) $out.='' . $langs->trans("Filename") . ''; $out.='' . $langs->trans("ExpectedChecksum") . ''; $out.='' . $langs->trans("CurrentChecksum") . ''; - $out.='' . $langs->trans("Size") . ''; + $out.='' . $langs->trans("ExpectedSize") . ''; + $out.='' . $langs->trans("CurrentSize") . ''; $out.='' . $langs->trans("DateModification") . ''; $out.=''."\n"; $tmpfilelist2 = dol_sort_array($file_list['updated'], 'filename'); @@ -290,6 +295,9 @@ if (! $error && $xml) $out.=''.$file['filename'].'' . "\n"; $out.=''.$file['expectedmd5'].'' . "\n"; $out.=''.$file['md5'].'' . "\n"; + $out.=''; + if ($file['expectedsize']) $out.=dol_print_size($file['expectedsize']); + $out.='' . "\n"; $size = dol_filesize(DOL_DOCUMENT_ROOT.'/'.$file['filename']); $totalsize += $size; $out.=''.dol_print_size($size).'' . "\n"; @@ -301,6 +309,7 @@ if (! $error && $xml) $out.=''.$langs->trans("Total").'' . "\n"; $out.='' . "\n"; $out.='' . "\n"; + $out.='' . "\n"; $out.=''.dol_print_size($totalsize).'' . "\n"; $out.='' . "\n"; $out.="\n"; diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 711e65edaaa..90c673e9e25 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -3072,13 +3072,14 @@ function getFilesUpdated(&$file_list, SimpleXMLElement $dir, $path = '', $pathre { $filename = $path.$file['name']; $file_list['insignature'][] = $filename; + $expectedsize = (empty($file['size']) ? '' : $file['size']); $expectedmd5 = (string) $file; //if (preg_match('#'.$exclude.'#', $filename)) continue; if (!file_exists($pathref.'/'.$filename)) { - $file_list['missing'][] = array('filename'=>$filename, 'expectedmd5'=>$expectedmd5); + $file_list['missing'][] = array('filename'=>$filename, 'expectedmd5'=>$expectedmd5, 'expectedsize'=>$expectedsize); } else { @@ -3090,7 +3091,7 @@ function getFilesUpdated(&$file_list, SimpleXMLElement $dir, $path = '', $pathre } else { - if ($md5_local != $expectedmd5) $file_list['updated'][] = array('filename'=>$filename, 'expectedmd5'=>$expectedmd5, 'md5'=>(string) $md5_local); + if ($md5_local != $expectedmd5) $file_list['updated'][] = array('filename'=>$filename, 'expectedmd5'=>$expectedmd5, 'expectedsize'=>$expectedsize, 'md5'=>(string) $md5_local); $checksumconcat[] = $md5_local; } } diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 8f052636ac9..ca1344cb88c 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1796,6 +1796,8 @@ FixTZ=TimeZone fix FillFixTZOnlyIfRequired=Example: +2 (fill only if problem experienced) ExpectedChecksum=Expected Checksum CurrentChecksum=Current Checksum +ExpectedSize=Expected size +CurrentSize=Current size ForcedConstants=Required constant values MailToSendProposal=Customer proposals MailToSendOrder=Sales orders diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 494d6b351b8..589067934d5 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -181,13 +181,13 @@ class Ticket extends CommonObject 'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>5, 'notnull'=>1, 'index'=>1), 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'visible'=>1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", 'css'=>''), 'track_id' => array('type'=>'varchar(255)', 'label'=>'TicketTrackId', 'visible'=>-2, 'enabled'=>1, 'position'=>11, 'notnull'=>-1, 'searchall'=>1, 'help'=>"Help text"), - 'fk_user_create' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Author', 'visible'=>1, 'enabled'=>1, 'position'=>15, 'notnull'=>1, 'css'=>'nowraponall'), + 'fk_user_create' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Author', 'visible'=>1, 'enabled'=>1, 'position'=>15, 'notnull'=>1, 'css'=>'tdoverflowmax150 maxwidth150onsmartphone'), 'origin_email' => array('type'=>'mail', 'label'=>'OriginEmail', 'visible'=>-2, 'enabled'=>1, 'position'=>16, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object"), 'subject' => array('type'=>'varchar(255)', 'label'=>'Subject', 'visible'=>1, 'enabled'=>1, 'position'=>18, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth75'), 'type_code' => array('type'=>'varchar(32)', 'label'=>'Type', 'visible'=>1, 'enabled'=>1, 'position'=>20, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth100'), 'category_code' => array('type'=>'varchar(32)', 'label'=>'TicketGroup', 'visible'=>-1, 'enabled'=>1, 'position'=>21, 'notnull'=>-1, 'help'=>"", 'css'=>'maxwidth100'), 'severity_code' => array('type'=>'varchar(32)', 'label'=>'Severity', 'visible'=>1, 'enabled'=>1, 'position'=>22, 'notnull'=>-1, 'help'=>"", 'css'=>'maxwidth100'), - 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'visible'=>1, 'enabled'=>1, 'position'=>50, 'notnull'=>-1, 'index'=>1, 'searchall'=>1, 'help'=>"LinkToThirparty"), + 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'visible'=>1, 'enabled'=>1, 'position'=>50, 'notnull'=>-1, 'index'=>1, 'searchall'=>1, 'help'=>"LinkToThirparty", 'css'=>'tdoverflowmax150 maxwidth150onsmartphone'), 'notify_tiers_at_create' => array('type'=>'integer', 'label'=>'NotifyThirdparty', 'visible'=>-1, 'enabled'=>0, 'position'=>51, 'notnull'=>1, 'index'=>1), 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php', 'label'=>'Project', 'visible'=>-1, 'enabled'=>1, 'position'=>52, 'notnull'=>-1, 'index'=>1, 'help'=>"LinkToProject"), 'timing' => array('type'=>'varchar(20)', 'label'=>'Timing', 'visible'=>-1, 'enabled'=>1, 'position'=>42, 'notnull'=>-1, 'help'=>""), diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 7c6f525a0c4..2d4fe3d146f 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -3,6 +3,7 @@ * Copyright (C) 2016 Christophe Battarel * Copyright (C) 2018 Regis Houssin * Copyright (C) 2019 Juanjo Menent + * Copyright (C) 2019 Laurent Destailleur * * 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 From e2bae297ea65ac2371fed0d4b228367923914a9b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 13:27:01 +0100 Subject: [PATCH 880/980] Look and feel v11 --- htdocs/admin/system/filecheck.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/system/filecheck.php b/htdocs/admin/system/filecheck.php index fabc0fc9812..3fa0905ee42 100644 --- a/htdocs/admin/system/filecheck.php +++ b/htdocs/admin/system/filecheck.php @@ -46,7 +46,7 @@ llxHeader(); print load_fiche_titre($langs->trans("FileCheckDolibarr"), '', 'title_setup'); -print $langs->trans("FileCheckDesc").'

    '; +print ''.$langs->trans("FileCheckDesc").'

    '; // Version print '
    '; From 1f6a86e166f09c4747f5daddc47c1ef9db3db1a3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 13:32:34 +0100 Subject: [PATCH 881/980] Fix look and feel v11 --- htdocs/admin/system/modules.php | 2 +- htdocs/admin/triggers.php | 6 +++--- htdocs/core/class/interfaces.class.php | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/admin/system/modules.php b/htdocs/admin/system/modules.php index 9b6d33e5faa..a3891dc1c46 100644 --- a/htdocs/admin/system/modules.php +++ b/htdocs/admin/system/modules.php @@ -40,7 +40,7 @@ llxHeader(); print load_fiche_titre($langs->trans("AvailableModules"), '', 'title_setup'); -print $langs->trans("ToActivateModule").'
    '; +print ''.$langs->trans("ToActivateModule").'
    '; print "
    \n"; $modules = array(); diff --git a/htdocs/admin/triggers.php b/htdocs/admin/triggers.php index 819688ddcc1..bdc5ee5961d 100644 --- a/htdocs/admin/triggers.php +++ b/htdocs/admin/triggers.php @@ -49,7 +49,7 @@ $form = new Form($db); print load_fiche_titre($langs->trans("TriggersAvailable"), '', 'title_setup'); -print $langs->trans("TriggersDesc")."
    "; +print ''.$langs->trans("TriggersDesc")."
    "; print "
    \n"; @@ -60,8 +60,8 @@ $param = ''; $align = ''; print '
    '; print ''; print ''; -print getTitleFieldOfList($langs->trans("File"), 0, $_SERVER["PHP_SELF"], 'file', "", $param, ($align?'align="'.$align.'"':''), $sortfield, $sortorder, '', 1)."\n"; print getTitleFieldOfList('', 0, $_SERVER["PHP_SELF"], 'none', "", $param, '', $sortfield, $sortorder, '', 1)."\n"; +print getTitleFieldOfList($langs->trans("File"), 0, $_SERVER["PHP_SELF"], 'file', "", $param, ($align?'align="'.$align.'"':''), $sortfield, $sortorder, '', 1)."\n"; print getTitleFieldOfList($langs->trans("Active"), 0, $_SERVER["PHP_SELF"], 'active', "", $param, 'align="center"', $sortfield, $sortorder, '', 1)."\n"; print getTitleFieldOfList('', 0, $_SERVER["PHP_SELF"], 'none', "", $param, ($align?'align="'.$align.'"':''), $sortfield, $sortorder, '', 1)."\n"; print ''; @@ -69,7 +69,7 @@ print ''; foreach ($triggers as $trigger) { print ''; - print ''; + print ''; print ''; print ''; print '\n"; } @@ -1758,13 +1758,13 @@ class FormFile * Show array with linked files * * @param Object $object Object - * @param int $permtodelete Deletion is allowed + * @param int $permissiontodelete Deletion is allowed * @param string $action Action * @param string $selected ??? * @param string $param More param to add into URL * @return int Number of links */ - public function listOfLinks($object, $permtodelete = 1, $action = null, $selected = null, $param = '') + public function listOfLinks($object, $permissiontodelete = 1, $action = null, $selected = null, $param = '') { global $user, $conf, $langs, $user; global $sortfield, $sortorder; @@ -1878,7 +1878,7 @@ class FormFile print ''; print '\n"; diff --git a/htdocs/core/lib/admin.lib.php b/htdocs/core/lib/admin.lib.php index e31f9b6d7d7..1d3f7eb65c3 100644 --- a/htdocs/core/lib/admin.lib.php +++ b/htdocs/core/lib/admin.lib.php @@ -663,7 +663,7 @@ function security_prepare_head() $head[$h][0] = DOL_URL_ROOT."/admin/perms.php"; $head[$h][1] = $langs->trans("DefaultRights"); - if ($nbPerms > 0) $head[$h][1].= ' '.$nbPerms.''; + if ($nbPerms > 0) $head[$h][1].= ''.$nbPerms.''; $head[$h][2] = 'default'; $h++; diff --git a/htdocs/core/lib/agenda.lib.php b/htdocs/core/lib/agenda.lib.php index af859ccca7f..ad17cd259bd 100644 --- a/htdocs/core/lib/agenda.lib.php +++ b/htdocs/core/lib/agenda.lib.php @@ -473,7 +473,7 @@ function actions_prepare_head($object) $listofresourcelinked = $resource->getElementResources($object->element, $object->id); $nbResources=(is_array($listofresourcelinked)?count($listofresourcelinked):0); $head[$h][1] = $langs->trans("Resources"); - if ($nbResources > 0) $head[$h][1].= ' '.($nbResources).''; + if ($nbResources > 0) $head[$h][1].= ''.($nbResources).''; $head[$h][2] = 'resources'; $h++; } diff --git a/htdocs/core/lib/asset.lib.php b/htdocs/core/lib/asset.lib.php index 3b59dfda73d..5c6bac579f2 100644 --- a/htdocs/core/lib/asset.lib.php +++ b/htdocs/core/lib/asset.lib.php @@ -102,7 +102,7 @@ function asset_prepare_head(Asset $object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/asset/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; @@ -111,7 +111,7 @@ function asset_prepare_head(Asset $object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/asset/note.php?id='.$object->id; $head[$h][1] = $langs->trans("Notes"); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; diff --git a/htdocs/core/lib/bank.lib.php b/htdocs/core/lib/bank.lib.php index 91e0b719734..c4849d59adc 100644 --- a/htdocs/core/lib/bank.lib.php +++ b/htdocs/core/lib/bank.lib.php @@ -84,7 +84,7 @@ function bank_prepare_head(Account $object) $head[$h][0] = DOL_URL_ROOT."/compta/bank/releve.php?account=".$object->id; $head[$h][1] = $langs->trans("AccountStatements"); - if (($nbReceipts) > 0) $head[$h][1].= ' '.($nbReceipts).''; + if (($nbReceipts) > 0) $head[$h][1].= ''.($nbReceipts).''; $head[$h][2] = 'statement'; $h++; } @@ -97,7 +97,7 @@ function bank_prepare_head(Account $object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT . "/compta/bank/document.php?account=" . $object->id; $head[$h][1] = $langs->trans("Documents"); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; @@ -186,7 +186,7 @@ function various_payment_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/compta/bank/various_payment/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 9f4f1021b4c..8cb023237d4 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -69,7 +69,7 @@ function societe_prepare_head(Societe $object) $head[$h][0] = DOL_URL_ROOT.'/societe/contact.php?socid='.$object->id; $head[$h][1] = $langs->trans('ContactsAddresses'); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -79,7 +79,7 @@ function societe_prepare_head(Societe $object) $head[$h][0] = DOL_URL_ROOT.'/societe/societecontact.php?socid='.$object->id; $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][1] = $langs->trans("ContactsAddresses"); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -136,7 +136,7 @@ function societe_prepare_head(Societe $object) else { dol_print_error($db); } - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'project'; $h++; } @@ -229,7 +229,7 @@ function societe_prepare_head(Societe $object) $head[$h][0] = DOL_URL_ROOT .'/societe/paymentmodes.php?socid='.$object->id; $head[$h][1] = $title; if ($foundonexternalonlinesystem) $head[$h][1].= ' ...'; - elseif ($nbBankAccount > 0) $head[$h][1].= ' '.$nbBankAccount.''; + elseif ($nbBankAccount > 0) $head[$h][1].= ''.$nbBankAccount.''; $head[$h][2] = 'rib'; $h++; } @@ -257,7 +257,7 @@ function societe_prepare_head(Societe $object) else { dol_print_error($db); } - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'website'; $h++; } @@ -295,7 +295,7 @@ function societe_prepare_head(Societe $object) $head[$h][0] = DOL_URL_ROOT.'/societe/notify/card.php?socid='.$object->id; $head[$h][1] = $langs->trans("Notifications"); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'notify'; $h++; } @@ -306,7 +306,7 @@ function societe_prepare_head(Societe $object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/societe/note.php?id='.$object->id; $head[$h][1] = $langs->trans("Notes"); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; @@ -319,7 +319,7 @@ function societe_prepare_head(Societe $object) $head[$h][0] = DOL_URL_ROOT.'/societe/document.php?socid='.$object->id; $head[$h][1] = $langs->trans("Documents"); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; } diff --git a/htdocs/core/lib/contact.lib.php b/htdocs/core/lib/contact.lib.php index 7e5096bb8c5..0082947d0c1 100644 --- a/htdocs/core/lib/contact.lib.php +++ b/htdocs/core/lib/contact.lib.php @@ -78,7 +78,7 @@ function contact_prepare_head(Contact $object) $nbNote = (empty($object->note_private)?0:1)+(empty($object->note_public)?0:1); $head[$tab][0] = DOL_URL_ROOT.'/contact/note.php?id='.$object->id; $head[$tab][1] = $langs->trans("Note"); - if($nbNote > 0) $head[$tab][1].= ' '.$nbNote.''; + if($nbNote > 0) $head[$tab][1].= ''.$nbNote.''; $head[$tab][2] = 'note'; $tab++; } @@ -90,7 +90,7 @@ function contact_prepare_head(Contact $object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$tab][0] = DOL_URL_ROOT.'/contact/document.php?id='.$object->id; $head[$tab][1] = $langs->trans("Documents"); - if (($nbFiles+$nbLinks) > 0) $head[$tab][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$tab][1].= ''.($nbFiles+$nbLinks).''; $head[$tab][2] = 'documents'; $tab++; diff --git a/htdocs/core/lib/contract.lib.php b/htdocs/core/lib/contract.lib.php index 73cd8e1748e..ec91a2dcc70 100644 --- a/htdocs/core/lib/contract.lib.php +++ b/htdocs/core/lib/contract.lib.php @@ -45,7 +45,7 @@ function contract_prepare_head(Contrat $object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/contrat/contact.php?id='.$object->id; $head[$h][1] = $langs->trans("ContactsAddresses"); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -63,7 +63,7 @@ function contract_prepare_head(Contrat $object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/contrat/note.php?id='.$object->id; $head[$h][1] = $langs->trans("Notes"); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -75,7 +75,7 @@ function contract_prepare_head(Contrat $object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/contrat/document.php?id='.$object->id; $head[$h][1] = $langs->trans("Documents"); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; diff --git a/htdocs/core/lib/donation.lib.php b/htdocs/core/lib/donation.lib.php index d430c9ebd46..16d7d3d8a97 100644 --- a/htdocs/core/lib/donation.lib.php +++ b/htdocs/core/lib/donation.lib.php @@ -85,7 +85,7 @@ function donation_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/don/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; @@ -94,7 +94,7 @@ function donation_prepare_head($object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/don/note.php?id='.$object->id; $head[$h][1] = $langs->trans("Notes"); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; diff --git a/htdocs/core/lib/emailing.lib.php b/htdocs/core/lib/emailing.lib.php index 82c4d5c1ae4..59bb080d93e 100644 --- a/htdocs/core/lib/emailing.lib.php +++ b/htdocs/core/lib/emailing.lib.php @@ -43,7 +43,7 @@ function emailing_prepare_head(Mailing $object) { $head[$h][0] = DOL_URL_ROOT."/comm/mailing/cibles.php?id=".$object->id; $head[$h][1] = $langs->trans("MailRecipients"); - if ($object->nbemail > 0) $head[$h][1].= ' '.$object->nbemail.''; + if ($object->nbemail > 0) $head[$h][1].= ''.$object->nbemail.''; $head[$h][2] = 'targets'; $h++; } diff --git a/htdocs/core/lib/expensereport.lib.php b/htdocs/core/lib/expensereport.lib.php index 02b736dd0cb..caef261b277 100644 --- a/htdocs/core/lib/expensereport.lib.php +++ b/htdocs/core/lib/expensereport.lib.php @@ -52,7 +52,7 @@ function expensereport_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/expensereport/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; @@ -63,7 +63,7 @@ function expensereport_prepare_head($object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/expensereport/note.php?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } diff --git a/htdocs/core/lib/fichinter.lib.php b/htdocs/core/lib/fichinter.lib.php index 6997cd5c028..d707063bbe8 100644 --- a/htdocs/core/lib/fichinter.lib.php +++ b/htdocs/core/lib/fichinter.lib.php @@ -51,7 +51,7 @@ function fichinter_prepare_head($object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/fichinter/contact.php?id='.$object->id; $head[$h][1] = $langs->trans('InterventionContact'); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -83,7 +83,7 @@ function fichinter_prepare_head($object) $head[$h][0] = DOL_URL_ROOT.'/resource/element_resource.php?element=fichinter&element_id='.$object->id; $head[$h][1] = $langs->trans("Resources"); - if ($nbResource > 0) $head[$h][1].= ' '.$nbResource.''; + if ($nbResource > 0) $head[$h][1].= ''.$nbResource.''; $head[$h][2] = 'resource'; $h++; } @@ -95,7 +95,7 @@ function fichinter_prepare_head($object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/fichinter/note.php?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -107,7 +107,7 @@ function fichinter_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/fichinter/document.php?id='.$object->id; $head[$h][1] = $langs->trans("Documents"); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; diff --git a/htdocs/core/lib/fourn.lib.php b/htdocs/core/lib/fourn.lib.php index f11fb417769..9336d9b221f 100644 --- a/htdocs/core/lib/fourn.lib.php +++ b/htdocs/core/lib/fourn.lib.php @@ -48,7 +48,7 @@ function facturefourn_prepare_head($object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/fourn/facture/contact.php?facid='.$object->id; $head[$h][1] = $langs->trans('ContactsAddresses'); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -66,7 +66,7 @@ function facturefourn_prepare_head($object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/fourn/facture/note.php?facid='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -78,7 +78,7 @@ function facturefourn_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/fourn/facture/document.php?facid='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; @@ -116,7 +116,7 @@ function ordersupplier_prepare_head($object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/fourn/commande/contact.php?id='.$object->id; $head[$h][1] = $langs->trans('ContactsAddresses'); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -143,7 +143,7 @@ function ordersupplier_prepare_head($object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/fourn/commande/note.php?id='.$object->id; $head[$h][1] = $langs->trans("Notes"); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -155,7 +155,7 @@ function ordersupplier_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/fourn/commande/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; diff --git a/htdocs/core/lib/holiday.lib.php b/htdocs/core/lib/holiday.lib.php index cb4e1331837..f1b18df11b2 100644 --- a/htdocs/core/lib/holiday.lib.php +++ b/htdocs/core/lib/holiday.lib.php @@ -47,7 +47,7 @@ function holiday_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/holiday/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; diff --git a/htdocs/core/lib/invoice.lib.php b/htdocs/core/lib/invoice.lib.php index 7dfee37666a..f2818f72872 100644 --- a/htdocs/core/lib/invoice.lib.php +++ b/htdocs/core/lib/invoice.lib.php @@ -50,7 +50,7 @@ function facture_prepare_head($object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/compta/facture/contact.php?facid='.$object->id; $head[$h][1] = $langs->trans('ContactsAddresses'); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -71,7 +71,7 @@ function facture_prepare_head($object) else dol_print_error($db); $head[$h][0] = DOL_URL_ROOT.'/compta/facture/prelevement.php?facid='.$object->id; $head[$h][1] = $langs->trans('StandingOrders'); - if ($nbStandingOrders > 0) $head[$h][1].= ' '.$nbStandingOrders.''; + if ($nbStandingOrders > 0) $head[$h][1].= ''.$nbStandingOrders.''; $head[$h][2] = 'standingorders'; $h++; } @@ -89,7 +89,7 @@ function facture_prepare_head($object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/compta/facture/note.php?facid='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -101,7 +101,7 @@ function facture_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/compta/facture/document.php?facid='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; diff --git a/htdocs/core/lib/loan.lib.php b/htdocs/core/lib/loan.lib.php index 4d47c79e6da..e751dfd68c8 100644 --- a/htdocs/core/lib/loan.lib.php +++ b/htdocs/core/lib/loan.lib.php @@ -59,7 +59,7 @@ function loan_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$tab][0] = DOL_URL_ROOT.'/loan/document.php?id='.$object->id; $head[$tab][1] = $langs->trans("Documents"); - if (($nbFiles+$nbLinks) > 0) $head[$tab][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$tab][1].= ''.($nbFiles+$nbLinks).''; $head[$tab][2] = 'documents'; $tab++; @@ -68,7 +68,7 @@ function loan_prepare_head($object) $nbNote = (empty($object->note_private)?0:1)+(empty($object->note_public)?0:1); $head[$tab][0] = DOL_URL_ROOT."/loan/note.php?id=".$object->id; $head[$tab][1] = $langs->trans("Notes"); - if($nbNote > 0) $head[$tab][1].= ' '.$nbNote.''; + if($nbNote > 0) $head[$tab][1].= ''.$nbNote.''; $head[$tab][2] = 'note'; $tab++; } diff --git a/htdocs/core/lib/member.lib.php b/htdocs/core/lib/member.lib.php index 6068246341e..1f643dd8a48 100644 --- a/htdocs/core/lib/member.lib.php +++ b/htdocs/core/lib/member.lib.php @@ -59,7 +59,7 @@ function member_prepare_head(Adherent $object) $head[$h][0] = DOL_URL_ROOT.'/adherents/subscription.php?rowid='.$object->id; $head[$h][1] = $langs->trans("Subscriptions"); $head[$h][2] = 'subscription'; - if ($nbSubscription > 0) $head[$h][1].= ' '.$nbSubscription.''; + if ($nbSubscription > 0) $head[$h][1].= ''.$nbSubscription.''; $h++; } @@ -76,7 +76,7 @@ function member_prepare_head(Adherent $object) $head[$h][0] = DOL_URL_ROOT.'/adherents/note.php?id='.$object->id; $head[$h][1] = $langs->trans("Note"); $head[$h][2] = 'note'; - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $h++; // Attachments @@ -87,7 +87,7 @@ function member_prepare_head(Adherent $object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/adherents/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; diff --git a/htdocs/core/lib/order.lib.php b/htdocs/core/lib/order.lib.php index 558a3d0d035..97ab411bdfc 100644 --- a/htdocs/core/lib/order.lib.php +++ b/htdocs/core/lib/order.lib.php @@ -53,7 +53,7 @@ function commande_prepare_head(Commande $object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/commande/contact.php?id='.$object->id; $head[$h][1] = $langs->trans('ContactsAddresses'); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -67,7 +67,7 @@ function commande_prepare_head(Commande $object) if ($conf->expedition_bon->enabled) $text.=$langs->trans("Shipments"); if ($conf->expedition_bon->enabled && $conf->livraison_bon->enabled) $text.='/'; if ($conf->livraison_bon->enabled) $text.=$langs->trans("Receivings"); - if ($nbShipments > 0 || $nbReceiption > 0) $text.= ' '.($nbShipments?$nbShipments:0); + if ($nbShipments > 0 || $nbReceiption > 0) $text.= ''.($nbShipments?$nbShipments:0); if ($conf->expedition_bon->enabled && $conf->livraison_bon->enabled && ($nbShipments > 0 || $nbReceiption > 0)) $text.='/'; if ($conf->expedition_bon->enabled && $conf->livraison_bon->enabled && ($nbShipments > 0 || $nbReceiption > 0)) $text.= ($nbReceiption?$nbReceiption:0); if ($nbShipments > 0 || $nbReceiption > 0) $text.= ''; @@ -89,7 +89,7 @@ function commande_prepare_head(Commande $object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/commande/note.php?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -101,7 +101,7 @@ function commande_prepare_head(Commande $object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/commande/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index 11c5d50592a..bdeb9181d3b 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -82,7 +82,7 @@ function product_prepare_head($object) $head[$h][1] = $langs->trans('AssociatedProducts'); $nbFatherAndChild = $object->hasFatherOrChild(); - if ($nbFatherAndChild > 0) $head[$h][1].= ' '.$nbFatherAndChild.''; + if ($nbFatherAndChild > 0) $head[$h][1].= ''.$nbFatherAndChild.''; $head[$h][2] = 'subproduct'; $h++; } @@ -110,7 +110,7 @@ function product_prepare_head($object) $head[$h][1] = $langs->trans('ProductCombinations'); $head[$h][2] = 'combinations'; $nbVariant = $prodcomb->countNbOfCombinationForFkProductParent($object->id); - if ($nbVariant > 0) $head[$h][1].= ' '.$nbVariant.''; + if ($nbVariant > 0) $head[$h][1].= ''.$nbVariant.''; } $h++; @@ -160,7 +160,7 @@ function product_prepare_head($object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/product/note.php?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -179,7 +179,7 @@ function product_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/product/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; @@ -228,7 +228,7 @@ function productlot_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT."/product/stock/productlot_document.php?id=".$object->id; $head[$h][1] = $langs->trans("Documents"); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index 825142d1385..8ceca03b0b2 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -48,7 +48,7 @@ function project_prepare_head($object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/projet/contact.php?id='.$object->id; $head[$h][1] = $langs->trans("ProjectContact"); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; @@ -61,7 +61,7 @@ function project_prepare_head($object) require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php'; $taskstatic=new Task($db); $nbTasks=count($taskstatic->getTasksArray(0, 0, $object->id, 0, 0)); - if ($nbTasks > 0) $head[$h][1].= ' '.($nbTasks).''; + if ($nbTasks > 0) $head[$h][1].= ''.($nbTasks).''; $head[$h][2] = 'tasks'; $h++; @@ -82,7 +82,7 @@ function project_prepare_head($object) $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/time.php?withproject=1&projectid='.$object->id; $head[$h][1] = $langs->trans("TimeSpent"); - if ($nbTimeSpent > 0) $head[$h][1].= ' ...'; + if ($nbTimeSpent > 0) $head[$h][1].= '...'; $head[$h][2] = 'timespent'; $h++; } @@ -123,7 +123,7 @@ function project_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/projet/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; @@ -133,7 +133,7 @@ function project_prepare_head($object) $nbComments = $object->getNbComments(); $head[$h][0] = DOL_URL_ROOT.'/projet/comment.php?id='.$object->id; $head[$h][1] = $langs->trans("CommentLink"); - if ($nbComments > 0) $head[$h][1].= ' '.$nbComments.''; + if ($nbComments > 0) $head[$h][1].= ''.$nbComments.''; $head[$h][2] = 'project_comment'; $h++; } @@ -174,7 +174,7 @@ function task_prepare_head($object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/contact.php?id='.$object->id.(GETPOST('withproject')?'&withproject=1':''); $head[$h][1] = $langs->trans("TaskRessourceLinks"); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'task_contact'; $h++; @@ -195,7 +195,7 @@ function task_prepare_head($object) $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/time.php?id='.$object->id.(GETPOST('withproject')?'&withproject=1':''); $head[$h][1] = $langs->trans("TimeSpent"); - if ($nbTimeSpent > 0) $head[$h][1].= ' ...'; + if ($nbTimeSpent > 0) $head[$h][1].= '...'; $head[$h][2] = 'task_time'; $h++; @@ -212,7 +212,7 @@ function task_prepare_head($object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/note.php?id='.$object->id.(GETPOST('withproject')?'&withproject=1':''); $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'task_notes'; $h++; } @@ -224,7 +224,7 @@ function task_prepare_head($object) $nbFiles = count(dol_dir_list($filesdir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'task_document'; $h++; @@ -234,7 +234,7 @@ function task_prepare_head($object) $nbComments = $object->getNbComments(); $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/comment.php?id='.$object->id.(GETPOST('withproject')?'&withproject=1':''); $head[$h][1] = $langs->trans("CommentLink"); - if ($nbComments > 0) $head[$h][1].= ' '.$nbComments.''; + if ($nbComments > 0) $head[$h][1].= ''.$nbComments.''; $head[$h][2] = 'task_comment'; $h++; } @@ -1857,7 +1857,7 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks $i = 0; print ''; - print_liste_field_titre($title.' '.$num.'', $_SERVER["PHP_SELF"], "", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($title.''.$num.'', $_SERVER["PHP_SELF"], "", "", "", "", $sortfield, $sortorder); print_liste_field_titre("ThirdParty", $_SERVER["PHP_SELF"], "", "", "", "", $sortfield, $sortorder); if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { diff --git a/htdocs/core/lib/propal.lib.php b/htdocs/core/lib/propal.lib.php index 2b894b49790..9e12e9d4229 100644 --- a/htdocs/core/lib/propal.lib.php +++ b/htdocs/core/lib/propal.lib.php @@ -60,7 +60,7 @@ function propal_prepare_head($object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/comm/propal/contact.php?id='.$object->id; $head[$h][1] = $langs->trans('ContactsAddresses'); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -78,7 +78,7 @@ function propal_prepare_head($object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/comm/propal/note.php?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -90,7 +90,7 @@ function propal_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/comm/propal/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; diff --git a/htdocs/core/lib/reception.lib.php b/htdocs/core/lib/reception.lib.php index 15ca4de37e0..33591b3beea 100644 --- a/htdocs/core/lib/reception.lib.php +++ b/htdocs/core/lib/reception.lib.php @@ -60,7 +60,7 @@ function reception_prepare_head(Reception $object) $nbContact = count($objectsrc->liste_contact(-1, 'internal')) + count($objectsrc->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT."/reception/contact.php?id=".$object->id; $head[$h][1] = $langs->trans("ContactsAddresses"); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -70,7 +70,7 @@ function reception_prepare_head(Reception $object) if (!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT."/reception/note.php?id=".$object->id; $head[$h][1] = $langs->trans("Notes"); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; diff --git a/htdocs/theme/eldy/badges.inc.php b/htdocs/theme/eldy/badges.inc.php index 27fc142d991..75dcde0c2e4 100644 --- a/htdocs/theme/eldy/badges.inc.php +++ b/htdocs/theme/eldy/badges.inc.php @@ -44,7 +44,7 @@ a.badge:focus, a.badge:hover { text-decoration: none; } -.liste_titre .badge { +.liste_titre .badge:not(.nochangebackground) { background-color: ; color: #fff; } diff --git a/htdocs/theme/md/badges.inc.php b/htdocs/theme/md/badges.inc.php index 11536240ee0..9f53a631ee4 100644 --- a/htdocs/theme/md/badges.inc.php +++ b/htdocs/theme/md/badges.inc.php @@ -44,7 +44,7 @@ a.badge:focus, a.badge:hover { text-decoration: none; } -.liste_titre .badge { +.liste_titre .badge:not(.nochangebackground) { background-color: ; color: #fff; } From 1e44d4ec835b6b7cdda7714153f8feeedb64ba4d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 18:38:49 +0100 Subject: [PATCH 890/980] Fix css --- htdocs/theme/eldy/global.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 8cab8f2cf5f..37fbcbad115 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -2074,7 +2074,7 @@ div.login_block_other { padding-top: 0; text-align: right; margin-right: 8px; } float: right; vertical-align: top; padding: 0px 3px 0px 4px !important; - line-height: px; + line-height: px; height: px; } .atoplogin, .atoplogin:hover { From ec8bd6327d28888b3f8cb93f365566269e883346 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 18:53:46 +0100 Subject: [PATCH 891/980] Fix css --- htdocs/compta/bank/list.php | 5 ++--- htdocs/core/lib/resource.lib.php | 6 +++--- htdocs/core/lib/salaries.lib.php | 2 +- htdocs/core/lib/sendings.lib.php | 6 +++--- htdocs/core/lib/supplier_proposal.lib.php | 6 +++--- htdocs/core/lib/tax.lib.php | 2 +- htdocs/core/lib/ticket.lib.php | 4 ++-- htdocs/core/lib/usergroups.lib.php | 12 ++++++------ htdocs/core/lib/vat.lib.php | 2 +- htdocs/emailcollector/lib/emailcollector.lib.php | 4 ++-- htdocs/fourn/index.php | 4 ++-- .../template/lib/mymodule_myobject.lib.php | 4 ++-- htdocs/modulebuilder/template/mymoduleindex.php | 2 +- htdocs/mrp/lib/mrp_mo.lib.php | 4 ++-- htdocs/user/bank.php | 6 +++--- htdocs/website/lib/websiteaccount.lib.php | 4 ++-- htdocs/zapier/lib/zapier_hook.lib.php | 4 ++-- htdocs/zapier/zapierindex.php | 2 +- 18 files changed, 39 insertions(+), 40 deletions(-) diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php index 524e3f44cbc..e1e7ca777b5 100644 --- a/htdocs/compta/bank/list.php +++ b/htdocs/compta/bank/list.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2016 Laurent Destailleur + * Copyright (C) 2004-2019 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2018 Ferran Marcet @@ -512,8 +512,7 @@ foreach ($accounts as $key=>$type) } else { print ''.$result->nbtodo.''; if ($result->nbtodolate) { - print ' '; - print ''; + print ''; print ' '.$result->nbtodolate; print ''; } diff --git a/htdocs/core/lib/resource.lib.php b/htdocs/core/lib/resource.lib.php index 0ee012e49cc..7bd2454dbe6 100644 --- a/htdocs/core/lib/resource.lib.php +++ b/htdocs/core/lib/resource.lib.php @@ -45,7 +45,7 @@ function resource_prepare_head($object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/resource/contact.php?id='.$object->id; $head[$h][1] = $langs->trans('ContactsAddresses'); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -63,7 +63,7 @@ function resource_prepare_head($object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/resource/note.php?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -73,7 +73,7 @@ function resource_prepare_head($object) $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $head[$h][0] = DOL_URL_ROOT.'/resource/document.php?id='.$object->id; $head[$h][1] = $langs->trans("Documents"); - if($nbFiles > 0) $head[$h][1].= ' '.$nbFiles.''; + if($nbFiles > 0) $head[$h][1].= ''.$nbFiles.''; $head[$h][2] = 'documents'; $h++; diff --git a/htdocs/core/lib/salaries.lib.php b/htdocs/core/lib/salaries.lib.php index 6c468a74af9..01b3cafd60d 100644 --- a/htdocs/core/lib/salaries.lib.php +++ b/htdocs/core/lib/salaries.lib.php @@ -51,7 +51,7 @@ function salaries_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/salaries/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; diff --git a/htdocs/core/lib/sendings.lib.php b/htdocs/core/lib/sendings.lib.php index e1732e1b4fd..2c0501500f9 100644 --- a/htdocs/core/lib/sendings.lib.php +++ b/htdocs/core/lib/sendings.lib.php @@ -74,7 +74,7 @@ function shipping_prepare_head($object) $nbContact = count($objectsrc->liste_contact(-1, 'internal')) + count($objectsrc->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT."/expedition/contact.php?id=".$object->id; $head[$h][1] = $langs->trans("ContactsAddresses"); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -86,7 +86,7 @@ function shipping_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/expedition/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; @@ -95,7 +95,7 @@ function shipping_prepare_head($object) if (!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT."/expedition/note.php?id=".$object->id; $head[$h][1] = $langs->trans("Notes"); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; diff --git a/htdocs/core/lib/supplier_proposal.lib.php b/htdocs/core/lib/supplier_proposal.lib.php index e5eff78b1ac..6549b362c11 100644 --- a/htdocs/core/lib/supplier_proposal.lib.php +++ b/htdocs/core/lib/supplier_proposal.lib.php @@ -49,7 +49,7 @@ function supplier_proposal_prepare_head($object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/supplier_proposal/contact.php?id='.$object->id; $head[$h][1] = $langs->trans('ContactsAddresses'); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -67,7 +67,7 @@ function supplier_proposal_prepare_head($object) if(!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/supplier_proposal/note.php?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -79,7 +79,7 @@ function supplier_proposal_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/supplier_proposal/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; diff --git a/htdocs/core/lib/tax.lib.php b/htdocs/core/lib/tax.lib.php index 15476fc3420..ade6a7f49cf 100644 --- a/htdocs/core/lib/tax.lib.php +++ b/htdocs/core/lib/tax.lib.php @@ -59,7 +59,7 @@ function tax_prepare_head(ChargeSociales $object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/compta/sociales/document.php?id='.$object->id; $head[$h][1] = $langs->trans("Documents"); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index e89e9a79194..f127a3bb6e6 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -86,7 +86,7 @@ function ticket_prepare_head($object) $nbContact = count($object->liste_contact(-1, 'internal')) + count($object->liste_contact(-1, 'external')); $head[$h][0] = DOL_URL_ROOT.'/ticket/contact.php?track_id='.$object->track_id; $head[$h][1] = $langs->trans('ContactsAddresses'); - if ($nbContact > 0) $head[$h][1].= ' '.$nbContact.''; + if ($nbContact > 0) $head[$h][1].= ''.$nbContact.''; $head[$h][2] = 'contact'; $h++; } @@ -100,7 +100,7 @@ function ticket_prepare_head($object) $head[$h][0] = dol_buildpath('/ticket/document.php', 1) . '?id=' . $object->id; $head[$h][1] = $langs->trans("Documents"); if ($nbFiles > 0) { - $head[$h][1] .= ' ' . $nbFiles . ''; + $head[$h][1] .= '' . $nbFiles . ''; } $head[$h][2] = 'tabTicketDocument'; diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index a65d51d5f04..a9dca00d645 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -64,7 +64,7 @@ function user_prepare_head($object) if ($canreadperms) { $head[$h][0] = DOL_URL_ROOT.'/user/perms.php?id='.$object->id; - $head[$h][1] = $langs->trans("Rights"). ' '.($object->nb_rights).''; + $head[$h][1] = $langs->trans("Rights"). ''.($object->nb_rights).''; $head[$h][2] = 'rights'; $h++; } @@ -94,7 +94,7 @@ function user_prepare_head($object) } $head[$h][0] = DOL_URL_ROOT.'/user/agenda_extsites.php?id='.$object->id; - $head[$h][1] = $langs->trans("ExtSites").($nbagenda ? ' '.$nbagenda.'' : ''); + $head[$h][1] = $langs->trans("ExtSites").($nbagenda ? ''.$nbagenda.'' : ''); $head[$h][2] = 'extsites'; $h++; } @@ -132,7 +132,7 @@ function user_prepare_head($object) $head[$h][0] = DOL_URL_ROOT.'/user/notify/card.php?id='.$object->id; $head[$h][1] = $langs->trans("Notifications"); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'notify'; $h++; } @@ -164,7 +164,7 @@ function user_prepare_head($object) if(!empty($object->note)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/user/note.php?id='.$object->id; $head[$h][1] = $langs->trans("Note"); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; @@ -176,7 +176,7 @@ function user_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/user/document.php?userid='.$object->id; $head[$h][1] = $langs->trans("Documents"); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; @@ -228,7 +228,7 @@ function group_prepare_head($object) if ($canreadperms) { $head[$h][0] = DOL_URL_ROOT.'/user/group/perms.php?id='.$object->id; - $head[$h][1] = $langs->trans("GroupRights"). ' '.($object->nb_rights).''; + $head[$h][1] = $langs->trans("GroupRights"). ''.($object->nb_rights).''; $head[$h][2] = 'rights'; $h++; } diff --git a/htdocs/core/lib/vat.lib.php b/htdocs/core/lib/vat.lib.php index 57798381274..f8c7b579c18 100644 --- a/htdocs/core/lib/vat.lib.php +++ b/htdocs/core/lib/vat.lib.php @@ -54,7 +54,7 @@ function vat_prepare_head($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$tab][0] = DOL_URL_ROOT.'/compta/tva/document.php?id='.$object->id; $head[$tab][1] = $langs->trans("Documents"); - if (($nbFiles+$nbLinks) > 0) $head[$tab][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$tab][1].= ''.($nbFiles+$nbLinks).''; $head[$tab][2] = 'documents'; $tab++; diff --git a/htdocs/emailcollector/lib/emailcollector.lib.php b/htdocs/emailcollector/lib/emailcollector.lib.php index c15c217ea5c..089545e8d7e 100644 --- a/htdocs/emailcollector/lib/emailcollector.lib.php +++ b/htdocs/emailcollector/lib/emailcollector.lib.php @@ -49,7 +49,7 @@ function emailcollectorPrepareHead($object) if (!empty($object->note_public)) $nbNote++; $head[$h][0] = dol_buildpath('/emailcollector/emailcollector_note.php', 1).'?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; }*/ @@ -61,7 +61,7 @@ function emailcollectorPrepareHead($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = dol_buildpath("/emailcollector/emailcollector_document.php", 1).'?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; diff --git a/htdocs/fourn/index.php b/htdocs/fourn/index.php index 3615051fa2f..b10ee9ff909 100644 --- a/htdocs/fourn/index.php +++ b/htdocs/fourn/index.php @@ -121,7 +121,7 @@ if (! empty($conf->fournisseur->enabled)) { print '
    '.$trigger['picto'].''.$trigger['picto'].''.$trigger['file'].''.$trigger['status'].''; diff --git a/htdocs/core/class/interfaces.class.php b/htdocs/core/class/interfaces.class.php index 86b4bbf0673..bdcfe6bbf75 100644 --- a/htdocs/core/class/interfaces.class.php +++ b/htdocs/core/class/interfaces.class.php @@ -343,7 +343,7 @@ class Interfaces } // We set info of modules - $triggers[$j]['picto'] = $objMod->picto?img_object('', $objMod->picto):img_object('', 'generic'); + $triggers[$j]['picto'] = $objMod->picto?img_object('', $objMod->picto, 'class="valignmiddle pictomodule "'):img_object('', 'generic', 'class="valignmiddle pictomodule "'); $triggers[$j]['file'] = $files[$key]; $triggers[$j]['fullpath'] = $fullpath[$key]; $triggers[$j]['relpath'] = $relpath[$key]; From b0ea276233effb689fe5fac95b612bb3c93659b5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 14:13:36 +0100 Subject: [PATCH 882/980] Debug MO module --- htdocs/bom/bom_card.php | 18 ++-- htdocs/core/class/html.formfile.class.php | 18 ++-- .../bom/doc/doc_generic_bom_odt.modules.php | 2 +- htdocs/core/modules/bom/modules_bom.php | 2 +- htdocs/core/modules/modMrp.class.php | 2 +- .../mrp/doc/doc_generic_mo_odt.modules.php | 2 +- .../mrp/{modules_mrp.php => modules_mo.php} | 10 +- .../modulebuilder/template/myobject_card.php | 18 ++-- htdocs/mrp/mo_card.php | 91 ++++++++++++++----- 9 files changed, 107 insertions(+), 56 deletions(-) rename htdocs/core/modules/mrp/{modules_mrp.php => modules_mo.php} (93%) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 231679f7b3a..15ef270accc 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -72,14 +72,14 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be inclu // Security check - Protection if external user //if ($user->socid > 0) access_forbidden(); //if ($user->socid > 0) $socid = $user->socid; -//$isdraft = (($object->statut == BillOfMaterials::STATUS_DRAFT) ? 1 : 0); +//$isdraft = (($object->statut == $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 $permissionedit=$user->rights->bom->write; // Used by the include of actions_lineupdown.inc.php $permissiontoadd=$user->rights->bom->write; // Used by the include of actions_addupdatedelete.inc.php -$permissiontodelete = $user->rights->bom->delete || ($permissiontoadd && $object->status == 0); +$permissiontodelete = $user->rights->bom->delete || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT); /* @@ -457,7 +457,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea { $langs->load("projects"); $morehtmlref.='
    '.$langs->trans('Project') . ' '; - if ($user->rights->bom->write) + if ($permissiontoadd) { if ($action != 'classify') $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; @@ -532,7 +532,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } print '
    '; - if (! empty($object->lines) || ($object->status == 0 && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) + if (! empty($object->lines) && $object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline') { print ''; } @@ -555,7 +555,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } } - if (! empty($object->lines) || ($object->status == 0 && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) + if (! empty($object->lines) && $object->status == $object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline') { print '
    '; } @@ -565,8 +565,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } - // Buttons for actions + if ($action != 'presend' && $action != 'editline') { print '
    '."\n"; $parameters=array(); @@ -584,7 +584,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Modify - if ($user->rights->bom->write) + if ($permissiontoadd) { print ''.$langs->trans("Modify").''."\n"; } @@ -619,7 +619,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Clone - if ($user->rights->bom->write) + if ($permissiontoadd) { print '' . $langs->trans("ToClone") . ''; } @@ -638,7 +638,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } */ - if ($user->rights->bom->delete) + if ($permissiontodelete) { print ''.$langs->trans('Delete').''."\n"; } diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 22acff7763d..5f8a9cb51e3 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -667,21 +667,27 @@ class FormFile { $submodulepart = $modulepart; - // For normalized standard modules - $file=dol_buildpath('/core/modules/'.$modulepart.'/modules_'.$modulepart.'.php', 0); + // modulepart = 'nameofmodule' or 'nameofmodule:nameofsubmodule' + $tmp=explode(':', $modulepart); + if (! empty($tmp[1])) { + $modulepart=$tmp[0]; + $submodulepart=$tmp[1]; + } + + // For normalized standard modules + $file=dol_buildpath('/core/modules/'.$modulepart.'/modules_'.$submodulepart.'.php', 0); if (file_exists($file)) { $res=include_once $file; } - // For normalized external modules. modulepart = 'nameofmodule' or 'nameofmodule:nameofsubmodule' + // For normalized external modules. else { - $tmp=explode(':', $modulepart); - if (! empty($tmp[2])) $submodulepart=$tmp[2]; - $file=dol_buildpath('/'.$modulepart.'/core/modules/'.$modulepart.'/modules_'.$submodulepart.'.php', 0); + $file=dol_buildpath('/'.$modulepart.'/core/modules/'.$modulepart.'/modules_'.$submodulepart.'.php', 0); $res=include_once $file; } $class='ModelePDF'.ucfirst($submodulepart); + if (class_exists($class)) { $modellist=call_user_func($class.'::liste_modeles', $this->db); diff --git a/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php index 38358222282..63c4e9ea836 100644 --- a/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php +++ b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php @@ -38,7 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php'; /** * Class to build documents using ODF templates generator */ -class doc_generic_bom_odt extends ModelePDFBoms +class doc_generic_bom_odt extends ModelePDFBom { /** * Issuer diff --git a/htdocs/core/modules/bom/modules_bom.php b/htdocs/core/modules/bom/modules_bom.php index f8f29fec2e6..45bca8a38b3 100644 --- a/htdocs/core/modules/bom/modules_bom.php +++ b/htdocs/core/modules/bom/modules_bom.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // requir /** * Parent class for boms models */ -abstract class ModelePDFBoms extends CommonDocGenerator +abstract class ModelePDFBom extends CommonDocGenerator { // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps diff --git a/htdocs/core/modules/modMrp.class.php b/htdocs/core/modules/modMrp.class.php index bc85111ebd2..43908b85164 100644 --- a/htdocs/core/modules/modMrp.class.php +++ b/htdocs/core/modules/modMrp.class.php @@ -62,7 +62,7 @@ class modMrp extends DolibarrModules // Used only if file README.md and README-LL.md not found. $this->descriptionlong = "Module to Manage Manufacturing Orders (MO)"; // Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated' or a version string like 'x.y.z' - $this->version = 'dolibarr'; + $this->version = 'experimental'; // Url to the file with your last numberversion of this module //$this->url_last_version = 'http://www.example.com/versionmodule.txt'; diff --git a/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php index 0447694465f..854c7c350b3 100644 --- a/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php +++ b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php @@ -38,7 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php'; /** * Class to build documents using ODF templates generator */ -class doc_generic_mo_odt extends ModelePDFMos +class doc_generic_mo_odt extends ModelePDFMo { /** * Issuer diff --git a/htdocs/core/modules/mrp/modules_mrp.php b/htdocs/core/modules/mrp/modules_mo.php similarity index 93% rename from htdocs/core/modules/mrp/modules_mrp.php rename to htdocs/core/modules/mrp/modules_mo.php index bd83fab70b7..76d204a9826 100644 --- a/htdocs/core/modules/mrp/modules_mrp.php +++ b/htdocs/core/modules/mrp/modules_mo.php @@ -23,10 +23,10 @@ */ /** - * \file htdocs/core/modules/mrp/modules_mrp.php - * \ingroup bom - * \brief File that contains parent class for mos models - * and parent class for mos numbering models + * \file htdocs/core/modules/mrp/modules_mo.php + * \ingroup mrp + * \brief File that contains parent class for MOs models + * and parent class for MOs numbering models */ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php'; @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // requir /** * Parent class for mos models */ -abstract class ModelePDFMos extends CommonDocGenerator +abstract class ModelePDFMo extends CommonDocGenerator { // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 111e190bcf3..afac89985ae 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -102,14 +102,14 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be inclu // Security check - Protection if external user //if ($user->socid > 0) access_forbidden(); //if ($user->socid > 0) $socid = $user->socid; -//$isdraft = (($object->statut == MyObject::STATUS_DRAFT) ? 1 : 0); +//$isdraft = (($object->statut == $object::STATUS_DRAFT) ? 1 : 0); //$result = restrictedArea($user, 'mymodule', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); $permissionnote = $user->rights->mymodule->myobject->write; // Used by the include of actions_setnotes.inc.php $permissiondellink = $user->rights->mymodule->myobject->write; // Used by the include of actions_dellink.inc.php $permissionedit = $user->rights->mymodule->myobject->write; // Used by the include of actions_lineupdown.inc.php $permissiontoadd = $user->rights->mymodule->myobject->write; // Used by the include of actions_addupdatedelete.inc.php -$permissiontodelete = $user->rights->mymodule->myobject->delete || ($permissiontoadd && $object->status == 0); +$permissiontodelete = $user->rights->mymodule->myobject->delete || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT); @@ -404,7 +404,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } print '
    '; - if (! empty($object->lines) && $object->status == 0 && $permissiontoadd && $action != 'selectlines' && $action != 'editline') + if (! empty($object->lines) && $object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline') { print ''; } @@ -457,9 +457,9 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Modify - if (! empty($user->rights->mymodule->myobject->write)) + if ($permissiontoadd) { - print ''.$langs->trans("Modify").''."\n"; + print ''.$langs->trans("Modify").''."\n"; } else { @@ -467,13 +467,13 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Clone - if (! empty($user->rights->mymodule->myobject->write)) + if ($permissiontoadd) { - print '' . $langs->trans("ToClone") . ''."\n"; + print '' . $langs->trans("ToClone") . ''."\n"; } /* - if ($user->rights->mymodule->myobject->write) + if ($permissiontoadd) { if ($object->status == 1) { @@ -487,7 +487,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea */ // Delete (need delete permission, or if draft, just need create/modify permission) - if (! empty($user->rights->mymodule->myobject->delete) || (! empty($object->fields['status']) && $object->status == $object::STATUS_DRAFT && ! empty($user->rights->mymodule->myobject->write))) + if ($permissiontodelete) { print ''.$langs->trans('Delete').''."\n"; } diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php index 07b6be426f3..a6742b739ac 100644 --- a/htdocs/mrp/mo_card.php +++ b/htdocs/mrp/mo_card.php @@ -90,14 +90,14 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be inclu // Security check - Protection if external user //if ($user->socid > 0) access_forbidden(); //if ($user->socid > 0) $socid = $user->socid; -//$isdraft = (($object->statut == Mo::STATUS_DRAFT) ? 1 : 0); +//$isdraft = (($object->statut == $object::STATUS_DRAFT) ? 1 : 0); //$result = restrictedArea($user, 'mrp', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); $permissionnote=$user->rights->mrp->write; // Used by the include of actions_setnotes.inc.php $permissiondellink=$user->rights->mrp->write; // Used by the include of actions_dellink.inc.php $permissionedit=$user->rights->mrp->write; // Used by the include of actions_lineupdown.inc.php $permissiontoadd=$user->rights->mrp->write; // Used by the include of actions_addupdatedelete.inc.php -$permissiontodelete = $user->rights->mrp->delete || ($permissiontoadd && $object->status == 0); +$permissiontodelete = $user->rights->mrp->delete || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT); /* @@ -132,6 +132,12 @@ if (empty($reshook)) // Actions when printing a doc from card include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php'; + // Actions to send emails + $trigger_name='MO_SENTBYMAIL'; + $autocopy='MAIN_MAIL_AUTOCOPY_MO_TO'; + $trackid='mo'.$object->id; + include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; + // Action to move up and down lines of object //include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php'; // Must be include, not include_once @@ -143,12 +149,6 @@ if (empty($reshook)) { $object->setProject(GETPOST('projectid', 'int')); } - - // Actions to send emails - $trigger_name='MO_SENTBYMAIL'; - $autocopy='MAIN_MAIL_AUTOCOPY_MO_TO'; - $trackid='mo'.$object->id; - include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; } @@ -159,6 +159,7 @@ if (empty($reshook)) */ $form=new Form($db); +$formfile=new FormFile($db); $formproject=new FormProjets($db); llxHeader('', $langs->trans('Mo'), ''); @@ -299,6 +300,46 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea { $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&lineid='.$lineid, $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_deleteline', '', 0, 1); } + + // Confirmation of validation + if ($action == 'validate') + { + // We check that object has a temporary ref + $ref = substr($object->ref, 1, 4); + if ($ref == 'PROV') { + $object->fetch_product(); + $numref = $object->getNextNumRef($object->thirdparty); + } else { + $numref = $object->ref; + } + + $text = $langs->trans('ConfirmValidateMo', $numref); + /*if (! empty($conf->notification->enabled)) + { + require_once DOL_DOCUMENT_ROOT . '/core/class/notify.class.php'; + $notify = new Notify($db); + $text .= '
    '; + $text .= $notify->confirmMessage('BOM_VALIDATE', $object->socid, $object); + }*/ + + $formquestion=array(); + if (! empty($conf->bom->enabled)) + { + $langs->load("mrp"); + require_once DOL_DOCUMENT_ROOT . '/product/class/html.formproduct.class.php'; + $formproduct = new FormProduct($db); + $forcecombo=0; + if ($conf->browser->name == 'ie') $forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy + $formquestion = array( + // 'text' => $langs->trans("ConfirmClone"), + // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1), + // array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1), + ); + } + + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('Validate'), $text, 'confirm_validate', $formquestion, 0, 1, 220); + } + // Clone confirmation if ($action == 'clone') { // Create an array for form @@ -332,7 +373,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea { $langs->load("projects"); $morehtmlref.='
    '.$langs->trans('Project') . ' '; - if ($user->rights->mrp->write) + if ($permissiontoadd) { if ($action != 'classify') $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; @@ -366,7 +407,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print '
    '; print '
    '; print '
    '; - print '
    '."\n"; + print '
    '."\n"; // Common attributes $keyforbreak='fk_warehouse'; @@ -407,14 +448,14 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } print '
    '; - if (! empty($object->lines) && $object->status == 0 && $permissiontoadd && $action != 'selectlines' && $action != 'editline') + if (! empty($object->lines) && $object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline') { print '
    '; } if (! empty($object->lines)) { - $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1); + $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1, '/mrp/tpl'); } // Form to add new line @@ -423,14 +464,14 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea if ($action != 'editline') { // Add products/services form - $object->formAddObjectLine(1, $mysoc, $soc); + $object->formAddObjectLine(1, $mysoc, $soc, '/mrp/tpl'); $parameters = array(); $reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook } } - if (! empty($object->lines) && $object->status == 0 && $permissiontoadd && $action != 'selectlines' && $action != 'editline') + if (! empty($object->lines) && $object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline') { print '
    '; } @@ -451,10 +492,15 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea if (empty($reshook)) { // Send - print '' . $langs->trans('SendMail') . ''."\n"; + //print '' . $langs->trans('SendMail') . ''."\n"; + + if ($user->rights->bom->write && $object->status == MO::STATUS_VALIDATED) + { + print '' . $langs->trans("SetToDraft") . ''; + } // Modify - if (! empty($user->rights->mrp->write)) + if ($permissiontoadd) { print ''.$langs->trans("Modify").''."\n"; } @@ -477,13 +523,13 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Clone - if (! empty($user->rights->mrp->write)) + if ($permissiontoadd) { - print ''; + print '' . $langs->trans("ToClone") . ''; } // Delete (need delete permission, or if draft, just need create/modify permission) - if (! empty($user->rights->mrp->delete) || (! empty($object->fields['status']) && $object->status == $object::STATUS_DRAFT && ! empty($user->rights->mrp->write))) + if ($permissiontodelete) { print ''.$langs->trans('Delete').''."\n"; } @@ -507,14 +553,13 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ''; // ancre // Documents - /*$objref = dol_sanitizeFileName($object->ref); - $relativepath = $comref . '/' . $comref . '.pdf'; + $objref = dol_sanitizeFileName($object->ref); + $relativepath = $objref . '/' . $objref . '.pdf'; $filedir = $conf->mrp->dir_output . '/' . $objref; $urlsource = $_SERVER["PHP_SELF"] . "?id=" . $object->id; $genallowed = $user->rights->mrp->read; // If you can read, you can build the PDF to read content $delallowed = $user->rights->mrp->create; // If you can create/edit, you can remove a file on card - print $formfile->showdocuments('mrp', $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang); - */ + print $formfile->showdocuments('mrp:mo', $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $mysoc->default_lang); // Show links to link elements $linktoelem = $form->showLinkToObjectBlock($object, null, array('mo')); From e67a1a81184d7e5a9e215b163660929a7987c350 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 14:20:42 +0100 Subject: [PATCH 883/980] Debug --- htdocs/bom/bom_card.php | 4 ++-- htdocs/modulebuilder/template/myobject_card.php | 4 ++-- htdocs/mrp/mo_card.php | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 15ef270accc..f4124b2b9db 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -532,7 +532,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } print '
    '; - if (! empty($object->lines) && $object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline') + if (! empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) { print ''; } @@ -555,7 +555,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } } - if (! empty($object->lines) && $object->status == $object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline') + if (! empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) { print '
    '; } diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index afac89985ae..5179dbcf37c 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -404,7 +404,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } print '
    '; - if (! empty($object->lines) && $object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline') + if (! empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) { print ''; } @@ -427,7 +427,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } } - if (! empty($object->lines) && $object->status == 0 && $permissiontoadd && $action != 'selectlines' && $action != 'editline') + if (! empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) { print '
    '; } diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php index a6742b739ac..43759bf0d70 100644 --- a/htdocs/mrp/mo_card.php +++ b/htdocs/mrp/mo_card.php @@ -448,7 +448,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } print '
    '; - if (! empty($object->lines) && $object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline') + if (! empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) { print ''; } @@ -471,7 +471,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } } - if (! empty($object->lines) && $object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline') + if (! empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) { print '
    '; } From 2909f8141e5e082d4cf8b4ea181891bb4eb5aa6c Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Mon, 4 Nov 2019 15:08:43 +0100 Subject: [PATCH 884/980] fix translation --- htdocs/compta/sociales/card.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index f35b145b969..d0cde412e92 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -441,13 +441,14 @@ if ($id > 0) print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneTax', $object->ref), 'confirm_clone', $formquestion, 'yes', 1); } - // Confirmation de la suppression de la charge + if ($action == 'paid') { $text=$langs->trans('ConfirmPaySocialContribution'); print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans('PaySocialContribution'), $text, "confirm_paid", '', '', 2); } - + + // Confirmation of the removal of the Social Contribution if ($action == 'delete') { $text=$langs->trans('ConfirmDeleteSocialContribution'); From 4480d7dd88590a94ea41e80e240975ecaf091440 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 4 Nov 2019 14:09:43 +0000 Subject: [PATCH 885/980] Fixing style errors. --- htdocs/compta/sociales/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index d0cde412e92..397de3d8ad9 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -441,13 +441,13 @@ if ($id > 0) print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneTax', $object->ref), 'confirm_clone', $formquestion, 'yes', 1); } - + if ($action == 'paid') { $text=$langs->trans('ConfirmPaySocialContribution'); print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans('PaySocialContribution'), $text, "confirm_paid", '', '', 2); } - + // Confirmation of the removal of the Social Contribution if ($action == 'delete') { From 11500fb8d9871847b17c025e4dc3fff4074f6e58 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 15:33:49 +0100 Subject: [PATCH 886/980] FIX confusion between permto... and permisstionto... --- htdocs/accountancy/customer/list.php | 4 +- htdocs/accountancy/expensereport/list.php | 4 +- htdocs/accountancy/supplier/list.php | 4 +- htdocs/adherents/list.php | 4 +- htdocs/admin/emailcollector_list.php | 4 +- htdocs/admin/mails_senderprofile_list.php | 4 +- htdocs/asset/list.php | 4 +- htdocs/bom/bom_list.php | 8 +-- htdocs/comm/mailing/list.php | 4 +- htdocs/comm/propal/list.php | 4 +- htdocs/commande/list.php | 4 +- htdocs/compta/bank/bankentries_list.php | 4 +- .../compta/cashcontrol/cashcontrol_list.php | 4 +- htdocs/compta/facture/card-rec.php | 4 +- .../compta/facture/invoicetemplate_list.php | 4 +- htdocs/compta/facture/list.php | 6 +- htdocs/contact/list.php | 4 +- htdocs/contrat/list.php | 4 +- htdocs/core/actions_massactions.inc.php | 71 +++++++++++++++++-- htdocs/core/class/html.formfile.class.php | 12 ++-- htdocs/cron/list.php | 8 +-- htdocs/expedition/list.php | 6 +- htdocs/expensereport/list.php | 4 +- htdocs/fichinter/list.php | 4 +- htdocs/fourn/commande/list.php | 4 +- htdocs/fourn/facture/list.php | 6 +- htdocs/holiday/define_holiday.php | 4 +- htdocs/holiday/list.php | 4 +- htdocs/holiday/view_log.php | 4 +- htdocs/margin/checkMargins.php | 4 +- .../modulebuilder/template/myobject_list.php | 8 +-- htdocs/mrp/mo_list.php | 4 +- htdocs/opensurvey/list.php | 4 +- htdocs/product/inventory/list.php | 4 +- htdocs/product/list.php | 4 +- htdocs/product/stock/list.php | 4 +- htdocs/product/stock/movement_card.php | 4 +- htdocs/product/stock/productlot_list.php | 4 +- htdocs/projet/list.php | 4 +- htdocs/projet/tasks.php | 4 +- htdocs/projet/tasks/list.php | 4 +- htdocs/societe/list.php | 4 +- htdocs/societe/website.php | 4 +- htdocs/supplier_proposal/list.php | 4 +- htdocs/ticket/list.php | 4 +- htdocs/zapier/hook_list.php | 4 +- 46 files changed, 169 insertions(+), 108 deletions(-) diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index 2969f2ff0a1..ae076a414cb 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -129,8 +129,8 @@ if (empty($reshook)) // Mass actions $objectclass='AccountingAccount'; - $permtoread = $user->rights->accounting->read; - $permtodelete = $user->rights->accounting->delete; + $permissiontoread = $user->rights->accounting->read; + $permissiontodelete = $user->rights->accounting->delete; $uploaddir = $conf->accounting->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/accountancy/expensereport/list.php b/htdocs/accountancy/expensereport/list.php index f0e545f7853..a1c354f010b 100644 --- a/htdocs/accountancy/expensereport/list.php +++ b/htdocs/accountancy/expensereport/list.php @@ -112,8 +112,8 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' // Mass actions $objectclass='ExpenseReport'; $objectlabel='ExpenseReport'; -$permtoread = $user->rights->expensereport->read; -$permtodelete = $user->rights->expensereport->delete; +$permissiontoread = $user->rights->expensereport->read; +$permissiontodelete = $user->rights->expensereport->delete; $uploaddir = $conf->expensereport->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index 27cd97dfea3..249cb920c47 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -133,8 +133,8 @@ if (empty($reshook)) // Mass actions $objectclass='AccountingAccount'; - $permtoread = $user->rights->accounting->read; - $permtodelete = $user->rights->accounting->delete; + $permissiontoread = $user->rights->accounting->read; + $permissiontodelete = $user->rights->accounting->delete; $uploaddir = $conf->accounting->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php index 0bcc11bf351..a66323654d8 100644 --- a/htdocs/adherents/list.php +++ b/htdocs/adherents/list.php @@ -232,8 +232,8 @@ if (empty($reshook)) // Mass actions $objectclass='Adherent'; $objectlabel='Members'; - $permtoread = $user->rights->adherent->lire; - $permtodelete = $user->rights->adherent->supprimer; + $permissiontoread = $user->rights->adherent->lire; + $permissiontodelete = $user->rights->adherent->supprimer; $uploaddir = $conf->adherent->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/admin/emailcollector_list.php b/htdocs/admin/emailcollector_list.php index e8b2e280a7f..5145f5dd083 100644 --- a/htdocs/admin/emailcollector_list.php +++ b/htdocs/admin/emailcollector_list.php @@ -156,8 +156,8 @@ if (empty($reshook)) // Mass actions $objectclass='EmailCollector'; $objectlabel='EmailCollector'; - $permtoread = $user->rights->emailcollector->read; - $permtodelete = $user->rights->emailcollector->delete; + $permissiontoread = $user->rights->emailcollector->read; + $permissiontodelete = $user->rights->emailcollector->delete; $uploaddir = $conf->emailcollector->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/admin/mails_senderprofile_list.php b/htdocs/admin/mails_senderprofile_list.php index eb432b0dc72..139c6815072 100644 --- a/htdocs/admin/mails_senderprofile_list.php +++ b/htdocs/admin/mails_senderprofile_list.php @@ -148,8 +148,8 @@ if (empty($reshook)) // Mass actions $objectclass='EmailSenderProfile'; $objectlabel='EmailSenderProfile'; - $permtoread = $user->admin; - $permtodelete = $user->admin; + $permissiontoread = $user->admin; + $permissiontodelete = $user->admin; $uploaddir = $conf->admin->dir_output.'/senderprofiles'; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/asset/list.php b/htdocs/asset/list.php index 8ea4f46c89d..9c9b8d12bff 100644 --- a/htdocs/asset/list.php +++ b/htdocs/asset/list.php @@ -152,8 +152,8 @@ if (empty($reshook)) // Mass actions $objectclass='Asset'; $objectlabel='Asset'; - $permtoread = $user->rights->asset->read; - $permtodelete = $user->rights->asset->delete; + $permissiontoread = $user->rights->asset->read; + $permissiontodelete = $user->rights->asset->delete; $uploaddir = $conf->asset->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/bom/bom_list.php b/htdocs/bom/bom_list.php index 0775c2cc370..1f6fa300129 100644 --- a/htdocs/bom/bom_list.php +++ b/htdocs/bom/bom_list.php @@ -1,6 +1,5 @@ - * Copyright (C) ---Put here your own copyright and developer email--- * * 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 @@ -151,8 +150,8 @@ if (empty($reshook)) // Mass actions $objectclass='BOM'; $objectlabel='BillOfMaterials'; - $permtoread = $user->rights->bom->read; - $permtodelete = $user->rights->bom->delete; + $permissiontoread = $user->rights->bom->read; + $permissiontodelete = $user->rights->bom->delete; $uploaddir = $conf->bom->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } @@ -303,7 +302,7 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; // List of mass actions available $arrayofmassactions = array( //'presend'=>$langs->trans("SendByMail"), - //'builddoc'=>$langs->trans("PDFMerge"), + 'disable'=>$langs->trans("Disable"), ); if ($user->rights->bom->delete) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) $arrayofmassactions=array(); @@ -539,6 +538,7 @@ print '
    '."\n"; print ''."\n"; + if (in_array('builddoc', $arrayofmassactions) && ($nbtotalofrecords === '' || $nbtotalofrecords)) { $hidegeneratedfilelistifempty=1; diff --git a/htdocs/comm/mailing/list.php b/htdocs/comm/mailing/list.php index ff69bd00c0c..0e3d7a7725e 100644 --- a/htdocs/comm/mailing/list.php +++ b/htdocs/comm/mailing/list.php @@ -102,8 +102,8 @@ if (empty($reshook)) // Mass actions /*$objectclass='MyObject'; $objectlabel='MyObject'; - $permtoread = $user->rights->mymodule->read; - $permtodelete = $user->rights->mymodule->delete; + $permissiontoread = $user->rights->mymodule->read; + $permissiontodelete = $user->rights->mymodule->delete; $uploaddir = $conf->mymodule->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; */ diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index a83d7ee5161..0eb3b947391 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -241,8 +241,8 @@ if (empty($reshook)) { $objectclass='Propal'; $objectlabel='Proposals'; - $permtoread = $user->rights->propal->lire; - $permtodelete = $user->rights->propal->supprimer; + $permissiontoread = $user->rights->propal->lire; + $permissiontodelete = $user->rights->propal->supprimer; $permtoclose = $user->rights->propal->cloturer; $uploaddir = $conf->propal->multidir_output[$conf->entity]; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 5f9906b58dc..23af81ab24e 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -220,8 +220,8 @@ if (empty($reshook)) // Mass actions $objectclass='Commande'; $objectlabel='Orders'; - $permtoread = $user->rights->commande->lire; - $permtodelete = $user->rights->commande->supprimer; + $permissiontoread = $user->rights->commande->lire; + $permissiontodelete = $user->rights->commande->supprimer; $uploaddir = $conf->commande->multidir_output[$conf->entity]; $trigger_name='ORDER_SENTBYMAIL'; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 773ee1e9255..4a9d0947b1e 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -209,8 +209,8 @@ if (empty($reshook)) { $objectclass='Account'; $objectlabel='BankTransaction'; - $permtoread = $user->rights->banque->lire; - $permtodelete = $user->rights->banque->supprimer; + $permissiontoread = $user->rights->banque->lire; + $permissiontodelete = $user->rights->banque->supprimer; $uploaddir = $conf->bank->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/compta/cashcontrol/cashcontrol_list.php b/htdocs/compta/cashcontrol/cashcontrol_list.php index e0461d35368..45129b6ee19 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_list.php +++ b/htdocs/compta/cashcontrol/cashcontrol_list.php @@ -168,8 +168,8 @@ if (empty($reshook)) // Mass actions $objectclass='CashControl'; $objectlabel='CashControl'; - $permtoread = ($user->rights->cashdesk->use || $user->rights->takepos->use); - $permtodelete = ($user->rights->cashdesk->use || $user->rights->takepos->use); + $permissiontoread = ($user->rights->cashdesk->use || $user->rights->takepos->use); + $permissiontodelete = ($user->rights->cashdesk->use || $user->rights->takepos->use); //$uploaddir = ''; //include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; diff --git a/htdocs/compta/facture/card-rec.php b/htdocs/compta/facture/card-rec.php index 10eb2ac03c8..49cb9529c71 100644 --- a/htdocs/compta/facture/card-rec.php +++ b/htdocs/compta/facture/card-rec.php @@ -146,8 +146,8 @@ if (empty($reshook)) // Mass actions /*$objectclass='MyObject'; $objectlabel='MyObject'; - $permtoread = $user->rights->mymodule->read; - $permtodelete = $user->rights->mymodule->delete; + $permissiontoread = $user->rights->mymodule->read; + $permissiontodelete = $user->rights->mymodule->delete; $uploaddir = $conf->mymodule->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';*/ diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php index 09873f5ee61..941aa0723ef 100644 --- a/htdocs/compta/facture/invoicetemplate_list.php +++ b/htdocs/compta/facture/invoicetemplate_list.php @@ -191,8 +191,8 @@ if (empty($reshook)) // Mass actions /*$objectclass='MyObject'; $objectlabel='MyObject'; - $permtoread = $user->rights->mymodule->read; - $permtodelete = $user->rights->mymodule->delete; + $permissiontoread = $user->rights->mymodule->read; + $permissiontodelete = $user->rights->mymodule->delete; $uploaddir = $conf->mymodule->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';*/ } diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 74c27c1e467..43f8d41db10 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -265,9 +265,9 @@ if (empty($reshook)) { $objectclass='Facture'; $objectlabel='Invoices'; - $permtoread = $user->rights->facture->lire; - $permtocreate = $user->rights->facture->creer; - $permtodelete = $user->rights->facture->supprimer; + $permissiontoread = $user->rights->facture->lire; + $permissiontoadd = $user->rights->facture->creer; + $permissiontodelete = $user->rights->facture->supprimer; $uploaddir = $conf->facture->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index f8d92d19b34..d23963fde0a 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -254,8 +254,8 @@ if (empty($reshook)) // Mass actions $objectclass='Contact'; $objectlabel='Contact'; - $permtoread = $user->rights->societe->lire; - $permtodelete = $user->rights->societe->supprimer; + $permissiontoread = $user->rights->societe->lire; + $permissiontodelete = $user->rights->societe->supprimer; $uploaddir = $conf->societe->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/contrat/list.php b/htdocs/contrat/list.php index 3df193d53d2..983f37caa7f 100644 --- a/htdocs/contrat/list.php +++ b/htdocs/contrat/list.php @@ -188,8 +188,8 @@ if (empty($reshook)) { $objectclass='Contrat'; $objectlabel='Contracts'; - $permtoread = $user->rights->contrat->lire; - $permtodelete = $user->rights->contrat->supprimer; + $permissiontoread = $user->rights->contrat->lire; + $permissiontodelete = $user->rights->contrat->supprimer; $uploaddir = $conf->contrat->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index febcba244c0..752e8dcc352 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -30,7 +30,7 @@ // $objectclass and $objectlabel must be defined // $parameters, $object, $action must be defined for the hook. -// $permtoread, $permtocreate and $permtodelete may be defined +// $permissiontoread, $permissiontoadd and $permissiontodelete may be defined // $uploaddir may be defined (example to $conf->projet->dir_output."/";) // $toselect may be defined // $diroutputmassaction may be defined @@ -43,6 +43,11 @@ if (empty($objectclass) || empty($uploaddir)) exit; } +// For backward compatibility +if (! empty($permtoread) && empty($permissiontoread)) $permissiontoread = $permtoread; +if (! empty($permtocreate) && empty($permissiontoadd)) $permissiontoadd = $permtocreate; +if (! empty($permtodelete) && empty($permissiontodelete)) $permissiontoread = $permtodelete; + // Mass actions. Controls on number of lines checked. $maxformassaction=(empty($conf->global->MAIN_LIMIT_FOR_MASS_ACTIONS)?1000:$conf->global->MAIN_LIMIT_FOR_MASS_ACTIONS); @@ -924,7 +929,7 @@ if (!$error && $massaction == 'cancelorders') } -if (! $error && $massaction == "builddoc" && $permtoread && ! GETPOST('button_search')) +if (! $error && $massaction == "builddoc" && $permissiontoread && ! GETPOST('button_search')) { if (empty($diroutputmassaction)) { @@ -1105,7 +1110,7 @@ if ($action == 'remove_file') } // Validate records -if (! $error && $massaction == 'validate' && $permtocreate) +if (! $error && $massaction == 'validate' && $permissiontoadd) { $objecttmp=new $objectclass($db); @@ -1170,6 +1175,62 @@ if (! $error && $massaction == 'validate' && $permtocreate) //var_dump($listofobjectthirdparties);exit; } } +var_dump($permissiontoadd); +// Validate records +if (! $error && $massaction == 'disable' && $permissiontocreate) +{ + $objecttmp=new $objectclass($db); + + if (! $error) + { + $db->begin(); + + $nbok = 0; + foreach($toselect as $toselectid) + { + $result=$objecttmp->fetch($toselectid); + if ($result > 0) + { + //if (in_array($objecttmp->element, array('societe','member'))) $result = $objecttmp->delete($objecttmp->id, $user, 1); + //else + $result = $objecttmp->close($user); + if ($result == $objecttmp::STATUS_VALIDATED) + { + $langs->load("errors"); + setEventMessages($langs->trans("ErrorObjectMustHaveStatusValidatedToBeDisabled", $objecttmp->ref), null, 'errors'); + $error++; + break; + } + elseif ($result < 0) + { + setEventMessages($objecttmp->error, $objecttmp->errors, 'errors'); + $error++; + break; + } + else $nbok++; + } + else + { + setEventMessages($objecttmp->error, $objecttmp->errors, 'errors'); + $error++; + break; + } + } + + if (! $error) + { + if ($nbok > 1) setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); + else setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); + $db->commit(); + } + else + { + $db->rollback(); + } + //var_dump($listofobjectthirdparties);exit; + } +} + // Closed records if (!$error && $massaction == 'closed' && $objectclass == "Propal" && $permtoclose) { $db->begin(); @@ -1206,7 +1267,7 @@ if (!$error && $massaction == 'closed' && $objectclass == "Propal" && $permtoclo } } // Delete record from mass action (massaction = 'delete' for direct delete, action/confirm='delete'/'yes' with a confirmation step before) -if (! $error && ($massaction == 'delete' || ($action == 'delete' && $confirm == 'yes')) && $permtodelete) +if (! $error && ($massaction == 'delete' || ($action == 'delete' && $confirm == 'yes')) && $permissiontodelete) { $db->begin(); @@ -1272,7 +1333,7 @@ if (! $error && ($massaction == 'delete' || ($action == 'delete' && $confirm == // Generate document foreach object according to model linked to object // @TODO : propose model selection -if (! $error && $massaction == 'generate_doc' && $permtoread) +if (! $error && $massaction == 'generate_doc' && $permissiontoread) { $db->begin(); diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 5f8a9cb51e3..4a55fa24bb3 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1471,7 +1471,7 @@ class FormFile * @param string $param Parameters on sort links * @param int $forcedownload Force to open dialog box "Save As" when clicking on file * @param string $relativepath Relative path of docs (autodefined if not provided) - * @param int $permtodelete Permission to delete + * @param int $permissiontodelete Permission to delete * @param int $useinecm Change output for use in ecm module * @param int $textifempty Text to show if filearray is empty * @param int $maxlength Maximum length of file name shown @@ -1480,7 +1480,7 @@ class FormFile * @return int <0 if KO, nb of files shown if OK * @see list_of_documents() */ - public function list_of_autoecmfiles($upload_dir, $filearray, $modulepart, $param, $forcedownload = 0, $relativepath = '', $permtodelete = 1, $useinecm = 0, $textifempty = '', $maxlength = 0, $url = '', $addfilterfields = 0) + public function list_of_autoecmfiles($upload_dir, $filearray, $modulepart, $param, $forcedownload = 0, $relativepath = '', $permissiontodelete = 1, $useinecm = 0, $textifempty = '', $maxlength = 0, $url = '', $addfilterfields = 0) { // phpcs:enable global $user, $conf, $langs, $form; @@ -1703,7 +1703,7 @@ class FormFile //if ($forcedownload) print '&attachment=1'; //print '&file='.urlencode($relativefile).'">'; //print img_view().'   '; - //if ($permtodelete) print ''.img_delete().''; + //if ($permissiontodelete) print ''.img_delete().''; //else print ' '; print "
    '; print '' . img_edit() . ''; // id= is included into $param - if ($permtodelete) { + if ($permissiontodelete) { print '   ' . img_delete() . ''; // id= is included into $param } else { print ' '; diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php index d83e6f4e258..f395475faf7 100644 --- a/htdocs/cron/list.php +++ b/htdocs/cron/list.php @@ -178,12 +178,12 @@ if (empty($reshook)) // Mass actions $objectclass='CronJob'; $objectlabel='CronJob'; - $permtoread = $user->rights->cron->read; - $permtocreate = $user->rights->cron->create?$user->rights->cron->create:$user->rights->cron->write; - $permtodelete = $user->rights->cron->delete; + $permissiontoread = $user->rights->cron->read; + $permissiontoadd = $user->rights->cron->create?$user->rights->cron->create:$user->rights->cron->write; + $permissiontodelete = $user->rights->cron->delete; $uploaddir = $conf->cron->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; - if ($permtocreate) + if ($permissiontoadd) { $tmpcron = new Cronjob($db); foreach($toselect as $id) diff --git a/htdocs/expedition/list.php b/htdocs/expedition/list.php index 888f7037efb..eeb05e8926c 100644 --- a/htdocs/expedition/list.php +++ b/htdocs/expedition/list.php @@ -165,9 +165,9 @@ if (empty($reshook)) { $objectclass = 'Expedition'; $objectlabel = 'Sendings'; - $permtoread = $user->rights->expedition->lire; - $permtocreate = $user->rights->expedition->creer; - $permtodelete = $user->rights->expedition->supprimer; + $permissiontoread = $user->rights->expedition->lire; + $permissiontoadd = $user->rights->expedition->creer; + $permissiontodelete = $user->rights->expedition->supprimer; $uploaddir = $conf->expedition->dir_output . '/sending'; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index 6f837fb866c..73331228f2f 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -195,8 +195,8 @@ if (empty($reshook)) // Mass actions $objectclass='ExpenseReport'; $objectlabel='ExpenseReport'; - $permtoread = $user->rights->expensereport->lire; - $permtodelete = $user->rights->expensereport->supprimer; + $permissiontoread = $user->rights->expensereport->lire; + $permissiontodelete = $user->rights->expensereport->supprimer; $uploaddir = $conf->expensereport->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; diff --git a/htdocs/fichinter/list.php b/htdocs/fichinter/list.php index 9cee1ec691c..028fd3f717b 100644 --- a/htdocs/fichinter/list.php +++ b/htdocs/fichinter/list.php @@ -160,8 +160,8 @@ if (empty($reshook)) // Mass actions $objectclass='Fichinter'; $objectlabel='Interventions'; - $permtoread = $user->rights->ficheinter->lire; - $permtodelete = $user->rights->ficheinter->supprimer; + $permissiontoread = $user->rights->ficheinter->lire; + $permissiontodelete = $user->rights->ficheinter->supprimer; $uploaddir = $conf->ficheinter->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index f8325ce8b0f..f14a8d92c66 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -223,8 +223,8 @@ if (empty($reshook)) // Mass actions $objectclass='CommandeFournisseur'; $objectlabel='SupplierOrders'; - $permtoread = $user->rights->fournisseur->commande->lire; - $permtodelete = $user->rights->fournisseur->commande->supprimer; + $permissiontoread = $user->rights->fournisseur->commande->lire; + $permissiontodelete = $user->rights->fournisseur->commande->supprimer; $uploaddir = $conf->fournisseur->commande->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index b13e283ea65..c06c070d45e 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -241,9 +241,9 @@ if (empty($reshook)) // Mass actions $objectclass='FactureFournisseur'; $objectlabel='SupplierInvoices'; - $permtoread = $user->rights->fournisseur->facture->lire; - $permtocreate = $user->rights->fournisseur->facture->creer; - $permtodelete = $user->rights->fournisseur->facture->supprimer; + $permissiontoread = $user->rights->fournisseur->facture->lire; + $permissiontoadd = $user->rights->fournisseur->facture->creer; + $permissiontodelete = $user->rights->fournisseur->facture->supprimer; $uploaddir = $conf->fournisseur->facture->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/holiday/define_holiday.php b/htdocs/holiday/define_holiday.php index 3419d663e30..586617a79d6 100644 --- a/htdocs/holiday/define_holiday.php +++ b/htdocs/holiday/define_holiday.php @@ -95,8 +95,8 @@ if (empty($reshook)) /* $objectclass='Skeleton'; $objectlabel='Skeleton'; - $permtoread = $user->rights->skeleton->read; - $permtodelete = $user->rights->skeleton->delete; + $permissiontoread = $user->rights->skeleton->read; + $permissiontodelete = $user->rights->skeleton->delete; $uploaddir = $conf->skeleton->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; */ diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index 8b30c03a1a9..273c3cf9133 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -196,8 +196,8 @@ if (empty($reshook)) // Mass actions $objectclass='Holiday'; $objectlabel='Holiday'; - $permtoread = $user->rights->holiday->read; - $permtodelete = $user->rights->holiday->delete; + $permissiontoread = $user->rights->holiday->read; + $permissiontodelete = $user->rights->holiday->delete; $uploaddir = $conf->holiday->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/holiday/view_log.php b/htdocs/holiday/view_log.php index 9e5f0ad0cba..813fe245cc1 100644 --- a/htdocs/holiday/view_log.php +++ b/htdocs/holiday/view_log.php @@ -110,8 +110,8 @@ if (empty($reshook)) // Mass actions /*$objectclass='MyObject'; $objectlabel='MyObject'; - $permtoread = $user->rights->mymodule->read; - $permtodelete = $user->rights->mymodule->delete; + $permissiontoread = $user->rights->mymodule->read; + $permissiontodelete = $user->rights->mymodule->delete; $uploaddir = $conf->mymodule->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; */ diff --git a/htdocs/margin/checkMargins.php b/htdocs/margin/checkMargins.php index a1bf67cb8c5..776bec4171c 100644 --- a/htdocs/margin/checkMargins.php +++ b/htdocs/margin/checkMargins.php @@ -120,8 +120,8 @@ if (empty($reshook)) if ((string) $type == '1') { $objectlabel='Services'; } if ((string) $type == '0') { $objectlabel='Products'; } - $permtoread = $user->rights->produit->lire; - $permtodelete = $user->rights->produit->supprimer; + $permissiontoread = $user->rights->produit->lire; + $permissiontodelete = $user->rights->produit->supprimer; $uploaddir = $conf->product->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; */ diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 08fbcbaa98e..bc5bab684dc 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -153,9 +153,9 @@ if (is_array($extrafields->attributes[$object->table_element]['label']) && count $object->fields = dol_sort_array($object->fields, 'position'); $arrayfields = dol_sort_array($arrayfields, 'position'); -$permtoread = $user->rights->mymodule->myobject->read; +$permissiontoread = $user->rights->mymodule->myobject->read; $permtowrite = $user->rights->mymodule->myobject->write; -$permtodelete = $user->rights->mymodule->myobject->delete; +$permissiontodelete = $user->rights->mymodule->myobject->delete; /* @@ -347,7 +347,7 @@ $arrayofmassactions = array( //'builddoc'=>$langs->trans("PDFMerge"), //'presend'=>$langs->trans("SendByMail"), ); -if ($permtodelete) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); +if ($permissiontodelete) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array(); $massactionbutton=$form->selectMassAction('', $arrayofmassactions); @@ -594,7 +594,7 @@ if (in_array('builddoc', $arrayofmassactions) && ($nbtotalofrecords === '' || $n $urlsource.=str_replace('&', '&', $param); $filedir=$diroutputmassaction; - $genallowed=$permtoread; + $genallowed=$permissiontoread; $delallowed=$permtowrite; print $formfile->showdocuments('massfilesarea_mymodule', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty); diff --git a/htdocs/mrp/mo_list.php b/htdocs/mrp/mo_list.php index b91affe403f..7612700e4e5 100644 --- a/htdocs/mrp/mo_list.php +++ b/htdocs/mrp/mo_list.php @@ -177,8 +177,8 @@ if (empty($reshook)) // Mass actions $objectclass='Mo'; $objectlabel='Mo'; - $permtoread = $user->rights->mrp->read; - $permtodelete = $user->rights->mrp->delete; + $permissiontoread = $user->rights->mrp->read; + $permissiontodelete = $user->rights->mrp->delete; $uploaddir = $conf->mrp->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/opensurvey/list.php b/htdocs/opensurvey/list.php index 30bdae7787c..c99525f5740 100644 --- a/htdocs/opensurvey/list.php +++ b/htdocs/opensurvey/list.php @@ -133,8 +133,8 @@ if (empty($reshook)) // Mass actions $objectclass='Opensurveysondage'; $objectlabel='Opensurveysondage'; - $permtoread = $user->rights->opensurvey->read; - $permtodelete = $user->rights->opensurvey->write; + $permissiontoread = $user->rights->opensurvey->read; + $permissiontodelete = $user->rights->opensurvey->write; $uploaddir = $conf->opensurvey->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/product/inventory/list.php b/htdocs/product/inventory/list.php index 9a20f00341b..de1fa138f81 100644 --- a/htdocs/product/inventory/list.php +++ b/htdocs/product/inventory/list.php @@ -153,8 +153,8 @@ if (empty($reshook)) // Mass actions $objectclass='Inventory'; $objectlabel='Inventory'; - $permtoread = $user->rights->stock->lire; - $permtodelete = $user->rights->stock->supprimer; + $permissiontoread = $user->rights->stock->lire; + $permissiontodelete = $user->rights->stock->supprimer; $uploaddir = $conf->stock->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 2f13c4921a9..d9369fcb148 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -253,8 +253,8 @@ if (empty($reshook)) if ((string) $search_type == '1') { $objectlabel='Services'; } if ((string) $search_type == '0') { $objectlabel='Products'; } - $permtoread = $user->rights->produit->lire; - $permtodelete = $user->rights->produit->supprimer; + $permissiontoread = $user->rights->produit->lire; + $permissiontodelete = $user->rights->produit->supprimer; $uploaddir = $conf->product->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/product/stock/list.php b/htdocs/product/stock/list.php index b38888be9bb..a87f1a28621 100644 --- a/htdocs/product/stock/list.php +++ b/htdocs/product/stock/list.php @@ -144,8 +144,8 @@ if (empty($reshook)) // Mass actions $objectclass='Entrepot'; $objectlabel='Warehouse'; - $permtoread = $user->rights->stock->lire; - $permtodelete = $user->rights->stock->supprimer; + $permissiontoread = $user->rights->stock->lire; + $permissiontodelete = $user->rights->stock->supprimer; $uploaddir = $conf->stock->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/product/stock/movement_card.php b/htdocs/product/stock/movement_card.php index 5f4e1b97aa6..ecffe32483e 100644 --- a/htdocs/product/stock/movement_card.php +++ b/htdocs/product/stock/movement_card.php @@ -421,8 +421,8 @@ if (empty($reshook) && $action != 'remove_file') { $objectclass='MouvementStock'; $objectlabel='Movements'; - $permtoread = $user->rights->stock->lire; - $permtodelete = $user->rights->stock->supprimer; + $permissiontoread = $user->rights->stock->lire; + $permissiontodelete = $user->rights->stock->supprimer; $uploaddir = $conf->stock->dir_output . "/movement/"; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/product/stock/productlot_list.php b/htdocs/product/stock/productlot_list.php index 3be66f6acfe..88949818698 100644 --- a/htdocs/product/stock/productlot_list.php +++ b/htdocs/product/stock/productlot_list.php @@ -158,8 +158,8 @@ if (empty($reshook)) { $objectclass='ProductLot'; $objectlabel='LotSerial'; - $permtoread = $user->rights->stock->read; - $permtodelete = $user->rights->stock->delete; + $permissiontoread = $user->rights->stock->read; + $permissiontodelete = $user->rights->stock->delete; $uploaddir = $conf->stock->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index 6cbe9d68127..b4e17377add 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -202,8 +202,8 @@ if (empty($reshook)) // Mass actions $objectclass='Project'; $objectlabel='Project'; - $permtoread = $user->rights->projet->lire; - $permtodelete = $user->rights->projet->supprimer; + $permissiontoread = $user->rights->projet->lire; + $permissiontodelete = $user->rights->projet->supprimer; $uploaddir = $conf->projet->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index 0bffd50ce62..f16a9070325 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -163,8 +163,8 @@ if (empty($reshook)) // Mass actions $objectclass='Task'; $objectlabel='Tasks'; - $permtoread = $user->rights->projet->lire; - $permtodelete = $user->rights->projet->supprimer; + $permissiontoread = $user->rights->projet->lire; + $permissiontodelete = $user->rights->projet->supprimer; $uploaddir = $conf->projet->dir_output.'/tasks'; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php index 8718806004b..326782f5a55 100644 --- a/htdocs/projet/tasks/list.php +++ b/htdocs/projet/tasks/list.php @@ -184,8 +184,8 @@ if (empty($reshook)) // Mass actions $objectclass='Task'; $objectlabel='Tasks'; - $permtoread = $user->rights->projet->lire; - $permtodelete = $user->rights->projet->supprimer; + $permissiontoread = $user->rights->projet->lire; + $permissiontodelete = $user->rights->projet->supprimer; $uploaddir = $conf->projet->dir_output.'/tasks'; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index 8f0d1895c1b..260c165064e 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -304,8 +304,8 @@ if (empty($reshook)) // Mass actions $objectclass='Societe'; $objectlabel='ThirdParty'; - $permtoread = $user->rights->societe->lire; - $permtodelete = $user->rights->societe->supprimer; + $permissiontoread = $user->rights->societe->lire; + $permissiontodelete = $user->rights->societe->supprimer; $uploaddir = $conf->societe->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; diff --git a/htdocs/societe/website.php b/htdocs/societe/website.php index 5e199722961..81698820eb8 100644 --- a/htdocs/societe/website.php +++ b/htdocs/societe/website.php @@ -156,8 +156,8 @@ if (empty($reshook)) // Mass actions $objectclass='WebsiteAccount'; $objectlabel='WebsiteAccount'; - $permtoread = $user->rights->societe->lire; - $permtodelete = $user->rights->societe->supprimer; + $permissiontoread = $user->rights->societe->lire; + $permissiontodelete = $user->rights->societe->supprimer; $uploaddir = $conf->societe->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index c48f3756611..e8cad1541ed 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -214,8 +214,8 @@ if (empty($reshook)) { $objectclass='SupplierProposal'; $objectlabel='SupplierProposals'; - $permtoread = $user->rights->supplier_proposal->lire; - $permtodelete = $user->rights->supplier_proposal->supprimer; + $permissiontoread = $user->rights->supplier_proposal->lire; + $permissiontodelete = $user->rights->supplier_proposal->supprimer; $uploaddir = $conf->supplier_proposal->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 2d4fe3d146f..4ca9140145b 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -176,8 +176,8 @@ if (empty($reshook)) // Mass actions $objectclass='Ticket'; $objectlabel='Ticket'; - $permtoread = $user->rights->ticket->read; - $permtodelete = $user->rights->ticket->delete; + $permissiontoread = $user->rights->ticket->read; + $permissiontodelete = $user->rights->ticket->delete; $uploaddir = $conf->ticket->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/zapier/hook_list.php b/htdocs/zapier/hook_list.php index e622ce8bcff..2132cd5da25 100644 --- a/htdocs/zapier/hook_list.php +++ b/htdocs/zapier/hook_list.php @@ -191,8 +191,8 @@ if (empty($reshook)) { // Mass actions $objectclass='Hook'; $objectlabel='Hook'; - $permtoread = $user->rights->mymodule->read; - $permtodelete = $user->rights->mymodule->delete; + $permissiontoread = $user->rights->mymodule->read; + $permissiontodelete = $user->rights->mymodule->delete; $uploaddir = $conf->mymodule->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } From 4ca85eacc1156e3452c5a711db7a49bd3e74b395 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 15:45:50 +0100 Subject: [PATCH 887/980] Debug module BOM --- htdocs/bom/bom_list.php | 60 ++++++++++++++++++- htdocs/comm/propal/list.php | 2 +- htdocs/core/actions_massactions.inc.php | 59 +----------------- .../modulebuilder/template/myobject_list.php | 6 +- 4 files changed, 65 insertions(+), 62 deletions(-) diff --git a/htdocs/bom/bom_list.php b/htdocs/bom/bom_list.php index 1f6fa300129..aa690b9468a 100644 --- a/htdocs/bom/bom_list.php +++ b/htdocs/bom/bom_list.php @@ -113,6 +113,9 @@ if (is_array($extrafields->attributes[$object->table_element]['label']) && count $object->fields = dol_sort_array($object->fields, 'position'); $arrayfields = dol_sort_array($arrayfields, 'position'); +$permissiontoread = $user->rights->bom->read; +$permissiontoadd = $user->rights->bom->write; +$permissiontodelete = $user->rights->bom->delete; /* @@ -154,9 +157,64 @@ if (empty($reshook)) $permissiontodelete = $user->rights->bom->delete; $uploaddir = $conf->bom->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; -} + // Validate records + if (! $error && $massaction == 'disable' && $permissiontoadd) + { + $objecttmp=new $objectclass($db); + + if (! $error) + { + $db->begin(); + + $nbok = 0; + foreach($toselect as $toselectid) + { + $result=$objecttmp->fetch($toselectid); + if ($result > 0) + { + if ($objecttmp->status != $objecttmp::STATUS_VALIDATED) + { + $langs->load("errors"); + setEventMessages($langs->trans("ErrorObjectMustHaveStatusValidatedToBeDisabled", $objecttmp->ref), null, 'errors'); + $error++; + break; + } + + // Can be 'cancel()' or 'close()' + $result = $objecttmp->cancel($user); + if ($result < 0) + { + setEventMessages($objecttmp->error, $objecttmp->errors, 'errors'); + $error++; + break; + } + else $nbok++; + } + else + { + setEventMessages($objecttmp->error, $objecttmp->errors, 'errors'); + $error++; + break; + } + } + + if (! $error) + { + if ($nbok > 1) setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); + else setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); + $db->commit(); + } + else + { + $db->rollback(); + } + //var_dump($listofobjectthirdparties);exit; + } + } +} + /* * View diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 0eb3b947391..0c52fea9f35 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -243,7 +243,7 @@ if (empty($reshook)) $objectlabel='Proposals'; $permissiontoread = $user->rights->propal->lire; $permissiontodelete = $user->rights->propal->supprimer; - $permtoclose = $user->rights->propal->cloturer; + $permissiontoclose = $user->rights->propal->cloturer; $uploaddir = $conf->propal->multidir_output[$conf->entity]; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 752e8dcc352..07f294479b3 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -30,7 +30,7 @@ // $objectclass and $objectlabel must be defined // $parameters, $object, $action must be defined for the hook. -// $permissiontoread, $permissiontoadd and $permissiontodelete may be defined +// $permissiontoread, $permissiontoadd, $permissiontodelete, $permissiontoclose may be defined // $uploaddir may be defined (example to $conf->projet->dir_output."/";) // $toselect may be defined // $diroutputmassaction may be defined @@ -1175,64 +1175,9 @@ if (! $error && $massaction == 'validate' && $permissiontoadd) //var_dump($listofobjectthirdparties);exit; } } -var_dump($permissiontoadd); -// Validate records -if (! $error && $massaction == 'disable' && $permissiontocreate) -{ - $objecttmp=new $objectclass($db); - - if (! $error) - { - $db->begin(); - - $nbok = 0; - foreach($toselect as $toselectid) - { - $result=$objecttmp->fetch($toselectid); - if ($result > 0) - { - //if (in_array($objecttmp->element, array('societe','member'))) $result = $objecttmp->delete($objecttmp->id, $user, 1); - //else - $result = $objecttmp->close($user); - if ($result == $objecttmp::STATUS_VALIDATED) - { - $langs->load("errors"); - setEventMessages($langs->trans("ErrorObjectMustHaveStatusValidatedToBeDisabled", $objecttmp->ref), null, 'errors'); - $error++; - break; - } - elseif ($result < 0) - { - setEventMessages($objecttmp->error, $objecttmp->errors, 'errors'); - $error++; - break; - } - else $nbok++; - } - else - { - setEventMessages($objecttmp->error, $objecttmp->errors, 'errors'); - $error++; - break; - } - } - - if (! $error) - { - if ($nbok > 1) setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); - else setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); - $db->commit(); - } - else - { - $db->rollback(); - } - //var_dump($listofobjectthirdparties);exit; - } -} // Closed records -if (!$error && $massaction == 'closed' && $objectclass == "Propal" && $permtoclose) { +if (!$error && $massaction == 'closed' && $objectclass == "Propal" && $permissiontoclose) { $db->begin(); $objecttmp = new $objectclass($db); diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index bc5bab684dc..0224b7f12d2 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -154,7 +154,7 @@ $object->fields = dol_sort_array($object->fields, 'position'); $arrayfields = dol_sort_array($arrayfields, 'position'); $permissiontoread = $user->rights->mymodule->myobject->read; -$permtowrite = $user->rights->mymodule->myobject->write; +$permissiontoadd = $user->rights->mymodule->myobject->write; $permissiontodelete = $user->rights->mymodule->myobject->delete; @@ -361,7 +361,7 @@ print ''; print ''; print ''; -$newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', dol_buildpath('/mymodule/myobject_card.php', 1).'?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permtowrite); +$newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', dol_buildpath('/mymodule/myobject_card.php', 1).'?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permissiontoadd); print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_companies', 0, $newcardbutton, '', $limit); @@ -595,7 +595,7 @@ if (in_array('builddoc', $arrayofmassactions) && ($nbtotalofrecords === '' || $n $filedir=$diroutputmassaction; $genallowed=$permissiontoread; - $delallowed=$permtowrite; + $delallowed=$permissiontoadd; print $formfile->showdocuments('massfilesarea_mymodule', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty); } From a0db0fccbe536913d47d5e41756402f86f1fdc2a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 15:56:45 +0100 Subject: [PATCH 888/980] Debug BOM --- htdocs/bom/class/bom.class.php | 2 +- htdocs/langs/en_US/mrp.lang | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 4a623c3f36d..65f619cb0b2 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -91,7 +91,7 @@ class BOM extends CommonObject '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',), 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:1', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp'), + 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:1:(finished IS NULL or finished <> 0)', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp'), 'qty' => array('type'=>'real', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'default'=>1, 'position'=>55, 'notnull'=>1, 'isameasure'=>'1', 'css'=>'maxwidth75imp'), 'efficiency' => array('type'=>'real', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>-1, 'default'=>1, 'position'=>100, 'notnull'=>0, 'css'=>'maxwidth50imp', 'help'=>'ValueOfMeansLoss'), 'duration' => array('type'=>'real', 'label'=>'EstimatedDuration', 'enabled'=>1, 'visible'=>-1, 'position'=>101, 'notnull'=>-1, 'css'=>'maxwidth50imp', 'help'=>'EstimatedDurationDesc'), diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index bc71a65f72a..fd89d8c8e38 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -12,7 +12,7 @@ BOMsSetup=Setup of module BOM ListOfBOMs=List of bills of material - BOM ListOfManufacturingOrders=List of Manufacturing Orders NewBOM=New bill of material -ProductBOMHelp=Product to create with this BOM +ProductBOMHelp=Product to create with this BOM.
    Note: Products with the property 'Nature of product' = 'Raw material' are not visible into this list. BOMsNumberingModules=BOM numbering templates BOMsModelModule=BOM document templates MOsNumberingModules=MO numbering templates From 6e591d2be09ddeb99dae1e7e51ad0f3875da844f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 18:25:32 +0100 Subject: [PATCH 889/980] Fix css --- htdocs/bom/lib/bom.lib.php | 4 ++-- htdocs/contrat/list.php | 8 ++++---- htdocs/core/lib/admin.lib.php | 2 +- htdocs/core/lib/agenda.lib.php | 2 +- htdocs/core/lib/asset.lib.php | 4 ++-- htdocs/core/lib/bank.lib.php | 6 +++--- htdocs/core/lib/company.lib.php | 16 ++++++++-------- htdocs/core/lib/contact.lib.php | 4 ++-- htdocs/core/lib/contract.lib.php | 6 +++--- htdocs/core/lib/donation.lib.php | 4 ++-- htdocs/core/lib/emailing.lib.php | 2 +- htdocs/core/lib/expensereport.lib.php | 4 ++-- htdocs/core/lib/fichinter.lib.php | 8 ++++---- htdocs/core/lib/fourn.lib.php | 12 ++++++------ htdocs/core/lib/holiday.lib.php | 2 +- htdocs/core/lib/invoice.lib.php | 8 ++++---- htdocs/core/lib/loan.lib.php | 4 ++-- htdocs/core/lib/member.lib.php | 6 +++--- htdocs/core/lib/order.lib.php | 8 ++++---- htdocs/core/lib/product.lib.php | 10 +++++----- htdocs/core/lib/project.lib.php | 22 +++++++++++----------- htdocs/core/lib/propal.lib.php | 6 +++--- htdocs/core/lib/reception.lib.php | 4 ++-- htdocs/theme/eldy/badges.inc.php | 2 +- htdocs/theme/md/badges.inc.php | 2 +- 25 files changed, 78 insertions(+), 78 deletions(-) diff --git a/htdocs/bom/lib/bom.lib.php b/htdocs/bom/lib/bom.lib.php index e78ef64b5c7..7da2c768b7f 100644 --- a/htdocs/bom/lib/bom.lib.php +++ b/htdocs/bom/lib/bom.lib.php @@ -90,7 +90,7 @@ function bomPrepareHead($object) if (!empty($object->note_public)) $nbNote++; $head[$h][0] = DOL_URL_ROOT.'/bom/bom_note.php?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -102,7 +102,7 @@ function bomPrepareHead($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/bom/bom_document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; diff --git a/htdocs/contrat/list.php b/htdocs/contrat/list.php index 983f37caa7f..f24105a93db 100644 --- a/htdocs/contrat/list.php +++ b/htdocs/contrat/list.php @@ -591,10 +591,10 @@ if (! empty($arrayfields['lower_planned_end_date']['checked'])) { print_liste_field_titre($arrayfields['lower_planned_end_date']['label'], $_SERVER["PHP_SELF"], "lower_planned_end_date", "", $param, '', $sortfield, $sortorder, 'center '); } if (! empty($arrayfields['status']['checked'])) { - print_liste_field_titre($staticcontratligne->LibStatut(0, 3), '', '', '', '', 'width="16"'); - print_liste_field_titre($staticcontratligne->LibStatut(4, 3, 0), '', '', '', '', 'width="16"'); - print_liste_field_titre($staticcontratligne->LibStatut(4, 3, 1), '', '', '', '', 'width="16"'); - print_liste_field_titre($staticcontratligne->LibStatut(5, 3), '', '', '', '', 'width="16"'); + print_liste_field_titre($staticcontratligne->LibStatut(0, 3, -1, 'class="nochangebackground"'), '', '', '', '', 'width="16"'); + print_liste_field_titre($staticcontratligne->LibStatut(4, 3, 0, 'class="nochangebackground"'), '', '', '', '', 'width="16"'); + print_liste_field_titre($staticcontratligne->LibStatut(4, 3, 1, 'class="nochangebackground"'), '', '', '', '', 'width="16"'); + print_liste_field_titre($staticcontratligne->LibStatut(5, 3, -1, 'class="nochangebackground"'), '', '', '', '', 'width="16"'); } print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); print "
    '; print ''; - print ''; + print ''; $i = 0; while ($i < $num) @@ -176,7 +176,7 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- { print '
    '.$langs->trans("DraftOrders").' '.$num.'
    '.$langs->trans("DraftOrders").''.$num.'
    '; print ''; - print ''; + print ''; $i = 0; $tot_ttc = 0; diff --git a/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php b/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php index 8579fa864d3..d27781c92a9 100644 --- a/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php +++ b/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php @@ -48,7 +48,7 @@ function myobjectPrepareHead($object) if (!empty($object->note_public)) $nbNote++; $head[$h][0] = dol_buildpath('/mymodule/myobject_note.php', 1).'?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -60,7 +60,7 @@ function myobjectPrepareHead($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = dol_buildpath("/mymodule/myobject_document.php", 1).'?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; diff --git a/htdocs/modulebuilder/template/mymoduleindex.php b/htdocs/modulebuilder/template/mymoduleindex.php index d97af3cc99e..af7272d5954 100644 --- a/htdocs/modulebuilder/template/mymoduleindex.php +++ b/htdocs/modulebuilder/template/mymoduleindex.php @@ -106,7 +106,7 @@ if (! empty($conf->mymodule->enabled) && $user->rights->mymodule->read) print '
    '.$langs->trans("DraftBills").' '.$num.'
    '.$langs->trans("DraftBills").''.$num.'
    '; print ''; - print ''; + print ''; $var = true; if ($num > 0) diff --git a/htdocs/mrp/lib/mrp_mo.lib.php b/htdocs/mrp/lib/mrp_mo.lib.php index fe29c774f44..2e47c7bf621 100644 --- a/htdocs/mrp/lib/mrp_mo.lib.php +++ b/htdocs/mrp/lib/mrp_mo.lib.php @@ -53,7 +53,7 @@ function moPrepareHead($object) if (!empty($object->note_public)) $nbNote++; $head[$h][0] = dol_buildpath('/mrp/mo_note.php', 1).'?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -65,7 +65,7 @@ function moPrepareHead($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = dol_buildpath("/mrp/mo_document.php", 1).'?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; diff --git a/htdocs/user/bank.php b/htdocs/user/bank.php index 284c88a867b..b24b6db9381 100644 --- a/htdocs/user/bank.php +++ b/htdocs/user/bank.php @@ -308,7 +308,7 @@ if ($action != 'edit' && $action != 'create') // If not bank account yet, $acco print '
    '.$langs->trans("DraftOrders").($num?' '.$num.'':'').'
    '.$langs->trans("DraftOrders").($num?''.$num.'':'').'
    '; print ''; - print '
    '; + print ''; print ''; @@ -362,7 +362,7 @@ if ($action != 'edit' && $action != 'create') // If not bank account yet, $acco print '
    '.$langs->trans("LastSalaries", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllSalaries").' '.$num.''; print '
    '.$langs->trans("LastSalaries", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllSalaries").''.$num.'
    '; print ''; - print ''; - // Multicurrency rate - if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) - { - print ''; - print ''; + print ''; - } + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, ($usercancreate?'multicurrency_tx':'none'), $object->multicurrency_code); + } else { + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); + if($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { + print '
            '; + print ''.$langs->trans("ActualizeCurrency").''; + print '
    '; + } + } + print ''; + } } // Help of substitution key diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index f127a3bb6e6..e211f29962c 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -834,7 +834,7 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no $filePath = DOL_DATA_ROOT . '/'. $doc->filepath . '/'. $doc->filename; $mime = dol_mimetype($filePath); $file = $actionstatic->id.'/'.$doc->filename; - $thumb = $actionstatic->id.'/thumbs/'.substr($doc->filename, 0, strrpos($doc->filename,'.')).'_mini'.substr($doc->filename, strrpos($doc->filename,'.')); + $thumb = $actionstatic->id.'/thumbs/'.substr($doc->filename, 0, strrpos($doc->filename, '.')).'_mini'.substr($doc->filename, strrpos($doc->filename, '.')); $doclink = dol_buildpath('document.php', 1).'?modulepart=actions&attachment=0&file='.urlencode($file).'&entity='.$conf->entity; $viewlink = dol_buildpath('viewimage.php', 1).'?modulepart=actions&file='.urlencode($thumb).'&entity='.$conf->entity; @@ -881,8 +881,10 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no /** - * @var $object ActionComm - * @return array + * getTicketActionCommEcmList + * + * @param ActionComm $object + * @return array Array of documents in index table */ function getTicketActionCommEcmList($object) { diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index de14a5621a2..4d8afaad9aa 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -2093,7 +2093,6 @@ class Product extends CommonObject $resql = $this->db->query($sql); if ($resql) { - unset($this->oldcopy); if ($this->db->num_rows($resql) > 0) { diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index f0bedbcd7f5..e38fe7c4673 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -291,7 +291,7 @@ if (empty($reshook)) // Execute the sql command from above $db->query($sql); - + $newprice = price2num(GETPOST("price", "alpha")); if ($conf->multicurrency->enabled) From ac783b303d1ee2fe506fc68e40bafa42a8e54abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 20:47:25 +0100 Subject: [PATCH 901/980] Update card-rec.php --- htdocs/compta/facture/card-rec.php | 33 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/htdocs/compta/facture/card-rec.php b/htdocs/compta/facture/card-rec.php index 5abc1f56817..bde69045bb7 100644 --- a/htdocs/compta/facture/card-rec.php +++ b/htdocs/compta/facture/card-rec.php @@ -1381,24 +1381,25 @@ else print '
    '; + print ''; print ''; @@ -418,7 +418,7 @@ if ($action != 'edit' && $action != 'create') // If not bank account yet, $acco print '
    '.$langs->trans("LastHolidays", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllHolidays").' '.$num.''; print '
    '.$langs->trans("LastHolidays", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllHolidays").''.$num.'
    '; print ''; - print ''; + } + print '
    '; + print ''; print ''; diff --git a/htdocs/website/lib/websiteaccount.lib.php b/htdocs/website/lib/websiteaccount.lib.php index 3190c081a43..4c2048798a5 100644 --- a/htdocs/website/lib/websiteaccount.lib.php +++ b/htdocs/website/lib/websiteaccount.lib.php @@ -46,7 +46,7 @@ function websiteaccountPrepareHead($object) if(!empty($object->fields['note_public'])) $nbNote++; $head[$h][0] = dol_buildpath('/monmodule/websiteaccount_note.php', 1).'?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; }*/ @@ -59,7 +59,7 @@ function websiteaccountPrepareHead($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = dol_buildpath("/monmodule/websiteaccount_document.php", 1).'?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; diff --git a/htdocs/zapier/lib/zapier_hook.lib.php b/htdocs/zapier/lib/zapier_hook.lib.php index e1af0259062..98c10786c32 100644 --- a/htdocs/zapier/lib/zapier_hook.lib.php +++ b/htdocs/zapier/lib/zapier_hook.lib.php @@ -48,7 +48,7 @@ function myobjectPrepareHead($object) if (!empty($object->note_public)) $nbNote++; $head[$h][0] = dol_buildpath('/mymodule/myobject_note.php', 1).'?id='.$object->id; $head[$h][1] = $langs->trans('Notes'); - if ($nbNote > 0) $head[$h][1].= ' '.$nbNote.''; + if ($nbNote > 0) $head[$h][1].= ''.$nbNote.''; $head[$h][2] = 'note'; $h++; } @@ -60,7 +60,7 @@ function myobjectPrepareHead($object) $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = dol_buildpath("/mymodule/myobject_document.php", 1).'?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ''.($nbFiles+$nbLinks).''; $head[$h][2] = 'document'; $h++; diff --git a/htdocs/zapier/zapierindex.php b/htdocs/zapier/zapierindex.php index 9bec765c35e..f70f9e8c95d 100644 --- a/htdocs/zapier/zapierindex.php +++ b/htdocs/zapier/zapierindex.php @@ -106,7 +106,7 @@ if (! empty($conf->zapierfordolibarr->enabled) && $user->rights->zapierfordoliba print '
    '.$langs->trans("LastExpenseReports", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllExpenseReports").' '.$num.''; print '
    '.$langs->trans("LastExpenseReports", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllExpenseReports").''.$num.'
    '; print ''; - print ''; + print ''; $var = true; if ($num > 0) From 5d41268d1e03a9f591f54ffef20113f03b0d476a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 19:28:04 +0100 Subject: [PATCH 892/980] CSS --- htdocs/expedition/class/expedition.class.php | 53 +++++--------------- htdocs/product/stock/productlot_list.php | 2 +- htdocs/reception/class/reception.class.php | 19 +++++++ htdocs/variants/list.php | 2 +- 4 files changed, 33 insertions(+), 43 deletions(-) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 2e61ad47733..8ec0cd64ec6 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -197,13 +197,6 @@ class Expedition extends CommonObject $this->statutshorts[0] = 'StatusSendingDraftShort'; $this->statutshorts[1] = 'StatusSendingValidatedShort'; $this->statutshorts[2] = 'StatusSendingProcessedShort'; - - /* Status "billed" or not is managed by another field than status - if (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)) - { - $this->statuts[2] = 'StatusSendingBilled'; - $this->statutshorts[2] = 'StatusSendingBilledShort'; - }*/ } /** @@ -1673,45 +1666,23 @@ class Expedition extends CommonObject /** * Return label of a status * - * @param int $status Id statut - * @param int $mode 0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto - * @return string Label of status + * @param int $status Id statut + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto + * @return string Label of status */ public function LibStatut($status, $mode) { // phpcs:enable - global $langs; + global $langs; - if ($mode==0) - { - if ($status==0) return $langs->trans($this->statuts[$status]); - elseif ($status==1) return $langs->trans($this->statuts[$status]); - elseif ($status==2) return $langs->trans($this->statuts[$status]); - } - elseif ($mode==1) - { - if ($status==0) return $langs->trans($this->statutshorts[$status]); - elseif ($status==1) return $langs->trans($this->statutshorts[$status]); - elseif ($status==2) return $langs->trans($this->statutshorts[$status]); - } - elseif ($mode == 3) - { - if ($status==0) return img_picto($langs->trans($this->statuts[$status]), 'statut0'); - elseif ($status==1) return img_picto($langs->trans($this->statuts[$status]), 'statut4'); - elseif ($status==2) return img_picto($langs->trans($this->statuts[$status]), 'statut6'); - } - elseif ($mode == 4) - { - if ($status==0) return img_picto($langs->trans($this->statuts[$status]), 'statut0').' '.$langs->trans($this->statuts[$status]); - elseif ($status==1) return img_picto($langs->trans($this->statuts[$status]), 'statut4').' '.$langs->trans($this->statuts[$status]); - elseif ($status==2) return img_picto($langs->trans($this->statuts[$status]), 'statut6').' '.$langs->trans($this->statuts[$status]); - } - elseif ($mode == 5) - { - if ($status==0) return $langs->trans($this->statutshorts[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut0'); - elseif ($status==1) return $langs->trans($this->statutshorts[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut4'); - elseif ($status==2) return $langs->trans($this->statutshorts[$status]).' '.img_picto($langs->trans($this->statuts[$status]), 'statut6'); - } + $labelStatus = $langs->trans($this->statuts[$status]); + $labelStatusShort = $langs->trans($this->statutshorts[$status]); + + $statusType = 'status'.$status; + if ($status == self::STATUS_VALIDATED) $statusType = 'status4'; + if ($status == self::STATUS_CLOSED) $statusType = 'status6'; + + return dolGetStatus($labelStatus, $labelStatusShort, '', $statusType, $mode); } /** diff --git a/htdocs/product/stock/productlot_list.php b/htdocs/product/stock/productlot_list.php index 88949818698..8dc8f34b7e0 100644 --- a/htdocs/product/stock/productlot_list.php +++ b/htdocs/product/stock/productlot_list.php @@ -217,7 +217,7 @@ $sql.= " p.label as product_label,"; $sql.= " p.tobatch"; // Add fields for 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.', ' : ''); + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); } // Add fields from hooks $parameters=array(); diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 48a35412987..8dd58798c8f 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -120,6 +120,13 @@ class Reception extends CommonObject $this->statuts[0] = 'StatusReceptionDraft'; $this->statuts[1] = 'StatusReceptionValidated'; $this->statuts[2] = 'StatusReceptionProcessed'; + + // List of short language codes for status + $this->statutshorts = array(); + $this->statutshorts[-1] = 'StatusReceptionCanceledShort'; + $this->statutshorts[0] = 'StatusReceptionDraftShort'; + $this->statutshorts[1] = 'StatusReceptionValidatedShort'; + $this->statutshorts[2] = 'StatusReceptionProcessedShort'; } /** @@ -1152,6 +1159,18 @@ class Reception extends CommonObject */ public function LibStatut($status, $mode) { + // phpcs:enable + global $langs; + + $labelStatus = $langs->trans($this->statuts[$status]); + $labelStatusShort = $langs->trans($this->statutshorts[$status]); + + $statusType = 'status'.$status; + if ($status == self::STATUS_VALIDATED) $statusType = 'status4'; + if ($status == self::STATUS_CLOSED) $statusType = 'status6'; + + return dolGetStatus($labelStatus, $labelStatusShort, '', $statusType, $mode); + // phpcs:enable global $langs; diff --git a/htdocs/variants/list.php b/htdocs/variants/list.php index da19bd88205..c4fd52f250c 100644 --- a/htdocs/variants/list.php +++ b/htdocs/variants/list.php @@ -110,7 +110,7 @@ $forcereloadpage=empty($conf->global->MAIN_FORCE_RELOAD_PAGE)?0:1; }); -
    '.$langs->trans("DraftOrders").($num?' '.$num.'':'').'
    '.$langs->trans("DraftOrders").($num?''.$num.'':'').'
    +
    From dbb90914bcce5a771f2179395281b7379a6d3076 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 19:53:27 +0100 Subject: [PATCH 893/980] Better Trans --- htdocs/langs/en_US/admin.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index ca1344cb88c..2b172f2ea18 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -277,7 +277,7 @@ MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in e MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos) MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes) -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Suggest emails of employees (if defined) into the list of predefined recipient when writing a new email MAIN_MAIL_SENDMODE=Email sending method MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication) MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication) From d59b0a33f3dc48e9187f919a7282656130a736e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 20:16:34 +0100 Subject: [PATCH 894/980] Fix external/internal status in user tooltip list --- htdocs/user/list.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/user/list.php b/htdocs/user/list.php index 31e5c5382de..8161ce9ae75 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -502,12 +502,13 @@ while ($i < min($num, $limit)) $obj = $db->fetch_object($result); $userstatic->id=$obj->rowid; + $userstatic->admin = $obj->admin; $userstatic->ref=$obj->label; $userstatic->login=$obj->login; $userstatic->statut=$obj->statut; $userstatic->email=$obj->email; $userstatic->gender=$obj->gender; - $userstatic->societe_id=$obj->fk_soc; + $userstatic->socid=$obj->fk_soc; $userstatic->firstname=$obj->firstname; $userstatic->lastname=$obj->lastname; $userstatic->employee=$obj->employee; From 4df406c9853774452944de2e90947e524f1f7fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 20:20:38 +0100 Subject: [PATCH 895/980] replace societe_id by socid --- htdocs/api/class/api_access.class.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/api/class/api_access.class.php b/htdocs/api/class/api_access.class.php index edeb32e8353..53139b0df8c 100644 --- a/htdocs/api/class/api_access.class.php +++ b/htdocs/api/class/api_access.class.php @@ -148,11 +148,13 @@ class DolibarrApiAccess implements iAuthenticate $fuser->getrights(); static::$user = $fuser; - if($fuser->societe_id) + if ($fuser->socid) { static::$role = 'external'; + } - if($fuser->admin) + if ($fuser->admin) { static::$role = 'admin'; + } } else { From dacd7227bc81ef31132bb283c7b17ca5ee579902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 20:23:21 +0100 Subject: [PATCH 896/980] replace societe_id by socid --- htdocs/salaries/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/salaries/list.php b/htdocs/salaries/list.php index 02a729cb16c..51fd8462180 100644 --- a/htdocs/salaries/list.php +++ b/htdocs/salaries/list.php @@ -226,7 +226,7 @@ if ($result) $userstatic->admin=$obj->admin; $userstatic->login=$obj->login; $userstatic->email=$obj->email; - $userstatic->societe_id=$obj->fk_soc; + $userstatic->socid=$obj->fk_soc; $userstatic->statut=$obj->status; $salstatic->id=$obj->rowid; From 1c8e9fffbee892ca39d07f605ee1afb4d55b9a97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 20:26:52 +0100 Subject: [PATCH 897/980] Update payout.php --- htdocs/stripe/payout.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/stripe/payout.php b/htdocs/stripe/payout.php index e2f19c560be..89c2f1a237c 100644 --- a/htdocs/stripe/payout.php +++ b/htdocs/stripe/payout.php @@ -156,7 +156,7 @@ if (! $rowid) { $societestatic->admin = $obj->admin; $societestatic->login = $obj->login; $societestatic->email = $obj->email; - $societestatic->societe_id = $obj->fk_soc; + $societestatic->socid = $obj->fk_soc; print ''; From f6aa9bf220fc1dd839c7b1de569ac2d7d358a5bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 20:28:10 +0100 Subject: [PATCH 898/980] Update hierarchy.php --- htdocs/user/hierarchy.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/user/hierarchy.php b/htdocs/user/hierarchy.php index dc990497808..59e39058629 100644 --- a/htdocs/user/hierarchy.php +++ b/htdocs/user/hierarchy.php @@ -98,7 +98,7 @@ else $userstatic->statut=$val['statut']; $userstatic->email=$val['email']; $userstatic->gender=$val['gender']; - $userstatic->societe_id=$val['fk_soc']; + $userstatic->socid=$val['fk_soc']; $userstatic->admin=$val['admin']; $userstatic->entity=$val['entity']; $userstatic->photo=$val['photo']; From 88ad997eecd45eb08a404b2b528dc00aafaf406c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 20:29:33 +0100 Subject: [PATCH 899/980] Update home.php --- htdocs/user/home.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/user/home.php b/htdocs/user/home.php index ec742f3e6a9..8840ba698c9 100644 --- a/htdocs/user/home.php +++ b/htdocs/user/home.php @@ -144,7 +144,7 @@ if ($resql) $fuserstatic->admin = $obj->admin; $fuserstatic->email = $obj->email; $fuserstatic->skype = $obj->skype; - $fuserstatic->societe_id = $obj->fk_soc; + $fuserstatic->socid = $obj->fk_soc; $companystatic->id=$obj->fk_soc; $companystatic->name=$obj->name; From e60fff39d95d1f4f767854ee6fee235805ce3100 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 4 Nov 2019 20:36:55 +0100 Subject: [PATCH 900/980] Fix phpcs --- htdocs/compta/facture/card-rec.php | 65 +++++++++++++------------- htdocs/core/lib/ticket.lib.php | 8 ++-- htdocs/product/class/product.class.php | 1 - htdocs/product/fournisseurs.php | 2 +- 4 files changed, 39 insertions(+), 37 deletions(-) diff --git a/htdocs/compta/facture/card-rec.php b/htdocs/compta/facture/card-rec.php index 49cb9529c71..5abc1f56817 100644 --- a/htdocs/compta/facture/card-rec.php +++ b/htdocs/compta/facture/card-rec.php @@ -1364,41 +1364,42 @@ else print '
    trans('Ref') ?> trans('Label') ?>
    '; - if ($usercancreate && $action != 'editmulticurrencycode' && ! empty($object->brouillon)) + if ($usercancreate && $action != 'editmulticurrencycode' && ! empty($object->brouillon)) { print ''; - print '
    '; print $form->editfieldkey('Currency', 'multicurrency_code', '', $object, 0); print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; - print '
    '; - $htmlname = (($usercancreate && $action == 'editmulticurrencycode')?'multicurrency_code':'none'); - $form->form_multicurrency_code($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_code, $htmlname); - print '
    '; + print '
    '; + $htmlname = (($usercancreate && $action == 'editmulticurrencycode')?'multicurrency_code':'none'); + $form->form_multicurrency_code($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_code, $htmlname); + print '
    '; - print ''; - if ($usercancreate && $action != 'editmulticurrencyrate' && ! empty($object->brouillon) && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) - print ''; - print '
    '; - print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); - print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; - print '
    '; - if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { - if($action == 'actualizemulticurrencyrate') { - list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); - } - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, ($usercancreate?'multicurrency_tx':'none'), $object->multicurrency_code); - } else { - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); - if($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { - print '
            '; - print ''.$langs->trans("ActualizeCurrency").''; - print '
    '; - } + // Multicurrency rate + if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) + { + print '
    '; + print ''; + if ($usercancreate && $action != 'editmulticurrencyrate' && ! empty($object->brouillon) && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) + print ''; + print '
    '; + print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); + print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; + print '
    '; + if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { + if($action == 'actualizemulticurrencyrate') { + list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); } - print '
    '; - if ($usercancreate && $action != 'editmulticurrencyrate' && ! empty($object->brouillon) && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) + if ($usercancreate && $action != 'editmulticurrencyrate' && ! empty($object->brouillon) && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { print ''; - print '
    '; print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); print 'id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '
    '; - print '
    '; - if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { - if($action == 'actualizemulticurrencyrate') { - list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); - } - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, ($usercancreate?'multicurrency_tx':'none'), $object->multicurrency_code); - } else { - $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); - if($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { - print '
            '; - print ''.$langs->trans("ActualizeCurrency").''; - print '
    '; - } + } + print '
    '; + print ''; + if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { + if($action == 'actualizemulticurrencyrate') { + list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); } - print ''; + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, ($usercancreate?'multicurrency_tx':'none'), $object->multicurrency_code); + } else { + $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code); + if($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { + print '
            '; + print ''.$langs->trans("ActualizeCurrency").''; + print '
    '; + } + } + print ''; } } From f05463b239b23ca38b10e3878b4bb462c83cf7b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric?= <35066297+c3do@users.noreply.github.com> Date: Mon, 4 Nov 2019 21:01:30 +0100 Subject: [PATCH 902/980] API Get the list of ordering methods --- htdocs/api/class/api_setup.class.php | 62 ++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 50102b76b93..2201ccf5bae 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -44,6 +44,68 @@ class Setup extends DolibarrApi global $db; $this->db = $db; } + + /** + * Get the list of ordering methods. + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Number of items per page + * @param int $page Page number {@min 0} + * @param int $active Payment type is active or not {@min 0} {@max 1} + * @param string $sqlfilters SQL criteria to filter with. Syntax example "(t.code:=:'CHQ')" + * + * @url GET dictionary/ordering_methods + * + * @return array [List of ordering methods] + * + * @throws 400 RestException + * @throws 200 OK + */ + public function getOrderingMethods($sortfield = "code", $sortorder = 'ASC', $limit = 100, $page = 0, $active = 1, $sqlfilters = '') + { + $list = array(); + + $sql = "SELECT rowid, code, libelle as label, module"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_input_method as t"; + $sql.= " WHERE t.active = ".$active; + // Add sql filters + if ($sqlfilters) + { + if (! DolibarrApi::_checkFilters($sqlfilters)) + { + throw new RestException(400, 'error when validating parameter sqlfilters '.$sqlfilters); + } + $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; + $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } + + + $sql.= $this->db->order($sortfield, $sortorder); + + if ($limit) { + if ($page < 0) { + $page = 0; + } + $offset = $limit * $page; + + $sql .= $this->db->plimit($limit, $offset); + } + + $result = $this->db->query($sql); + + if ($result) { + $num = $this->db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + for ($i = 0; $i < $min; $i++) { + $list[] = $this->db->fetch_object($result); + } + } else { + throw new RestException(400, $this->db->lasterror()); + } + + return $list; + } /** * Get the list of payments types. From 50e51852979f15376d8dcbecdc513c04cbd564a7 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 4 Nov 2019 20:02:11 +0000 Subject: [PATCH 903/980] Fixing style errors. --- htdocs/api/class/api_setup.class.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 2201ccf5bae..f91eb5395d6 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -44,7 +44,7 @@ class Setup extends DolibarrApi global $db; $this->db = $db; } - + /** * Get the list of ordering methods. * @@ -65,7 +65,7 @@ class Setup extends DolibarrApi public function getOrderingMethods($sortfield = "code", $sortorder = 'ASC', $limit = 100, $page = 0, $active = 1, $sqlfilters = '') { $list = array(); - + $sql = "SELECT rowid, code, libelle as label, module"; $sql.= " FROM ".MAIN_DB_PREFIX."c_input_method as t"; $sql.= " WHERE t.active = ".$active; @@ -79,21 +79,21 @@ class Setup extends DolibarrApi $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; } - - + + $sql.= $this->db->order($sortfield, $sortorder); - + if ($limit) { if ($page < 0) { $page = 0; } $offset = $limit * $page; - + $sql .= $this->db->plimit($limit, $offset); } - + $result = $this->db->query($sql); - + if ($result) { $num = $this->db->num_rows($result); $min = min($num, ($limit <= 0 ? $num : $limit)); @@ -103,7 +103,7 @@ class Setup extends DolibarrApi } else { throw new RestException(400, $this->db->lasterror()); } - + return $list; } From d035aefd409f1c78d978ecc60172933c5a5a9a3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 21:58:40 +0100 Subject: [PATCH 904/980] config file doesn't exists --- htdocs/core/modules/modCollab.class.php | 26 +++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/htdocs/core/modules/modCollab.class.php b/htdocs/core/modules/modCollab.class.php index 9c1cde791b3..d30c8d274cd 100644 --- a/htdocs/core/modules/modCollab.class.php +++ b/htdocs/core/modules/modCollab.class.php @@ -62,7 +62,7 @@ class modCollab extends DolibarrModules // Config pages //------------- - $this->config_page_url = array('collab.php'); + $this->config_page_url = array(/*'collab.php'*/); // Dependancies //------------- @@ -109,17 +109,19 @@ class modCollab extends DolibarrModules // Main menu entries $r=0; - $this->menu[$r]=array( 'fk_menu'=>'0', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode - 'type'=>'top', // This is a Left menu entry - 'titre'=>'Collab', - 'mainmenu'=>'collab', - 'url'=>'/collab/index.php', - 'langs'=>'collab', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. - 'position'=>100, - 'enabled'=>'$conf->collab->enabled', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. - 'perms'=>'1', // Use 'perms'=>'$user->rights->mymodule->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'=>'0', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode + 'type'=>'top', // This is a Left menu entry + 'titre'=>'Collab', + 'mainmenu'=>'collab', + 'url'=>'/collab/index.php', + 'langs'=>'collab', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'position'=>100, + 'enabled'=>'$conf->collab->enabled', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. + 'perms'=>'1', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules + 'target'=>'', + 'user'=>2 // 0=Menu for internal users, 1=external users, 2=both + ); $r++; } } From 3a729f9e7b1f106db73804eb34b67a9661bb5a8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 22:45:20 +0100 Subject: [PATCH 905/980] fix missing newtoken in form --- htdocs/compta/cashcontrol/cashcontrol_card.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index aef5c0573f9..706f24d00d4 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -318,6 +318,7 @@ if ($action=="create" || $action=="start") print load_fiche_titre($langs->trans("CashControl")." - ".$langs->trans("New"), '', 'cash-register'); print '
    '; + print ''; if ($action == 'start' && GETPOST('posnumber', 'int') != '' && GETPOST('posnumber', 'int') != '' && GETPOST('posnumber', 'int') != '-1') { print ''; From 5113e5e57097c2a733f820f6246571ffd01a9a3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 22:50:19 +0100 Subject: [PATCH 906/980] fix missing newtoken --- htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php index 2ed9eb4c2bd..8a04e8b621a 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php @@ -197,6 +197,7 @@ if ($resql) { $param="&socid=".$socid; print ''; + print ''; print ''; $letteringbutton = ''; From d059df13484d5a93403373b91dfa6a42d98f1b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 22:51:15 +0100 Subject: [PATCH 907/980] Update thirdparty_lettering_supplier.php --- htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php index b381fc597ce..f9cf57df344 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php @@ -195,6 +195,7 @@ if ($resql) { $param="&socid=".$socid; print ''; + print ''; print ''; $letteringbutton = ''; From b0d0e306d1f8051b5caf7a14d42dcea6414ba31d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 22:54:34 +0100 Subject: [PATCH 908/980] missing newtoken for csrf --- htdocs/adherents/cartes/carte.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/adherents/cartes/carte.php b/htdocs/adherents/cartes/carte.php index 177e2eef18f..e7686a0a055 100644 --- a/htdocs/adherents/cartes/carte.php +++ b/htdocs/adherents/cartes/carte.php @@ -259,6 +259,7 @@ print '
    '; print img_picto('', 'puce').' '.$langs->trans("DocForAllMembersCards", ($conf->global->ADHERENT_CARD_TYPE?$conf->global->ADHERENT_CARD_TYPE:$langs->transnoentitiesnoconv("None"))).' '; print ''; +print ''; print ''; print ''; print ''; @@ -278,6 +279,7 @@ print '

    '; print img_picto('', 'puce').' '.$langs->trans("DocForOneMemberCards", ($conf->global->ADHERENT_CARD_TYPE?$conf->global->ADHERENT_CARD_TYPE:$langs->transnoentitiesnoconv("None"))).' '; print ''; +print ''; print ''; print ''; print $langs->trans("DescADHERENT_CARD_TYPE").' '; @@ -297,6 +299,7 @@ print '

    '; print img_picto('', 'puce').' '.$langs->trans("DocForLabels", $conf->global->ADHERENT_ETIQUETTE_TYPE).' '; print ''; +print ''; print ''; print ''; print $langs->trans("DescADHERENT_ETIQUETTE_TYPE").' '; From f81ac3a38831887e177d516c7893278d0d033858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 22:57:46 +0100 Subject: [PATCH 909/980] Update type.php --- htdocs/adherents/type.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 97b0eae7ed0..718ebfdc64d 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -617,6 +617,7 @@ if ($rowid > 0) } print ''; + print ''; print ''; print '
    '; From 96556dfd0481ebc5ae08591789c5b2c2e953934f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 23:01:28 +0100 Subject: [PATCH 910/980] missing newtoken --- htdocs/admin/agenda_other.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/admin/agenda_other.php b/htdocs/admin/agenda_other.php index beccc9e9d5a..17fc773904f 100644 --- a/htdocs/admin/agenda_other.php +++ b/htdocs/admin/agenda_other.php @@ -324,6 +324,7 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) } print ''; +print ''; print ''; print ''."\n"; From 77b05553d4af96e42604eb92ecdfe4716db7d20a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 23:02:43 +0100 Subject: [PATCH 911/980] Update agenda_reminder.php --- htdocs/admin/agenda_reminder.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/admin/agenda_reminder.php b/htdocs/admin/agenda_reminder.php index 57a20b8bf42..614d4ef4407 100644 --- a/htdocs/admin/agenda_reminder.php +++ b/htdocs/admin/agenda_reminder.php @@ -180,6 +180,7 @@ $head=agenda_prepare_head(); dol_fiche_head($head, 'reminders', $langs->trans("Agenda"), -1, 'action'); print ''; +print ''; print ''; print '
    '."\n"; From 5d2386228b6675c7c30cb7469ebb21cb30411228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 23:04:30 +0100 Subject: [PATCH 912/980] missing newtoken --- htdocs/admin/clicktodial.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/admin/clicktodial.php b/htdocs/admin/clicktodial.php index 0c3514015f2..92919886512 100644 --- a/htdocs/admin/clicktodial.php +++ b/htdocs/admin/clicktodial.php @@ -119,6 +119,7 @@ if (! empty($conf->global->CLICKTODIAL_URL)) if (GETPOST('phonefortest')) $phonefortest=GETPOST('phonefortest'); print ''; + print ''; print $langs->trans("LinkToTestClickToDial", $user->login).' : '; print ''; print ''; From c6c7d1f5e1cebcb87bb3461fa480fb54c123c243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 4 Nov 2019 23:08:00 +0100 Subject: [PATCH 913/980] missing newtoken --- htdocs/admin/fckeditor.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/admin/fckeditor.php b/htdocs/admin/fckeditor.php index c2c49eb4943..bbe8f0dd221 100644 --- a/htdocs/admin/fckeditor.php +++ b/htdocs/admin/fckeditor.php @@ -185,6 +185,7 @@ else print '
    '."\n"; print ''."\n"; + print ''; // Skins show_skin(null, 1); From 06e551af88b9de153ec2cb2af094b81026afee68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 5 Nov 2019 08:14:35 +0100 Subject: [PATCH 914/980] css --- htdocs/supplier_proposal/index.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/htdocs/supplier_proposal/index.php b/htdocs/supplier_proposal/index.php index 55bde878918..ab8e83d7877 100644 --- a/htdocs/supplier_proposal/index.php +++ b/htdocs/supplier_proposal/index.php @@ -71,12 +71,13 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele { print ''; print ''; + print '
    '; print '
    '; print ''; print ''; print ''; - print "
    '.$langs->trans("Search").'
    '; print $langs->trans("SupplierProposal").':

    \n"; + print "

    \n"; } @@ -121,6 +122,7 @@ if ($resql) } $db->free($resql); + print '
    '; print ''; print ''."\n"; $listofstatus=array(0,1,2,3,4); @@ -153,7 +155,7 @@ if ($resql) } print ''; - print "
    '.$langs->trans("Statistics").' - '.$langs->trans("CommRequests").'
    '.$langs->trans("Total").''.$total.'

    "; + print "

    "; } else { @@ -179,6 +181,7 @@ if (! empty($conf->supplier_proposal->enabled)) $resql=$db->query($sql); if ($resql) { + print '
    '; print ''; print ''; print ''; @@ -206,7 +209,7 @@ if (! empty($conf->supplier_proposal->enabled)) $i++; } } - print "
    '.$langs->trans("DraftRequests").'

    "; + print "

    "; } } @@ -235,6 +238,7 @@ $sql.= $db->plimit($max, 0); $resql=$db->query($sql); if ($resql) { + print '
    '; print ''; print ''; print ''; @@ -283,7 +287,7 @@ if ($resql) $i++; } } - print "
    '.$langs->trans("LastModifiedRequests", $max).'

    "; + print "

    "; } else dol_print_error($db); @@ -316,6 +320,7 @@ if (! empty($conf->supplier_proposal->enabled) && $user->rights->supplier_propos $i = 0; if ($num > 0) { + print '
    '; print ''; print ''; @@ -370,7 +375,7 @@ if (! empty($conf->supplier_proposal->enabled) && $user->rights->supplier_propos { print '"; } - print "
    '.$langs->trans("RequestsOpened").' '.$num.'
    '.$langs->trans("Total").''.price($total)." 

    "; + print "

    "; } } else From 4f9e995163ffbce516333c8a901dfaf94ead8ea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 5 Nov 2019 08:17:57 +0100 Subject: [PATCH 915/980] Update index.php --- htdocs/fichinter/index.php | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/htdocs/fichinter/index.php b/htdocs/fichinter/index.php index bf20d6b5c12..147d3f13570 100644 --- a/htdocs/fichinter/index.php +++ b/htdocs/fichinter/index.php @@ -69,13 +69,14 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele { // Search ficheinter $var=false; - print ''; print ''; print ''; + print '
    '; + print '
    '; print ''; print ''; - print "
    '.$langs->trans("Search").'
    '; print $langs->trans("Intervention").':

    \n"; + print "

    \n"; } @@ -121,6 +122,7 @@ if ($resql) $i++; } $db->free($resql); + print '
    '; print ''; print ''."\n"; $listofstatus=array(0,1,2); @@ -167,7 +169,7 @@ if ($resql) //if ($totalinprocess != $total) //print ''; print ''; - print "
    '.$langs->trans("Statistics").' - '.$langs->trans("Interventions").'
    '.$langs->trans("Total").' ('.$langs->trans("CustomersOrdersRunning").')'.$totalinprocess.'
    '.$langs->trans("Total").''.$total.'

    "; + print "

    "; } else { @@ -193,6 +195,7 @@ if (! empty($conf->ficheinter->enabled)) $resql=$db->query($sql); if ($resql) { + print '
    '; print ''; print ''; print ''; @@ -211,7 +214,7 @@ if (! empty($conf->ficheinter->enabled)) $i++; } } - print "
    '.$langs->trans("DraftFichinter").'

    "; + print "

    "; } } @@ -241,6 +244,7 @@ $sql.= $db->plimit($max, 0); $resql=$db->query($sql); if ($resql) { + print '
    '; print ''; print ''; print ''; @@ -284,7 +288,7 @@ if ($resql) $i++; } } - print "
    '.$langs->trans("LastModifiedInterventions", $max).'

    "; + print "

    "; } else dol_print_error($db); @@ -311,6 +315,7 @@ if (! empty($conf->ficheinter->enabled)) { $num = $db->num_rows($resql); + print '
    '; print ''; print ''; print ''; @@ -354,7 +359,7 @@ if (! empty($conf->ficheinter->enabled)) } } - print "
    '.$langs->trans("FichinterToProcess").' '.$num.'

    "; + print "

    "; } else dol_print_error($db); } From 747113551b5dcc220fe09d28f0975011200a2eb0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Nov 2019 09:52:33 +0100 Subject: [PATCH 916/980] Debug pagination of bookmark list --- htdocs/bookmarks/bookmarks.lib.php | 6 +- htdocs/bookmarks/card.php | 4 +- htdocs/bookmarks/class/bookmark.class.php | 65 +++++ htdocs/bookmarks/list.php | 291 +++++++++++++--------- htdocs/core/lib/functions.lib.php | 25 +- 5 files changed, 255 insertions(+), 136 deletions(-) diff --git a/htdocs/bookmarks/bookmarks.lib.php b/htdocs/bookmarks/bookmarks.lib.php index 2a5758e61d2..670f8768e9a 100644 --- a/htdocs/bookmarks/bookmarks.lib.php +++ b/htdocs/bookmarks/bookmarks.lib.php @@ -70,7 +70,7 @@ function printBookmarksList() $ret.= ''.$langs->trans("SetHereATitleForLink").''; dol_set_focus('#titlebookmark'); @@ -229,7 +229,7 @@ if ($id > 0 && ! preg_match('/^add/i', $action)) print '
    '; print '
    '; - print ''; + print '
    '; print ''; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totaldebitfield']=$totalarray['nbfield']; - $totalarray['totaldebit'] += $line->debit; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='totaldebit'; + $totalarray['val']['totaldebit'] += $line->debit; } // Amount credit @@ -931,8 +931,8 @@ while ($i < min($num, $limit)) { print ''; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalcreditfield']=$totalarray['nbfield']; - $totalarray['totalcredit'] += $line->credit; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='totalcredit'; + $totalarray['val']['totalcredit'] += $line->credit; } // Lettering code @@ -998,29 +998,7 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['totaldebitfield']) || isset($totalarray['totalcreditfield'])) -{ - $i=0; - print ''; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''; - else print ''; - } - elseif ($totalarray['totaldebitfield'] == $i) print ''; - elseif ($totalarray['totalcreditfield'] == $i) print ''; - else print ''; - } - $parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql); - $reshook=$hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - - print ''; -} - +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; print "
    '; if ($action == 'edit') { diff --git a/htdocs/bookmarks/class/bookmark.class.php b/htdocs/bookmarks/class/bookmark.class.php index 7b5890d32b2..2c9189612f7 100644 --- a/htdocs/bookmarks/class/bookmark.class.php +++ b/htdocs/bookmarks/class/bookmark.class.php @@ -277,4 +277,69 @@ class Bookmark extends CommonObject { return ''; } + + /** + * Return a link to the object card (with optionaly the picto) + * + * @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto) + * @param string $option On what the link point to ('nolink', ...) + * @param int $notooltip 1=Disable tooltip + * @param string $morecss Add more css on link + * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking + * @return string String with URL + */ + public function getNomUrl($withpicto = 0, $option = '', $notooltip = 0, $morecss = '', $save_lastsearch_value = -1) + { + global $conf, $langs, $hookmanager; + + if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips + + $result = ''; + + $label = '' . $langs->trans("Bookmark") . ''; + $label.= '
    '; + $label.= '' . $langs->trans('Ref') . ': ' . $this->ref; + + $url = DOL_URL_ROOT.'/bookmarks/card.php?id='.$this->id; + + if ($option != 'nolink') + { + // Add param to save lastsearch_values or not + $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0); + if ($save_lastsearch_value == -1 && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1; + if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1'; + } + + $linkclose=''; + if (empty($notooltip)) + { + if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) + { + $label=$langs->trans("ShowBookmark"); + $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"'; + } + $linkclose.=' title="'.dol_escape_htmltag($label, 1).'"'; + $linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"'; + } + else $linkclose = ($morecss?' class="'.$morecss.'"':''); + + $linkstart = ''; + $linkend=''; + + $result .= $linkstart; + if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1); + if ($withpicto != 2) $result.= $this->ref; + $result .= $linkend; + //if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : ''); + + global $action,$hookmanager; + $hookmanager->initHooks(array('mybookmarkdao')); + $parameters=array('id'=>$this->id, 'getnomurl'=>$result); + $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; + } } diff --git a/htdocs/bookmarks/list.php b/htdocs/bookmarks/list.php index bdd4f0b5429..2b34f673107 100644 --- a/htdocs/bookmarks/list.php +++ b/htdocs/bookmarks/list.php @@ -32,6 +32,7 @@ $massaction=GETPOST('massaction', 'alpha'); $show_files=GETPOST('show_files', 'int'); $confirm=GETPOST('confirm', 'alpha'); $toselect = GETPOST('toselect', 'array'); +$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'myobjectlist'; // To manage different context of search // Security check if (! $user->rights->bookmark->lire) { @@ -39,11 +40,12 @@ if (! $user->rights->bookmark->lire) { } $optioncss = GETPOST('optioncss', 'alpha'); +// Load variable for pagination $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; -$sortfield = GETPOST("sortfield", 'alpha'); -$sortorder = GETPOST("sortorder", 'alpha'); -$page = GETPOST("page", 'int'); -if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +$sortfield = GETPOST('sortfield', 'alpha'); +$sortorder = GETPOST('sortorder', 'alpha'); +$page = GETPOST('page', 'int'); +if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; @@ -52,6 +54,12 @@ if (! $sortorder) $sortorder='ASC'; $id = GETPOST("id", 'int'); +$object=new Bookmark($db); + +$permissiontoread = $user->rights->bookmark->lire; +$permissiontoadd = $user->rights->bookmark->write; +$permissiontodelete = $user->rights->bookmark->delete; + /* * Actions @@ -59,8 +67,7 @@ $id = GETPOST("id", 'int'); if ($action == 'delete') { - $bookmark=new Bookmark($db); - $res=$bookmark->remove($id); + $res=$object->remove($id); if ($res > 0) { header("Location: ".$_SERVER["PHP_SELF"]); @@ -68,7 +75,7 @@ if ($action == 'delete') } else { - setEventMessages($bookmark->error, $bookmark->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } @@ -79,132 +86,182 @@ if ($action == 'delete') $userstatic=new User($db); -llxHeader('', $langs->trans("ListOfBookmarks")); +$title = $langs->trans("ListOfBookmarks"); -$newcardbutton=''; -$newcardbutton.= dolGetButtonTitle($langs->trans('NewBookmark'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/bookmarks/card.php?action=create', '', !empty($user->rights->bookmark->creer)); - - -print_barre_liste($langs->trans("ListOfBookmarks"), $page, $_SERVER['PHP_SELF'], $param, $sortfield, $sortorder, '', -1, '', 'generic', 0, $newcardbutton); +llxHeader('', $title); $sql = "SELECT b.rowid, b.dateb, b.fk_user, b.url, b.target, b.title, b.favicon, b.position,"; $sql.= " u.login, u.lastname, u.firstname"; $sql.= " FROM ".MAIN_DB_PREFIX."bookmark as b LEFT JOIN ".MAIN_DB_PREFIX."user as u ON b.fk_user=u.rowid"; $sql.= " WHERE 1=1"; -$sql.= " AND b.entity = ".$conf->entity; +$sql.= " AND b.entity IN (".getEntity('bookmark').")"; if (! $user->admin) $sql.= " AND (b.fk_user = ".$user->id." OR b.fk_user is NULL OR b.fk_user = 0)"; -$sql.= $db->order($sortfield.", position", $sortorder); -$sql.= $db->plimit($limit, $offset); -$resql=$db->query($sql); -if ($resql) +$sql.=$db->order($sortfield.", position", $sortorder); + +// Count total nb of records +$nbtotalofrecords = ''; +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { - $num = $db->num_rows($resql); - $i = 0; - $param = ""; - if ($optioncss != '') $param ='&optioncss='.$optioncss; - - $moreforfilter=''; - - print '
    '; - print ''."\n"; - - print ""; - //print ""; - print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "b.rowid", "", $param, 'align="left"', $sortfield, $sortorder); - print_liste_field_titre("Title", $_SERVER["PHP_SELF"], "b.title", "", $param, 'align="left"', $sortfield, $sortorder); - print_liste_field_titre("Link", $_SERVER["PHP_SELF"], "b.url", "", $param, 'align="left"', $sortfield, $sortorder); - print_liste_field_titre("Target", '', '', '', '', 'align="center"'); - print_liste_field_titre("Owner", $_SERVER["PHP_SELF"], "u.lastname", "", $param, 'align="center"', $sortfield, $sortorder); - print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "b.dateb", "", $param, 'align="center"', $sortfield, $sortorder); - print_liste_field_titre("Position", $_SERVER["PHP_SELF"], "b.position", "", $param, 'class="right"', $sortfield, $sortorder); - print_liste_field_titre(''); - print "\n"; - - while ($i < $num) + $resql = $db->query($sql); + $nbtotalofrecords = $db->num_rows($resql); + if (($page * $limit) > $nbtotalofrecords) // if total of record found is smaller than page * limit, goto and load page 0 { - $obj = $db->fetch_object($resql); - - print ''; - - // Id - print ''; - - $linkintern=0; - $title=$obj->title; - $link=$obj->url; - - // Title - print "\n"; - - // Url - print '\n"; - - // Target - print '\n"; - - // Author - print '\n"; - - // Date creation - print '"; - - // Position - print '"; - - // Actions - print '"; - print "\n"; - $i++; + $page = 0; + $offset = 0; } - print "
     
    '; - print "rowid."\">".img_object($langs->trans("ShowBookmark"), "bookmark").' '.$obj->rowid.""; - print '"; - $linkintern=1; - if ($linkintern) print "url."\">"; - print $title; - if ($linkintern) print ""; - print "'; - if (! $linkintern) print 'target?' target="newlink"':'').'>'; - print $link; - if (! $linkintern) print ''; - print "'; - if ($obj->target == 0) print $langs->trans("BookmarkTargetReplaceWindowShort"); - if ($obj->target == 1) print $langs->trans("BookmarkTargetNewWindowShort"); - print "'; - if ($obj->fk_user) - { - $userstatic->id=$obj->fk_user; - $userstatic->lastname=$obj->login; - print $userstatic->getNomUrl(1); - } - else - { - print $langs->trans("Public"); - } - print "'.dol_print_date($db->jdate($obj->dateb), 'day')."'.$obj->position."'; - if ($user->rights->bookmark->creer) - { - print 'rowid."&backtopage=".urlencode($_SERVER["PHP_SELF"]).'">'.img_edit().""; - } - if ($user->rights->bookmark->supprimer) - { - print "rowid\">".img_delete().""; - } - else - { - print " "; - } - print "
    "; - print '
    '; - - $db->free($resql); +} +// if total of record found is smaller than limit, no need to do paging and to restart another select with limits set. +if (is_numeric($nbtotalofrecords) && $limit > $nbtotalofrecords) +{ + $num = $nbtotalofrecords; } else { - dol_print_error($db); + $sql.= $db->plimit($limit+1, $offset); + + $resql=$db->query($sql); + if (! $resql) + { + dol_print_error($db); + exit; + } + + $num = $db->num_rows($resql); } +$param = ""; +if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); +if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); +if ($optioncss != '') $param ='&optioncss='.urlencode($optioncss); + +$moreforfilter=''; + +// List of mass actions available +$arrayofmassactions = array( + //'validate'=>$langs->trans("Validate"), + //'generate_doc'=>$langs->trans("ReGeneratePDF"), + //'builddoc'=>$langs->trans("PDFMerge"), + //'presend'=>$langs->trans("SendByMail"), +); +if ($permissiontodelete) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); +if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array(); +$massactionbutton=$form->selectMassAction('', $arrayofmassactions); + +print '
    '; +if ($optioncss != '') print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +$newcardbutton=''; +$newcardbutton.= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/bookmarks/card.php?action=create', '', !empty($user->rights->bookmark->creer)); + +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'bookmark', 0, $newcardbutton, '', $limit); + +print '
    '; +print ''."\n"; + +print ""; +//print ""; +print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "b.rowid", "", $param, 'align="left"', $sortfield, $sortorder); +print_liste_field_titre("Title", $_SERVER["PHP_SELF"], "b.title", "", $param, 'align="left"', $sortfield, $sortorder); +print_liste_field_titre("Link", $_SERVER["PHP_SELF"], "b.url", "", $param, 'align="left"', $sortfield, $sortorder); +print_liste_field_titre("Target", '', '', '', '', 'align="center"'); +print_liste_field_titre("Owner", $_SERVER["PHP_SELF"], "u.lastname", "", $param, 'align="center"', $sortfield, $sortorder); +print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "b.dateb", "", $param, 'align="center"', $sortfield, $sortorder); +print_liste_field_titre("Position", $_SERVER["PHP_SELF"], "b.position", "", $param, 'class="right"', $sortfield, $sortorder); +print_liste_field_titre(''); +print "\n"; + +$i = 0; +while ($i < min($num, $limit)) +{ + $obj = $db->fetch_object($resql); + + $object->id = $obj->rowid; + $object->ref = $obj->rowid; + + print ''; + + // Id + print ''; + + $linkintern=0; + $title=$obj->title; + $link=$obj->url; + + // Title + print "\n"; + + // Url + print '\n"; + + // Target + print '\n"; + + // Author + print '\n"; + + // Date creation + print '"; + + // Position + print '"; + + // Actions + print '"; + print "\n"; + $i++; +} +print "
     
    '; + print $object->getNomUrl(1); + print '"; + $linkintern=1; + if ($linkintern) print "url."\">"; + print $title; + if ($linkintern) print ""; + print "'; + if (! $linkintern) print 'target?' target="newlink"':'').'>'; + print $link; + if (! $linkintern) print ''; + print "'; + if ($obj->target == 0) print $langs->trans("BookmarkTargetReplaceWindowShort"); + if ($obj->target == 1) print $langs->trans("BookmarkTargetNewWindowShort"); + print "'; + if ($obj->fk_user) + { + $userstatic->id=$obj->fk_user; + $userstatic->lastname=$obj->login; + print $userstatic->getNomUrl(1); + } + else + { + print $langs->trans("Public"); + } + print "'.dol_print_date($db->jdate($obj->dateb), 'day')."'.$obj->position."'; + if ($user->rights->bookmark->creer) + { + print 'rowid."&backtopage=".urlencode($_SERVER["PHP_SELF"]).'">'.img_edit().""; + } + if ($user->rights->bookmark->supprimer) + { + print "rowid\">".img_delete().""; + } + else + { + print " "; + } + print "
    "; +print '
    '; + +$db->free($resql); + + // End of page llxFooter(); $db->close(); diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 11fbf512ab1..740093ba801 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3056,7 +3056,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ '1downarrow', '1uparrow', '1leftarrow', '1rightarrow', '1uparrow_selected', '1downarrow_selected', '1leftarrow_selected', '1rightarrow_selected', 'address', 'bank', 'bookmark', 'building', 'cash-register', 'close_title', 'cubes', 'delete', 'dolly', 'edit', 'ellipsis-h', 'filter', 'file-code', 'grip', 'grip_title', 'list', 'listlight', 'note', - 'object_list','object_calendar', 'object_calendarweek', 'object_calendarmonth', 'object_calendarday', 'object_calendarperuser', + 'object_bookmark', 'object_list','object_calendar', 'object_calendarweek', 'object_calendarmonth', 'object_calendarday', 'object_calendarperuser', 'off', 'on', 'play', 'playdisabled', 'printer', 'resize', 'stats', 'note', 'setup', 'sign-out', 'split', 'switch_off', 'switch_on', 'tools', 'unlink', 'uparrow', 'user', 'wrench', 'globe', 'jabber','skype','twitter','facebook','linkedin', @@ -3067,13 +3067,20 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'title_setup', 'title_accountancy', 'title_bank', 'title_hrm', 'title_agenda' ) )) { + $fakey = $pictowithouttext; + $facolor = ''; $fasize = ''; $fa='fas'; - $fakey = $pictowithouttext; - $facolor = ''; $fasize = ''; + if (in_array($pictowithouttext, array('off', 'on', 'object_bookmark', 'bookmark'))) { + $fa='far'; + } + if (in_array($pictowithouttext, array('skype', 'twitter', 'facebook', 'linkedin', 'instagram','snapchat','youtube','google-plus-g','whatsapp'))) { + $fa='fab'; + } + $arrayconvpictotofa = array( 'address'=> 'address-book', 'setup'=>'cog', 'companies'=>'building', 'products'=>'cube', 'commercial'=>'suitcase', 'invoicing'=>'coins', 'accountancy'=>'money-check-alt', 'project'=>'sitemap', 'hrm'=>'umbrella-beach', 'members'=>'users', 'ticket'=>'ticket-alt', 'generic'=>'folder-open', - 'switch_off'=>'toggle-off', 'switch_on'=>'toggle-on', 'bookmark'=>'star', 'stats' => 'chart-bar', + 'switch_off'=>'toggle-off', 'switch_on'=>'toggle-on', 'object_bookmark'=>'star', 'bookmark'=>'star', 'stats' => 'chart-bar', 'bank'=>'university', 'close_title'=>'window-close', 'delete'=>'trash', 'edit'=>'pencil', 'filter'=>'filter', 'split'=>'code-fork', 'object_list'=>'list-alt','object_calendar'=>'calendar-alt', 'object_calendarweek'=>'calendar-week', 'object_calendarmonth'=>'calendar-alt', 'object_calendarday'=>'calendar-day', 'object_calendarperuser'=>'table', 'error'=>'exclamation-triangle', 'warning'=>'exclamation-triangle', @@ -3094,12 +3101,10 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ } elseif ($pictowithouttext == 'off') { $fakey = 'fa-square'; - $fa='far'; $fasize = '1.3em'; } elseif ($pictowithouttext == 'on') { $fakey = 'fa-check-square'; - $fa='far'; $fasize = '1.3em'; } elseif ($pictowithouttext == 'bank') { @@ -3121,10 +3126,6 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ elseif ($pictowithouttext == 'grip_title' || $pictowithouttext == 'grip') { $fakey = 'fa-arrows-alt'; } - elseif ($pictowithouttext == 'bookmark') { - $fakey = 'fa-'.$arrayconvpictotofa[$pictowithouttext]; - $fa='far'; - } elseif ($pictowithouttext == 'listlight') { $fakey = 'fa-download'; $facolor = '#999'; @@ -3174,10 +3175,6 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ elseif ($pictowithouttext == 'jabber') { $fakey = 'fa-comment-o'; } - elseif (in_array($pictowithouttext, array('skype', 'twitter', 'facebook', 'linkedin', 'instagram','snapchat','youtube','google-plus-g','whatsapp'))) { - $fakey = 'fa-'.$pictowithouttext; - $fa = 'fab'; - } // Img for type of views elseif (in_array($pictowithouttext, array('object_list', 'object_calendar', 'object_calendarweek', 'object_calendarmonth', 'object_calendarday', 'object_calendarperuser'))) { $fakey = 'imgforviewmode fa-'.$arrayconvpictotofa[$pictowithouttext]; From b4d72e3e96b0312599d29d2734ee2b2a7fda9f0f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Nov 2019 10:00:46 +0100 Subject: [PATCH 917/980] Fix link to setup of social network module --- htdocs/core/modules/modSocialNetworks.class.php | 2 +- htdocs/install/mysql/data/llx_c_socialnetworks.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/modSocialNetworks.class.php b/htdocs/core/modules/modSocialNetworks.class.php index 2347f68dcbc..a06acc5ebdb 100644 --- a/htdocs/core/modules/modSocialNetworks.class.php +++ b/htdocs/core/modules/modSocialNetworks.class.php @@ -62,7 +62,7 @@ class modSocialNetworks extends DolibarrModules $this->dirs = array(); // Config pages - $this->config_page_url = array(/*"socialnetworks.php"*/); + $this->config_page_url = array(DOL_URL_ROOT.'/admin/dict.php?id=38'); // Dependencies $this->hidden = ! empty($conf->global->MODULE_SOCIALNETWORKS_DISABLED); // A condition to hide module diff --git a/htdocs/install/mysql/data/llx_c_socialnetworks.sql b/htdocs/install/mysql/data/llx_c_socialnetworks.sql index 07c993525d8..e45179cfe89 100644 --- a/htdocs/install/mysql/data/llx_c_socialnetworks.sql +++ b/htdocs/install/mysql/data/llx_c_socialnetworks.sql @@ -27,7 +27,7 @@ INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'linkedin', 'LinkedIn', 'https://www.linkedin.com/{socialid}', 'fa-linkedin', 1); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'instagram', 'Instagram', 'https://www.instagram.com/{socialid}', 'fa-instagram', 1); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'snapchat', 'Snapchat', '{socialid}', 'fa-snapchat', 1); -INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'googleplus', 'GooglePlus', 'https://www.googleplus.com/{socialid}', 'fa-google-plus-g', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'googleplus', 'GooglePlus', 'https://www.googleplus.com/{socialid}', 'fa-google-plus-g', 0); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'youtube', 'Youtube', 'https://www.youtube.com/{socialid}', 'fa-youtube', 1); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'whatsapp', 'Whatsapp', '{socialid}', 'fa-whatsapp', 1); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES(1, 'tumblr', 'Tumblr', 'https://www.tumblr.com/{socialid}', '', 0); From 4acc1071910e8ec781c92e01508d6f733b3e5e65 Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Tue, 5 Nov 2019 10:01:21 +0100 Subject: [PATCH 918/980] fix bad setEventMessages --- htdocs/accountancy/admin/account.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php index e34cd54863b..10a65cab2fe 100644 --- a/htdocs/accountancy/admin/account.php +++ b/htdocs/accountancy/admin/account.php @@ -138,7 +138,7 @@ if (empty($reshook)) if ($result > 0) { - setEventMessages($langs->trans("ChartLoaded"), null); + setEventMessages($langs->trans("ChartLoaded"), null, 'mesgs'); } else { From 9499398f860aa14d2e267e5b5671641db568d3fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Nov 2019 10:11:28 +0100 Subject: [PATCH 919/980] Code syntax --- htdocs/core/class/commonobject.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 0cfe1958f03..1cccc443c11 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -7432,7 +7432,7 @@ abstract class CommonObject unset($fieldvalues['rowid']); // The field 'rowid' is reserved field name for autoincrement field so we don't need it into insert. if (array_key_exists('ref', $fieldvalues)) $fieldvalues['ref']=dol_string_nospecial($fieldvalues['ref']); // If field is a ref,we sanitize data - $keys=array(); + $keys = array(); $values = array(); foreach ($fieldvalues as $k => $v) { $keys[$k] = $k; @@ -7663,7 +7663,7 @@ abstract class CommonObject if (array_key_exists('fk_user_modif', $fieldvalues) && ! ($fieldvalues['fk_user_modif'] > 0)) $fieldvalues['fk_user_modif']=$user->id; unset($fieldvalues['rowid']); // The field 'rowid' is reserved field name for autoincrement field so we don't need it into update. - $keys=array(); + $keys = array(); $values = array(); foreach ($fieldvalues as $k => $v) { $keys[$k] = $k; From 4d84ee2041e290c1bba7adc1bf0fb7413ca39837 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Nov 2019 10:15:00 +0100 Subject: [PATCH 920/980] Fix var not init --- htdocs/core/class/commonobject.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 1cccc443c11..1eef4acfc87 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -7665,6 +7665,7 @@ abstract class CommonObject $keys = array(); $values = array(); + $tmp = array(); foreach ($fieldvalues as $k => $v) { $keys[$k] = $k; $value = $this->fields[$k]; From cd187f033fd21744bbbda826a6f9b85c5e99e65e Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 5 Nov 2019 11:28:22 +0100 Subject: [PATCH 921/980] NEW get social networks dictionary by API --- htdocs/api/class/api_setup.class.php | 63 +++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index f91eb5395d6..838a62be1e9 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -1025,7 +1025,7 @@ class Setup extends DolibarrApi * @param string $sortorder Sort order * @param int $limit Number of items per page * @param int $page Page number (starting from zero) - * @param int $active Payment term is active or not {@min 0} {@max 1} + * @param int $active Measuring unit is active or not {@min 0} {@max 1} * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)" * @return array List of measuring unit * @@ -1077,6 +1077,67 @@ class Setup extends DolibarrApi return $list; } + + /** + * Get the list of social networks. + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Number of items per page + * @param int $page Page number (starting from zero) + * @param int $active Social network is active or not {@min 0} {@max 1} + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)" + * @return array List of social networks + * + * @url GET dictionary/socialnetworks + * + * @throws RestException + */ + public function getListOfsocialNetworks($sortfield = "rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $active = 1, $sqlfilters = '') + { + $list = array(); + //TODO link with multicurrency module + $sql = "SELECT t.rowid, t.entity, t.code, t.label, t.url, t.icon, t.active"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_socialnetworks as t"; + $sql.= " WHERE t.entity IN (".getEntity('c_socialnetworks').")"; + $sql.= " AND t.active = ".$active; + // Add sql filters + if ($sqlfilters) + { + if (! DolibarrApi::_checkFilters($sqlfilters)) + { + throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); + } + $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; + $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } + + + $sql.= $this->db->order($sortfield, $sortorder); + + if ($limit) { + if ($page < 0) { + $page = 0; + } + $offset = $limit * $page; + + $sql .= $this->db->plimit($limit, $offset); + } + + $result = $this->db->query($sql); + + if ($result) { + $num = $this->db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + for ($i = 0; $i < $min; $i++) { + $list[] = $this->db->fetch_object($result); + } + } else { + throw new RestException(503, 'Error when retrieving list of social networks: '.$this->db->lasterror()); + } + + return $list; + } /** * Get the list of tickets categories. From 7f53bc376cea99bce23bc668536a46619d6139e8 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 5 Nov 2019 10:30:36 +0000 Subject: [PATCH 922/980] Fixing style errors. --- htdocs/api/class/api_setup.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 838a62be1e9..b32eea1f57f 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -1077,7 +1077,7 @@ class Setup extends DolibarrApi return $list; } - + /** * Get the list of social networks. * From ce1dec253f4ea4369ffaa239c5c5cc433e5ba384 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Nov 2019 12:47:38 +0100 Subject: [PATCH 923/980] FIX #11364 --- htdocs/accountancy/bookkeeping/list.php | 32 ++-------- htdocs/adherents/list.php | 22 +------ htdocs/adherents/subscription/list.php | 22 +------ htdocs/adherents/type.php | 32 ++-------- htdocs/admin/emailcollector_list.php | 22 +------ htdocs/admin/mails_senderprofile_list.php | 22 +------ htdocs/bom/bom_list.php | 22 +------ htdocs/comm/propal/list.php | 60 ++++--------------- htdocs/commande/list.php | 38 +++--------- htdocs/compta/bank/bankentries_list.php | 7 ++- htdocs/compta/bank/list.php | 22 ++----- htdocs/compta/bank/various_payment/list.php | 22 ++++--- .../compta/cashcontrol/cashcontrol_list.php | 22 +------ htdocs/compta/cashcontrol/report.php | 27 ++------- .../compta/facture/invoicetemplate_list.php | 23 +------ htdocs/compta/facture/list.php | 58 +++++------------- htdocs/compta/paiement/list.php | 22 +------ htdocs/compta/sociales/list.php | 19 +----- htdocs/contrat/services_list.php | 35 +++-------- htdocs/core/class/extrafields.class.php | 14 +++-- htdocs/core/tpl/commonfields_add.tpl.php | 2 +- htdocs/core/tpl/commonfields_edit.tpl.php | 4 +- htdocs/core/tpl/extrafields_view.tpl.php | 2 +- htdocs/core/tpl/list_print_total.tpl.php | 29 +++++++++ htdocs/expensereport/list.php | 32 +++------- htdocs/fichinter/list.php | 22 +------ htdocs/fourn/commande/list.php | 33 +++------- htdocs/fourn/facture/list.php | 58 +++++------------- htdocs/fourn/facture/paiement.php | 21 +------ .../modulebuilder/template/myobject_list.php | 21 +------ htdocs/mrp/mo_list.php | 22 +------ htdocs/opensurvey/list.php | 22 +------ htdocs/product/inventory/list.php | 22 +------ htdocs/product/stock/productlot_list.php | 20 +------ htdocs/projet/list.php | 27 ++------- htdocs/projet/tasks/list.php | 21 +++++-- htdocs/projet/tasks/time.php | 46 +++++++------- htdocs/societe/website.php | 22 +------ htdocs/supplier_proposal/list.php | 38 +++--------- htdocs/ticket/list.php | 22 +------ htdocs/zapier/hook_list.php | 23 +------ 41 files changed, 240 insertions(+), 812 deletions(-) create mode 100644 htdocs/core/tpl/list_print_total.tpl.php diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 5158e12ebb6..f449a99c8bf 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -922,8 +922,8 @@ while ($i < min($num, $limit)) { print '
    ' . ($line->debit ? price($line->debit) : ''). '' . ($line->credit ? price($line->credit) : '') . '
    '.$langs->trans("Total").''.$langs->trans("Totalforthispage").''.price($totalarray['totaldebit']).''.price($totalarray['totalcredit']).'
    "; diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php index a66323654d8..81d6b7625b7 100644 --- a/htdocs/adherents/list.php +++ b/htdocs/adherents/list.php @@ -919,26 +919,8 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) diff --git a/htdocs/adherents/subscription/list.php b/htdocs/adherents/subscription/list.php index dbc14e2999e..c66dce0e8fd 100644 --- a/htdocs/adherents/subscription/list.php +++ b/htdocs/adherents/subscription/list.php @@ -588,26 +588,8 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 718ebfdc64d..b6f8abe27da 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -827,9 +827,12 @@ if ($rowid > 0) $doleditor->Create(); print ""; + // Other attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_edit.tpl.php'; + // Other attributes $parameters=array(); - $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $act, $action); // Note that $action and $object may have been modified by hook + $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (empty($reshook)) { @@ -838,33 +841,6 @@ if ($rowid > 0) print ''; - // Extra field - if (empty($reshook)) - { - print '

    '; - if (is_array($extrafields->attributes['adherent_type']['label'])) - { - foreach($extrafields->attributes['adherent_type']['label'] as $key=>$label) - { - if (isset($_POST["options_" . $key])) { - if (is_array($_POST["options_" . $key])) { - // $_POST["options"] is an array but following code expects a comma separated string - $value = implode(",", $_POST["options_" . $key]); - } else { - $value = $_POST["options_" . $key]; - } - } else { - $value = $object->array_options["options_" . $key]; - } - - print '\n"; - } - } - print '
    '.$label.''; - print $extrafields->showInputField($key, $value); - print "


    '; - } - dol_fiche_end(); print '
    '; diff --git a/htdocs/admin/emailcollector_list.php b/htdocs/admin/emailcollector_list.php index 5145f5dd083..9cb83e3784b 100644 --- a/htdocs/admin/emailcollector_list.php +++ b/htdocs/admin/emailcollector_list.php @@ -497,26 +497,8 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) diff --git a/htdocs/admin/mails_senderprofile_list.php b/htdocs/admin/mails_senderprofile_list.php index 139c6815072..028de9a32a5 100644 --- a/htdocs/admin/mails_senderprofile_list.php +++ b/htdocs/admin/mails_senderprofile_list.php @@ -461,26 +461,8 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) diff --git a/htdocs/bom/bom_list.php b/htdocs/bom/bom_list.php index aa690b9468a..40899c56fa7 100644 --- a/htdocs/bom/bom_list.php +++ b/htdocs/bom/bom_list.php @@ -555,26 +555,8 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 0c52fea9f35..bccc742aa8e 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -947,24 +947,24 @@ if ($resql) { print ''.price($obj->total_ht)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalhtfield']=$totalarray['nbfield']; - $totalarray['totalht'] += $obj->total_ht; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='p.total_ht'; + $totalarray['val']['p.total_ht'] += $obj->total_ht; } // Amount VAT if (! empty($arrayfields['p.total_vat']['checked'])) { print ''.price($obj->total_vat)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalvatfield']=$totalarray['nbfield']; - $totalarray['totalvat'] += $obj->total_vat; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='p.total_vat'; + $totalarray['val']['p.total_vat'] += $obj->total_vat; } // Amount TTC if (! empty($arrayfields['p.total_ttc']['checked'])) { print ''.price($obj->total_ttc)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; - $totalarray['totalttc'] += $obj->total_ttc; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='p.total_ttc'; + $totalarray['val']['p.total_ttc'] += $obj->total_ttc; } // Amount invoiced if(! empty($arrayfields['p.total_ht_invoiced']['checked'])) { @@ -984,8 +984,8 @@ if ($resql) print ''.price($totalInvoiced)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalhtinvoicedfield']=$totalarray['nbfield']; - $totalarray['totalhtinvoiced'] += $totalInvoiced; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='p.total_ht_invoiced'; + $totalarray['val']['p.total_ht_invoiced'] += $obj->total_ht_invoiced; } // Amount invoiced if(! empty($arrayfields['p.total_invoiced']['checked'])) { @@ -1005,8 +1005,8 @@ if ($resql) print ''.price($totalInvoiced)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalinvoicedfield']=$totalarray['nbfield']; - $totalarray['totalinvoiced'] += $totalInvoiced; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='p.total_invoiced'; + $totalarray['val']['p.total_invoiced'] += $obj->total_invoiced; } $userstatic->id=$obj->fk_user_author; @@ -1120,45 +1120,7 @@ if ($resql) } // Show total line - if (isset($totalarray['totalhtfield']) - || isset($totalarray['totalvatfield']) - || isset($totalarray['totalttcfield']) - || isset($totalarray['totalamfield']) - || isset($totalarray['totalrtpfield']) - || isset($totalarray['totalizable']) - ) - { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; - elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; - elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; - elseif ($totalarray['totalhtinvoicedfield'] == $i) print ''.price($totalarray['totalhtinvoiced']).''; - elseif ($totalarray['totalinvoicedfield'] == $i) print ''.price($totalarray['totalinvoiced']).''; - elseif ($totalarray['totalizable']) { - $printed = false; - foreach ($totalarray['totalizable'] as $totalizable) { - if ($totalizable['pos']==$i && ! $printed) { - print ''.price($totalizable['total']).''; - $printed = true; - } - } - if (! $printed) { - print ''; - } - } - else print ''; - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; $db->free($resql); diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 23af81ab24e..c196f0a8296 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -1057,24 +1057,25 @@ if ($resql) { print ''.price($obj->total_ht)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalhtfield']=$totalarray['nbfield']; - $totalarray['totalht'] += $obj->total_ht; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='c.total_ht'; + $totalarray['val']['c.total_ht'] += $obj->total_ht; + } // Amount VAT if (! empty($arrayfields['c.total_vat']['checked'])) { print ''.price($obj->total_tva)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalvatfield']=$totalarray['nbfield']; - $totalarray['totalvat'] += $obj->total_tva; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='c.total_tva'; + $totalarray['val']['c.total_tva'] += $obj->total_tva; } // Amount TTC if (! empty($arrayfields['c.total_ttc']['checked'])) { print ''.price($obj->total_ttc)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; - $totalarray['totalttc'] += $obj->total_ttc; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='c.total_ttc'; + $totalarray['val']['c.total_ttc'] += $obj->total_ttc; } // Extra fields @@ -1139,30 +1140,7 @@ if ($resql) } // Show total line - if (isset($totalarray['totalhtfield']) - || isset($totalarray['totalvatfield']) - || isset($totalarray['totalttcfield']) - || isset($totalarray['totalamfield']) - || isset($totalarray['totalrtpfield']) - ) - { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; - elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; - elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; - else print ''; - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; $db->free($resql); diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 4a9d0947b1e..d23f5126375 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -919,13 +919,13 @@ if ($resql) if (! empty($arrayfields['b.debit']['checked'])) { print ''; - print ''; + print ''; print ''; } if (! empty($arrayfields['b.credit']['checked'])) { print ''; - print ''; + print ''; print ''; } if (! empty($arrayfields['balancebefore']['checked'])) @@ -1085,6 +1085,7 @@ if ($resql) if ($tmpnbfieldbeforebalance) { print ''; + print ' '; print ''; } @@ -1110,6 +1111,7 @@ if ($resql) '; print ''; print ''; + print ' '; print ''; print ''; } @@ -1529,7 +1531,6 @@ if ($resql) print ' '.img_warning($langs->trans("ReconciliationLate")); } } - print ' '; if ($user->rights->banque->modifier) { print 'rowid.'&id='.$objp->bankid.'&page='.$page.'">'; diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php index e1e7ca777b5..2244a73b02a 100644 --- a/htdocs/compta/bank/list.php +++ b/htdocs/compta/bank/list.php @@ -563,8 +563,8 @@ foreach ($accounts as $key=>$type) print ''.price($solde, 0, $langs, 0, -1, -1, $objecttmp->currency_code).''; print ''; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalbalancefield']=$totalarray['nbfield']; - $totalarray['totalbalance'] += $solde; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='balance'; + $totalarray['val']['balance'] += $solde; } // Action column @@ -594,22 +594,10 @@ if (! $found) } // Show total line -if (isset($totalarray['totalbalancefield']) && $lastcurrencycode != 'various') // If there is several currency, $lastcurrencycode is set to 'various' before +if ($lastcurrencycode != 'various') // If there is several currency, $lastcurrencycode is set to 'various' before { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totalbalancefield'] == $i) print ''.price($totalarray['totalbalance'], 0, $langs, 0, -1, -1, $lastcurrencycode).''; - else print ''; - } - print ''; + // Show total line + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; } print ''; diff --git a/htdocs/compta/bank/various_payment/list.php b/htdocs/compta/bank/various_payment/list.php index cad88367aa0..d73d6d8a391 100644 --- a/htdocs/compta/bank/various_payment/list.php +++ b/htdocs/compta/bank/various_payment/list.php @@ -256,15 +256,19 @@ if ($result) // Ref print "".$variousstatic->getNomUrl(1)."\n"; + if (! $i) $totalarray['nbfield']++; // Label payment print "".dol_trunc($obj->label, 40)."\n"; + if (! $i) $totalarray['nbfield']++; // Date payment print ''.dol_print_date($db->jdate($obj->datep), 'day')."\n"; + if (! $i) $totalarray['nbfield']++; // Type print ''.$langs->trans("PaymentTypeShort".$obj->payment_code).' '.$obj->num_payment.''; + if (! $i) $totalarray['nbfield']++; // Account if (! empty($conf->banque->enabled)) @@ -289,6 +293,7 @@ if ($result) } else print ' '; print ''; + if (! $i) $totalarray['nbfield']++; } // Accounting account @@ -297,6 +302,7 @@ if ($result) $accountingaccount->fetch('', $obj->accountancy_code, 1); print ''.$accountingaccount->getNomUrl(0, 1, 1, '', 1).''; + if (! $i) $totalarray['nbfield']++; } // Debit @@ -304,8 +310,10 @@ if ($result) if ($obj->sens == 0) { print price($obj->amount); - $totalarray['totaldeb'] += $obj->amount; + $totalarray['val']['total_deb'] += $obj->amount; } + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='total_deb'; print ""; // Credit @@ -313,8 +321,10 @@ if ($result) if ($obj->sens == 1) { print price($obj->amount); - $totalarray['totalcred'] += $obj->amount; + $totalarray['val']['total_cred'] += $obj->amount; } + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='total_cred'; print ""; print ""; @@ -326,12 +336,8 @@ if ($result) if (! empty($conf->banque->enabled)) $colspan++; if (! empty($conf->accounting->enabled)) $colspan++; - print ''; - print ''.$langs->trans("Total").''; - print ''.price($totalarray['totaldeb']).""; - print ''.price($totalarray['totalcred']).""; - print ''; - print ''; + // Show total line + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; print ""; print '
    '; diff --git a/htdocs/compta/cashcontrol/cashcontrol_list.php b/htdocs/compta/cashcontrol/cashcontrol_list.php index 45129b6ee19..7a40d6638ee 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_list.php +++ b/htdocs/compta/cashcontrol/cashcontrol_list.php @@ -516,26 +516,8 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) diff --git a/htdocs/compta/cashcontrol/report.php b/htdocs/compta/cashcontrol/report.php index 8af3495afc8..2a2477fce5e 100644 --- a/htdocs/compta/cashcontrol/report.php +++ b/htdocs/compta/cashcontrol/report.php @@ -216,22 +216,22 @@ if ($resql) if ($objp->amount < 0) { print price($objp->amount * -1); - $totalarray['totaldeb'] += $objp->amount; + $totalarray['val']['totaldebfield'] += $objp->amount; } print "\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totaldebfield']=$totalarray['nbfield']; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='totaldebfield'; // Credit print ''; if ($objp->amount > 0) { print price($objp->amount); - $totalarray['totalcred'] += $objp->amount; + $totalarray['val']['totalcredfield'] += $objp->amount; } print "\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalcredfield']=$totalarray['nbfield']; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='totalcredfield'; print ""; @@ -239,24 +239,7 @@ if ($resql) } // Show total line - if (isset($totalarray['totaldebfield']) || isset($totalarray['totalcredfield'])) - { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totaldebfield'] == $i) print ''.price(-1 * $totalarray['totaldeb']).''; - elseif ($totalarray['totalcredfield'] == $i) print ''.price($totalarray['totalcred']).''; - else print ''; - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; print ""; diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php index 941aa0723ef..12e437e6110 100644 --- a/htdocs/compta/facture/invoicetemplate_list.php +++ b/htdocs/compta/facture/invoicetemplate_list.php @@ -676,28 +676,9 @@ if ($resql) print ''.$langs->trans("NoRecordFound").''; } - //var_dump($totalarray); // Show total line - if (isset($totalarray['pos'])) - { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + print ""; print "
    "; diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 43f8d41db10..75945106b72 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -1232,40 +1232,40 @@ if ($resql) { print ''.price($obj->total_ht)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalhtfield']=$totalarray['nbfield']; - $totalarray['totalht'] += $obj->total_ht; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_ht'; + $totalarray['val']['f.total_ht'] += $obj->total_ht; } // Amount VAT if (! empty($arrayfields['f.total_vat']['checked'])) { print ''.price($obj->total_vat)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalvatfield']=$totalarray['nbfield']; - $totalarray['totalvat'] += $obj->total_vat; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_vat'; + $totalarray['val']['f.total_vat'] += $obj->total_vat; } // Amount LocalTax1 if (! empty($arrayfields['f.total_localtax1']['checked'])) { print ''.price($obj->total_localtax1)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totallocaltax1field']=$totalarray['nbfield']; - $totalarray['totallocaltax1'] += $obj->total_localtax1; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_localtax1'; + $totalarray['val']['f.total_localtax1'] += $obj->total_localtax1; } // Amount LocalTax2 if (! empty($arrayfields['f.total_localtax2']['checked'])) { print ''.price($obj->total_localtax2)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totallocaltax2field']=$totalarray['nbfield']; - $totalarray['totallocaltax2'] += $obj->total_localtax2; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_localtax2'; + $totalarray['val']['f.total_localtax2'] += $obj->total_localtax2; } // Amount TTC if (! empty($arrayfields['f.total_ttc']['checked'])) { print ''.price($obj->total_ttc)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; - $totalarray['totalttc'] += $obj->total_ttc; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_ttc'; + $totalarray['val']['f.total_ttc'] += $obj->total_ttc; } if(! empty($arrayfields['f.retained_warranty']['checked'])) @@ -1277,16 +1277,16 @@ if ($resql) { print ''.(! empty($totalpay)?price($totalpay, 0, $langs):' ').''; // TODO Use a denormalized field if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalamfield']=$totalarray['nbfield']; - $totalarray['totalam'] += $totalpay; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='totalam'; + $totalarray['val']['totalam'] += $totalpay; } if (! empty($arrayfields['rtp']['checked'])) { print ''.(! empty($remaintopay)?price($remaintopay, 0, $langs):' ').''; // TODO Use a denormalized field if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalrtpfield']=$totalarray['nbfield']; - $totalarray['totalrtp'] += $remaintopay; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='rtp'; + $totalarray['val']['rtp'] += $remaintopay; } // Extra fields @@ -1345,35 +1345,7 @@ if ($resql) } // Show total line - if (isset($totalarray['totalhtfield']) - || isset($totalarray['totalvatfield']) - || isset($totalarray['totallocaltax1field']) - || isset($totalarray['totallocaltax2field']) - || isset($totalarray['totalttcfield']) - || isset($totalarray['totalamfield']) - || isset($totalarray['totalrtpfield']) - ) { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; - elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; - elseif ($totalarray['totallocaltax1field'] == $i) print ''.price($totalarray['totallocaltax1']).''; - elseif ($totalarray['totallocaltax2field'] == $i) print ''.price($totalarray['totallocaltax2']).''; - elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; - elseif ($totalarray['totalamfield'] == $i) print ''.price($totalarray['totalam']).''; - elseif ($totalarray['totalrtpfield'] == $i) print ''.price($totalarray['totalrtp']).''; - else print ''; - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; } $db->free($resql); diff --git a/htdocs/compta/paiement/list.php b/htdocs/compta/paiement/list.php index 7faa2727ae4..c3eaece8c93 100644 --- a/htdocs/compta/paiement/list.php +++ b/htdocs/compta/paiement/list.php @@ -373,26 +373,8 @@ if ($resql) } // Show total line - if (isset($totalarray['pos'])) - { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + print "\n"; print "
    "; diff --git a/htdocs/compta/sociales/list.php b/htdocs/compta/sociales/list.php index 6fbf174abc5..50d062612f8 100644 --- a/htdocs/compta/sociales/list.php +++ b/htdocs/compta/sociales/list.php @@ -292,8 +292,8 @@ if ($resql) // Amount print ''.price($obj->amount).''; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; - $totalarray['totalttc'] += $obj->amount; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='totalttcfield'; + $totalarray['val']['totalttcfield'] += $obj->amount; // Due date print ''.dol_print_date($db->jdate($obj->date_ech), 'day').''; @@ -307,20 +307,7 @@ if ($resql) } // Show total line - if (isset($totalarray['totalttcfield'])) - { - print ''; - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - print ''; - print ''; - print ''; - print ''.price($totalarray['totalttc']).''; - print ''; - print ''; - print ''; - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; print ''; print '
    '; diff --git a/htdocs/contrat/services_list.php b/htdocs/contrat/services_list.php index a7656289fdd..00627eeb622 100644 --- a/htdocs/contrat/services_list.php +++ b/htdocs/contrat/services_list.php @@ -599,24 +599,18 @@ while ($i < min($num, $limit)) print ''; print price($obj->total_ht); print ''; - $totalarray['totalht'] += $obj->total_ht; - if (! $i) { - $totalarray['displaytotalline']++; - $totalarray['nbfield']++; - $totalarray['totalhtfield']=$totalarray['nbfield']; - } + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='cd.total_ht'; + $totalarray['val']['cd.total_ht'] += $obj->total_ht; } if (! empty($arrayfields['cd.total_tva']['checked'])) { print ''; print price($obj->total_tva); print ''; - $totalarray['totalvat'] += $obj->total_tva; - if (! $i) { - $totalarray['nbfield']++; - $totalarray['totalvatfield']=$totalarray['nbfield']; - $totalarray['displaytotalline']++; - } + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='cd.total_tva'; + $totalarray['val']['cd.total_tva'] += $obj->total_tva; } if (! empty($arrayfields['cd.tva_tx']['checked'])) { @@ -734,22 +728,7 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['displaytotalline'])) { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) { - $i++; - if ($i == 1) { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; - elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; - elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; - else print ''; - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; $db->free($resql); diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 83734acd36e..439bc1e030f 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -224,9 +224,10 @@ class ExtraFields * @param string $entity Entity of extrafields (for multicompany modules) * @param string $langfile Language file * @param string $enabled Condition to have the field enabled or not + * @param int $totalizable Is a measure. Must show a total on lists * @return int <=0 if KO, >0 if OK */ - public function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique = 0, $required = 0, $default_value = '', $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $computed = '', $entity = '', $langfile = '', $enabled = '1') + public function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique = 0, $required = 0, $default_value = '', $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0) { if (empty($attrname)) return -1; if (empty($label)) return -1; @@ -243,7 +244,7 @@ class ExtraFields if ($result > 0 || $err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' || $type == 'separate') { // Add declaration of field into table - $result2=$this->create_label($attrname, $label, $type, $pos, $size, $elementtype, $unique, $required, $param, $alwayseditable, $perms, $list, $help, $default_value, $computed, $entity, $langfile, $enabled); + $result2=$this->create_label($attrname, $label, $type, $pos, $size, $elementtype, $unique, $required, $param, $alwayseditable, $perms, $list, $help, $default_value, $computed, $entity, $langfile, $enabled, $totalizable); $err2=$this->errno; if ($result2 > 0 || ($err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' && $err2 == 'DB_ERROR_RECORD_ALREADY_EXISTS')) { @@ -371,9 +372,10 @@ class ExtraFields * @param string $entity Entity of extrafields * @param string $langfile Language file * @param string $enabled Condition to have the field enabled or not + * @param int $totalizable Is a measure. Must show a total on lists * @return int <=0 if KO, >0 if OK */ - private function create_label($attrname, $label = '', $type = '', $pos = 0, $size = 0, $elementtype = 'member', $unique = 0, $required = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1') + private function create_label($attrname, $label = '', $type = '', $pos = 0, $size = 0, $elementtype = 'member', $unique = 0, $required = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0) { // phpcs:enable global $conf,$user; @@ -424,7 +426,8 @@ class ExtraFields $sql.= " fk_user_modif,"; $sql.= " datec,"; $sql.= " enabled,"; - $sql.= " help"; + $sql.= " help,"; + $sql.= " totalizable"; $sql.= " )"; $sql.= " VALUES('".$attrname."',"; $sql.= " '".$this->db->escape($label)."',"; @@ -446,7 +449,8 @@ class ExtraFields $sql .= " " . (is_object($user) ? $user->id : 0). ","; $sql .= "'" . $this->db->idate(dol_now()) . "',"; $sql.= " ".($enabled?"'".$this->db->escape($enabled)."'":"1").","; - $sql.= " ".($help?"'".$this->db->escape($help)."'":"null"); + $sql.= " ".($help?"'".$this->db->escape($help)."'":"null").","; + $sql.= " ".($totalizable?'1':'0'); $sql.=')'; dol_syslog(get_class($this)."::create_label", LOG_DEBUG); diff --git a/htdocs/core/tpl/commonfields_add.tpl.php b/htdocs/core/tpl/commonfields_add.tpl.php index ffc18853af7..5f17b3e2c68 100644 --- a/htdocs/core/tpl/commonfields_add.tpl.php +++ b/htdocs/core/tpl/commonfields_add.tpl.php @@ -56,7 +56,7 @@ foreach($object->fields as $key => $val) if (in_array($val['type'], array('int', 'integer'))) $value = GETPOST($key, 'int'); elseif ($val['type'] == 'text' || $val['type'] == 'html') $value = GETPOST($key, 'none'); else $value = GETPOST($key, 'alpha'); - print $object->showInputField($val, $key, $value, '', '', '', 0); + print $object->showInputField($val, $key, $value, '', '', '', 0, $object->table_element); print ''; print ''; } diff --git a/htdocs/core/tpl/commonfields_edit.tpl.php b/htdocs/core/tpl/commonfields_edit.tpl.php index e023354952a..f3ed2a91f6f 100644 --- a/htdocs/core/tpl/commonfields_edit.tpl.php +++ b/htdocs/core/tpl/commonfields_edit.tpl.php @@ -55,8 +55,8 @@ foreach($object->fields as $key => $val) elseif ($val['type'] == 'text' || $val['type'] == 'html') $value = GETPOSTISSET($key)?GETPOST($key, 'none'):$object->$key; else $value = GETPOSTISSET($key)?GETPOST($key, 'alpha'):$object->$key; //var_dump($val.' '.$key.' '.$value); - if ($val['noteditable']) print $object->showOutputField($val, $key, $value, '', '', '', 0); - else print $object->showInputField($val, $key, $value, '', '', '', 0); + if ($val['noteditable']) print $object->showOutputField($val, $key, $value, '', '', '', 0, $object->table_element); + else print $object->showInputField($val, $key, $value, '', '', '', 0, $object->table_element); print ''; print ''; } diff --git a/htdocs/core/tpl/extrafields_view.tpl.php b/htdocs/core/tpl/extrafields_view.tpl.php index f19cfff136e..6a61686e5cc 100644 --- a/htdocs/core/tpl/extrafields_view.tpl.php +++ b/htdocs/core/tpl/extrafields_view.tpl.php @@ -171,7 +171,7 @@ if (empty($reshook) && is_array($extrafields->attributes[$object->table_element] print ''; print ''; print ''; - print $extrafields->showInputField($key, $value, '', '', '', 0, $object->id); + print $extrafields->showInputField($key, $value, '', '', '', 0, $object->id, $object->table_element); print ''; diff --git a/htdocs/core/tpl/list_print_total.tpl.php b/htdocs/core/tpl/list_print_total.tpl.php new file mode 100644 index 00000000000..3cf5ded3989 --- /dev/null +++ b/htdocs/core/tpl/list_print_total.tpl.php @@ -0,0 +1,29 @@ + $valtotalizable) { + $totalarray['pos'][$valtotalizable['pos']] = $keytotalizable; + $totalarray['val'][$keytotalizable] = $valtotalizable['total']; + } +} +// Show total line +if (isset($totalarray['pos'])) +{ + print ''; + $i=0; + while ($i < $totalarray['nbfield']) + { + $i++; + if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; + else + { + if ($i == 1) + { + if ($num < $limit) print ''.$langs->trans("Total").''; + else print ''.$langs->trans("Totalforthispage").''; + } + else print ''; + } + } + print ''; +} diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index 73331228f2f..91d0efec9cc 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -738,24 +738,24 @@ if ($resql) { print ''.price($obj->total_ht)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalhtfield']=$totalarray['nbfield']; - $totalarray['totalht'] += $obj->total_ht; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='d.total_ht'; + $totalarray['val']['d.total_ht'] += $obj->total_ht; } // Amount VAT if (! empty($arrayfields['d.total_vat']['checked'])) { print ''.price($obj->total_tva)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalvatfield']=$totalarray['nbfield']; - $totalarray['totalvat'] += $obj->total_tva; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='d.total_tva'; + $totalarray['val']['d.total_tva'] += $obj->total_tva; } // Amount TTC if (! empty($arrayfields['d.total_ttc']['checked'])) { print ''.price($obj->total_ttc)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; - $totalarray['totalttc'] += $obj->total_ttc; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='d.total_ttc'; + $totalarray['val']['d.total_ttc'] += $obj->total_ttc; } // Extra fields @@ -815,25 +815,7 @@ if ($resql) } // Show total line - if (isset($totalarray['totalhtfield'])) - { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; - elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; - elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; - else print ''; - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; $db->free($resql); diff --git a/htdocs/fichinter/list.php b/htdocs/fichinter/list.php index 028fd3f717b..eeebd317977 100644 --- a/htdocs/fichinter/list.php +++ b/htdocs/fichinter/list.php @@ -602,8 +602,8 @@ if ($resql) { print ''.convertSecondToTime($obj->duree, 'allhourmin').''; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totaldurationfield']=$totalarray['nbfield']; - $totalarray['totalduration']+=$obj->duree; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='fd.duree'; + $totalarray['val']['fd.duree'] += $obj->duree; } // Action column print ''; @@ -623,23 +623,7 @@ if ($resql) } // Show total line - if (isset($totalarray['totalduration'])) - { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totaldurationfield'] == $i) print ''.convertSecondToTime($totalarray['totalduration'], 'allhourmin').''; - else print ''; - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; $db->free($resql); diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index f14a8d92c66..523543eb8e8 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -1063,24 +1063,24 @@ if ($resql) { print ''.price($obj->total_ht)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalhtfield']=$totalarray['nbfield']; - $totalarray['totalht'] += $obj->total_ht; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='cf.total_ht'; + $totalarray['val']['cf.total_ht'] += $obj->total_ht; } // Amount VAT if (! empty($arrayfields['cf.total_vat']['checked'])) { print ''.price($obj->total_tva)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalvatfield']=$totalarray['nbfield']; - $totalarray['totalvat'] += $obj->total_tva; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='cf.total_vat'; + $totalarray['val']['cf.total_vat'] += $obj->total_tva; } // Amount TTC if (! empty($arrayfields['cf.total_ttc']['checked'])) { print ''.price($obj->total_ttc)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; - $totalarray['totalttc'] += $obj->total_ttc; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='cf.total_ttc'; + $totalarray['val']['cf.total_ttc'] += $obj->total_ttc; } // Extra fields @@ -1134,28 +1134,9 @@ if ($resql) } // Show total line - if (isset($totalarray['totalhtfield'])) - { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; - elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; - elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; - else print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; - print ''; - } - $parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql); $reshook=$hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index c06c070d45e..db1fba3001a 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -1003,56 +1003,56 @@ if ($resql) { print ''.price($obj->total_ht)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalhtfield']=$totalarray['nbfield']; - $totalarray['totalht'] += $obj->total_ht; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_ht'; + $totalarray['val']['f.total_ht'] += $obj->total_ht; } // Amount VAT if (! empty($arrayfields['f.total_vat']['checked'])) { print ''.price($obj->total_vat)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalvatfield']=$totalarray['nbfield']; - $totalarray['totalvat'] += $obj->total_vat; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_vat'; + $totalarray['val']['f.total_vat'] += $obj->total_vat; } // Amount LocalTax1 if (! empty($arrayfields['f.total_localtax1']['checked'])) { print ''.price($obj->total_localtax1)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totallocaltax1field']=$totalarray['nbfield']; - $totalarray['totallocaltax1'] += $obj->total_localtax1; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_localtax1'; + $totalarray['val']['f.total_localtax1'] += $obj->total_localtax1; } // Amount LocalTax2 if (! empty($arrayfields['f.total_localtax2']['checked'])) { print ''.price($obj->total_localtax2)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totallocaltax2field']=$totalarray['nbfield']; - $totalarray['totallocaltax2'] += $obj->total_localtax2; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_localtax2'; + $totalarray['val']['f.total_localtax2'] += $obj->total_localtax2; } // Amount TTC if (! empty($arrayfields['f.total_ttc']['checked'])) { print ''.price($obj->total_ttc)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; - $totalarray['totalttc'] += $obj->total_ttc; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_ttc'; + $totalarray['val']['f.total_ttc'] += $obj->total_ttc; } if (! empty($arrayfields['dynamount_payed']['checked'])) { print ''.(! empty($totalpay)?price($totalpay, 0, $langs):' ').''; // TODO Use a denormalized field if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalamfield']=$totalarray['nbfield']; - $totalarray['totalam'] += $totalpay; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='totalam'; + $totalarray['val']['totalam'] += $totalpay; } if (! empty($arrayfields['rtp']['checked'])) { print ''.(! empty($remaintopay)?price($remaintopay, 0, $langs):' ').''; // TODO Use a denormalized field if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalrtpfield']=$totalarray['nbfield']; - $totalarray['totalrtp'] += $remaintopay; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='rtp'; + $totalarray['val']['rtp'] += $remaintopay; } @@ -1105,35 +1105,7 @@ if ($resql) } // Show total line - if (isset($totalarray['totalhtfield']) - || isset($totalarray['totalvatfield']) - || isset($totalarray['totallocaltax1field']) - || isset($totalarray['totallocaltax2field']) - || isset($totalarray['totalttcfield']) - || isset($totalarray['totalamfield']) - || isset($totalarray['totalrtpfield']) - ) { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; - elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; - elseif ($totalarray['totallocaltax1field'] == $i) print ''.price($totalarray['totallocaltax1']).''; - elseif ($totalarray['totallocaltax2field'] == $i) print ''.price($totalarray['totallocaltax2']).''; - elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; - elseif ($totalarray['totalamfield'] == $i) print ''.price($totalarray['totalam']).''; - elseif ($totalarray['totalrtpfield'] == $i) print ''.price($totalarray['totalrtp']).''; - else print ''; - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; } $db->free($resql); diff --git a/htdocs/fourn/facture/paiement.php b/htdocs/fourn/facture/paiement.php index 1dc10406a24..eb7c8af3ef0 100644 --- a/htdocs/fourn/facture/paiement.php +++ b/htdocs/fourn/facture/paiement.php @@ -1024,26 +1024,7 @@ if (empty($action) || $action == 'list') } // Show total line - if (isset($totalarray['pos'])) - { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; print ""; print "
    "; diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 0224b7f12d2..6fd3f2b3705 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -540,26 +540,7 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; // If no record found if ($num == 0) diff --git a/htdocs/mrp/mo_list.php b/htdocs/mrp/mo_list.php index 7612700e4e5..6124101cffa 100644 --- a/htdocs/mrp/mo_list.php +++ b/htdocs/mrp/mo_list.php @@ -524,26 +524,8 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) diff --git a/htdocs/opensurvey/list.php b/htdocs/opensurvey/list.php index c99525f5740..aa01088744f 100644 --- a/htdocs/opensurvey/list.php +++ b/htdocs/opensurvey/list.php @@ -425,26 +425,8 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) diff --git a/htdocs/product/inventory/list.php b/htdocs/product/inventory/list.php index de1fa138f81..ac2ac589200 100644 --- a/htdocs/product/inventory/list.php +++ b/htdocs/product/inventory/list.php @@ -484,26 +484,8 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) diff --git a/htdocs/product/stock/productlot_list.php b/htdocs/product/stock/productlot_list.php index 8dc8f34b7e0..4c306dc1702 100644 --- a/htdocs/product/stock/productlot_list.php +++ b/htdocs/product/stock/productlot_list.php @@ -514,25 +514,7 @@ if ($resql) } // Show total line - if (isset($totalarray['totalhtfield'])) - { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; - elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; - elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; - else print ''; - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; $db->free($resql); diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index b4e17377add..61a96af9f58 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -834,11 +834,11 @@ while ($i < min($num, $limit)) if (strcmp($obj->opp_amount, '')) { print price($obj->opp_amount, 1, $langs, 1, -1, -1, ''); - $totalarray['totalopp'] += $obj->opp_amount; + $totalarray['val']['p.opp_amount'] += $obj->opp_amount; } print ''; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totaloppfield']=$totalarray['nbfield']; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='p.opp_amount'; } // Opp percent if (! empty($arrayfields['p.opp_percent']['checked'])) @@ -855,11 +855,11 @@ while ($i < min($num, $limit)) if ($obj->budget_amount != '') { print price($obj->budget_amount, 1, $langs, 1, -1, -1); - $totalarray['totalbudget'] += $obj->budget_amount; + $totalarray['val']['p.budget_amount'] += $obj->budget_amount; } print ''; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalbudgetfield']=$totalarray['nbfield']; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='p.budget_amount'; } // Usage opportunity if (! empty($arrayfields['p.usage_opportunity']['checked'])) @@ -940,24 +940,7 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['totaloppfield']) || isset($totalarray['totalbudgetfield'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totaloppfield'] == $i) print ''.price($totalarray['totalopp'], 1, $langs, 1, -1, -1).''; - elseif ($totalarray['totalbudgetfield'] == $i) print ''.price($totalarray['totalbudget'], 1, $langs, 1, -1, -1).''; - else print ''; - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; $db->free($resql); diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php index 326782f5a55..5215c82a062 100644 --- a/htdocs/projet/tasks/list.php +++ b/htdocs/projet/tasks/list.php @@ -733,6 +733,8 @@ while ($i < min($num, $limit)) //else print '--:--'; print ''; if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='t.planned_workload'; + $totalarray['val']['t.planned_workload'] += $obj->planned_workload; if (! $i) $totalarray['totalplannedworkloadfield']=$totalarray['nbfield']; $totalarray['totalplannedworkload'] += $obj->planned_workload; } @@ -749,6 +751,8 @@ while ($i < min($num, $limit)) else print ''; print ''; if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='t.duration_effective'; + $totalarray['val']['t.duration_effective'] += $obj->duration_effective; if (! $i) $totalarray['totaldurationeffectivefield']=$totalarray['nbfield']; $totalarray['totaldurationeffective'] += $obj->duration_effective; } @@ -775,8 +779,10 @@ while ($i < min($num, $limit)) } print ''; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalprogress_declaredfield']=$totalarray['nbfield']; - $totalarray['totaldurationdeclared'] += $obj->planned_workload * $obj->progress / 100; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='t.progress'; + $totalarray['val']['t.progress'] += ($obj->planned_workload * $obj->progress / 100); + if (! $i) $totalarray['totalprogress_declaredfield']=$totalarray['nbfield']; + $totalarray['totaldurationdeclared'] += $obj->planned_workload * $obj->progress / 100; } // Progress summary if (! empty($arrayfields['t.progress_summary']['checked'])) @@ -787,7 +793,7 @@ while ($i < min($num, $limit)) } print ''; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalprogress_summary']=$totalarray['nbfield']; + if (! $i) $totalarray['totalprogress_summary']=$totalarray['nbfield']; } // Time not billed if (! empty($arrayfields['t.tobill']['checked'])) @@ -796,6 +802,7 @@ while ($i < min($num, $limit)) if ($obj->usage_bill_time) { print convertSecondToTime($obj->tobill, 'allhourmin'); + $totalarray['val']['t.tobill'] += $obj->tobill; $totalarray['totaltobill'] += $obj->tobill; } else @@ -804,6 +811,7 @@ while ($i < min($num, $limit)) } print ''; if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='t.tobill'; if (! $i) $totalarray['totaltobillfield']=$totalarray['nbfield']; } // Time billed @@ -813,6 +821,7 @@ while ($i < min($num, $limit)) if ($obj->usage_bill_time) { print convertSecondToTime($obj->billed, 'allhourmin'); + $totalarray['val']['t.billed'] += $obj->billed; $totalarray['totalbilled'] += $obj->billed; } else @@ -821,6 +830,7 @@ while ($i < min($num, $limit)) } print ''; if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='t.billed'; if (! $i) $totalarray['totalbilledfield']=$totalarray['nbfield']; } // Extra fields @@ -870,8 +880,9 @@ while ($i < min($num, $limit)) $i++; } // Show total line +//include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; if (isset($totalarray['totaldurationeffectivefield']) || isset($totalarray['totalplannedworkloadfield']) || isset($totalarray['totalprogress_calculatedfield']) - || isset($totalarray['totaltobill']) || isset($totalarray['totalbilled'])) + || isset($totalarray['totaltobill']) || isset($totalarray['totalbilled'])) { print ''; $i=0; @@ -889,7 +900,7 @@ if (isset($totalarray['totaldurationeffectivefield']) || isset($totalarray['tota elseif ($totalarray['totalprogress_declaredfield'] == $i) print ''.($totalarray['totalplannedworkload'] > 0 ? round(100 * $totalarray['totaldurationdeclared'] / $totalarray['totalplannedworkload'], 2).' %' : '').''; elseif ($totalarray['totaltobillfield'] == $i) print ''.convertSecondToTime($totalarray['totaltobill'], $plannedworkloadoutputformat).''; elseif ($totalarray['totalbilledfield'] == $i) print ''.convertSecondToTime($totalarray['totalbilled'], $plannedworkloadoutputformat).''; - else print ''; + else print ''; } print ''; } diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 24e5d067186..559931b3ff4 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -1282,6 +1282,8 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) } print ''; if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='t.task_duration'; + $totalarray['val']['t.task_duration'] += $task_time->task_duration; if (! $i) $totalarray['totaldurationfield']=$totalarray['nbfield']; $totalarray['totalduration'] += $task_time->task_duration; } @@ -1294,11 +1296,13 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) print price($value, 1, $langs, 1, -1, -1, $conf->currency); print ''; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalvaluefield']=$totalarray['nbfield']; - $totalarray['totalvalue'] += $value; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='value'; + $totalarray['val']['value'] += $value; + if (! $i) $totalarray['totalvaluefield']=$totalarray['nbfield']; + $totalarray['totalvalue'] += $value; } - // Invoiced - Value billed + // Invoiced if (! empty($arrayfields['valuebilled']['checked'])) { print ''; // invoice_id and invoice_line_id @@ -1687,27 +1691,27 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) } // Show total line + //include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; if (isset($totalarray['totaldurationfield']) || isset($totalarray['totalvaluefield'])) { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totaldurationfield'] == $i) print ''.convertSecondToTime($totalarray['totalduration'], 'allhourmin').''; - elseif ($totalarray['totalvaluefield'] == $i) print ''.price($totalarray['totalvalue']).''; - //elseif ($totalarray['totalvaluebilledfield'] == $i) print ''.price($totalarray['totalvaluebilled']).''; - else print ''; - } - print ''; + print ''; + $i=0; + while ($i < $totalarray['nbfield']) + { + $i++; + if ($i == 1) + { + if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; + else print ''.$langs->trans("Totalforthispage").''; + } + elseif ($totalarray['totaldurationfield'] == $i) print ''.convertSecondToTime($totalarray['totalduration'], 'allhourmin').''; + elseif ($totalarray['totalvaluefield'] == $i) print ''.price($totalarray['totalvalue']).''; + //elseif ($totalarray['totalvaluebilledfield'] == $i) print ''.price($totalarray['totalvaluebilled']).''; + else print ''; + } + print ''; } - - + if (! count($tasks)) { $totalnboffields = 1; diff --git a/htdocs/societe/website.php b/htdocs/societe/website.php index 81698820eb8..43387d9d8c2 100644 --- a/htdocs/societe/website.php +++ b/htdocs/societe/website.php @@ -501,26 +501,8 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index e8cad1541ed..2afadd8857a 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -749,24 +749,25 @@ if ($resql) { print ''.price($obj->total_ht)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalhtfield']=$totalarray['nbfield']; - $totalarray['totalht'] += $obj->total_ht; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='sp.total_ht'; + $totalarray['val']['sp.total_ht'] += $obj->total_ht; + } // Amount VAT if (! empty($arrayfields['sp.total_vat']['checked'])) { print ''.price($obj->total_vat)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalvatfield']=$totalarray['nbfield']; - $totalarray['totalvat'] += $obj->total_vat; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='sp.total_vat'; + $totalarray['val']['sp.total_vat'] += $obj->total_vat; } // Amount TTC if (! empty($arrayfields['sp.total_ttc']['checked'])) { print ''.price($obj->total_ttc)."\n"; if (! $i) $totalarray['nbfield']++; - if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; - $totalarray['totalttc'] += $obj->total_ttc; + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='sp.total_ttc'; + $totalarray['val']['sp.total_ttc'] += $obj->total_ttc; } $userstatic->id=$obj->fk_user_author; @@ -831,30 +832,7 @@ if ($resql) } // Show total line - if (isset($totalarray['totalhtfield']) - || isset($totalarray['totalvatfield']) - || isset($totalarray['totalttcfield']) - || isset($totalarray['totalamfield']) - || isset($totalarray['totalrtpfield']) - ) - { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if ($i == 1) - { - if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; - elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; - elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; - else print ''; - } - print ''; - } + include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; $db->free($resql); diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 4ca9140145b..1360dc6efcd 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -687,26 +687,8 @@ while ($i < min($num, $limit)) } // Show total line -if (isset($totalarray['pos'])) -{ - print ''; - $i=0; - while ($i < $totalarray['nbfield']) - { - $i++; - if (! empty($totalarray['pos'][$i])) print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - else - { - if ($i == 1) - { - if ($num < $limit) print ''.$langs->trans("Total").''; - else print ''.$langs->trans("Totalforthispage").''; - } - else print ''; - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) diff --git a/htdocs/zapier/hook_list.php b/htdocs/zapier/hook_list.php index 2132cd5da25..21e9c991d07 100644 --- a/htdocs/zapier/hook_list.php +++ b/htdocs/zapier/hook_list.php @@ -570,27 +570,8 @@ while ($i < min($num, $limit)) { } // Show total line -if (isset($totalarray['pos'])) { - print ''; - $i=0; - while ($i < $totalarray['nbfield']) { - $i++; - if (! empty($totalarray['pos'][$i])) { - print ''.price($totalarray['val'][$totalarray['pos'][$i]]).''; - } else { - if ($i == 1) { - if ($num < $limit) { - print ''.$langs->trans("Total").''; - } else { - print ''.$langs->trans("Totalforthispage").''; - } - } else { - print ''; - } - } - } - print ''; -} +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + // If no record found if ($num == 0) { From 1b701f162aa37366842c130658285e32b4af63c8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Nov 2019 13:16:39 +0100 Subject: [PATCH 924/980] FIX #12307 --- htdocs/install/mysql/tables/llx_adherent_type.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/install/mysql/tables/llx_adherent_type.sql b/htdocs/install/mysql/tables/llx_adherent_type.sql index 1de63a52c1f..1b675c5e3fd 100644 --- a/htdocs/install/mysql/tables/llx_adherent_type.sql +++ b/htdocs/install/mysql/tables/llx_adherent_type.sql @@ -25,14 +25,14 @@ create table llx_adherent_type ( rowid integer AUTO_INCREMENT PRIMARY KEY, - entity integer DEFAULT 1 NOT NULL, -- multi company id + entity integer DEFAULT 1 NOT NULL, tms timestamp, statut smallint NOT NULL DEFAULT 0, libelle varchar(50) NOT NULL, morphy varchar(3) NOT NULL, - duration varchar(6) NOT NULL DEFAULT NULL, + duration varchar(6) DEFAULT NULL, subscription varchar(3) NOT NULL DEFAULT 'yes', vote varchar(3) NOT NULL DEFAULT 'yes', note text, - mail_valid text -- mail envoye a la validation + mail_valid text )ENGINE=innodb; From 7ab19ef66b1b471ec8fb5c5691f63893f1cf3995 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Nov 2019 13:34:25 +0100 Subject: [PATCH 925/980] Fix selection not lose if creation of vendor invoice fails --- htdocs/core/tpl/objectline_create.tpl.php | 2 +- htdocs/fourn/facture/card.php | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index 73d86fa56a5..f58b6725f81 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -846,7 +846,7 @@ function setforpredef() { jQuery("#multicurrency_price_ht").val('').hide(); jQuery("#price_ht").val(''); - jQuery("#price_ttc, #fourn_ref, #tva_tx, #title_vat, #title_up_ht, #title_up_ht_currency, #title_up_ttc, #title_up_ttc_currency").hide(); + jQuery("#price_ttc, #fourn_ref, #tva_tx, #title_vat, #title_up_ht_currency, #title_up_ttc, #title_up_ttc_currency").hide(); jQuery("#np_marginRate, #np_markRate, .np_marginRate, .np_markRate, #units, #title_units").hide(); jQuery("#buying_price").show(); jQuery('#trlinefordates, .divlinefordates').show(); diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index eeed4354ce0..70b9130c434 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -1998,17 +1998,17 @@ if ($action == 'create') // Payment term print ''.$langs->trans('PaymentConditionsShort').''; - $form->select_conditions_paiements(isset($_POST['cond_reglement_id'])?$_POST['cond_reglement_id']:$cond_reglement_id, 'cond_reglement_id'); + $form->select_conditions_paiements(GETPOSTISSET('cond_reglement_id')?GETPOST('cond_reglement_id', 'int'):$cond_reglement_id, 'cond_reglement_id'); print ''; // Payment mode print ''.$langs->trans('PaymentMode').''; - $form->select_types_paiements(isset($_POST['mode_reglement_id'])?$_POST['mode_reglement_id']:$mode_reglement_id, 'mode_reglement_id', 'DBIT'); + $form->select_types_paiements(GETPOSTISSET('mode_reglement_id')?GETPOST('mode_reglement_id', 'int'):$mode_reglement_id, 'mode_reglement_id', 'DBIT'); print ''; // Bank Account print ''.$langs->trans('BankAccount').''; - $form->select_comptes($fk_account, 'fk_account', 0, '', 1); + $form->select_comptes((GETPOSTISSET('fk_account')?GETPOST('fk_account', 'alpha'):$fk_account), 'fk_account', 0, '', 1); print ''; // Multicurrency @@ -2017,7 +2017,7 @@ if ($action == 'create') print ''; print ''.$form->editfieldkey('Currency', 'multicurrency_code', '', $object, 0).''; print ''; - print $form->selectMultiCurrency($currency_code, 'multicurrency_code'); + print $form->selectMultiCurrency((GETPOSTISSET('multicurrency_code')?GETPOST('multicurrency_code', 'alpha'):$currency_code), 'multicurrency_code'); print ''; } @@ -2038,7 +2038,7 @@ if ($action == 'create') print ''; print ''; print ''; - print $form->select_incoterms((!empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms : ''), (!empty($objectsrc->location_incoterms)?$objectsrc->location_incoterms:'')); + print $form->select_incoterms(GETPOSTISSET('incoterm_id') ? GETPOST('incoterm_id', 'alphanohtml') : (!empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms : ''), GETPOSTISSET('location_incoterms') ? GETPOST('location_incoterms', 'alphanohtml') : (!empty($objectsrc->location_incoterms)?$objectsrc->location_incoterms:'')); print ''; } @@ -2047,7 +2047,7 @@ if ($action == 'create') print ''; $note_public = $object->getDefaultCreateValueFor('note_public'); if(empty($note_public))$note_public = $objectsrc->note_public; - $doleditor = new DolEditor('note_public', $note_public, '', 80, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, '90%'); + $doleditor = new DolEditor('note_public', (GETPOSTISSET('note_public')?GETPOST('note_public', 'none'):$note_public), '', 80, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, '90%'); print $doleditor->Create(1); print ''; // print ''; @@ -2059,7 +2059,7 @@ if ($action == 'create') $note_private = $object->getDefaultCreateValueFor('note_private'); if(empty($note_private))$note_private = $objectsrc->note_private; - $doleditor = new DolEditor('note_private', $note_private, '', 80, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, '90%'); + $doleditor = new DolEditor('note_private', (GETPOSTISSET('note_private')?GETPOST('note_private', 'none'):$note_private), '', 80, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, '90%'); print $doleditor->Create(1); print ''; // print ''; From 85ce5176b51b198effa034c7a810a2a693530507 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 5 Nov 2019 13:41:01 +0100 Subject: [PATCH 926/980] Fix textarea to enter a ticket --- htdocs/core/class/html.formticket.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index b83da89e277..2ad3a190cfc 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -243,7 +243,7 @@ class FormTicket } include_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php'; $uselocalbrowser = true; - $doleditor = new DolEditor('message', $msg, '100%', 230, $toolbarname, 'In', true, $uselocalbrowser, $conf->global->FCKEDITOR_ENABLE_TICKET); + $doleditor = new DolEditor('message', $msg, '100%', 230, $toolbarname, 'In', true, $uselocalbrowser, $conf->global->FCKEDITOR_ENABLE_TICKET, ROWS_8, '90%'); $doleditor->Create(); print ''; From 991e1b2747c082522dad1f45e2528a4c4207dbab Mon Sep 17 00:00:00 2001 From: Nicolas Date: Tue, 5 Nov 2019 13:51:52 +0100 Subject: [PATCH 927/980] NEW Add upload document on account statement --- .../bank/account_statement_document.php | 156 ++++++++++++++++++ htdocs/compta/bank/releve.php | 8 +- htdocs/core/lib/bank.lib.php | 42 +++++ .../tpl/document_actions_post_headers.tpl.php | 6 +- 4 files changed, 209 insertions(+), 3 deletions(-) create mode 100644 htdocs/compta/bank/account_statement_document.php diff --git a/htdocs/compta/bank/account_statement_document.php b/htdocs/compta/bank/account_statement_document.php new file mode 100644 index 00000000000..157f9603141 --- /dev/null +++ b/htdocs/compta/bank/account_statement_document.php @@ -0,0 +1,156 @@ + + * Copyright (C) 2004-2008 Laurent Destailleur + * Copyright (C) 2005 Marc Barilley / Ocebo + * Copyright (C) 2005-2017 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/compta/bank/document.php + * \ingroup banque + * \brief Page de gestion des documents attaches a un compte bancaire + */ +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT . "/core/lib/bank.lib.php"; +require_once DOL_DOCUMENT_ROOT . "/core/lib/files.lib.php"; +require_once DOL_DOCUMENT_ROOT . "/core/lib/images.lib.php"; +require_once DOL_DOCUMENT_ROOT . "/core/class/html.formfile.class.php"; +require_once DOL_DOCUMENT_ROOT . '/compta/bank/class/account.class.php'; + +global $conf,$db,$langs; +// Load translation files required by the page +$langs->loadLangs(array('banks', 'companies', 'other')); + +$id = (GETPOST('id', 'int') ? GETPOST('id', 'int') : GETPOST('account', 'int')); +$ref = GETPOST('ref', 'alpha'); +$action = GETPOST('action', 'alpha'); +$confirm = GETPOST('confirm', 'alpha'); +$num = (GETPOST('num', 'alpha') ? GETPOST('num', 'alpha') : GETPOST('sectionid', 'alpha')); + +$mesg = ''; +if (isset($_SESSION['DolMessage'])) { + $mesg = $_SESSION['DolMessage']; + unset($_SESSION['DolMessage']); +} + +// Security check +if ($user->socid) { + $action = ''; + $socid = $user->socid; +} +if ($user->socid) + $socid = $user->socid; + +// Get parameters +$sortfield = GETPOST("sortfield", 'alpha'); +$sortorder = GETPOST("sortorder", 'alpha'); +$page = GETPOST("page", 'int'); +if (empty($page) || $page == -1) { $page = 0; } +$offset = $conf->liste_limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +if (!$sortorder) + $sortorder = "ASC"; +if (!$sortfield) + $sortfield = "name"; + +$object = new Account($db); +if ($id > 0 || ! empty($ref)) $object->fetch($id, $ref); + +$result = restrictedArea($user, 'banque', $object->id, 'bank_account', '', ''); + + +/* + * Actions + */ + +if (!empty($num)) +{ + $object->fetch_thirdparty(); + $upload_dir = $conf->bank->dir_output . "/".$id."/statement/" . dol_sanitizeFileName($num); +} +$backtopage = $_SERVER['PHP_SELF']."?account=".$id."&num=".$num; +include_once DOL_DOCUMENT_ROOT . '/core/actions_linkedfiles.inc.php'; + + +/* + * View + */ + +$title = $langs->trans("FinancialAccount").' - '.$langs->trans("Documents"); +$helpurl = ""; +llxHeader('', $title, $helpurl); + +$form = new Form($db); + +if ($id > 0 || !empty($ref)) { + if ($object->fetch($id, $ref)) { + $upload_dir = $conf->bank->dir_output . "/".$id."/statement/" . dol_sanitizeFileName($num); + + // Onglets + $head = account_statement_prepare_head($object,$num); + dol_fiche_head($head, 'document', $langs->trans("FinancialAccount"), -1, 'account'); + + + // Build file list + $filearray = dol_dir_list($upload_dir, "files", 0, '', '\.meta$', $sortfield, (strtolower($sortorder) == 'desc' ? SORT_DESC : SORT_ASC), 1); + $totalsize = 0; + foreach ($filearray as $key => $file) { + $totalsize+=$file['size']; + } + + $morehtmlref = ''; + + + $title=$langs->trans("AccountStatement").' '.$num.' - '.$langs->trans("BankAccount").' '.$object->getNomUrl(1, 'receipts'); + print load_fiche_titre($title, '', 'title_bank.png'); + + + print '
    '; + print '
    '; + + print ''; + print ''; + print ''; + print "
    ' . $langs->trans("NbOfAttachedFiles") . '' . count($filearray) . '
    ' . $langs->trans("TotalSizeOfAttachedFiles") . '' .dol_print_size($totalsize, 1, 1).'
    \n"; + + print '
    '; + + dol_fiche_end(); + + + $modulepart = 'bank'; + $permission = $user->rights->banque->modifier; + $permtoedit = $user->rights->banque->modifier; + $param = '&id=' . $object->id.'&num='.$num; + $uri = '&num='.$num; + $relativepathwithnofile = $id."/statement/".$num."/"; + include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php'; + } + else { + dol_print_error($db); + } +} +else { + Header('Location: index.php'); + exit; +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index cb029902372..5e36af426b5 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -4,6 +4,7 @@ * Copyright (C) 2005-2013 Regis Houssin * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2017 Patrick Delcroix + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -360,7 +361,12 @@ else * Show list of bank statements */ - $mesprevnext=''; + // Onglets + $head=account_statement_prepare_head($object,$numref); + dol_fiche_head($head, 'statement', $langs->trans("FinancialAccount"), 0, 'account'); + + + $mesprevnext=''; $mesprevnext.='