From 011eb736b8240731a8c4cf68eaedfaf18ca889c2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 28 Feb 2026 18:47:22 +0100 Subject: [PATCH 1/5] Debug v23 --- htdocs/partnership/partnership_card.php | 11 +++++------ htdocs/partnership/partnership_list.php | 24 +++++++++++------------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/htdocs/partnership/partnership_card.php b/htdocs/partnership/partnership_card.php index 120d3ba02e1..051c020fe2d 100644 --- a/htdocs/partnership/partnership_card.php +++ b/htdocs/partnership/partnership_card.php @@ -26,12 +26,6 @@ // Load Dolibarr environment require '../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; -require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; -require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; -require_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php'; -require_once DOL_DOCUMENT_ROOT.'/partnership/lib/partnership.lib.php'; - /** * @var Conf $conf * @var DoliDB $db @@ -40,6 +34,11 @@ require_once DOL_DOCUMENT_ROOT.'/partnership/lib/partnership.lib.php'; * @var Translate $langs * @var User $user */ +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; +require_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php'; +require_once DOL_DOCUMENT_ROOT.'/partnership/lib/partnership.lib.php'; // Load translation files required by the page $langs->loadLangs(array("partnership", "other")); diff --git a/htdocs/partnership/partnership_list.php b/htdocs/partnership/partnership_list.php index d44de9a9463..9ab1027b367 100644 --- a/htdocs/partnership/partnership_list.php +++ b/htdocs/partnership/partnership_list.php @@ -26,7 +26,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.'/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'; @@ -36,14 +42,6 @@ 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.'/partnership/class/partnership.class.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("partnership", "members", "other")); @@ -629,6 +627,9 @@ if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { if ($limit > 0 && $limit != $conf->liste_limit) { $param .= '&limit='.((int) $limit); } +if ($optioncss != '') { + $param .= '&optioncss='.urlencode($optioncss); +} if ($socid) { $param .= '&socid='.urlencode((string) ($socid)); } @@ -650,9 +651,6 @@ foreach ($search as $key => $val) { $param .= '&search_'.$key.'='.urlencode($search[$key]); } } -if ($optioncss != '') { - $param .= '&optioncss='.urlencode($optioncss); -} if ($search_filter && $search_filter != '-1') { $param .= "&search_filter=".urlencode($search_filter); } @@ -704,7 +702,7 @@ $newcardbutton = ''; $newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); $newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); $newcardbutton .= dolGetButtonTitleSeparator(); -$newcardbutton .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', dol_buildpath('/partnership/partnership_card.php', 1).'?action=create&backtopage='.urlencode($_SERVER['PHP_SELF'].($socid > 0 ? '?socid='.$socid : '')), '', $permissiontoadd); +$newcardbutton .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', dol_buildpath('/partnership/partnership_card.php', 1).'?action=create'.($socid > 0 ? '&fk_soc='.$socid : '').'&backtopage='.urlencode($_SERVER['PHP_SELF'].($socid > 0 ? '?socid='.$socid : '')), '', $permissiontoadd); print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'object_'.$object->picto, 0, $newcardbutton, '', $limit, 0, 0, 1); From ec8898ac50f8588aa7b86fccd118a75fc2c11f03 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 28 Feb 2026 19:14:00 +0100 Subject: [PATCH 2/5] Add more param --- htdocs/public/members/new.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index b9b485650df..83d25cdfed8 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -992,7 +992,7 @@ if (getDolGlobalString('MEMBER_SKIP_TABLE') || getDolGlobalString('MEMBER_NEWFOR // Add hook to complete the form - $parameters = array('country_id' => $country_id); + $parameters = array('country_id' => $country_id, 'mode' => 'new'); $reshook = $hookmanager->executeHooks('membershipNewSubscriptionPublicForm', $parameters, $object, $action); if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); From 53ecd7de154bc6d539ed39619513388d43a18092 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 1 Mar 2026 14:00:16 +0100 Subject: [PATCH 3/5] Debug v23 --- htdocs/core/js/lib_head.js.php | 1 + htdocs/langs/en_US/errors.lang | 1 + htdocs/public/members/new.php | 66 ++++++----- htdocs/public/payment/newpayment.php | 168 +++++++++++++++++++++++++-- htdocs/theme/eldy/global.inc.php | 9 ++ htdocs/theme/md/style.css.php | 9 ++ 6 files changed, 215 insertions(+), 39 deletions(-) diff --git a/htdocs/core/js/lib_head.js.php b/htdocs/core/js/lib_head.js.php index 4adbf0ee85c..d5d313e2d6e 100644 --- a/htdocs/core/js/lib_head.js.php +++ b/htdocs/core/js/lib_head.js.php @@ -1464,6 +1464,7 @@ function pricejs(amount, mode = 'MT', currency_code = '', force_locale = '') { */ function price2numjs(amount) { if (amount == '') return ''; + if (amount == null) return ''; /* null or undefined */ var dec = ; var thousand = ; diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index 11e4a074b24..1e2be0944dd 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -376,6 +376,7 @@ ErrorBadParameterWhenCallingCreateOfBlockedLog=Bad parameter when calling create ErrorMaxDecimalsShownTooLowComparedToUnitOrTotal=Value for 'Max. decimals for prices shown on screen' (%s) must be equal to or greater than both 'Max. decimals for unit prices' (%s) and 'Max. decimals for total prices' (%s). This is required to prevent rounding inconsistencies on documents. ErrorOnlyDraftStatusCanBeDeletedInMassAction=Only elements in draft status can be deleted in mass action ErrorLDAPFunctionsAreDisabledOnThisPHP=LDAP functions are disabled on this PHP. +ErrorFailedToGetTokenFromClientIdAndSecret=Failed to get a %s token from client ID and client secret # Warnings WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup. diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index 83d25cdfed8..f368b7f875f 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -299,8 +299,24 @@ if (empty($reshook) && $action == 'add') { // Test on permission not required he $db->begin(); + $morphy = GETPOST("morphy", 'alphanohtml'); + $lastname = GETPOST("lastname", 'alphanohtml'); + $firstname = GETPOST("firstname", 'alphanohtml'); + $societe = GETPOST("societe", 'alphanohtml'); + $email = preg_replace('/\s+/', '', GETPOST("member_email", 'aZ09arobase')); + $country_id = getDolGlobalInt("MEMBER_NEWFORM_FORCECOUNTRYCODE", GETPOSTINT('country_id')); + + if (!in_array($morphy, array('mor', 'phy'))) { + $error++; + $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv('MemberNature'))."
\n"; + } + // test if login already exists if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { + if (!GETPOST('member_email')) { + $error++; + $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("EMail"))."
\n"; + } if (!GETPOST('login')) { $error++; $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Login"))."
\n"; @@ -320,51 +336,36 @@ if (empty($reshook) && $action == 'add') { // Test on permission not required he $langs->load("errors"); $errmsg .= $langs->trans("ErrorPasswordsMustMatch")."
\n"; } - if (!GETPOST('member_email')) { - $error++; - $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("EMail"))."
\n"; - } } if (GETPOST('typeid') <= 0) { $error++; $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type"))."
\n"; } - if (!in_array(GETPOST('morphy'), array('mor', 'phy'))) { - $error++; - $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv('Nature'))."
\n"; - } - $lastname = GETPOST("lastname", 'alphanohtml'); - $firstname = GETPOST("firstname", 'alphanohtml'); - $societe = GETPOST("societe", 'alphanohtml'); - $morphy = GETPOST("morphy", 'alphanohtml'); - $email = preg_replace('/\s+/', '', GETPOST("member_email", 'aZ09arobase')); - $country_id = getDolGlobalInt("MEMBER_NEWFORM_FORCECOUNTRYCODE", GETPOSTINT('country_id')); - - if ($morphy != 'mor' && empty($lastname)) { + if ($morphy && $morphy != 'mor' && empty($lastname)) { $error++; $langs->load("errors"); - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Lastname")), null, 'errors'); + $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentities("Lastname")); } - if ($morphy != 'mor' && (!isset($firstname) || $firstname == '')) { + if ($morphy && $morphy != 'mor' && (!isset($firstname) || $firstname == '')) { $error++; $langs->load("errors"); - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Firstname")), null, 'errors'); + $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentities("Firstname")); } if ($morphy == 'mor' && empty($societe)) { $error++; $langs->load("errors"); - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Company")), null, 'errors'); + $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentities("Company")); } if (empty($country_id)) { $error++; $langs->load("errors"); - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Country")), null, 'errors'); + $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentities("Country")); } - if (getDolGlobalString('ADHERENT_MAIL_REQUIRED') && !isValidEmail($email)) { + if (getDolGlobalString('ADHERENT_MAIL_REQUIRED') && $email && !isValidEmail($email)) { $error++; $langs->load("errors"); - setEventMessages($langs->trans("ErrorBadEMail", $email), null, 'errors'); + $errmsg .= $langs->trans("ErrorBadEMail", $email); } $birthday = dol_mktime(GETPOSTINT("birthhour"), GETPOSTINT("birthmin"), GETPOSTINT("birthsec"), GETPOSTINT("birthmonth"), GETPOSTINT("birthday"), GETPOSTINT("birthyear")); if (GETPOST("birthmonth") && empty($birthday)) { @@ -840,7 +841,7 @@ if (getDolGlobalString('MEMBER_SKIP_TABLE') || getDolGlobalString('MEMBER_NEWFOR } // Company // TODO : optional hide - print ''.$langs->trans("Company").''; + print ''.$langs->trans("Company").''; print img_picto('', 'company', 'class="pictofixedwidth paddingright"'); print ''."\n"; @@ -1003,15 +1004,15 @@ if (getDolGlobalString('MEMBER_SKIP_TABLE') || getDolGlobalString('MEMBER_NEWFOR // Do not set a default amount MEMBER_NEWFORM_AMOUNT if you use MEMBER_NEWFORM_DOLIBARRTURNOVER $s = $langs->trans("AreYouAPreferredPartner", '{s1}'); $s = str_replace('{s1}', 'Peferred Partner', $s); - print ''; + print ''; print ''; print ''; - print ''.$langs->trans("TurnoverOrBudget").''; + print ''.$langs->trans("TurnoverOrBudget").''; $country_code = dol_getIdFromCode($db, $country_id, 'c_country', 'rowid', 'code'); if ($country_code === 'FR' && $checkednature === 'mor' && GETPOST('pp')) { - print ''; + print ''; } else { $arraybudget = array('50' => '<= 100 000', '100' => '<= 200 000', '200' => '<= 500 000', '300' => '<= 1 500 000', '600' => '<= 3 000 000', '1000' => '<= 5 000 000', '2000' => '5 000 000+'); print $form->selectarray('budget', $arraybudget, GETPOSTINT('budget'), 1, 0, '', 0, 0, 0, ''); @@ -1049,14 +1050,16 @@ if (getDolGlobalString('MEMBER_SKIP_TABLE') || getDolGlobalString('MEMBER_NEWFOR jQuery("#newmember").submit(); }); jQuery("#budget").change(function() { - console.log("Turnover amount has been modified"); + console.log("Turnover amount has been modified on change"); newamount = initturnover(); jQuery("#amount").val(newamount); + jQuery("#amounthidden").val(newamount); }); jQuery("#budget").keyup(function() { - console.log("Turnover amount has been modified"); + console.log("Turnover amount has been modified on keyup"); newamount = initturnover(); jQuery("#amount").val(newamount); + jQuery("#amounthidden").val(newamount); }); function initturnover() { @@ -1065,7 +1068,7 @@ if (getDolGlobalString('MEMBER_SKIP_TABLE') || getDolGlobalString('MEMBER_NEWFOR morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\'; selectcountry_id = jQuery("#selectcountry_id").val(); pp = jQuery("#pp").is(\':checked\') ? true : false; - console.log("Set fields according to nature other properties"); + console.log("Set fields according to nature and other properties"); console.log("morphy="+morphy); console.log("selectcountry_id="+selectcountry_id); console.log("pp="+pp); @@ -1089,7 +1092,7 @@ if (getDolGlobalString('MEMBER_SKIP_TABLE') || getDolGlobalString('MEMBER_NEWFOR if (selectcountry_id == 1) { if (pp) { console.log("value selected in input text field is "+jQuery("#budget").val()); - newamount = Math.max(Math.round(jQuery("#budget").val() * 0.005), 50); + newamount = Math.max(Math.round(price2numjs(jQuery("#budget").val()) * 0.005), 50); console.log("newamount = "+newamount); } else { console.log("not a pp"); @@ -1108,6 +1111,7 @@ if (getDolGlobalString('MEMBER_SKIP_TABLE') || getDolGlobalString('MEMBER_NEWFOR jQuery("#budget").val(\'\'); newamount = \'\'; } + console.log("newamount="+newamount); } } diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 3456b0604c1..cdfc095be05 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -999,6 +999,7 @@ print ''; //print ''; print ''; print ''; +print ''; print "\n"; @@ -1805,19 +1806,170 @@ if ($source == 'member' || $source == 'membersubscription') { } } + + // Add hook to complete the form + $parameters = array('mode' => 'renewal'); + $reshook = $hookmanager->executeHooks('membershipNewSubscriptionPublicForm', $parameters, $object, $action); + if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + $error++; + } + + // TODO Move this into previous hook + if (getDolGlobalString('MEMBER_NEWFORM_DOLIBARRTURNOVER')) { + $country_id = 0; + if ($member->thirdparty instanceOf Societe) { + $country_id = $member->thirdparty->country_id; + } + $checkednature = $member->morphy; + print ''; + + // Is it a Preferred Partner + $pp = 0; + include_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php'; + $partnership = new Partnership($db); + $result = $partnership->fetch(0, null, null, $member->thirdparty->id); + if ($result > 0) { + $pp = 1; + } + + // Do not set a default amount MEMBER_NEWFORM_AMOUNT if you use MEMBER_NEWFORM_DOLIBARRTURNOVER + $s = $langs->trans("AreYouAPreferredPartner", '{s1}'); + $s = str_replace('{s1}', 'Peferred Partner', $s); + print ''; + print ''; + print ''; + + print ''.$langs->trans("TurnoverOrBudget").''; + + $country_code = dol_getIdFromCode($db, $country_id, 'c_country', 'rowid', 'code'); + if ($country_code === 'FR' && $checkednature === 'mor' && (GETPOST('reload') ? GETPOST('pp') : $pp)) { + print ''; + } else { + $arraybudget = array('50' => '<= 100 000', '100' => '<= 200 000', '200' => '<= 500 000', '300' => '<= 1 500 000', '600' => '<= 3 000 000', '1000' => '<= 5 000 000', '2000' => '5 000 000+'); + print $form->selectarray('budget', $arraybudget, GETPOSTINT('budget'), 1, 0, 0, ($checkednature === 'mor' ? 'required' :''), 0, 0, 0, ''); + } + print ' € or $'; + + print ''; + print ''."\n"; + } + + // Set amount for the subscription from the the type and options: - // - First check the amount of the member type if not previous payment. + // - First check the amount of the member type if there is no previous payment. $amount = ($member->last_subscription_amount ? $member->last_subscription_amount : (empty($amountbytype[$typeid]) ? 0 : $amountbytype[$typeid])); // - If not found, take the default amount if (empty($amount) && getDolGlobalString('MEMBER_NEWFORM_AMOUNT')) { $amount = getDolGlobalString('MEMBER_NEWFORM_AMOUNT'); } + // - If an amount was posted from the form (for example from page with types of membership) - if ($caneditamount && GETPOSTISSET('amount') && GETPOSTFLOAT('amount', 'MT') > 0) { + if ($caneditamount && !GETPOST('reload') && GETPOSTISSET('amount') && GETPOSTFLOAT('amount', 'MT') > 0) { $amount = GETPOSTFLOAT('amount', 'MT'); } // - If a new amount was posted from the form - if ($caneditamount && GETPOSTISSET('newamount') && GETPOSTFLOAT('newamount', 'MT') > 0) { + if ($caneditamount && !GETPOST('reload') && GETPOSTISSET('newamount') && GETPOSTFLOAT('newamount', 'MT') > 0) { $amount = GETPOSTFLOAT('newamount', 'MT'); } // - If a min is set or an amount from the posted form, we take them into account @@ -1827,18 +1979,18 @@ if ($source == 'member' || $source == 'membersubscription') { print ''.$langs->trans("Amount"); // This place no longer allows amount edition if (getDolGlobalString('MEMBER_EXT_URL_SUBSCRIPTION_INFO')) { - print ' - '.$langs->trans("SeeHere").''; + print ' - '.img_picto('', 'url', 'class="pictofixedwidth"').$langs->trans("SeeHere").''; } print ''; $caneditamount = $adht->caneditamount; $minimumamount = !getDolGlobalString('MEMBER_MIN_AMOUNT') ? $adht->amount : max(getDolGlobalString('MEMBER_MIN_AMOUNT'), $adht->amount, $amount); - if ($caneditamount && $action != 'dopayment') { + if ($caneditamount && ($action != 'dopayment' || GETPOST('reload'))) { if (GETPOSTISSET('newamount')) { - print ''; + print ''; } else { - print ''; + print ''; } } else { print ''.price($amount, 1, $langs, 1, -1, -1, $currency).''; // Price with currency @@ -2578,7 +2730,7 @@ if (preg_match('/^dopayment/', $action)) { // If we choose/clicked on the paym // JS Code for Stripe if (empty($stripearrayofkeys['publishable_key'])) { $langs->load("errors"); - print info_admin($langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Stripe")), 0, 0, 'error'); + print info_admin($langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Stripe")), 0, 0, 'error marginleftonly marginrightonly'); } else { print ''; print ''."\n"; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index c916569a3ac..3db06aa8357 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -5773,6 +5773,15 @@ div.boximport { .product_line_stock_too_low { color: var(--productlinestocktoolow); } .fieldrequired { font-weight: bold; color: var(--fieldrequiredcolor) !important; } +#tablesubscribe .fieldrequired { + font-weight: inherit !important; + color: inherit !important; +} +#tablesubscribe .fieldrequired:after { + content: " *"; + color: #660000; + font-weight: bold; +} td.widthpictotitle, .table-fiche-title img.widthpictotitle { width: 34px; text-align: ; } span.widthpictotitle { font-size: 1.5em; } diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 448d50de08c..e3b20f389c4 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -5706,6 +5706,15 @@ div.boximport { .product_line_stock_too_low { color: #884400; } .fieldrequired { font-weight: bold; color: #000055; } +#tablesubscribe .fieldrequired { + font-weight: inherit !important; + color: inherit !important; +} +#tablesubscribe .fieldrequired:after { + content: " *"; + color: #660000; + font-weight: bold; +} td.widthpictotitle, .table-fiche-title img.widthpictotitle { width: 32px; font-size: 1.4em; text-align: ; } table.titlemodulehelp tr td img.widthpictotitle { width: 80px; } From fc134357307007e97caf28c965223e96b088e686 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 1 Mar 2026 14:07:41 +0100 Subject: [PATCH 4/5] Debug v23 --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 2 +- htdocs/core/tpl/admin_extrafields_edit.tpl.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index eedc79f0ab1..190d392ba22 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -267,7 +267,7 @@ print $formadmin->selectTypeOfFields('type', GETPOST('type', 'alpha')); textwithpicto($langs->trans("EmptyOnClone"), $langs->trans("EmptyOnCloneDesc")); ?>> textwithpicto($langs->trans("Visibility"), $langs->trans("VisibleDesc").'

'.$langs->trans("ItCanBeAnExpression")); ?> - + textwithpicto($langs->trans("DisplayOnPdf"), $langs->trans("DisplayOnPdfDesc")); ?> diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index e30b3713eb2..1877a3c4d6f 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -344,7 +344,7 @@ if (in_array($type, array_keys($typewecanchangeinto))) { textwithpicto($langs->trans("Visibility"), $langs->trans("VisibleDesc").'

'.$langs->trans("ItCanBeAnExpression")); ?> - + textwithpicto($langs->trans("DisplayOnPdf"), $langs->trans("DisplayOnPdfDesc")); ?> From 5d1c39440d831c91ee005fe64a289f81b3966c41 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 1 Mar 2026 14:13:19 +0100 Subject: [PATCH 5/5] Fix % --- htdocs/langs/en_US/blockedlog.lang | 2 +- htdocs/langs/hu_HU/blockedlog.lang | 2 +- htdocs/langs/ja_JP/blockedlog.lang | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/langs/en_US/blockedlog.lang b/htdocs/langs/en_US/blockedlog.lang index c6199aacee7..3acb0891805 100644 --- a/htdocs/langs/en_US/blockedlog.lang +++ b/htdocs/langs/en_US/blockedlog.lang @@ -106,7 +106,7 @@ IfIntegrityAuthenticityIsOkYouCanGetdetailByOpeningTheFile=If integrity and auth IfIntegrityAuthenticityIsOkYouCanGetdetailByOpeningTheFile2=So you can use any filter of your choice and see detail of references, amounts, cumulative and/or pertetual amounts of each events. DetectionOfSystemRestoration=Detection of database system restoration or deletion of the last line FeatureOnlyWhenArchiveAnalyzedFrom=This feature is for the moment available only when archive is controled from %s -DiscountInPercent=Discount (in %) +DiscountInPercent=Discount (in %%) ## logTypes logBILL_DELETE=Customer invoice logically deleted diff --git a/htdocs/langs/hu_HU/blockedlog.lang b/htdocs/langs/hu_HU/blockedlog.lang index 35380d226df..d24bbd463e3 100644 --- a/htdocs/langs/hu_HU/blockedlog.lang +++ b/htdocs/langs/hu_HU/blockedlog.lang @@ -106,7 +106,7 @@ IfIntegrityAuthenticityIsOkYouCanGetdetailByOpeningTheFile=If integrity and auth IfIntegrityAuthenticityIsOkYouCanGetdetailByOpeningTheFile2=So you can use any filter of your choice and see detail of references, amounts, cumulative and/or pertetual amounts of each events. DetectionOfSystemRestoration=Detection of database system restoration or deletion of the last line FeatureOnlyWhenArchiveAnalyzedFrom=This feature is for the moment available only when archive is controled from %s -DiscountInPercent=Discount (in %) +DiscountInPercent=Discount (in %%) ## logTypes logBILL_DELETE=Az ügyfél számla logikailag törölve diff --git a/htdocs/langs/ja_JP/blockedlog.lang b/htdocs/langs/ja_JP/blockedlog.lang index 57e5014546c..77b53b79fbd 100644 --- a/htdocs/langs/ja_JP/blockedlog.lang +++ b/htdocs/langs/ja_JP/blockedlog.lang @@ -106,7 +106,7 @@ IfIntegrityAuthenticityIsOkYouCanGetdetailByOpeningTheFile=ファイル の整 IfIntegrityAuthenticityIsOkYouCanGetdetailByOpeningTheFile2=したがって、任意のフィルターを使用して、各イベントの参照、金額、累積金額、および/または永続金額の詳細を表示できます。 DetectionOfSystemRestoration=データベースシステムの復元または最終行の削除の検出 FeatureOnlyWhenArchiveAnalyzedFrom=この機能は現時点では、アーカイブが %s から制御されている場合にのみ利用可能です。 -DiscountInPercent=割引率(%) +DiscountInPercent=割引率(%s) ## logTypes logBILL_DELETE=顧客請求書は論理削除済