From 58d1254212c060cf0b32184f9b25e47cb70d806b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Jan 2026 14:53:31 +0100 Subject: [PATCH 01/13] Fix missing state --- htdocs/core/modules/oauth/github_oauthcallback.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/core/modules/oauth/github_oauthcallback.php b/htdocs/core/modules/oauth/github_oauthcallback.php index 3c96d1a9740..c8cb76c43fa 100644 --- a/htdocs/core/modules/oauth/github_oauthcallback.php +++ b/htdocs/core/modules/oauth/github_oauthcallback.php @@ -85,6 +85,8 @@ $credentials = new Credentials( $currentUri->getAbsoluteUri() ); +$state = GETPOST('state'); + $requestedpermissionsarray = array(); if (GETPOST('state')) { $requestedpermissionsarray = explode(',', GETPOST('state')); // Example: 'user'. 'state' parameter is standard to retrieve some parameters back From dc5b719065d0646d88c3fba18fd628430babbbb1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Jan 2026 15:24:26 +0100 Subject: [PATCH 02/13] Fix add missing message once token has been saved --- .../modules/oauth/google_oauthcallback.php | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/htdocs/core/modules/oauth/google_oauthcallback.php b/htdocs/core/modules/oauth/google_oauthcallback.php index 7584f781f9a..4e4816d676e 100644 --- a/htdocs/core/modules/oauth/google_oauthcallback.php +++ b/htdocs/core/modules/oauth/google_oauthcallback.php @@ -249,16 +249,26 @@ if (!GETPOST('code')) { $db->begin(); - // This requests the token from the received OAuth code (call of the https://oauth2.googleapis.com/token endpoint) - // Result is stored into object managed by class DoliStorage into includes/OAuth/Common/Storage/DoliStorage.php and into database table llx_oauth_token - $token = $apiService->requestAccessToken(GETPOST('code'), $state); + try { + // This requests the token from the received OAuth code (call of the https://oauth2.googleapis.com/token endpoint) + // Result is stored into object managed by class DoliStorage into includes/OAuth/Common/Storage/DoliStorage.php and into database table llx_oauth_token + $token = $apiService->requestAccessToken(GETPOST('code'), $state); + } catch (Exception $e) { + dol_syslog("Failed to get token with requestAccessToken: ".$e->getMessage(), LOG_ERR); + setEventMessages("Failed to get token with requestAccessToken: ".$e->getMessage(), null, 'errors'); + $errorincheck++; + } // The refresh token is inside the object token if the prompt was forced only. //$refreshtoken = $token->getRefreshToken(); //var_dump($refreshtoken); + dol_syslog("requestAccessToken complete"); // Note: The extraparams has the 'id_token' than contains a lot of information about the user. - $extraparams = $token->getExtraParams(); + $extraparams = array(); + if ($token) { + $extraparams = $token->getExtraParams(); + } $jwt = explode('.', $extraparams['id_token']); $username = ''; @@ -347,6 +357,8 @@ if (!GETPOST('code')) { dol_syslog($errormessage); } + } else { + setEventMessages("TokenSaved", null); } } else { // If call back to url for a OAUTH2 login From 85c8612c87f9e1d510faba08638ac9656a90ee1c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Jan 2026 15:55:56 +0100 Subject: [PATCH 03/13] Fix warning oauth --- htdocs/core/modules/oauth/google_oauthcallback.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/modules/oauth/google_oauthcallback.php b/htdocs/core/modules/oauth/google_oauthcallback.php index 4e4816d676e..087fe34f654 100644 --- a/htdocs/core/modules/oauth/google_oauthcallback.php +++ b/htdocs/core/modules/oauth/google_oauthcallback.php @@ -249,6 +249,7 @@ if (!GETPOST('code')) { $db->begin(); + $token = null; try { // This requests the token from the received OAuth code (call of the https://oauth2.googleapis.com/token endpoint) // Result is stored into object managed by class DoliStorage into includes/OAuth/Common/Storage/DoliStorage.php and into database table llx_oauth_token From 1eda4e6157408752e139c9cb21f6ec9c278260c1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Jan 2026 16:37:18 +0100 Subject: [PATCH 04/13] Fix name of Oauth entry must not have special chars --- htdocs/admin/oauth.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/oauth.php b/htdocs/admin/oauth.php index 0903e2123a5..76eb1fa8404 100644 --- a/htdocs/admin/oauth.php +++ b/htdocs/admin/oauth.php @@ -86,7 +86,7 @@ if ($action == 'update') { $constvalue = str_replace('_ID', '', $key); $newconstvalue = $constvalue; if (GETPOSTISSET($constvalue.'_NAME')) { - $newconstvalue = preg_replace('/-.*$/', '', $constvalue).'-'.GETPOST($constvalue.'_NAME'); + $newconstvalue = preg_replace('/-.*$/', '', $constvalue).'-'.preg_replace('/[^a-z]/', '', GETPOST($constvalue.'_NAME')); } if (GETPOSTISSET($constvalue.'_ID')) { From 02656bbcb825982267aab45ece34c00fec4ebd2d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Jan 2026 18:50:10 +0100 Subject: [PATCH 05/13] Doc --- htdocs/install/mysql/migration/repair.sql | 6 ++++++ htdocs/langs/en_US/languages.lang | 1 + 2 files changed, 7 insertions(+) diff --git a/htdocs/install/mysql/migration/repair.sql b/htdocs/install/mysql/migration/repair.sql index 102e69bc1a1..0f8ff3296db 100644 --- a/htdocs/install/mysql/migration/repair.sql +++ b/htdocs/install/mysql/migration/repair.sql @@ -714,3 +714,9 @@ UPDATE llx_c_tva SET type_vat = 0 WHERE type_vat < 0; -- We can't have this on by default because we may have old payment mode using something else than stripe and account matching the pk_xxx rule. --update llx_societe_rib set ext_payment_site = 'StripeLive' where stripe_account like '%pk_live%' AND ext_payment_site IS NULL; --update llx_societe_rib set ext_payment_site = 'StripeTest' where stripe_account like '%pk_test%' AND ext_payment_site IS NULL; + +-- Delete entry in llx_const for 'OAUTH_XXXX-abc def' when there is a space between avc and def. +DELETE FROM llx_const WHERE name like 'OAUTH_%-% %_ID'; + + +--SELECT fr.rowid, fr.titre as fr.title, fr.nb_gen_done, fr.nb_gen_max, (SELECT COUNT(f.rowid) FROM llx_facture as f WHERE f.fk_fac_rec_source = fr.rowid) as nb_invoices FROM llx_facture_rec as fr WHERE fr.nb_gen_max > 0 AND fr.nb_gen_done >= fr.nb_gen_max AND fr.nb_gen_done > 0 AND fr.nb_gen_done <> (SELECT COUNT(f.rowid) FROM llx_facture as f WHERE f.fk_fac_rec_source = fr.rowid); diff --git a/htdocs/langs/en_US/languages.lang b/htdocs/langs/en_US/languages.lang index dd10d76eb01..705d9c98dff 100644 --- a/htdocs/langs/en_US/languages.lang +++ b/htdocs/langs/en_US/languages.lang @@ -37,6 +37,7 @@ Language_en_IE=English (Ireland) Language_en_IN=English (India) Language_en_MY=English (Myanmar) Language_en_NZ=English (New Zealand) +Language_en_PH=English (Philippines) Language_en_SA=English (Saudi Arabia) Language_en_SG=English (Singapore) Language_en_US=English (United States) From 8e4762b2e10c42449f57180ecbd250152d1e5b7d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Jan 2026 19:00:00 +0100 Subject: [PATCH 06/13] Fix generic password type --- htdocs/core/class/html.formsetup.class.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/htdocs/core/class/html.formsetup.class.php b/htdocs/core/class/html.formsetup.class.php index 46b5f3207e0..e96ef155d09 100644 --- a/htdocs/core/class/html.formsetup.class.php +++ b/htdocs/core/class/html.formsetup.class.php @@ -952,7 +952,7 @@ class FormSetupItem } elseif ($this->type == 'password') { $out .= $this->generateInputFieldPassword('dolibarr'); } elseif ($this->type == 'genericpassword') { - $out .= $this->generateInputFieldPassword('generic'); + $out .= $this->generateInputFieldPassword('generic', 0, 0); } elseif ($this->type == 'price') { $out .= $this->generateInputFieldPrice(); } elseif ($this->type == 'email') { @@ -1127,16 +1127,17 @@ class FormSetupItem /** * generate input field for a password * - * @param string $type 'dolibarr' (dolibarr password rules apply) or 'generic' - * + * @param string $type 'dolibarr' (dolibarr password rules apply) or 'generic' + * @param int $defaultmin Min nb of chars + * @param int $defaultmax Max nb of chars * @return string */ - public function generateInputFieldPassword($type = 'generic') + public function generateInputFieldPassword($type = 'generic', $defaultmin = 6, $defaultmax = 50) { global $conf, $langs, $user; - $min = 6; - $max = 50; + $min = $defaultmin; + $max = $defaultmax; if ($type == 'dolibarr') { $gen = getDolGlobalString('USER_PASSWORD_GENERATED', 'standard'); if ($gen == 'none') { @@ -1739,6 +1740,7 @@ class FormSetupItem * Hide entry on display. * * @return self + * @see setAsGenericPassword() */ public function setAsPassword() { @@ -1751,6 +1753,7 @@ class FormSetupItem * Hide entry on display. * * @return self + * @see setAsPassword() */ public function setAsGenericPassword() { From dec9dfc06b08400e3eab5919efaa82c975de0ac7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Jan 2026 12:01:22 +0100 Subject: [PATCH 07/13] FIX css --- htdocs/theme/eldy/global.inc.php | 2 +- htdocs/theme/md/style.css.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 8f69f6ca02a..b4f09af4014 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -601,7 +601,7 @@ div.buttonpayment input:focus { div.buttonpayment input { background-color: unset; color: #fff; - border-bottom: unset; + border: unset; font-weight: bold; text-transform: uppercase; cursor: pointer; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 14f8ad47cb9..98d72198447 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -770,7 +770,7 @@ input.buttonpayment, button.buttonpayment, div.buttonpayment { div.buttonpayment input { background-color: unset; - border-bottom: unset; + border: unset; font-weight: bold; text-transform: uppercase; color: #333; From e266a42545909faf8542871d568c530923ba689d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Jan 2026 12:22:11 +0100 Subject: [PATCH 08/13] Fix warning --- htdocs/public/payment/newpayment.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index ebf77508617..a043df11ae4 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -902,9 +902,13 @@ if ($action == 'charge' && isModEnabled('stripe')) { // Test on permission not r $_SESSION["currencyCodeType"] = $currency; // currency really used for payment (coming from Stripe). Will be used for check in paymentok.php. $_SESSION["paymentType"] = ''; $_SESSION['ipaddress'] = ($remoteip ? $remoteip : 'unknown'); // Payer ip - $_SESSION['payerID'] = is_object($customer) ? $customer->id : ''; $_SESSION['TRANSACTIONID'] = (is_object($charge) ? $charge->id : (is_object($paymentintent) ? $paymentintent->id : '')); $_SESSION['errormessage'] = $errormessage; + if (!getDolGlobalInt('STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) { + $_SESSION['payerID'] = is_object($customer) ? $customer->id : ''; + } else { + $_SESSION['payerID'] = ''; + } dol_syslog("Action charge stripe STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".getDolGlobalInt('STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')." ip=".$remoteip, LOG_DEBUG, 0, '_payment'); dol_syslog("_SERVER[HTTP_X_FORWARDED_HOST] = ".(empty($_SERVER["HTTP_X_FORWARDED_HOST"]) ? '' : dol_escape_htmltag($_SERVER["HTTP_X_FORWARDED_HOST"])), LOG_DEBUG, 0, '_payment'); From 3e2598f8ffa38bb72a7767439ec9a5c317ba623c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Jan 2026 12:24:47 +0100 Subject: [PATCH 09/13] FIX Debug v23 - Pb in export accountancy. Var not defined. Missing conditions for dol_dir_list. Pb cache not used when not found. Header set at end. --- htdocs/accountancy/bookkeeping/balance.php | 4 +- htdocs/accountancy/bookkeeping/export.php | 15 +- .../class/accountancyexport.class.php | 134 +++++++++++------- htdocs/accountancy/tpl/export_journal.tpl.php | 14 +- 4 files changed, 100 insertions(+), 67 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/balance.php b/htdocs/accountancy/bookkeeping/balance.php index 5aae70a3021..6049c43675b 100644 --- a/htdocs/accountancy/bookkeeping/balance.php +++ b/htdocs/accountancy/bookkeeping/balance.php @@ -235,8 +235,8 @@ if ($action == 'export' && $user->hasRight('accounting', 'mouvements', 'lire')) if ($exportType === 'csv') { $sep = getDolGlobalString('ACCOUNTING_EXPORT_SEPARATORCSV'); - $filename = 'balance'; - $type_export = 'balance'; + $filename = 'balance'; // Used by the tpl + $type_export = 'balance'; // Used by the tpl include DOL_DOCUMENT_ROOT.'/accountancy/tpl/export_journal.tpl.php'; foreach ($object->lines as $line) { diff --git a/htdocs/accountancy/bookkeeping/export.php b/htdocs/accountancy/bookkeeping/export.php index 4bce06fb83e..fa3424be67c 100644 --- a/htdocs/accountancy/bookkeeping/export.php +++ b/htdocs/accountancy/bookkeeping/export.php @@ -30,6 +30,13 @@ // Load Dolibarr environment require '../../main.inc.php'; +/** + * @var Conf $conf + * @var DoliDB $db + * @var HookManager $hookmanager + * @var Translate $langs + * @var User $user + */ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountancyexport.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; require_once DOL_DOCUMENT_ROOT.'/accountancy/class/lettering.class.php'; @@ -41,14 +48,6 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; -/** - * @var Conf $conf - * @var DoliDB $db - * @var HookManager $hookmanager - * @var Translate $langs - * @var User $user - */ - // Load translation files required by the page $langs->loadLangs(array("accountancy", "compta")); diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 85297b15f66..d84db9371a9 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -382,12 +382,12 @@ class AccountancyExport */ public function export(&$TData, $formatexportset, $withAttachment = 0, $downloadMode = 1, $outputMode = 1, $noouput = 1) { - global $db, $conf, $langs; // The tpl file use $db - global $search_date_end; // Used into /accountancy/tpl/export_journal.tpl.php + global $db, $conf, $langs; // Used into /accountancy/tpl/export_journal.tpl.php + global $search_date_end, $hookmanager; // Used into /accountancy/tpl/export_journal.tpl.php // Define name of file to save - $filename = 'general_ledger-'.$this->getFormatCode($formatexportset); - $type_export = 'general_ledger'; + $filename = 'general_ledger-'.$this->getFormatCode($formatexportset); // Used into /accountancy/tpl/export_journal.tpl.php + $type_export = 'general_ledger'; // Used into /accountancy/tpl/export_journal.tpl.php $completefilename = ''; $exportFile = null; @@ -422,7 +422,8 @@ class AccountancyExport top_httphead($mimetype, 1); } - include DOL_DOCUMENT_ROOT.'/accountancy/tpl/export_journal.tpl.php'; + // Set var $completefilename and add HTTP header. + include DOL_DOCUMENT_ROOT.'/accountancy/tpl/export_journal.tpl.php'; // TODO Fix this: A tpl is for rendering data on output. For including common code, we must use .inc.php if ($outputMode == 1 || $outputMode == 2) { if ($outputMode == 1) { @@ -1462,11 +1463,14 @@ class AccountancyExport print $output; } + $i = 0; foreach ($objectLines as $line) { if ($line->debit == 0 && $line->credit == 0) { //var_dump($line->id); //unset($array[$line]); } else { + $i++; + $date_creation = dol_print_date($line->date_creation, '%Y%m%d'); $date_document = dol_print_date($line->doc_date, '%Y%m%d'); $date_lettering = dol_print_date($line->date_lettering, '%Y%m%d'); @@ -1475,6 +1479,8 @@ class AccountancyExport $refInvoice = ''; $invoice = null; + // TODO The fetch of invoice is just to get the ->id, ->ref (and ->ref_supplier for supplier invoice) so + // may be we can get them into the $objectLines and reuse a generic static objectinstead ? if ($line->doc_type == 'customer_invoice') { // Customer invoice require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; @@ -1567,6 +1573,7 @@ class AccountancyExport $attachmentFileKey = trim((string) $line->piece_num); if (!isset($archiveFileList[$attachmentFileKey])) { + // We complete the $archiveFileList to add the file to the existing list (first entry was filled when function was called, we add here the next one) $objectDirPath = ''; $objectFileName = dol_sanitizeFileName($line->doc_ref); if ($line->doc_type == 'customer_invoice') { @@ -1584,33 +1591,45 @@ class AccountancyExport $objectDirPath .= '/' . rtrim(get_exdir($invoice->id, 2, 0, 0, $invoice, 'invoice_supplier'), '/'); } } - $arrayofinclusion = array(); - // If it is a supplier invoice, we want to use last uploaded file - $arrayofinclusion[] = '^'.preg_quote($objectFileName, '/').(($line->doc_type == 'supplier_invoice') ? '.+' : '').'\.pdf$'; - $fileFoundList = dol_dir_list($objectDirPath.'/'.$objectFileName, 'files', 0, implode('|', $arrayofinclusion), '(\.meta|_preview.*\.png)$', 'date', SORT_DESC, 0, 1); - if (!empty($fileFoundList)) { - $attachmentFileNameTrunc = $line->doc_ref; - foreach ($fileFoundList as $fileFound) { - if (strstr($fileFound['name'], $objectFileName)) { - // skip native invoice pdfs (canelle) - // We want to retrieve an attachment representative of the supplier invoice, not a fake document generated by Dolibarr. - if ($line->doc_type == 'supplier_invoice') { - if ($fileFound['name'] === $objectFileName.'.pdf') { + + if ($objectDirPath && empty($conf->cache['archiveFileList_notfound'][$attachmentFileKey])) { + $arrayofinclusion = array(); + // If it is a supplier invoice, we want to use last uploaded file + $arrayofinclusion[] = '^'.preg_quote($objectFileName, '/').(($line->doc_type == 'supplier_invoice') ? '.+' : '').'\.pdf$'; + + $filefoundPath = ''; // The path of last file found + $fileFoundList = dol_dir_list($objectDirPath.'/'.$objectFileName, 'files', 0, implode('|', $arrayofinclusion), '(\.meta|_preview.*\.png)$', 'date', SORT_DESC, 0, 1); + + if (!empty($fileFoundList)) { + $attachmentFileNameTrunc = $line->doc_ref; + + foreach ($fileFoundList as $fileFound) { + if (strstr($fileFound['name'], $objectFileName)) { + // skip native invoice pdfs (canelle) + // We want to retrieve an attachment representative of the supplier invoice, not a fake document generated by Dolibarr. + if ($line->doc_type == 'supplier_invoice') { + if ($fileFound['name'] === $objectFileName.'.pdf') { + continue; + } + } elseif ($fileFound['name'] !== $objectFileName.'.pdf') { continue; } - } elseif ($fileFound['name'] !== $objectFileName.'.pdf') { - continue; - } - $fileFoundPath = $objectDirPath.'/'.$objectFileName.'/'.$fileFound['name']; - if (file_exists($fileFoundPath)) { - $archiveFileList[$attachmentFileKey] = array( - 'path' => $fileFoundPath, - 'name' => $attachmentFileNameTrunc.'.pdf', - ); - break; + $fileFoundPath = $objectDirPath.'/'.$objectFileName.'/'.$fileFound['name']; + if (file_exists($fileFoundPath)) { + $archiveFileList[$attachmentFileKey] = array( + 'path' => $fileFoundPath, + 'name' => $attachmentFileNameTrunc.'.pdf', + ); + break; + } } } } + + if (empty($filefoundPath)) { + // Use also a cache if no file were found + $conf->cache['archiveFileList_notfound'][$attachmentFileKey] = 1; + } } } @@ -1683,10 +1702,13 @@ class AccountancyExport print $output; } + $i = 0; foreach ($objectLines as $line) { if ($line->debit == 0 && $line->credit == 0) { //unset($array[$line]); } else { + $i++; + $date_creation = dol_print_date($line->date_creation, '%Y%m%d'); $date_document = dol_print_date($line->doc_date, '%Y%m%d'); $date_lettering = dol_print_date($line->date_lettering, '%Y%m%d'); @@ -1695,6 +1717,8 @@ class AccountancyExport $refInvoice = ''; $invoice = null; + // TODO The fetch of invoice is just to get the ->id, ->ref (and ->ref_supplier for supplier invoice) so + // may be we can get them into the $objectLines and reuse a generic static objectinstead ? if ($line->doc_type == 'customer_invoice') { // Customer invoice require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; @@ -1787,6 +1811,7 @@ class AccountancyExport $attachmentFileKey = trim((string) $line->piece_num); if (!isset($archiveFileList[$attachmentFileKey])) { + // We complete the $archiveFileList to add the file to the existing list (first entry was filled when function was called, we add here the next one) $objectDirPath = ''; $objectFileName = dol_sanitizeFileName($line->doc_ref); if ($line->doc_type == 'customer_invoice') { @@ -1804,33 +1829,44 @@ class AccountancyExport $objectDirPath .= '/' . rtrim(get_exdir($invoice->id, 2, 0, 0, $invoice, 'invoice_supplier'), '/'); } } - $arrayofinclusion = array(); - // If it is a supplier invoice, we want to use last uploaded file - $arrayofinclusion[] = '^'.preg_quote($objectFileName, '/').(($line->doc_type == 'supplier_invoice') ? '.+' : '').'\.pdf$'; - $fileFoundList = dol_dir_list($objectDirPath.'/'.$objectFileName, 'files', 0, implode('|', $arrayofinclusion), '(\.meta|_preview.*\.png)$', 'date', SORT_DESC, 0, 1); - if (!empty($fileFoundList)) { - $attachmentFileNameTrunc = $line->doc_ref; - foreach ($fileFoundList as $fileFound) { - if (strstr($fileFound['name'], $objectFileName)) { - // skip native invoice pdfs (canelle) - // We want to retrieve an attachment representative of the supplier invoice, not a fake document generated by Dolibarr. - if ($line->doc_type == 'supplier_invoice') { - if ($fileFound['name'] === $objectFileName.'.pdf') { + + if ($objectDirPath && empty($conf->cache['archiveFileList_notfound'][$attachmentFileKey])) { + $arrayofinclusion = array(); + // If it is a supplier invoice, we want to use last uploaded file + $arrayofinclusion[] = '^'.preg_quote($objectFileName, '/').(($line->doc_type == 'supplier_invoice') ? '.+' : '').'\.pdf$'; + + $filefoundPath = ''; // The path of last file found + $fileFoundList = dol_dir_list($objectDirPath.'/'.$objectFileName, 'files', 0, implode('|', $arrayofinclusion), '(\.meta|_preview.*\.png)$', 'date', SORT_DESC, 0, 1); + + if (!empty($fileFoundList)) { + $attachmentFileNameTrunc = $line->doc_ref; + foreach ($fileFoundList as $fileFound) { + if (strstr($fileFound['name'], $objectFileName)) { + // skip native invoice pdfs (canelle) + // We want to retrieve an attachment representative of the supplier invoice, not a fake document generated by Dolibarr. + if ($line->doc_type == 'supplier_invoice') { + if ($fileFound['name'] === $objectFileName.'.pdf') { + continue; + } + } elseif ($fileFound['name'] !== $objectFileName.'.pdf') { continue; } - } elseif ($fileFound['name'] !== $objectFileName.'.pdf') { - continue; - } - $fileFoundPath = $objectDirPath.'/'.$objectFileName.'/'.$fileFound['name']; - if (file_exists($fileFoundPath)) { - $archiveFileList[$attachmentFileKey] = array( - 'path' => $fileFoundPath, - 'name' => $attachmentFileNameTrunc.'.pdf', - ); - break; + $fileFoundPath = $objectDirPath.'/'.$objectFileName.'/'.$fileFound['name']; + if (file_exists($fileFoundPath)) { + $archiveFileList[$attachmentFileKey] = array( + 'path' => $fileFoundPath, + 'name' => $attachmentFileNameTrunc.'.pdf', + ); + break; + } } } } + + if (empty($filefoundPath)) { + // Use also a cache if no file were found + $conf->cache['archiveFileList_notfound'][$attachmentFileKey] = 1; + } } } diff --git a/htdocs/accountancy/tpl/export_journal.tpl.php b/htdocs/accountancy/tpl/export_journal.tpl.php index 4176b61a242..126485c889c 100644 --- a/htdocs/accountancy/tpl/export_journal.tpl.php +++ b/htdocs/accountancy/tpl/export_journal.tpl.php @@ -20,9 +20,6 @@ * along with this program. If not, see . */ -// $formatexportset must be defined -// $downloadMode =0 for direct download or =1 to download after writing files or =-1 not to download files - ' @phan-var-force int $formatexportset @phan-var-force string $type_export @@ -34,10 +31,13 @@ * @var Conf $conf * @var DoliDB $db * @var HookManager $hookmanager + * + * @var string $action * @var int $formatexportset * @var string $type_export * @var string $filename - * @var int<-1,1> $downloadMode + * @var string $search_date_end + * @var int<-1,1> $downloadMode Value =0 for direct download or =1 to download after writing files or =-1 not to download files */ // Protection to avoid direct call of template @@ -53,13 +53,10 @@ $nodateexport = getDolGlobalInt('ACCOUNTING_EXPORT_NO_DATE_IN_FILENAME'); $siren = getDolGlobalString('MAIN_INFO_SIREN'); $date_export = "_".dol_print_date(dol_now(), '%Y%m%d%H%M%S'); +$startaccountingperiod = ''; $endaccountingperiod = dol_print_date(dol_now(), '%Y%m%d'); -if (empty($downloadMode)) { - header('Content-Type: text/csv'); -} - include_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountancyexport.class.php'; $accountancyexport = new AccountancyExport($db); @@ -123,5 +120,6 @@ if (is_object($hookmanager)) { } if (empty($downloadMode)) { + header('Content-Type: text/csv'); header('Content-Disposition: attachment;filename=' . $completefilename); } From 053cd4e020e1a2e2679891c111b5f38d21d9f653 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Jan 2026 14:13:13 +0100 Subject: [PATCH 10/13] Init var --- htdocs/accountancy/class/accountancyexport.class.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index d84db9371a9..f12927bc87b 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -1463,6 +1463,8 @@ class AccountancyExport print $output; } + $conf->cache['archiveFileList_notfound'] = array(); + $i = 0; foreach ($objectLines as $line) { if ($line->debit == 0 && $line->credit == 0) { @@ -1702,6 +1704,8 @@ class AccountancyExport print $output; } + $conf->cache['archiveFileList_notfound'] = array(); + $i = 0; foreach ($objectLines as $line) { if ($line->debit == 0 && $line->credit == 0) { From b487a95d8692f8b0df12181967ccda539da1a8a8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Jan 2026 14:27:16 +0100 Subject: [PATCH 11/13] Fix export for quadratus --- htdocs/accountancy/bookkeeping/export.php | 15 +++- .../class/accountancyexport.class.php | 73 ++++++++++++------- 2 files changed, 60 insertions(+), 28 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/export.php b/htdocs/accountancy/bookkeeping/export.php index fa3424be67c..46c0316609e 100644 --- a/htdocs/accountancy/bookkeeping/export.php +++ b/htdocs/accountancy/bookkeeping/export.php @@ -850,15 +850,26 @@ if ($action == 'export_file') { || getDolGlobalString('ACCOUNTING_EXPORT_MODELCSV') == AccountancyExport::$EXPORT_TYPE_FEC || getDolGlobalString('ACCOUNTING_EXPORT_MODELCSV') == AccountancyExport::$EXPORT_TYPE_FEC2 ) { + $except = array(); + if (getDolGlobalInt('ACCOUNTING_EXPORT_REMOVE_INVOICE_SOURCE_FILE')) { + $except[] = $langs->trans('Invoice'); + } + if (getDolGlobalInt('ACCOUNTING_EXPORT_REMOVE_EXPENSEREPORT_SOURCE_FILE')) { + $except[] = $langs->trans('ExpenseReport'); + } + if (getDolGlobalInt('ACCOUNTING_EXPORT_REMOVE_SUPPLIERINVOICE_SOURCE_FILE')) { + $except[] = $langs->trans('SupplierInvoice'); + } + $form_question['notifiedexportfull'] = array( 'name' => 'notifiedexportfull', 'type' => 'checkbox', - 'label' => $langs->trans('NotifiedExportFull'), + 'label' => $langs->trans('NotifiedExportFull').(empty($except) ? '' : '(Except '.join(', ', $except).')'), 'value' => 'false', ); } - $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?'.$param, $langs->trans("ExportFilteredList").'...', $langs->trans('ConfirmExportFile'), 'export_fileconfirm', $form_question, '', 1, 390, 700); + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?'.$param, $langs->trans("ExportFilteredList").'...', '', 'export_fileconfirm', $form_question, '', 1, 390, 700); } // Print form confirm diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index f12927bc87b..e396cf547ef 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -903,8 +903,13 @@ class AccountancyExport $end_line = "\r\n"; + $conf->cache['archiveFileList_notfound'] = array(); + // We should use dol_now function not time however this is wrong date to transfer in accounting + $i = 0; foreach ($objectLines as $line) { + $i++; + // Clean some data $line->doc_ref = dol_string_unaccent($line->doc_ref); @@ -1035,12 +1040,14 @@ class AccountancyExport $tab['num_piece3'] = str_pad(substr(self::trunc($line->doc_ref, 20), -10), 10); $tab['reserved'] = str_repeat(' ', 10); // position 159 $tab['currency_amount'] = str_repeat(' ', 13); // position 169 + // get document file $attachmentFileName = ''; if ($withAttachment == 1) { $attachmentFileKey = trim((string) $line->piece_num); if (!isset($archiveFileList[$attachmentFileKey])) { + // We complete the $archiveFileList to add the file to the existing list (first entry was filled when function was called, we add here the next one) $objectDirPath = ''; $objectFileName = dol_sanitizeFileName($line->doc_ref); if ($line->doc_type == 'customer_invoice') { @@ -1054,33 +1061,45 @@ class AccountancyExport $objectDirPath = !empty($conf->fournisseur->facture->multidir_output[$conf->entity]) ? $conf->fournisseur->facture->multidir_output[$conf->entity] : $conf->fournisseur->facture->dir_output; $objectDirPath .= '/'.rtrim(get_exdir($invoice->id, 2, 0, 0, $invoice, 'invoice_supplier'), '/'); } - $arrayofinclusion = array(); - // If it is a supplier invoice, we want to use last uploaded file - $arrayofinclusion[] = '^'.preg_quote($objectFileName, '/').(($line->doc_type == 'supplier_invoice') ? '.+' : '').'\.pdf$'; - $fileFoundList = dol_dir_list($objectDirPath.'/'.$objectFileName, 'files', 0, implode('|', $arrayofinclusion), '(\.meta|_preview.*\.png)$', 'date', SORT_DESC, 0, 1); - if (!empty($fileFoundList)) { - $attachmentFileNameTrunc = str_pad(self::trunc((string) $line->piece_num, 8), 8, '0', STR_PAD_LEFT); - foreach ($fileFoundList as $fileFound) { - if (strstr($fileFound['name'], $objectFileName)) { - // skip native invoice pdfs (canelle) - // We want to retrieve an attachment representative of the supplier invoice, not a fake document generated by Dolibarr. - if ($line->doc_type == 'supplier_invoice') { - if ($fileFound['name'] === $objectFileName.'.pdf') { + + if ($objectDirPath && empty($conf->cache['archiveFileList_notfound'][$attachmentFileKey])) { + $arrayofinclusion = array(); + // If it is a supplier invoice, we want to use last uploaded file + $arrayofinclusion[] = '^'.preg_quote($objectFileName, '/').(($line->doc_type == 'supplier_invoice') ? '.+' : '').'\.pdf$'; + + $fileFoundPath = ''; + $fileFoundList = dol_dir_list($objectDirPath.'/'.$objectFileName, 'files', 0, implode('|', $arrayofinclusion), '(\.meta|_preview.*\.png)$', 'date', SORT_DESC, 0, 1); + + if (!empty($fileFoundList)) { + $attachmentFileNameTrunc = str_pad(self::trunc((string) $line->piece_num, 8), 8, '0', STR_PAD_LEFT); + + foreach ($fileFoundList as $fileFound) { + if (strstr($fileFound['name'], $objectFileName)) { + // skip native invoice pdfs (canelle) + // We want to retrieve an attachment representative of the supplier invoice, not a fake document generated by Dolibarr. + if ($line->doc_type == 'supplier_invoice') { + if ($fileFound['name'] === $objectFileName.'.pdf') { + continue; + } + } elseif ($fileFound['name'] !== $objectFileName.'.pdf') { continue; } - } elseif ($fileFound['name'] !== $objectFileName.'.pdf') { - continue; - } - $fileFoundPath = $objectDirPath.'/'.$objectFileName.'/'.$fileFound['name']; - if (file_exists($fileFoundPath)) { - $archiveFileList[$attachmentFileKey] = array( - 'path' => $fileFoundPath, - 'name' => $attachmentFileNameTrunc.'.pdf', - ); - break; + $fileFoundPath = $objectDirPath.'/'.$objectFileName.'/'.$fileFound['name']; + if (file_exists($fileFoundPath)) { + $archiveFileList[$attachmentFileKey] = array( + 'path' => $fileFoundPath, + 'name' => $attachmentFileNameTrunc.'.pdf', + ); + break; + } } } } + + if (empty($fileFoundPath)) { + // Use also a cache if no file were found + $conf->cache['archiveFileList_notfound'][$attachmentFileKey] = 1; + } } } @@ -1088,6 +1107,7 @@ class AccountancyExport $attachmentFileName = $archiveFileList[$attachmentFileKey]['name']; } } + if (dol_strlen((string) $attachmentFileName) == 12) { $tab['attachment'] = $attachmentFileName; // position 182 } else { @@ -1599,7 +1619,7 @@ class AccountancyExport // If it is a supplier invoice, we want to use last uploaded file $arrayofinclusion[] = '^'.preg_quote($objectFileName, '/').(($line->doc_type == 'supplier_invoice') ? '.+' : '').'\.pdf$'; - $filefoundPath = ''; // The path of last file found + $fileFoundPath = ''; // The path of last file found $fileFoundList = dol_dir_list($objectDirPath.'/'.$objectFileName, 'files', 0, implode('|', $arrayofinclusion), '(\.meta|_preview.*\.png)$', 'date', SORT_DESC, 0, 1); if (!empty($fileFoundList)) { @@ -1628,7 +1648,7 @@ class AccountancyExport } } - if (empty($filefoundPath)) { + if (empty($fileFoundPath)) { // Use also a cache if no file were found $conf->cache['archiveFileList_notfound'][$attachmentFileKey] = 1; } @@ -1839,11 +1859,12 @@ class AccountancyExport // If it is a supplier invoice, we want to use last uploaded file $arrayofinclusion[] = '^'.preg_quote($objectFileName, '/').(($line->doc_type == 'supplier_invoice') ? '.+' : '').'\.pdf$'; - $filefoundPath = ''; // The path of last file found + $fileFoundPath = ''; // The path of last file found $fileFoundList = dol_dir_list($objectDirPath.'/'.$objectFileName, 'files', 0, implode('|', $arrayofinclusion), '(\.meta|_preview.*\.png)$', 'date', SORT_DESC, 0, 1); if (!empty($fileFoundList)) { $attachmentFileNameTrunc = $line->doc_ref; + foreach ($fileFoundList as $fileFound) { if (strstr($fileFound['name'], $objectFileName)) { // skip native invoice pdfs (canelle) @@ -1867,7 +1888,7 @@ class AccountancyExport } } - if (empty($filefoundPath)) { + if (empty($fileFoundPath)) { // Use also a cache if no file were found $conf->cache['archiveFileList_notfound'][$attachmentFileKey] = 1; } From efdbf9a95c0d044b5b420f6dabfd279bf262b194 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Jan 2026 14:28:30 +0100 Subject: [PATCH 12/13] Trans --- htdocs/accountancy/bookkeeping/export.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/bookkeeping/export.php b/htdocs/accountancy/bookkeeping/export.php index 46c0316609e..89b4017d99c 100644 --- a/htdocs/accountancy/bookkeeping/export.php +++ b/htdocs/accountancy/bookkeeping/export.php @@ -864,7 +864,7 @@ if ($action == 'export_file') { $form_question['notifiedexportfull'] = array( 'name' => 'notifiedexportfull', 'type' => 'checkbox', - 'label' => $langs->trans('NotifiedExportFull').(empty($except) ? '' : '(Except '.join(', ', $except).')'), + 'label' => $langs->trans('NotifiedExportFull').(empty($except) ? '' : ' (Except '.join(', ', $except).')'), 'value' => 'false', ); } From c940376446dadb95b2edaece54aba3bf034ca6db Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Jan 2026 15:41:44 +0100 Subject: [PATCH 13/13] Clean sql --- dev/initdemo/mysqldump_dolibarr_23.0.0.sql | 124 --------------------- htdocs/cron/list.php | 2 +- 2 files changed, 1 insertion(+), 125 deletions(-) diff --git a/dev/initdemo/mysqldump_dolibarr_23.0.0.sql b/dev/initdemo/mysqldump_dolibarr_23.0.0.sql index 82d8a2e6a3b..97b06d9e2c7 100644 --- a/dev/initdemo/mysqldump_dolibarr_23.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_23.0.0.sql @@ -65871,7 +65871,6 @@ INSERT INTO `llx_const` VALUES (19209,'MAIN_MODULE_USER',0,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2025-07-10 13:22:32'), (19210,'MAIN_MODULE_VARIANTS',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2025-07-10 13:22:32'), (19211,'MAIN_MODULE_WEBSITE',1,'1','string',0,'{\"authorid\":0,\"ip\":\"127.0.0.1\",\"lastactivationversion\":\"dolibarr\"}','2025-07-10 13:22:32'), -(19213,'BLOCKEDLOG_HMAC_KEY',0,'dolcrypt:AES-256-CTR:10220f22d6b38559:JQBzV0gvPm0peu75gEg22UuOSKIssTzlkHlJd9r7CsHP6KvuxEtw5uKdzpVsMw==','chaine',0,'The secret key for HMAC used for blockedlog record','2026-01-11 17:46:28'), (19214,'MAIN_VERSION_LAST_UPGRADE',0,'23.0.0','chaine',0,'Dolibarr version for last upgrade','2026-01-11 17:46:30'), (19215,'MAIN_LAST_PING_KO_DATE',1,'20260111174642','chaine',0,'','2026-01-11 17:46:42'); /*!40000 ALTER TABLE `llx_const` ENABLE KEYS */; @@ -70406,131 +70405,10 @@ INSERT INTO `llx_extrafields` VALUES (33,'adherent','extradatamember',1,'2019-10-08 18:47:11','Extra personalized data','varchar','10',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2019-10-08 20:47:11','1',NULL,0,NULL,NULL,NULL,NULL,NULL), (34,'adherent_type','extradatamembertype',1,'2019-10-08 18:47:43','Extra personalized data','varchar','32',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2019-10-08 20:47:43','1',NULL,0,NULL,NULL,NULL,NULL,NULL), (35,'commande','custom1',1,'2019-12-21 13:31:31','Custom field 1','varchar','10',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2019-12-21 17:31:31','1',NULL,0,NULL,NULL,NULL,NULL,NULL), -(36,'societe','height',1,'2020-01-05 20:37:18','Height','varchar','128',1,0,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:18','1',NULL,0,NULL,NULL,NULL,NULL,NULL), -(37,'societe','weight',1,'2020-01-05 20:37:18','Weigth','varchar','128',2,0,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:18','1',NULL,0,NULL,NULL,NULL,NULL,NULL), -(38,'societe','prof',1,'2020-01-05 20:37:18','Profession','varchar','128',3,0,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:18','1',NULL,0,NULL,NULL,NULL,NULL,NULL), -(39,'societe','birthdate',1,'2020-01-05 20:37:19','Birth date','date','0',4,0,0,'',0,0,NULL,'-1',0,0,NULL,NULL,NULL,12,12,'2020-01-06 00:37:19','1',NULL,0,NULL,NULL,NULL,NULL,NULL), (45,'commande','aaa',1,'2023-01-12 11:33:26','aaa','varchar','255',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2023-01-12 08:33:26','1',NULL,0,NULL,NULL,NULL,NULL,NULL), -(48,'product','availabelforresellers',1,'2023-01-19 12:20:13','AvailableForResellers','boolean','',111,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:13','$conf->sellyoursaas->enabled',NULL,0,NULL,NULL,NULL,NULL,NULL), -(61,'societe','separatorthirdparty',1,'2023-01-19 12:20:13','SELLYOURSAAS_NAME','separate','',100,1,0,'a:1:{s:7:\"options\";a:1:{i:1;i:1;}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:13','$conf->sellyoursaas->enabled',NULL,0,NULL,NULL,NULL,NULL,NULL), -(79,'societe','checkboxnonprofitorga',1,'2023-01-19 12:20:13','NonProfitOrganization','select','10',199,1,0,'a:1:{s:7:\"options\";a:2:{s:6:\"profit\";s:18:\"ProfitOrganization\";s:9:\"nonprofit\";s:21:\"NonProfitOrganization\";}}',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:13','$conf->sellyoursaas->enabled',NULL,0,NULL,NULL,NULL,NULL,NULL), -(80,'contrat','separatorcontract',1,'2023-01-19 12:20:13','SELLYOURSAAS_NAME','separate','',100,1,0,'a:1:{s:7:\"options\";a:1:{i:1;i:1;}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:13','$conf->sellyoursaas->enabled',NULL,0,NULL,NULL,NULL,NULL,NULL), -(81,'contrat','plan',1,'2023-01-19 12:20:13','Plan','varchar','64',102,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:13','$conf->sellyoursaas->enabled',NULL,0,NULL,NULL,'tdoverflowmax150',NULL,NULL), -(82,'contrat','deployment_init_adminpass',1,'2023-01-19 12:20:13','DeploymentInitPassword','varchar','64',103,1,0,'',0,0,NULL,'-2',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:13','$conf->sellyoursaas->enabled',NULL,0,NULL,NULL,NULL,NULL,NULL), -(84,'contrat','deployment_host',1,'2023-01-19 12:20:13','DeploymentHost','varchar','128',105,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:13','$conf->sellyoursaas->enabled','DeploymentHostDesc',0,NULL,NULL,NULL,NULL,NULL), -(131,'facture','commission',1,'2023-01-19 12:20:14','PartnerCommissionForThisInvoice','int','3',1020,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:14','$conf->sellyoursaas->enabled',NULL,0,NULL,NULL,NULL,NULL,NULL), -(132,'facture','reseller',1,'2023-01-19 12:20:14','Reseller','link','3',1030,1,0,'a:1:{s:7:\"options\";a:1:{s:39:\"Societe:societe/class/societe.class.php\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:14','$conf->sellyoursaas->enabled',NULL,0,NULL,NULL,NULL,NULL,NULL), -(133,'facture','delayautopayment',1,'2023-01-19 12:20:14','DelayAutomaticPayment','date','',1035,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:14','$conf->sellyoursaas->enabled','DelayAutomaticPaymentDesc',0,NULL,NULL,NULL,NULL,NULL), -(134,'facture_rec','discountcode',1,'2023-01-19 12:20:14','DiscountCode','varchar','255',200,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:14','$conf->sellyoursaas->enabled','DiscountCodeDesc',0,NULL,NULL,NULL,NULL,NULL), -(135,'facture_rec','commentonqty',1,'2023-01-19 12:20:14','CommentOnQty','text','8192',220,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:14','$conf->sellyoursaas->enabled','CommentOnQtyDesc',0,NULL,NULL,NULL,NULL,NULL), -(137,'user','ippublicmain',1,'2023-01-19 12:20:14','IPPublicMain','varchar','255',105,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-01-19 09:20:14','$conf->sellyoursaas->enabled','IPPublicMainDesc',0,NULL,NULL,NULL,NULL,NULL), -(138,'facture','separatorinvoice',1,'2023-02-04 13:58:54','SELLYOURSAAS_NAME','separate','',1000,0,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'3',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-02-04 10:58:54','$conf->sellyoursaas->enabled',NULL,0,NULL,NULL,NULL,NULL,NULL), -(141,'societe','stripeaccount',1,'2023-02-10 23:45:28','StripeAccount','varchar','255',197,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-02-10 20:45:28','$conf->sellyoursaas->enabled','Ceci est un texte',0,NULL,NULL,NULL,NULL,NULL), (142,'partnership','a_custom_field',1,'2023-08-15 12:10:00','a_custom_field','varchar','255',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2023-02-21 06:25:48','1',NULL,0,NULL,NULL,NULL,NULL,NULL), -(143,'user','news_viewed',1,'2023-02-28 12:49:59','Nouveautés vues','boolean','2',100,0,0,'',0,0,NULL,'0',0,0,NULL,NULL,NULL,12,12,'2023-02-28 09:49:59','1',NULL,0,NULL,NULL,NULL,NULL,NULL), -(166,'user','rsapublicmain',1,'2023-08-15 13:06:02','PublicRSAKey','text','2000',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2023-08-15 13:06:02','$conf->sellyoursaas->enabled','PublicRSAKeyDesc',0,NULL,NULL,'tdoverflowmax100',NULL,NULL), -(167,'product','separatorproduct',1,'2024-12-01 12:39:26','SELLYOURSAAS_NAME','separate','',100,1,0,'a:1:{s:7:\"options\";a:1:{i:1;i:1;}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(168,'product','app_or_option',1,'2024-12-01 12:39:26','AppOrOption','select','',110,1,0,'a:1:{s:7:\"options\";a:3:{s:3:\"app\";s:11:\"Application\";s:6:\"system\";s:6:\"System\";s:6:\"option\";s:6:\"Option\";}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','HelpOnAppOrOption',0,NULL,NULL,NULL,NULL,NULL), -(169,'product','option_condition',1,'2024-12-01 12:39:26','OptionCondition','varchar','200',111,1,0,'a:1:{s:7:\"options\";a:3:{s:3:\"app\";s:11:\"Application\";s:6:\"system\";s:6:\"System\";s:6:\"option\";s:6:\"Option\";}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','HelpOnOptionCondition',0,NULL,NULL,NULL,NULL,NULL), -(171,'product','package',1,'2024-12-01 12:39:26','Package','link','',111,1,0,'a:1:{s:7:\"options\";a:1:{s:46:\"Packages:sellyoursaas/class/packages.class.php\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','IfSomethingMustBeDeployed',0,NULL,NULL,'tdoverflowmax100',NULL,NULL), -(172,'product','resource_formula',1,'2024-12-01 12:39:26','QuantityCalculationFormula','text','8192',112,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','QtyFormulaExamples',0,NULL,NULL,NULL,NULL,NULL), -(173,'product','resource_label',1,'2024-12-01 12:39:26','ResourceUnitLabel','varchar','32',112,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','ResourceUnitLabelDesc',0,NULL,NULL,NULL,NULL,NULL), -(174,'product','freeperioddays',1,'2024-12-01 12:39:26','DaysForFreePeriod','int','6',113,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(175,'product','directaccess',1,'2024-12-01 12:39:26','AccessToResources','select','',114,1,0,'a:1:{s:7:\"options\";a:5:{i:0;s:2:\"No\";i:1;s:3:\"Yes\";i:2;s:20:\"DuringTestPeriodOnly\";i:3;s:19:\"AfterTestPeriodOnly\";i:4;s:8:\"OnDemand\";}}',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(176,'product','sshaccesstype',1,'2024-12-01 12:39:26','SshAccessType','select','',114,1,0,'a:1:{s:7:\"options\";a:3:{i:0;s:13:\"SystemDefault\";i:1;s:14:\"CommonUserJail\";i:2;s:15:\"PrivateUserJail\";}}',0,0,NULL,'getDolGlobalInt(\"SELLYOURSAAS_SSH_JAILKIT_ENABLED\")',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','HelpOnSshAccessType',0,NULL,NULL,NULL,NULL,NULL), -(177,'product','typesupport',1,'2024-12-01 12:39:26','TypeOfSupport','select','',115,1,0,'a:1:{s:7:\"options\";a:3:{s:5:\"basic\";s:5:\"Basic\";s:7:\"premium\";s:7:\"Premium\";s:4:\"none\";s:4:\"None\";}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(178,'product','register_text',1,'2024-12-01 12:39:26','RegisterText','varchar','255',120,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','EnterHereTranslationKeyToUseOnRegisterPage',0,NULL,NULL,'tdoverflowmax150',NULL,NULL), -(179,'product','register_discountcode',1,'2024-12-01 12:39:26','DiscountCodes','varchar','255',121,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\") && getDolGlobalString(\"SELLYOURSAAS_ACCEPT_DISCOUNTCODE\")','EnterHereListOfDiscountCodes',0,NULL,NULL,'tdoverflowmax100',NULL,NULL), -(180,'product','email_template_trialreminder',1,'2024-12-01 12:39:26','EmailTemplateTrialExpiringReminder','int','',123,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','EmailTemplateTrialExpiringReminderHelp',0,NULL,NULL,NULL,NULL,NULL), -(181,'product','email_template_trialsuspended',1,'2024-12-01 12:39:26','EmailTemplateSuspendedTrial','int','',125,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','EmailTemplateSuspendedTrialHelp',0,NULL,NULL,NULL,NULL,NULL), -(182,'product','position',1,'2024-12-01 12:39:26','Position','int','5',150,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(184,'societe','date_registration',1,'2024-12-01 12:39:26','RegistrationDate','datetime','',103,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(185,'societe','domain_registration_page',1,'2024-12-01 12:39:26','DomainOfRegistrationPage','varchar','128',103,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(186,'societe','ip_confirm_email',1,'2024-12-01 12:39:26','IPConfirmEmail','ip','',180,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(187,'societe','source',1,'2024-12-01 12:39:26','Source','varchar','64',104,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,'tdoverflowmax200',NULL,NULL), -(188,'societe','source_utm',1,'2024-12-01 12:39:26','SourceUtm','varchar','64',104,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,'tdoverflowmax150',NULL,NULL), -(189,'societe','firstname',1,'2024-12-01 12:39:26','FirstName','varchar','64',105,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,'tdoverflowmax120',NULL,NULL), -(190,'societe','lastname',1,'2024-12-01 12:39:26','LastName','varchar','64',106,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,'tdoverflowmax120',NULL,NULL), -(191,'societe','password',1,'2024-12-01 12:39:26','DashboardPassword','password','128',150,1,0,'a:1:{s:7:\"options\";a:1:{s:4:\"auto\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(192,'societe','oldpassword',1,'2024-12-01 12:39:26','OldDashboardPassword','password','128',151,0,0,'a:1:{s:7:\"options\";a:1:{s:4:\"auto\";N;}}',0,0,NULL,'-2',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(193,'societe','pass_temp',1,'2024-12-01 12:39:26','HashForPasswordReset','varchar','128',152,1,0,'',0,0,NULL,'0',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(194,'societe','email_temp',1,'2024-12-01 12:39:26','NewEmailToConfirm','varchar','128',153,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(195,'societe','optinmessages',1,'2024-12-01 12:39:26','OptinForCommercialMessages','boolean','',160,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(196,'societe','emailccinvoice',1,'2024-12-01 12:39:26','EmailCCInvoices','varchar','255',180,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(197,'societe','manualcollection',1,'2024-12-01 12:39:26','ManualCollection','boolean','',194,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','If checked, the batch SellYourSaasValidateDraftInvoices will never validate invoices of this customer',0,NULL,NULL,NULL,NULL,NULL), -(198,'societe','date_apply_for_reseller',1,'2024-12-01 12:39:26','DateApplyReseller','date','',195,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(199,'societe','commission',1,'2024-12-01 12:39:26','PartnerCommission','int','3',196,1,0,'a:1:{s:7:\"options\";a:1:{s:4:\"auto\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(201,'societe','maxnbofinstances',1,'2024-12-01 12:39:26','MaxNbOfInstances','int','3',198,1,0,'',0,0,NULL,'-1',0,0,NULL,'4','sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(202,'societe','spammer',1,'2024-12-01 12:39:26','EvilUser','varchar','8',300,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(209,'contrat','deployment_date_start',1,'2024-12-01 12:39:26','DeploymentDateStart','datetime','',106,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(210,'contrat','deployment_date_end',1,'2024-12-01 12:39:26','DeploymentDateEnd','datetime','',107,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(211,'contrat','deployment_ip',1,'2024-12-01 12:39:26','DeploymentIP','ip','',108,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(212,'contrat','deployment_vpn_proba',1,'2024-12-01 12:39:26','DeploymentIPVPNProba','double','8,4',109,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','DeploymentIPVPNProbaDesc:ipvpnprob',0,NULL,NULL,NULL,NULL,NULL), -(213,'contrat','deployment_ipquality',1,'2024-12-01 12:39:26','DeploymentIPQuality','varchar','255',110,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','DeploymentIPQualityDesc:ipquality',0,NULL,NULL,NULL,NULL,NULL), -(214,'contrat','deployment_emailquality',1,'2024-12-01 12:39:26','DeploymentEmailQuality','varchar','255',110,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','DeploymentEmailQualityDesc:ipquality',0,NULL,NULL,NULL,NULL,NULL), -(215,'contrat','deployment_ua',1,'2024-12-01 12:39:26','DeploymentUserAgent','varchar','255',111,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(216,'contrat','date_softalert_endfreeperiod',1,'2024-12-01 12:39:26','DateSoftAlertEndTrial','datetime','',112,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(217,'contrat','date_hardalert_endfreeperiod',1,'2024-12-01 12:39:26','DateHardAlertEndTrial','datetime','',113,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(219,'contrat','undeployment_date',1,'2024-12-01 12:39:26','UndeploymentDate','datetime','',118,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(220,'contrat','undeployment_ip',1,'2024-12-01 12:39:26','UndeploymentIP','varchar','128',119,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(221,'contrat','custom_url',1,'2024-12-01 12:39:26','CustomURL','varchar','128',122,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','CustomUrlDesc:tooltipcustomurl',0,NULL,NULL,NULL,NULL,NULL), -(222,'contrat','custom_virtualhostline',1,'2024-12-01 12:39:26','CustomVirtualHostLine','varchar','255',123,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','EnterAVirtualHostLine:virthostline',0,NULL,NULL,NULL,NULL,NULL), -(223,'contrat','custom_virtualhostdir',1,'2024-12-01 12:39:26','CustomVirtualHostDir','varchar','255',124,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','EnterAVirtualHostDirLine:virthostdirline',0,NULL,NULL,NULL,NULL,NULL), -(224,'contrat','hostname_os',1,'2024-12-01 12:39:26','Hostname OS','varchar','128',125,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(225,'contrat','username_os',1,'2024-12-01 12:39:26','Username OS','varchar','32',126,1,0,'',1,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(227,'contrat','sshaccesstype',1,'2024-12-01 12:39:26','SshAccessType','select','',128,1,0,'a:1:{s:7:\"options\";a:3:{i:0;s:13:\"SystemDefault\";i:1;s:14:\"CommonUserJail\";i:2;s:15:\"PrivateUserJail\";}}',0,0,NULL,'getDolGlobalInt(\"SELLYOURSAAS_SSH_JAILKIT_ENABLED\")',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','HelpOnSshAccessType',0,NULL,NULL,NULL,NULL,NULL), -(228,'contrat','directaccess',1,'2024-12-01 12:39:26','AccessToResources','select','',129,1,0,'a:1:{s:7:\"options\";a:2:{i:0;s:21:\"DefaultFromAppService\";i:1;s:3:\"Yes\";}}',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(229,'contrat','hostname_db',1,'2024-12-01 12:39:26','Hostname DB','varchar','128',130,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(230,'contrat','database_db',1,'2024-12-01 12:39:26','Database DB','varchar','32',131,1,0,'',1,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(231,'contrat','port_db',1,'2024-12-01 12:39:26','Port DB','varchar','8',132,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(232,'contrat','username_db',1,'2024-12-01 12:39:26','Username DB','varchar','32',133,1,0,'',1,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(234,'contrat','username_ro_db',1,'2024-12-01 12:39:26','Read-only Username DB','varchar','32',135,1,0,'',1,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','ToCreateDBUserManualy:username_ro_db',0,NULL,NULL,NULL,NULL,NULL), -(236,'contrat','prefix_db',1,'2024-12-01 12:39:26','Special table prefix DB','varchar','64',140,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(237,'contrat','timezone',1,'2024-12-01 12:39:26','TimeZone','varchar','64',141,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','SellYourSaasTimeZoneDesc',0,NULL,NULL,'tdoverflowmax150',NULL,NULL), -(238,'contrat','fileauthorizekey',1,'2024-12-01 12:39:26','DateFileauthorizekey','datetime','',150,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(239,'contrat','filelock',1,'2024-12-01 12:39:26','DateFilelock','datetime','',151,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(240,'contrat','fileinstallmoduleslock',1,'2024-12-01 12:39:26','DateFileInstallmoduleslock','datetime','',152,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(241,'contrat','fileupgradeunlock',1,'2024-12-01 12:39:26','DateFileUpgradeUnlock','datetime','',153,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(242,'contrat','latestresupdate_date',1,'2024-12-01 12:39:26','LatestResUpdateDate','datetime','',155,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(243,'contrat','instanceversion',1,'2024-12-01 12:39:26','InstanceVersion','varchar','128',156,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(244,'contrat','latestbackup_date',1,'2024-12-01 12:39:26','LatestBackupDate','datetime','',159,1,0,'',0,0,NULL,'-5',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(245,'contrat','latestbackup_date_ok',1,'2024-12-01 12:39:26','LatestBackupDateOK','datetime','',160,1,0,'',0,0,NULL,'-5',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(246,'contrat','latestbackup_status',1,'2024-12-01 12:39:26','LatestBackupStatus','varchar','2',161,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(247,'contrat','latestbackup_message',1,'2024-12-01 12:39:26','LatestBackupMessage','text','8192',162,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(248,'contrat','latestbackupremote_date',1,'2024-12-01 12:39:26','LatestBackupRemoteDate','datetime','',163,1,0,'',0,0,NULL,'-5',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(249,'contrat','latestbackupremote_date_ok',1,'2024-12-01 12:39:26','LatestBackupRemoteDateOK','datetime','',164,1,0,'',0,0,NULL,'-5',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(250,'contrat','latestbackupremote_status',1,'2024-12-01 12:39:26','LatestBackupRemoteStatus','varchar','2',165,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(251,'contrat','backup_frequency',1,'2024-12-01 12:39:26','BackupFrequency','int','3',170,1,0,'',0,0,NULL,'-1',0,0,NULL,'1','sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(252,'contrat','maxperday',1,'2024-12-01 12:39:26','MaxEmailPerDay','int','6',171,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','MaxEmailPerDayDesc',0,NULL,NULL,NULL,NULL,NULL), -(253,'contrat','cookieregister_counter',1,'2024-12-01 12:39:26','RegistrationCounter','int','10',180,1,0,'',0,0,NULL,'-1',1,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(254,'contrat','cookieregister_previous_instance',1,'2024-12-01 12:39:26','RegistrationPreviousInstance','varchar','128',181,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(255,'contrat','discountcode',1,'2024-12-01 12:39:26','DiscountCode','varchar','255',200,1,0,'',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','DiscountCodeDesc',0,NULL,NULL,NULL,NULL,NULL), -(256,'contrat','suspendmaintenance_message',1,'2024-12-01 12:39:26','Maintenance message','varchar','255',210,1,0,'',0,0,NULL,'-2',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,'tdoverflowmax150',NULL,NULL), -(257,'contrat','commentonqty',1,'2024-12-01 12:39:26','CommentOnQty','text','8192',220,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','CommentOnQtyDesc',0,NULL,NULL,'tdoverflowmax150',NULL,NULL), -(258,'contrat','spammer',1,'2024-12-01 12:39:26','EvilUser','varchar','8',300,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(259,'contrat','reasonundeploy',1,'2024-12-01 12:39:26','ReasonUninstall','varchar','255',300,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(260,'contrat','commentundeploy',1,'2024-12-01 12:39:26','CommentOfUninstall','text','8192',300,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(265,'facture','invoicepaymentdisputed',1,'2024-12-01 12:39:26','InvoicePaymentDisputed','boolean','',1040,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2024-12-01 13:39:26','isModEnabled(\"sellyoursaas\")','InvoicePaymentDisputedDesc',0,NULL,NULL,NULL,NULL,NULL), (1407,'alumni_survey','aaa',1,'2024-12-06 12:51:24','aaa','varchar','255',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2024-12-06 13:51:24','1',NULL,1,NULL,NULL,NULL,NULL,NULL), -(1408,'product','ecotaxdeee',1,'2024-12-12 13:45:28','EcotaxAmount','double','24,8',41,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'ecotaxdeee@ecotaxdeee',12,12,'2024-12-12 13:45:28','!getDolGlobalString(\"ECOTAX_CALCULATION_MODE\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1409,'product','ecotaxdeeecode',1,'2024-12-12 13:45:28','CodeEcotax','varchar','16',42,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'ecotaxdeee@ecotaxdeee',12,12,'2024-12-12 13:45:28','getDolGlobalString(\"ECOTAX_CALCULATION_MODE\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1414,'product','marketplace_separator',1,'2024-12-30 17:05:38','Marketplace','separate','0',1,1,0,'a:1:{s:7:\"options\";a:1:{i:1;i:1;}}',0,0,NULL,'1',0,0,NULL,NULL,'marketplace@marketplace',12,12,'2024-12-30 18:05:38','isModEnabled(\"marketplace\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1415,'product','marketplace_module_version',1,'2024-12-30 17:05:38','ModuleVersion','varchar','12',10,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'marketplace@marketplace',12,12,'2024-12-30 18:05:38','isModEnabled(\"marketplace\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1416,'product','marketplace_min_version',1,'2024-12-30 17:05:38','DolibarrMin','varchar','12',20,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'marketplace@marketplace',12,12,'2024-12-30 18:05:38','isModEnabled(\"marketplace\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1417,'product','marketplace_max_version',1,'2024-12-30 17:05:38','DolibarrMax','varchar','12',30,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'marketplace@marketplace',12,12,'2024-12-30 18:05:38','isModEnabled(\"marketplace\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1418,'product','marketplace_allow_source_in_core',1,'2024-12-30 17:05:39','WantToIncludeSourceInCore','boolean','3',40,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'marketplace@marketplace',12,12,'2024-12-30 18:05:39','isModEnabled(\"marketplace\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1419,'product','marketplace_contact_support',1,'2024-12-30 17:05:39','HowtoContactSupport','varchar','255',50,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'marketplace@marketplace',12,12,'2024-12-30 18:05:39','isModEnabled(\"marketplace\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1420,'product','marketplace_reason_disabled',1,'2024-12-30 17:05:39','LastReasonDisabled','varchar','255',60,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'marketplace@marketplace',12,12,'2024-12-30 18:05:39','isModEnabled(\"marketplace\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1421,'product','marketplace_old_url',1,'2024-12-30 17:05:39','OldSystemUrl','varchar','255',70,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'marketplace@marketplace',12,12,'2024-12-30 18:05:39','isModEnabled(\"marketplace\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1422,'product','marketplace_module_keywords',1,'2024-12-30 17:05:39','ModuleKeywords','varchar','2555',80,1,0,'',0,0,NULL,'-1',0,0,NULL,NULL,'marketplace@marketplace',12,12,'2024-12-30 18:05:39','isModEnabled(\"marketplace\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1631,'alumni_survey','a_paye',1,'2025-01-01 18:25:32','A payé','varchar','255',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2025-01-01 19:25:32','1',NULL,1,NULL,NULL,NULL,NULL,NULL), -(1635,'contrat','password_os',1,'2025-01-03 13:54:58','Password OS','password','128',127,1,0,'a:1:{s:7:\"options\";a:1:{s:8:\"dolcrypt\";s:7:\"/custom\";}}',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2025-01-03 14:54:58','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(1636,'contrat','password_db',1,'2025-01-03 13:55:56','Password DB','password','128',134,1,0,'a:1:{s:7:\"options\";a:1:{s:8:\"dolcrypt\";s:7:\"/custom\";}}',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2025-01-03 14:55:56','isModEnabled(\"sellyoursaas\")','ToUpdateDBPassword:password_db',0,NULL,NULL,NULL,NULL,NULL), -(1637,'contrat','password_ro_db',1,'2025-01-03 13:56:12','Read-only Password DB','password','128',136,1,0,'a:1:{s:7:\"options\";a:1:{s:8:\"dolcrypt\";s:7:\"/custom\";}}',0,0,NULL,'-1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2025-01-03 14:56:12','isModEnabled(\"sellyoursaas\")','ToUpdateDBPassword:password_ro_db',0,NULL,NULL,NULL,NULL,NULL), -(2068,'societe','dolicloud',1,'2025-01-03 14:53:59','SaasCustomer','select','3',102,1,0,'a:1:{s:7:\"options\";a:2:{s:2:\"no\";s:2:\"No\";s:5:\"yesv2\";s:3:\"Yes\";}}',0,1,NULL,'1',0,0,NULL,'no','sellyoursaas@sellyoursaas',12,12,'2025-01-03 15:53:59','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), (2277,'entrepot','aaaa',1,'2025-02-19 13:05:18','aaaa','int','10',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2025-02-19 13:05:18','1',NULL,1,NULL,NULL,NULL,NULL,NULL), -(2308,'contrat','date_endfreeperiod',1,'2025-03-25 12:45:28','DateEndTrial','datetime','',114,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";s:7:\"/custom\";}}',0,0,'$user->hasRight(\'sellyoursaas\', \'salesrepresentative\', \'write\')','1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2025-03-25 12:45:28','isModEnabled(\"sellyoursaas\")',NULL,0,NULL,NULL,NULL,NULL,NULL), -(2309,'contrat','deployment_status',1,'2025-03-25 21:52:13','DeploymentStatus','select','',104,1,0,'a:1:{s:7:\"options\";a:3:{s:10:\"processing\";s:10:\"Processing\";s:4:\"done\";s:4:\"Done\";s:10:\"undeployed\";s:10:\"Undeployed\";}}',0,0,NULL,'1',0,0,NULL,NULL,'sellyoursaas@sellyoursaas',12,12,'2025-03-25 21:52:13','$conf->sellyoursaas->enabled',NULL,0,NULL,NULL,'tdoverflowmax100',NULL,NULL), (2310,'socpeople','ccc',1,'2025-03-25 22:36:52','ccc','varchar','255',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2025-03-25 22:36:52','1',NULL,1,NULL,NULL,NULL,NULL,NULL), (2311,'socpeople','ddd',1,'2025-03-25 22:36:58','ddd','datetime','',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2025-03-25 22:36:58','1',NULL,1,NULL,NULL,NULL,NULL,NULL), (2312,'user','eee',1,'2025-03-31 10:55:40','eee','stars','5',100,1,0,'a:1:{s:7:\"options\";a:1:{s:0:\"\";N;}}',0,0,NULL,'1',0,0,NULL,NULL,NULL,12,12,'2025-03-31 07:55:40','1',NULL,1,NULL,NULL,NULL,NULL,NULL), @@ -74396,8 +74274,6 @@ CREATE TABLE `llx_oauth_token` ( LOCK TABLES `llx_oauth_token` WRITE; /*!40000 ALTER TABLE `llx_oauth_token` DISABLE KEYS */; -INSERT INTO `llx_oauth_token` VALUES -(30,'dolibarr_rest_api',NULL,NULL,12,NULL,0,'dolcrypt:AES-256-CTR:06af30a66d41f991:q217RYkhLQ==',NULL,NULL,NULL,'2026-01-11 18:46:28','2026-01-11 17:46:28',NULL,NULL,0,0,0); /*!40000 ALTER TABLE `llx_oauth_token` ENABLE KEYS */; UNLOCK TABLES; diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php index 09388f48b49..01576c16946 100644 --- a/htdocs/cron/list.php +++ b/htdocs/cron/list.php @@ -826,7 +826,7 @@ if ($num > 0) { // Output of last run print ''; if (!empty($obj->lastoutput)) { - print '
'; + print '
'; print dol_trunc(dolGetFirstLineOfText($obj->lastoutput, 2), 100); print '
'; }