diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index db0569598b8..dba0486ab40 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -9,7 +9,7 @@ * Copyright (C) 2022 Lionel Vessiller * Copyright (C) 2013-2017 Olivier Geffroy * Copyright (C) 2017 Elarifr. Ari Elbaz - * Copyright (C) 2017-2024 Frédéric France + * Copyright (C) 2017-2026 Frédéric France * Copyright (C) 2017 André Schild * Copyright (C) 2020 Guillaume Alexandre * Copyright (C) 2022 Joachim Kueter @@ -2242,7 +2242,7 @@ class AccountancyExport foreach ($objectLines as $line) { // TYPE C if ($last_codeinvoice != $line->doc_ref) { - //recherche societe en fonction de son code client + //search company by customer code $sql = "SELECT code_client, fk_forme_juridique, nom, address, zip, town, fk_pays, phone, siret FROM ".MAIN_DB_PREFIX."societe"; $sql .= " WHERE code_client = '".$this->db->escape($line->thirdparty_code)."'"; $resql = $this->db->query($sql); @@ -2662,22 +2662,22 @@ class AccountancyExport } else { $tab[] = substr(length_accountg($line->numero_compte), 0, 15); } - //Libellé Auto + //Auto label $tab[] = ""; //print '"'.dol_trunc(str_replace('"', '', $line->label_operation),40,'right','UTF-8',1).'"'; - //Libellé manual + //Manual label $tab[] = dol_trunc(str_replace('"', '', $invoice_ref . (!empty($company_name) ? ' - ' : '') . $company_name), 40, 'right', 'UTF-8', 1); - //Numéro de pièce + //Document number $tab[] = dol_trunc(str_replace('"', '', (string) $line->piece_num), 10, 'right', 'UTF-8', 1); - //Devise + //Currency $tab[] = 'EUR'; //Amount $tab[] = price2num(abs($line->debit - $line->credit)); - //Sens + //Direction $tab[] = $line->sens; - //Code lettrage + //Matching code $tab[] = ""; - //Date Echéance + //Due date $tab[] = $date_echeance; $output = implode($separator, $tab).$end_line; @@ -2768,10 +2768,10 @@ class AccountancyExport // Convert the UTF-8 string in latin9 $tab[] = mb_convert_encoding(str_replace(' - Compte auxiliaire', '', $line->label_operation), "Windows-1252", 'UTF-8'); - //Calcul de la longueur des numéros de comptes + //Calculate account number length $taille_numero = strlen(length_accountg($line->numero_compte)); - //Création du numéro de client et fournisseur générique + //Build generic customer and supplier account number $numero_cpt_client = '411'; $numero_cpt_fourn = '401'; for ($i = 1; $i <= ($taille_numero - 3); $i++) { @@ -2779,7 +2779,7 @@ class AccountancyExport $numero_cpt_fourn .= '0'; } - //Création des comptes auxiliaire des clients et fournisseur + //Build auxiliary accounts for customers and suppliers if (length_accountg($line->numero_compte) == $numero_cpt_client || length_accountg($line->numero_compte) == $numero_cpt_fourn) { $tab[] = rtrim(length_accounta($line->subledger_account), "0"); } else { diff --git a/htdocs/admin/mails_ingoing.php b/htdocs/admin/mails_ingoing.php index 4011022b448..7e06faed3e2 100644 --- a/htdocs/admin/mails_ingoing.php +++ b/htdocs/admin/mails_ingoing.php @@ -3,7 +3,7 @@ * Copyright (C) 2009-2012 Regis Houssin * Copyright (C) 2013 Juanjo Menent * Copyright (C) 2016 Jonathan TISSEAU - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -74,7 +74,7 @@ if (preg_match('/^mac/i', PHP_OS)) { } -//$wikihelp = 'EN:Setup_EMails|FR:Paramétrage_EMails|ES:Configuración_EMails'; +//$wikihelp = 'EN:Setup_EMails|FR:Parametrage_EMails|ES:Configuracion_EMails'; $wikihelp = ''; llxHeader('', $langs->trans("Setup"), $wikihelp, '', 0, 0, '', '', '', 'mod-admin page-mails_ingoing'); diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index abad013a078..839dc44755c 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -8,7 +8,7 @@ * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2018 Nicolas ZABOURI - * Copyright (C) 2021-2025 Frédéric France + * Copyright (C) 2021-2026 Frédéric France * Copyright (C) 2024 MDW * Copyright (C) 2026 Charlene Benke * @@ -1663,7 +1663,7 @@ if ($mode == 'deploy') { }); }); '."\n"; - // MAX_FILE_SIZE doit précéder le champ input de type file + // MAX_FILE_SIZE must come before the file input field print ''; } diff --git a/htdocs/ai/ajax/generate_content.php b/htdocs/ai/ajax/generate_content.php index b3fcaad82c1..ba3efd3c5d3 100644 --- a/htdocs/ai/ajax/generate_content.php +++ b/htdocs/ai/ajax/generate_content.php @@ -4,7 +4,7 @@ * Copyright (C) 2012 J. Fernando Lagrange * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2023 Eric Seigne - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -118,7 +118,7 @@ if (empty($instructions)) { print dolPrintHTML($generatedContent); // Note that common HTML tags are NOT escaped (but a sanitization is done) } else { // We must not use dolPrintText because dolPrintText format data including accent in htmlentities for a HTML output. We need a non formatted output. - //print dol_string_onlythesehtmltags('"Ça va" est une expression française et ceci une balise html', 1, 1, 1); + //print dol_string_onlythesehtmltags('"How are you" is a French expression and this is an HTML tag', 1, 1, 1); print dol_string_onlythesehtmltags($generatedContent, 1, 1, 1); //print dol_string_nohtmltag($generatedContent); } @@ -134,7 +134,7 @@ if (empty($instructions)) { print dolPrintHTML($generatedContent); } else { // We must not use dolPrintText because dolPrintText format data including accent in htmlentities for a HTML output. We need a non formatted output. - //print dol_string_onlythesehtmltags('"Ça va" est une expression française et ceci une balise html', 1, 1, 1); + //print dol_string_onlythesehtmltags('"How are you" is a French expression and this is an HTML tag', 1, 1, 1); print dol_string_onlythesehtmltags($generatedContent, 1, 1, 1); } } diff --git a/htdocs/ai/tools/products.class.php b/htdocs/ai/tools/products.class.php index a1a1d35693f..baeab9423f1 100644 --- a/htdocs/ai/tools/products.class.php +++ b/htdocs/ai/tools/products.class.php @@ -1,6 +1,7 @@ * Copyright (C) 2026 Nick Fragoulis + * Copyright (C) 2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -659,7 +660,7 @@ class ToolProducts extends McpTool * * @param float $virtual_stock Current virtual stock (Physical + Incoming - Outgoing). * @param float $min_stock_alert Minimum stock alert level (Seuil alerte). - * @param float $desired_stock Desired stock level (Stock désiré). + * @param float $desired_stock Desired stock level. * @param float $dailyBurnRate Estimated daily consumption rate. * * @return array{action: string, urgency: string, suggested_qty: int, reason: string} diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 78523623d52..aff05be426c 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -6,7 +6,7 @@ * Copyright (C) 2012 Juanjo Menent * Copyright (C) 2013 Christophe Battarel * Copyright (C) 2013 Cédric Salvado - * Copyright (C) 2015-2025 Frédéric France + * Copyright (C) 2015-2026 Frédéric France * Copyright (C) 2015 Marcos García * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2016-2023 Ferran Marcet @@ -3013,7 +3013,7 @@ while ($i < $imaxinloop) { print ''; if (!empty($shippableInfos['warning'])) { - // On ne remonte plus le détail textwarning, mais on garde l’icône d’avertissement + // We no longer show the textwarning detail, but we keep the warning icon print $form->textwithtooltip('', $langs->trans("NotEnoughForAllOrders"), 2, 1, img_picto('', 'error', '', 0, 0, 0, '', '2'), '', 2); } } diff --git a/htdocs/commande/list_det.php b/htdocs/commande/list_det.php index 19ef329c270..eba54d979f0 100644 --- a/htdocs/commande/list_det.php +++ b/htdocs/commande/list_det.php @@ -190,7 +190,7 @@ if (empty($user->socid)) { $checkedtypetiers = 0; $arrayfields = array( - // Détail commande + // Order detail 'rowid' => array('label' => 'LineID', 'checked' => '-1', 'position' => 1, 'enabled' => '1'), 'c.ref' => array('label' => "RefOrder", 'checked' => '1', 'position' => 5), 'pr.ref' => array('label' => 'ProductRef', 'checked' => '1', 'position' => 6), @@ -754,7 +754,7 @@ if ($resql) { if ($search_id) { $param .= '&search_id='.urlencode($search_id); } - // Détail commande + // Order detail if ($search_refProduct) { $param .= '&search_refProduct='.urlencode($search_refProduct); } @@ -1511,7 +1511,7 @@ if ($resql) { $total_margin = 0; - // Détail commande + // Order detail $totalqty = 0; $oldref = null; diff --git a/htdocs/compta/bank/annuel.php b/htdocs/compta/bank/annuel.php index 7ef6fa346b5..e53472cf70c 100644 --- a/htdocs/compta/bank/annuel.php +++ b/htdocs/compta/bank/annuel.php @@ -288,7 +288,7 @@ if ($result < 0) { $error++; setEventMessages($langs->trans("ErrorFailedToCreateDir"), null, 'errors'); } else { - // Calcul de $min et $max + // Calculate $min and $max $sql = "SELECT MIN(b.datev) as min, MAX(b.datev) as max"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba"; @@ -311,7 +311,7 @@ if ($result < 0) { } // CRED PART - // Chargement du tableau des années + // Load the year array $tblyear = array(); '@phan-var-force array> $tblyear'; $tblyear[0] = array(); @@ -347,7 +347,7 @@ if ($result < 0) { dol_print_error($db); } } - // Chargement de labels et data_xxx pour tableau 4 Movements + // Load labels and data_xxx for the 4 Movements chart $labels = array(); $data_year_0 = array(); $data_year_1 = array(); @@ -396,7 +396,7 @@ if ($result < 0) { unset($tblyear[2]); // DEDBT PART - // Chargement du tableau des années + // Load the year array $tblyear[0] = array(); $tblyear[1] = array(); $tblyear[2] = array(); @@ -431,7 +431,7 @@ if ($result < 0) { } } - // Chargement de labels et data_xxx pour tableau 4 Movements + // Load labels and data_xxx for the 4 Movements chart $labels = array(); $data_year_0 = array(); $data_year_1 = array(); diff --git a/htdocs/compta/bank/graph.php b/htdocs/compta/bank/graph.php index 593decf0a8f..f0f8d881c26 100644 --- a/htdocs/compta/bank/graph.php +++ b/htdocs/compta/bank/graph.php @@ -112,7 +112,7 @@ if ($result < 0) { $error++; setEventMessages($langs->trans("ErrorFailedToCreateDir"), null, 'errors'); } else { - // Calcul $min and $max + // Calculate $min and $max $sql = "SELECT MIN(b.datev) as min, MAX(b.datev) as max"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba"; @@ -470,7 +470,7 @@ if ($result < 0) { dol_print_error($db); } - // Calcul de $solde avant le debut du graphe + // Calculate $solde before the start of the graph $solde = 0; // Loading labels and datas for dashboard 3 @@ -561,7 +561,7 @@ if ($result < 0) { // Graph input/output - Credit/Debit for the month if ($mode == 'standard') { - // Chargement du tableau $credits, $debits + // Load the $credits, $debits arrays $credits = array(); $debits = array(); @@ -682,7 +682,7 @@ if ($result < 0) { // Tableau 4b - Credit/Debit if ($mode == 'standard') { - // Chargement du tableau $credits, $debits + // Load the $credits, $debits arrays $credits = array(); $debits = array(); $sql = "SELECT date_format(b.datev,'%m')"; diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index 1fd629bb46a..9754031628e 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -6,7 +6,7 @@ * Copyright (C) 2017 Patrick Delcroix * Copyright (C) 2019 Nicolas ZABOURI * Copyright (C) 2022 Alexandre Spangaro - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2024-2026 MDW * * This program is free software; you can redistribute it and/or modify @@ -481,7 +481,7 @@ if (empty($numref)) { print ' '; print "\n"; - // Calcul du solde de depart du releve + // Calculate the opening balance of the statement $sql = "SELECT sum(b.amount) as amount"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= " WHERE b.num_releve < '".$db->escape($numref)."'"; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 20553b7987d..eb15a2c0a2e 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -1191,7 +1191,7 @@ if (empty($reshook)) { $discount->multicurrency_total_tva = -((float) $multicurrency_amount_tva[$tva_tx]); $discount->multicurrency_total_ttc = -((float) $multicurrency_amount_ttc[$tva_tx]); } else { - //We keep the absolute value to be consistent with the function used to create the discount in case of deposit in the “create” function of the Payment class + //We keep the absolute value to be consistent with the function used to create the discount in case of deposit in the "create" function of the Payment class $discount->amount_ht = abs((float) $amount_ht[$tva_tx]); $discount->amount_tva = abs((float) $amount_tva[$tva_tx]); $discount->amount_ttc = abs((float) $amount_ttc[$tva_tx]); @@ -3494,7 +3494,7 @@ if (empty($reshook)) { // Change each progression percent on each lines foreach ($object->lines as $line) { - // no traitement for special product + // no processing for special product if ($line->product_type == 9) { continue; } @@ -4788,7 +4788,7 @@ if ($action == 'create') { // TODO for compatibility if ($origin == 'contrat') { '@phan-var-force Contrat $objectsrc'; - // Calcul contrat->price (HT), contrat->total (TTC), contrat->tva + // Recalculate contrat->price (excl. VAT), contrat->total (incl. VAT), contrat->tva $objectsrc->update_price(1, 'auto', 1); } @@ -5578,7 +5578,7 @@ if ($action == 'create') { if (getDolGlobalString('INVOICE_POINTOFTAX_DATE')) { // Date invoice point of tax (Leistungsdatum / service date for tax). - // Only editable while the invoice is a draft — once validated, the + // Only editable while the invoice is a draft -- once validated, the // invoice is a legally issued document and date_pointoftax is the // basis for the VAT-return period assignment under accrual taxation // (Soll-Versteuerung). To correct, set the invoice back to draft or diff --git a/htdocs/compta/journal/purchasesjournal.php b/htdocs/compta/journal/purchasesjournal.php index 616073de7ee..7e972f33e0e 100644 --- a/htdocs/compta/journal/purchasesjournal.php +++ b/htdocs/compta/journal/purchasesjournal.php @@ -5,7 +5,7 @@ * Copyright (C) 2012 Regis Houssin * Copyright (C) 2011-2025 Alexandre spangaro * Copyright (C) 2013 Marcos García - * Copyright (C) 2018-2025 Frédéric France + * Copyright (C) 2018-2026 Frédéric France * Copyright (C) 2024-2026 MDW * * This program is free software; you can redistribute it and/or modify @@ -166,7 +166,7 @@ if ($result) { $i = 0; while ($i < $num) { $obj = $db->fetch_object($result); - // contrôles + // checks $compta_soc = (($obj->code_compta_fournisseur != "") ? $obj->code_compta_fournisseur : $cptfour); $compta_prod = $obj->accountancy_code_buy; if (empty($compta_prod)) { diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php index 034ea5b649c..d639939ecbd 100644 --- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php +++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php @@ -4,7 +4,7 @@ * Copyright (C) 2005-2009 Regis Houssin * Copyright (C) 2011-2016 Juanjo Menent * Copyright (C) 2015 Marcos García - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2024-2025 MDW * * This program is free software; you can redistribute it and/or modify @@ -680,9 +680,9 @@ class RemiseCheque extends CommonObject } /** - * Mets a jour le montant total + * Update the total amount * - * @return int 0 en cas de success + * @return int 0 on success */ public function updateAmount() { diff --git a/htdocs/compta/sociales/class/paymentsocialcontribution.class.php b/htdocs/compta/sociales/class/paymentsocialcontribution.class.php index ae49ad112c2..f58ad04e1e1 100644 --- a/htdocs/compta/sociales/class/paymentsocialcontribution.class.php +++ b/htdocs/compta/sociales/class/paymentsocialcontribution.class.php @@ -2,7 +2,7 @@ /* Copyright (C) 2002 Rodolphe Quiedeville * Copyright (C) 2004-2007 Laurent Destailleur * Copyright (C) 2022 Alexandre Spangaro - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2024-2026 MDW * * This program is free software; you can redistribute it and/or modify @@ -242,7 +242,7 @@ class PaymentSocialContribution extends CommonObject if ($resql) { $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."paiementcharge"); - // Insere tableau des montants / factures + // Insert amounts / invoices array foreach ($this->amounts as $key => $amount) { $contribid = $key; if (is_numeric($amount) && $amount != 0) { diff --git a/htdocs/contrat/ticket.php b/htdocs/contrat/ticket.php index 6a7f939c993..cd1e64a2973 100644 --- a/htdocs/contrat/ticket.php +++ b/htdocs/contrat/ticket.php @@ -4,7 +4,7 @@ * Copyright (C) 2012-2023 Charlene BENKE * Copyright (C) 2024 MDW * Copyright (C) 2024 Alexandre Spangaro - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -188,7 +188,7 @@ print ''.$langs->trans("DateEnd").''; print ''.$langs->trans("Progress").''; print ''.$langs->trans("Status").''; print ''; -// on récupère la totalité des tickets liés au contrat +// retrieve all tickets linked to the contract $allticketarray = $object->getTicketsArray(); if (is_array($allticketarray) && count($allticketarray) > 0) { foreach ($allticketarray as $key => $value) { diff --git a/htdocs/core/ajax/onlineSign.php b/htdocs/core/ajax/onlineSign.php index 8d897379d00..5b8c8d801b7 100644 --- a/htdocs/core/ajax/onlineSign.php +++ b/htdocs/core/ajax/onlineSign.php @@ -1,6 +1,6 @@ - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2024 William Mead * * This program is free software; you can redistribute it and/or modify @@ -724,7 +724,7 @@ if ($action == "importSignature") { } foreach ($dirmodels as $reldir) { $file = "pdf_" . $last_modelpdf . ".modules.php"; - // On vérifie l'emplacement du modele + // Check the template location $file = dol_buildpath($reldir . $modelpath . $file, 0); if (file_exists($file)) { $filefound = $file; diff --git a/htdocs/core/boxes/box_customers_outstanding_bill_reached.php b/htdocs/core/boxes/box_customers_outstanding_bill_reached.php index dfa98ff7770..5d31fdd79bf 100644 --- a/htdocs/core/boxes/box_customers_outstanding_bill_reached.php +++ b/htdocs/core/boxes/box_customers_outstanding_bill_reached.php @@ -2,7 +2,7 @@ /* Copyright (C) 2003-2007 Rodolphe Quiedeville * Copyright (C) 2004-2010 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin - * Copyright (C) 2015-2025 Frédéric France + * Copyright (C) 2015-2026 Frédéric France * Copyright (C) 2024-2026 MDW * * This program is free software; you can redistribute it and/or modify @@ -22,7 +22,7 @@ /** * \file htdocs/core/boxes/box_clients.php * \ingroup invoice - * \brief Module d'affichage pour les encours dépassés + * \brief Display module for exceeded outstanding amounts */ include_once DOL_DOCUMENT_ROOT.'/core/boxes/modules_boxes.php'; diff --git a/htdocs/core/boxes/box_factures_fourn_imp.php b/htdocs/core/boxes/box_factures_fourn_imp.php index ade2e5418c9..d6d71a3ee75 100644 --- a/htdocs/core/boxes/box_factures_fourn_imp.php +++ b/htdocs/core/boxes/box_factures_fourn_imp.php @@ -1,7 +1,7 @@ * Copyright (C) 2005-2009 Regis Houssin - * Copyright (C) 2015-2025 Frédéric France + * Copyright (C) 2015-2026 Frédéric France * Copyright (C) 2024-2026 MDW * * This program is free software; you can redistribute it and/or modify @@ -218,7 +218,7 @@ class box_factures_fourn_imp extends ModeleBoxes $objp = $this->db->fetch_object($result); $totalamount = $objp->total_ht; - // Add the sum à the bottom of the boxes + // Add the sum to the bottom of the boxes $this->info_box_contents[$line][] = array( 'tr' => 'class="liste_total_wrap"', 'td' => 'class="liste_total"', diff --git a/htdocs/core/boxes/box_factures_imp.php b/htdocs/core/boxes/box_factures_imp.php index 4cfcc580f97..733f14b5e08 100644 --- a/htdocs/core/boxes/box_factures_imp.php +++ b/htdocs/core/boxes/box_factures_imp.php @@ -2,7 +2,7 @@ /* Copyright (C) 2003-2007 Rodolphe Quiedeville * Copyright (C) 2004-2007 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin - * Copyright (C) 2015-2024 Frédéric France + * Copyright (C) 2015-2026 Frédéric France * Copyright (C) 2024-2026 MDW * Copyright (C) 2024 Alexandre Spangaro * @@ -233,7 +233,7 @@ class box_factures_imp extends ModeleBoxes $objp = $this->db->fetch_object($result); $totalamount = $objp->total_ht; - // Add the sum à the bottom of the boxes + // Add the sum to the bottom of the boxes $this->info_box_contents[$line][] = array( 'tr' => 'class="liste_total"', 'td' => 'class="liste_total"', diff --git a/htdocs/core/boxes/box_project.php b/htdocs/core/boxes/box_project.php index 54266b90837..659a9b3cdc6 100644 --- a/htdocs/core/boxes/box_project.php +++ b/htdocs/core/boxes/box_project.php @@ -1,7 +1,7 @@ * Copyright (C) 2014 Marcos García - * Copyright (C) 2015-2025 Frédéric France + * Copyright (C) 2015-2026 Frédéric France * Copyright (C) 2016 Juan José Menent * Copyright (C) 2020 Pierre Ardoin * Copyright (C) 2024-2026 MDW @@ -183,7 +183,7 @@ class box_project extends ModeleBoxes } if ($num > 0) { - // Add the sum à the bottom of the boxes + // Add the sum to the bottom of the boxes $this->info_box_contents[$i][] = array( 'tr' => 'class="liste_total_wrap"', 'td' => 'class="liste_total"', diff --git a/htdocs/core/boxes/box_project_opportunities.php b/htdocs/core/boxes/box_project_opportunities.php index 9d79c40c6e2..42dfda86a9c 100644 --- a/htdocs/core/boxes/box_project_opportunities.php +++ b/htdocs/core/boxes/box_project_opportunities.php @@ -1,7 +1,7 @@ * Copyright (C) 2014 Marcos García - * Copyright (C) 2015-2025 Frédéric France + * Copyright (C) 2015-2026 Frédéric France * Copyright (C) 2016 Juan José Menent * Copyright (C) 2020 Pierre Ardoin * Copyright (C) 2024-2026 MDW @@ -168,7 +168,7 @@ class box_project_opportunities extends ModeleBoxes } if ($num > 0) { - // Add the sum à the bottom of the boxes + // Add the sum to the bottom of the boxes $this->info_box_contents[$i][] = array( 'tr' => 'class="liste_total_wrap"', 'td' => 'class="liste_total"', diff --git a/htdocs/core/class/commoninvoice.class.php b/htdocs/core/class/commoninvoice.class.php index 9db97cf8df8..0f18329564e 100644 --- a/htdocs/core/class/commoninvoice.class.php +++ b/htdocs/core/class/commoninvoice.class.php @@ -2364,13 +2364,13 @@ abstract class CommonInvoice extends CommonObject $complementaryinfo = ''; /* Example: //S1/10/10201409/11/190512/20/1400.000-53/30/106017086/31/180508/32/7.7/40/2:10;0:30 - /10/ Numéro de facture – 10201409 - /11/ Date de facture – 12.05.2019 - /20/ Référence client – 1400.000-53 - /30/ Numéro IDE pour la TVA – CHE-106.017.086 TVA - /31/ Date de la prestation pour la comptabilisation de la TVA – 08.05.2018 - /32/ Taux de TVA sur le montant total de la facture – 7.7% - /40/ Conditions – 2% d’escompte à 10 jours, paiement net à 30 jours + /10/ Invoice number -- 10201409 + /11/ Invoice date -- 12.05.2019 + /20/ Customer reference -- 1400.000-53 + /30/ VAT IDE number -- CHE-106.017.086 TVA + /31/ Service date for VAT accounting -- 08.05.2018 + /32/ VAT rate on total invoice amount -- 7.7% + /40/ Terms -- 2% discount at 10 days, net payment at 30 days */ $datestring = dol_print_date($this->date, '%y%m%d'); //$pricewithtaxstring = price($this->total_ttc, 0, $tmplang, 0, -1, 2); @@ -2391,7 +2391,7 @@ abstract class CommonInvoice extends CommonObject $s .= "SPC\n"; $s .= "0200\n"; $s .= "1\n"; - // Info Seller ("Compte / Payable à") + // Info Seller ("Account / Payable to") if ($this->fk_account > 0) { // Bank BAN if country is LI or CH. TODO Add a test to check than IBAN start with CH or LI $bankaccount->fetch($this->fk_account); @@ -2420,7 +2420,7 @@ abstract class CommonInvoice extends CommonObject $s .= dol_trunc($mysoc->town, 35, 'right', 'UTF-8', 1)."\n"; $s .= dol_trunc($mysoc->country_code, 2, 'right', 'UTF-8', 1)."\n"; } - // Final seller (Ultimate seller) ("Créancier final" = "En faveur de") + // Final seller (Ultimate seller) ("Final creditor" = "In favour of") $s .= "\n"; $s .= "\n"; $s .= "\n"; diff --git a/htdocs/core/class/cunits.class.php b/htdocs/core/class/cunits.class.php index 8ed2ed630c3..a23a45ee47f 100644 --- a/htdocs/core/class/cunits.class.php +++ b/htdocs/core/class/cunits.class.php @@ -1,7 +1,7 @@ * Copyright (C) 2024-2025 MDW - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -464,13 +464,13 @@ class CUnits extends CommonDict $value = (float) price2num($value); $fk_unit = intval($fk_unit); - // Calcul en unité de base + // Calculate in base unit $scaleUnitPow = $this->scaleOfUnitPow($fk_unit); // convert to standard unit $value *= $scaleUnitPow; if ($fk_new_unit != 0) { - // Calcul en unité de base + // Calculate in base unit $scaleUnitPow = $this->scaleOfUnitPow($fk_new_unit); if (!empty($scaleUnitPow)) { // convert to new unit diff --git a/htdocs/core/class/discount.class.php b/htdocs/core/class/discount.class.php index 50ea7e69440..4c5109bc21d 100644 --- a/htdocs/core/class/discount.class.php +++ b/htdocs/core/class/discount.class.php @@ -2,7 +2,7 @@ /* Copyright (C) 2005 Rodolphe Quiedeville * Copyright (C) 2004-2018 Laurent Destailleur * Copyright (C) 2024 Alexandre Janniaux - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2024-2026 MDW * Copyright (C) 2024 Noé Cendrier * Copyright (C) 2026 Vincent de Grandpré @@ -1010,8 +1010,8 @@ class DiscountAbsolute extends CommonObject } if (empty($this->amount_ttc)) { - // Dans le cas où le montant ttc vient d'une remise scindée on le prend tel quel - // car de recalculer le montant ttc à partir du montant ht créé des erreurs de précision. + // If the total amount comes from a split discount, we take it as-is + // because recalculating the total amount from the net amount creates precision errors. $this->amount_ttc = price2num((float) $this->amount_ht + (float) $this->amount_tva + $this->total_localtax1 + $this->total_localtax2, 'MT'); $this->multicurrency_amount_ttc = price2num(((float) $this->amount_ht + (float) $this->amount_tva + $this->total_localtax1 + $this->total_localtax2) * (float) $this->multicurrency_tx, 'MT'); } diff --git a/htdocs/core/class/html.formmargin.class.php b/htdocs/core/class/html.formmargin.class.php index 39cd0595dc1..b4530c893de 100644 --- a/htdocs/core/class/html.formmargin.class.php +++ b/htdocs/core/class/html.formmargin.class.php @@ -1,7 +1,7 @@ * Copyright (C) 2024-2026 MDW - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -123,7 +123,7 @@ class FormMargin // calcul des marges if (isset($line->fk_remise_except) && isset($conf->global->MARGIN_METHODE_FOR_DISCOUNT)) { // remise - if (getDolGlobalString('MARGIN_METHODE_FOR_DISCOUNT') == '1') { // remise globale considérée comme produit + if (getDolGlobalString('MARGIN_METHODE_FOR_DISCOUNT') == '1') { // global discount treated as product $marginInfos['pa_products'] += $pa; $marginInfos['pv_products'] += $pv; $marginInfos['pa_total'] += $pa; @@ -135,7 +135,7 @@ class FormMargin //} //else $marginInfos['margin_on_products'] += $pv - $pa; - } elseif (getDolGlobalString('MARGIN_METHODE_FOR_DISCOUNT') == '2') { // remise globale considérée comme service + } elseif (getDolGlobalString('MARGIN_METHODE_FOR_DISCOUNT') == '2') { // global discount treated as service $marginInfos['pa_services'] += $pa; $marginInfos['pv_services'] += $pv; $marginInfos['pa_total'] += $pa; diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index 8a98500d082..1dd35471061 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -6,7 +6,7 @@ * Copyright (C) 2005-2009 Regis Houssin * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2024-2026 MDW - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -260,7 +260,7 @@ class DoliDBSqlite3 extends DoliDB $line .= "CREATE ".(preg_match('/UNIQUE/', $reg[2]) ? 'UNIQUE ' : '')."INDEX ".$idxname." ON ".$tablename." (".$fieldlist.")"; } if (preg_match('/ALTER\s+TABLE\s*(.*)\s*ADD\s+CONSTRAINT\s+(.*)\s*FOREIGN\s+KEY\s*\(([\w,\s]+)\)\s*REFERENCES\s+(\w+)\s*\(([\w,\s]+)\)/i', $line, $reg)) { - // Pour l'instant les contraintes ne sont pas créées + // Constraints are not yet created dol_syslog(get_class().'::query line emptied'); $line = 'SELECT 0;'; } @@ -347,7 +347,7 @@ class DoliDBSqlite3 extends DoliDB return false; } - //print "Resultat fonction connect: ".$this->db; + //print "Result of connect function: ".$this->db; return $this->db; } @@ -417,8 +417,8 @@ class DoliDBSqlite3 extends DoliDB // Convert MySQL syntax to SQLite syntax $reg = array(); if (preg_match('/ALTER\s+TABLE\s*(.*)\s*ADD\s+CONSTRAINT\s+(.*)\s*FOREIGN\s+KEY\s*\(([\w,\s]+)\)\s*REFERENCES\s+(\w+)\s*\(([\w,\s]+)\)/i', $query, $reg)) { - // Ajout d'une clef étrangère à la table - // procédure de replacement de la table pour ajouter la contrainte + // Adding a foreign key to the table + // table replacement procedure to add the constraint // Example : ALTER TABLE llx_adherent ADD CONSTRAINT adherent_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe (rowid) // -> CREATE TABLE ( ... ,CONSTRAINT adherent_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe (rowid)) $foreignFields = $reg[5]; @@ -619,8 +619,7 @@ class DoliDBSqlite3 extends DoliDB if (preg_match("/^SELECT/i", $this->queryString)) { return $this->num_rows($resultset); } - // mysql necessite un link de base pour cette fonction contrairement - // a pqsql qui prend un resultset + // mysql requires a base link for this function, unlike pgsql which takes a resultset return $this->db->changes(); } @@ -1350,8 +1349,8 @@ class DoliDBSqlite3 extends DoliDB $result = array(); static $pragmas; if (!isset($pragmas)) { - // Définition de la liste des pragmas utilisés qui ne retournent qu'une seule valeur - // indépendante de la base de données. + // Define the list of pragmas used that return only a single value + // independent of the database. // cf. http://www.sqlite.org/pragma.html $pragmas = array( 'application_id', 'auto_vacuum', 'automatic_index', 'busy_timeout', 'cache_size', @@ -1379,7 +1378,7 @@ class DoliDBSqlite3 extends DoliDB //dol_syslog(get_class($this)."::select_db getServerParametersValues $var=". print_r($obj, true), LOG_DEBUG); $result[$var] = $obj[0]; } else { - // TODO Récupérer le message + // TODO Retrieve the message $result[$var] = 'FAIL'; } } diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 10ae1439333..7c7bd8a48da 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1070,7 +1070,7 @@ function GETPOSTDATE($prefix, $hourTime = '', $gm = 'auto', $saverestore = '') * 'restricthtmlallowiframe' * 'restricthtmlallowlinkscript' * @param int $method Type of method (0 = get then post, 1 = only get, 2 = only post, 3 = post then get) - * @param ?int $filter Filter to apply when $check is set to 'custom'. (See http://php.net/manual/en/filter.filters.php for détails) + * @param ?int $filter Filter to apply when $check is set to 'custom'. (See http://php.net/manual/en/filter.filters.php for details) * @param mixed $options Options to pass to filter_var when $check is set to 'custom' * @param int $noreplace Force disable of replacement of __xxx__ strings. * @return string|array Value found (string or array), or '' if check fails @@ -1355,7 +1355,7 @@ function GETPOST($paramname, $check = 'alphanohtml', $method = 0, $filter = null * * @param string|mixed[]|null $out Value to check/clear. * @param string $check Type of check/sanitizing - * @param ?int $filter Filter to apply when $check is set to 'custom' (deprecated). (See http://php.net/manual/en/filter.filters.php for détails) + * @param ?int $filter Filter to apply when $check is set to 'custom' (deprecated). (See http://php.net/manual/en/filter.filters.php for details) * @param ?mixed $options Options to pass to filter_var when $check is set to 'custom' * @return string|array Value sanitized (string or array). It may be '' if format check fails. */ @@ -2416,7 +2416,7 @@ function dolPrintHTML($s, $allowiframe = 0, $moreallowedtags = array()) //$isAlreadyHTML = dol_textishtml($s); // dol_htmlentitiesbr encode all chars except "'" if string is not already HTML, but - // encode only special char like é but not &, <, >, ", ' if already HTML. + // encode only special char like accented chars but not &, <, >, ", ' if already HTML. $stringWithEntitesForSpecialChar = dol_htmlentitiesbr((string) $s); $allowedtags = 'common'; @@ -2530,7 +2530,7 @@ function dol_escape_htmltag($stringtoescape, $keepb = 0, $keepn = 0, $noescapeta } else { // We make a manipulation by calling the html_entity_decode() to convert content into NON HTML UTF8 string. // Because content can be or not already HTML. - // For example, this decode è into è so string is UTF8 (but numbers entities like ' is not decoded). + // For example, this decode è into its UTF-8 char so string is UTF8 (but numbers entities like ' is not decoded). // In a future, we should not need this $tmp = (string) $stringtoescape; @@ -4897,7 +4897,7 @@ function dol_print_phone($phone, $countrycode = '', $contactid = 0, $socid = 0, if (dol_strlen($phone) == 12) { //ex: +223 AB_CD_EF_GH $newphone = substr($newphone, 0, 4) . $separ . substr($newphone, 4, 2) . $separ . substr($newphone, 6, 2) . $separ . substr($newphone, 8, 2) . $separ . substr($newphone, 10, 2); } - } elseif (strtoupper($countrycode) == "TH") { //Thaïlande + } elseif (strtoupper($countrycode) == "TH") { //Thailand if (dol_strlen($phone) == 11) { //ex: +66_ABC_DE_FGH $newphone = substr($newphone, 0, 3) . $separ . substr($newphone, 3, 3) . $separ . substr($newphone, 6, 2) . $separ . substr($newphone, 8, 3); } elseif (dol_strlen($phone) == 12) { //ex: +66_A_BCD_EF_GHI @@ -4928,7 +4928,7 @@ function dol_print_phone($phone, $countrycode = '', $contactid = 0, $socid = 0, } elseif (dol_strlen($phone) == 14) { //ex: +971_ABC_DEF_GHIK $newphone = substr($newphone, 0, 4) . $separ . substr($newphone, 4, 3) . $separ . substr($newphone, 7, 3) . $separ . substr($newphone, 10, 4); } - } elseif (strtoupper($countrycode) == "DZ") { //Algérie + } elseif (strtoupper($countrycode) == "DZ") { //Algeria if (dol_strlen($phone) == 13) { //ex: +213_ABC_DEF_GHI $newphone = substr($newphone, 0, 4) . $separ . substr($newphone, 4, 3) . $separ . substr($newphone, 7, 3) . $separ . substr($newphone, 10, 3); } @@ -4938,7 +4938,7 @@ function dol_print_phone($phone, $countrycode = '', $contactid = 0, $socid = 0, } elseif (dol_strlen($phone) == 12) { //ex: +32_ABC_DEF_GHI $newphone = substr($newphone, 0, 3) . $separ . substr($newphone, 3, 3) . $separ . substr($newphone, 6, 3) . $separ . substr($newphone, 9, 3); } - } elseif (strtoupper($countrycode) == "PF") { //Polynésie française + } elseif (strtoupper($countrycode) == "PF") { //French Polynesia if (dol_strlen($phone) == 12) { //ex: +689_AB_CD_EF_GH $newphone = substr($newphone, 0, 4) . $separ . substr($newphone, 4, 2) . $separ . substr($newphone, 6, 2) . $separ . substr($newphone, 8, 2) . $separ . substr($newphone, 10, 2); } @@ -4950,7 +4950,7 @@ function dol_print_phone($phone, $countrycode = '', $contactid = 0, $socid = 0, if (dol_strlen($phone) == 12) { //ex: +962_A_BCD_EF_GH $newphone = substr($newphone, 0, 4) . $separ . substr($newphone, 4, 1) . $separ . substr($newphone, 5, 3) . $separ . substr($newphone, 7, 2) . $separ . substr($newphone, 9, 2); } - } elseif (strtoupper($countrycode) == "JM") { //Jamaïque + } elseif (strtoupper($countrycode) == "JM") { //Jamaica if (dol_strlen($newphone) == 12) { //ex: +1867_ABC_DEFG $newphone = substr($newphone, 0, 5) . $separ . substr($newphone, 5, 3) . $separ . substr($newphone, 8, 4); } @@ -5516,15 +5516,15 @@ function dol_substr($string, $start, $length = null, $stringencoding = '', $trun /** - * Truncate a string to a particular length adding '…' if string larger than length. - * If length = max length+1, we do no truncate to avoid having just 1 char replaced with '…'. + * Truncate a string to a particular length adding '...' if string larger than length. + * If length = max length+1, we do no truncate to avoid having just 1 char replaced with '...'. * MAIN_DISABLE_TRUNC=1 can disable all truncings * * @param string $string String to truncate - * @param int $size Max string size visible (excluding …). 0 for no limit. WARNING: Final string size can have 3 more chars (if we added …, or if size was max+1 so it does not worse to replace with ...) + * @param int $size Max string size visible (excluding '...'). 0 for no limit. WARNING: Final string size can have 3 more chars (if we added '...', or if size was max+1 so it does not worse to replace with ...) * @param string $trunc Where to trunc: 'right', 'left', 'middle' (size must be a 2 power), 'wrap' * @param string $stringencoding Tell what is source string encoding - * @param int $nodot Truncation do not add … after truncation. So it's an exact truncation. + * @param int $nodot Truncation do not add '...' after truncation. So it's an exact truncation. * @param int $display Trunc is used to display data and can be changed for small screen. TODO Remove this param (must be dealt with CSS) * @return string Truncated string. WARNING: length is never higher than $size if $nodot is set, but can be 3 chars higher otherwise. */ @@ -5548,7 +5548,7 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF if ($trunc == 'right') { $newstring = dol_textishtml($string) ? dol_string_nohtmltag($string, 1) : $string; if (dol_strlen($newstring, $stringencoding) > ($size + ($nodot ? 0 : 1))) { - // If nodot is 0 and size is 1 chars more, we don't trunc and don't add … + // If nodot is 0 and size is 1 chars more, we don't trunc and don't add '...' return dol_substr($newstring, 0, $size, $stringencoding) . ($nodot ? '' : '…'); } else { //return 'u'.$size.'-'.$newstring.'-'.dol_strlen($newstring,$stringencoding).'-'.$string; @@ -5566,7 +5566,7 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF } elseif ($trunc == 'left') { $newstring = dol_textishtml($string) ? dol_string_nohtmltag($string, 1) : $string; if (dol_strlen($newstring, $stringencoding) > ($size + ($nodot ? 0 : 1))) { - // If nodot is 0 and size is 1 chars more, we don't trunc and don't add … + // If nodot is 0 and size is 1 chars more, we don't trunc and don't add '...' return '…' . dol_substr($newstring, dol_strlen($newstring, $stringencoding) - $size, $size, $stringencoding); } else { return $string; @@ -5588,7 +5588,7 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF * * @param string $key Key * @param string $morecss Add more css to the object - * @return string Pïcto for the key + * @return string Picto for the key */ function getPictoForType($key, $morecss = '') { @@ -7816,8 +7816,8 @@ function price($amount, $form = 0, $outlangs = '', $trunc = 1, $rounding = -1, $ * Default 0 if unknown. * @return string Amount with universal numeric format (Example: '99.99999'), or error message. * If conversion fails to return a numeric, it returns: - * - text unchanged or partial if ($rounding = ''): price2num('W9ç', '', 0) => '9ç', price2num('W9ç', '', 1) => 'W9ç', price2num('W9ç', '', 2) => '9ç' - * - '0' if ($rounding is defined): price2num('W9ç', 'MT', 0) => '9', price2num('W9ç', 'MT', 1) => '0', price2num('W9ç', 'MT', 2) => '9' + * - text unchanged or partial if ($rounding = ''): price2num('W9c', '', 0) => '9c', price2num('W9c', '', 1) => 'W9c', price2num('W9c', '', 2) => '9c' + * - '0' if ($rounding is defined): price2num('W9c', 'MT', 0) => '9', price2num('W9c', 'MT', 1) => '0', price2num('W9c', 'MT', 2) => '9' * Note: The best way to guarantee a numeric value is to add a cast (float) before the price2num(). * If amount is null or '', it returns '' if $rounding = '', it returns '0' if $rounding is defined. * @@ -12164,7 +12164,7 @@ function dol_eval_new($s) ]; $prohibited_token_arrangements = [ - // Variable functions « $a( », « "$a"( », « 'FN_NAME'( », ('FN_NAME')() + // Variable functions "$a(", '"$a"(', "'FN_NAME'(", ('FN_NAME')() ' T_VARIABLE ( ', ' " ( ', ' \' ( ', @@ -15615,7 +15615,7 @@ function getElementProperties($elementType) if ($reshook) { $elementProperties = $hookmanager->resArray; - } elseif (!empty($hookmanager->resArray) && is_array($hookmanager->resArray)) { // resArray is always an array but for sécurity against misconfigured external modules + } elseif (!empty($hookmanager->resArray) && is_array($hookmanager->resArray)) { // resArray is always an array but for security against misconfigured external modules $elementProperties = array_replace($elementProperties, $hookmanager->resArray); } diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index c47c4a7a639..556890f89ba 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -7,7 +7,7 @@ * Copyright (C) 2015-2016 Raphaël Doursenaud * Copyright (C) 2017 Juanjo Menent * Copyright (C) 2024-2026 MDW - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -921,7 +921,7 @@ function get_next_value($db, $mask, $table, $field, $where = '', $objsoc = '', $ $maskjournal_value = ''; } - // Personalized field {XXX-1} à {XXX-99} + // Personalized field {XXX-1} to {XXX-99} $maskperso = array(); $maskpersonew = array(); $tmpmask = $mask; diff --git a/htdocs/core/lib/modulebuilder.lib.php b/htdocs/core/lib/modulebuilder.lib.php index 40a4ad7ddb8..c4b3645a03b 100644 --- a/htdocs/core/lib/modulebuilder.lib.php +++ b/htdocs/core/lib/modulebuilder.lib.php @@ -1,7 +1,7 @@ * Copyright (C) 2024-2025 MDW - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -651,7 +651,7 @@ function reWriteAllPermissions($file, $permissions, $key, $right, $objectname, $ // parcourir les objects $o = 0; foreach ($permissions as &$object) { - // récupérer la permission de l'objet + // get the object permission $p = 1; foreach ($object as &$obj) { if (str_contains($obj[5], 'read')) { diff --git a/htdocs/core/lib/profid.lib.php b/htdocs/core/lib/profid.lib.php index bace12bdccc..2a6ea84e2c6 100644 --- a/htdocs/core/lib/profid.lib.php +++ b/htdocs/core/lib/profid.lib.php @@ -1,6 +1,6 @@ - * Copyright (C) 2022 Frédéric France + * Copyright (C) 2022-2026 Frédéric France * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify @@ -104,7 +104,7 @@ function isValidSiret($siret, $lengthonly = 0) /** * Check the syntax validity of a Portuguese (PT) Tax Identification Number (TIN). - * (NIF = Número de Identificação Fiscal) + * (NIF = Numero de Identificacao Fiscal) * * @param string $str NIF to check * @return boolean True if valid, False otherwise @@ -125,7 +125,7 @@ function isValidTinForPT($str) /** * Check the syntax validity of an Algerian (DZ) Tax Identification Number (TIN). - * (NIF = Numéro d'Identification Fiscale) + * (NIF = Tax Identification Number) * * @param string $str TIN to check * @return boolean True if valid, False otherwise @@ -146,7 +146,7 @@ function isValidTinForDZ($str) /** * Check the syntax validity of a Belgium (BE) Tax Identification Number (TIN). - * (NN = Numéro National) + * (NN = National Number) * * @param string $str NN to check * @return boolean True if valid, False otherwise @@ -168,9 +168,9 @@ function isValidTinForBE($str) /** * Check the syntax validity of a Spanish (ES) Tax Identification Number (TIN), where: - * - NIF = Número de Identificación Fiscal (used for residents only before 2008. Used for both residents and companies since 2008.) - * - CIF = Código de Identificación Fiscal (used for companies only before 2008. Replaced by NIF since 2008.) - * - NIE = Número de Identidad de Extranjero + * - NIF = Numero de Identificacion Fiscal (used for residents only before 2008. Used for both residents and companies since 2008.) + * - CIF = Codigo de Identificacion Fiscal (used for companies only before 2008. Replaced by NIF since 2008.) + * - NIE = Numero de Identidad de Extranjero * * @param string $str TIN to check * @return int<-4,3> 1 if NIF ok, 2 if CIF ok, 3 if NIE ok, -1 if NIF bad, -2 if CIF bad, -3 if NIE bad, -4 if unexpected bad diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index e738ea95a45..31eda36ebed 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -1,6 +1,6 @@ - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2024-2026 MDW * * This program is free software; you can redistribute it and/or modify @@ -1422,7 +1422,7 @@ function getImageFromHtmlContent($htmlContent, $imageNumber = 1) // Check if nb of image is valid if ($imageNumber > 0 && $imageNumber <= $images->length) { - // Récupère l'image correspondante (index - 1 car $imageNumber est 1-based) + // Get the corresponding image (index - 1 because $imageNumber is 1-based) $img = $images->item($imageNumber - 1); if ($img instanceof DOMElement) { return $img->getAttribute('src'); diff --git a/htdocs/core/modules/expensereport/doc/pdf_standard_expensereport.modules.php b/htdocs/core/modules/expensereport/doc/pdf_standard_expensereport.modules.php index 3b8021e9684..ce6cb2ef96d 100644 --- a/htdocs/core/modules/expensereport/doc/pdf_standard_expensereport.modules.php +++ b/htdocs/core/modules/expensereport/doc/pdf_standard_expensereport.modules.php @@ -2,7 +2,7 @@ /* Copyright (C) 2015 Laurent Destailleur * Copyright (C) 2015 Alexandre Spangaro * Copyright (C) 2016-2023 Philippe Grand - * Copyright (C) 2018-2025 Frédéric France + * Copyright (C) 2018-2026 Frédéric France * Copyright (C) 2018 Francis Appels * Copyright (C) 2019 Markus Welters * Copyright (C) 2019 Rafael Ingenleuf @@ -676,7 +676,7 @@ class pdf_standard_expensereport extends ModeleExpenseReport $default_font_size = pdf_getPDFFontSize($outputlangs); /* - // ajout du fondu vert en bas de page à droite + // add green fade at bottom right of page $image_fondue = $conf->mycompany->dir_output.'/fondu_vert_.jpg'; $pdf->Image($image_fondue,20,107,200,190); diff --git a/htdocs/core/modules/facture/doc/pdf_octopus.modules.php b/htdocs/core/modules/facture/doc/pdf_octopus.modules.php index ba4918a2c81..1c9a6f33597 100644 --- a/htdocs/core/modules/facture/doc/pdf_octopus.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_octopus.modules.php @@ -1560,7 +1560,7 @@ class pdf_octopus extends ModelePDFFactures // Show if Option VAT debit option is on also if transmitter is french // Decret n°2099-1299 2022-10-07 - // French mention : "Option pour le paiement de la taxe d'après les débits" + // French legal mention: "Option pour le paiement de la taxe d'apres les debits" if ($this->emetteur->country_code == 'FR') { if (getDolGlobalInt('TAX_MODE') == 1) { $pdf->SetXY($this->marge_gauche, $posy); @@ -2747,10 +2747,10 @@ class pdf_octopus extends ModelePDFFactures $form = new Form($db); - $tab_height -= 29; // Réduction de la hauteur global du tableau + $tab_height -= 29; // Reduce the overall table height $displayWarranty = $this->displayRetainedWarranty($object); if (!$displayWarranty) { - $tab_height -= 19; // Réduction de la hauteur global du tableau + $tab_height -= 19; // Reduce the overall table height } @@ -2837,7 +2837,7 @@ class pdf_octopus extends ModelePDFFactures } // Output Rect - // KEEPTHIS => Affiche les bords extérieurs + // KEEPTHIS => Display outer borders $this->printRoundedRectBtp($pdf, $this->marge_gauche, $tab_top, $this->page_largeur - $this->marge_gauche - $this->marge_droite, $tab_height, $this->corner_radius, $hidetop, $hidebottom, 'D'); // Rect prend une longueur en 3eme param et 4eme param $pdf->line($this->posx_cumul_anterieur - 1, $tab_top, $this->posx_cumul_anterieur - 1, $tab_top + $tab_height); @@ -2942,7 +2942,7 @@ class pdf_octopus extends ModelePDFFactures $pdf->SetXY($x, $tab_top + 8); $pdf->MultiCell(32, 2, price($this->TDataSituation[$col]['HT'], 0, '', 1, -1, 2), '', 'R'); - // Travaux supplémentaires + // Additional work $pdf->SetXY($x, $tab_top + 12); $pdf->MultiCell(32, 2, price($this->TDataSituation[$col]['travaux_sup'], 0, '', 1, -1, 2), '', 'R'); @@ -3042,7 +3042,7 @@ class pdf_octopus extends ModelePDFFactures $retenue_garantie = 0; $retenue_garantie_anterieure = 0; - // Init tous les champs à 0 + // Initialize all fields to 0 $TDataSituation['cumul_anterieur'] = array( 'HT' => 0, //montant HT normal 'TVA' => 0, //montant de la TVA sur le HTnet @@ -3063,7 +3063,7 @@ class pdf_octopus extends ModelePDFFactures // Read each line to // 1. recalculer le total_ht pour chaque taux de TVA - // 2. recalculer la TVA associée à ce montant HT + // 2. recalculate the VAT associated with this net amount // 3. If applicable, store this information as "travaux_sup" (additional work) if this line is not linked to a line from the previous situation. foreach ($previousInvoice->lines as $k => $l) { $total_ht = (float) $l->total_ht; @@ -3135,7 +3135,7 @@ class pdf_octopus extends ModelePDFFactures } } - //Le nouveau cumul = cumul antérieur + current + // New cumulative = previous cumulative + current $TDataSituation['nouveau_cumul'] = $this->sumSituation($TDataSituation['current'], $TDataSituation['cumul_anterieur']); return $TDataSituation; @@ -3549,7 +3549,7 @@ class pdf_octopus extends ModelePDFFactures $ref = $outputlangs->transnoentities("InvoiceSituation").$outputlangs->convToOutputCharset(" n°".$invoice->situation_counter); - // TODO Discuss whether to declare a final invoice as a DGD (definitive general statement like 'décompte général définitif') or not. + // TODO Discuss whether to declare a final invoice as a DGD (definitive general statement, "decompte general definitif") or not. if (getDolGlobalInt('INVOICE_SITUATION_USE_DGD')) { if ($invoice->situation_final) { $ref .= ' - DGD'; diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 1772c8bc205..695166c6db5 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -1573,7 +1573,7 @@ class pdf_sponge extends ModelePDFFactures // Show if Option VAT debit option is on also if transmitter is french // Decret n°2099-1299 2022-10-07 - // French mention : "Option pour le paiement de la taxe d'après les débits" + // French legal mention: "Option pour le paiement de la taxe d'apres les debits" if ($this->emetteur->country_code == 'FR') { if (getDolGlobalInt('TAX_MODE') == 1) { $pdf->SetXY($this->marge_gauche, $posy); diff --git a/htdocs/core/modules/mailings/pomme.modules.php b/htdocs/core/modules/mailings/pomme.modules.php index 7597b2c2ce3..4367f02e985 100644 --- a/htdocs/core/modules/mailings/pomme.modules.php +++ b/htdocs/core/modules/mailings/pomme.modules.php @@ -2,7 +2,7 @@ /* Copyright (C) 2005-2011 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin * Copyright (C) 2024 MDW - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,7 +40,7 @@ class mailing_pomme extends MailingTargets /** * @var string This label is used if no translation is found for key XXX neither MailingModuleDescXXX where XXX=name is found */ - public $desc = 'Dolibarr users with emails'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée + public $desc = 'Dolibarr users with emails'; // Label used if no translation found for MailingModuleDescXXX or XXX=name /** * @var string[] Module mailing actif si modules require_module actifs @@ -122,9 +122,9 @@ class mailing_pomme extends MailingTargets /** - * Affiche formulaire de filtre qui apparait dans page de selection des destinataires de mailings + * Display filter form shown on the mailing recipient selection page * - * @return string Retourne zone select + * @return string HTML select zone */ public function formFilter() { diff --git a/htdocs/core/modules/mailings/xinputfile.modules.php b/htdocs/core/modules/mailings/xinputfile.modules.php index a487bd35d7d..860a2af5d8e 100644 --- a/htdocs/core/modules/mailings/xinputfile.modules.php +++ b/htdocs/core/modules/mailings/xinputfile.modules.php @@ -1,7 +1,7 @@ * Copyright (C) 2024 MDW - * Copyright (C) 2025 Frédéric France + * Copyright (C) 2025-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,7 +34,7 @@ class mailing_xinputfile extends MailingTargets { public $name = 'EmailsFromFile'; // Identifiant du module mailing // This label is used if no translation is found for key XXX neither MailingModuleDescXXX where XXX=name is found - public $desc = 'EMails from a file'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée + public $desc = 'EMails from a file'; // Label used if no translation found for MailingModuleDescXXX or XXX=name /** * @var string[] This module allows to select by categories must be also enabled if category module is not activated @@ -111,9 +111,9 @@ class mailing_xinputfile extends MailingTargets /** - * Affiche formulaire de filtre qui apparait dans page de selection des destinataires de mailings + * Display filter form shown on the mailing recipient selection page * - * @return string Retourne zone select + * @return string HTML select zone */ public function formFilter() { diff --git a/htdocs/core/modules/mailings/xinputuser.modules.php b/htdocs/core/modules/mailings/xinputuser.modules.php index 72e1f0ee3fa..f7930de7051 100644 --- a/htdocs/core/modules/mailings/xinputuser.modules.php +++ b/htdocs/core/modules/mailings/xinputuser.modules.php @@ -1,7 +1,7 @@ * Copyright (C) 2024 MDW - * Copyright (C) 2025 Frédéric France + * Copyright (C) 2025-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,7 +34,7 @@ class mailing_xinputuser extends MailingTargets { public $name = 'EmailsFromUser'; // Identifiant du module mailing // This label is used if no translation is found for key XXX neither MailingModuleDescXXX where XXX=name is found - public $desc = 'EMails input by user'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée + public $desc = 'EMails input by user'; // Label used if no translation found for MailingModuleDescXXX or XXX=name /** * @var string[] This module allows to select by categories must be also enabled if category module is not activated @@ -109,9 +109,9 @@ class mailing_xinputuser extends MailingTargets /** - * Affiche formulaire de filtre qui apparait dans page de selection des destinataires de mailings + * Display filter form shown on the mailing recipient selection page * - * @return string Retourne zone select + * @return string HTML select zone */ public function formFilter() { diff --git a/htdocs/core/modules/member/mod_member_custom.php b/htdocs/core/modules/member/mod_member_custom.php index 41d2163e0c2..52462cb47c9 100644 --- a/htdocs/core/modules/member/mod_member_custom.php +++ b/htdocs/core/modules/member/mod_member_custom.php @@ -1,6 +1,6 @@ - * Copyright (C) 2025 Frédéric France + * Copyright (C) 2025-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,7 +20,7 @@ /** * \file htdocs/core/modules/member/mod_member_custom.php * \ingroup member - * \brief Fichier contenant la class du modele de numerotation d'ahérent Custom + * \brief File containing the class for the Custom member numbering model */ require_once DOL_DOCUMENT_ROOT.'/core/modules/member/modules_member.class.php'; diff --git a/htdocs/core/modules/modResource.class.php b/htdocs/core/modules/modResource.class.php index 6aa045f0277..0f492d3fa40 100644 --- a/htdocs/core/modules/modResource.class.php +++ b/htdocs/core/modules/modResource.class.php @@ -2,6 +2,7 @@ /* Copyright (C) 2013-2014 Jean-François Ferry * Copyright (C) 2015 Laurent Destailleur * Copyright (C) 2024 MDW + * Copyright (C) 2026 Frédéric France * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -202,7 +203,7 @@ class modResource extends DolibarrModules $r++; $this->menu[$r++] = array( - 'fk_menu' => 'fk_mainmenu=agenda,fk_leftmenu=resource', //On utilise les ancres définis dans le menu parent déclaré au dessus + 'fk_menu' => 'fk_mainmenu=agenda,fk_leftmenu=resource', // Uses anchors defined in the parent menu declared above 'type' => 'left', // Toujours un menu gauche 'titre' => 'MenuResourceAdd', 'mainmenu' => 'agenda', @@ -217,7 +218,7 @@ class modResource extends DolibarrModules ); $this->menu[$r++] = array( - 'fk_menu' => 'fk_mainmenu=agenda,fk_leftmenu=resource', //On utilise les ancres définis dans le menu parent déclaré au dessus + 'fk_menu' => 'fk_mainmenu=agenda,fk_leftmenu=resource', // Uses anchors defined in the parent menu declared above 'type' => 'left', // Toujours un menu gauche 'titre' => 'List', 'mainmenu' => 'agenda', diff --git a/htdocs/core/modules/product/modules_product.class.php b/htdocs/core/modules/product/modules_product.class.php index 9bed7c6e361..950a993d039 100644 --- a/htdocs/core/modules/product/modules_product.class.php +++ b/htdocs/core/modules/product/modules_product.class.php @@ -3,7 +3,7 @@ * Copyright (C) 2004-2010 Laurent Destailleur * Copyright (C) 2004 Eric Seigne * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2024-2026 MDW * * This program is free software; you can redistribute it and/or modify @@ -93,7 +93,7 @@ abstract class ModeleProductCode extends CommonNumRefGenerator // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoi la liste des modeles de numérotation + * Return the list of numbering models * * @param DoliDB $dbs Database handler * @param int $maxfilenamelength Max length of value to show diff --git a/htdocs/core/modules/stocktransfer/doc/pdf_eagle.modules.php b/htdocs/core/modules/stocktransfer/doc/pdf_eagle.modules.php index 84841021aa4..a1588852477 100644 --- a/htdocs/core/modules/stocktransfer/doc/pdf_eagle.modules.php +++ b/htdocs/core/modules/stocktransfer/doc/pdf_eagle.modules.php @@ -4,7 +4,7 @@ * Copyright (C) 2005-2012 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2014-2015 Marcos García - * Copyright (C) 2018-2025 Frédéric France + * Copyright (C) 2018-2026 Frédéric France * Copyright (C) 2021 Gauthier VERDOL * Copyright (C) 2024-2025 MDW * Copyright (C) 2024 Nick Fragoulis @@ -611,7 +611,7 @@ class pdf_eagle extends ModelePDFStockTransfer $pdf->SetFont('', '', $default_font_size - 1); // We reposition the default font - // Lot / série + // Batch / serial number if (isModEnabled('productbatch')) { $pdf->SetXY($this->posxlot, $curY); $pdf->MultiCell(($this->posxweightvol - $this->posxlot), 3, $object->lines[$i]->batch, '', 'C'); @@ -1075,7 +1075,7 @@ class pdf_eagle extends ModelePDFStockTransfer $pdf->SetFont('', '', $default_font_size + 1); - // Date prévue depart + // Expected departure date if (!empty($object->date_prevue_depart)) { $posy += 4; $pdf->SetXY($posx, $posy); @@ -1083,7 +1083,7 @@ class pdf_eagle extends ModelePDFStockTransfer $pdf->MultiCell($w, 4, $outputlangs->transnoentities("DatePrevueDepart")." : ".dol_print_date($object->date_prevue_depart, "day", false, $outputlangs, true), '', 'R'); } - // Date prévue arrivée + // Expected arrival date if (!empty($object->date_prevue_arrivee)) { $posy += 4; $pdf->SetXY($posx, $posy); @@ -1099,7 +1099,7 @@ class pdf_eagle extends ModelePDFStockTransfer $pdf->MultiCell($w, 4, $outputlangs->transnoentities("DateReelleDepart")." : ".dol_print_date($object->date_reelle_depart, "day", false, $outputlangs, true), '', 'R'); } - // Date reelle arrivée + // Actual arrival date if (!empty($object->date_reelle_arrivee)) { $posy += 4; $pdf->SetXY($posx, $posy); diff --git a/htdocs/core/modules/stocktransfer/doc/pdf_eagle_proforma.modules.php b/htdocs/core/modules/stocktransfer/doc/pdf_eagle_proforma.modules.php index a76a5c47494..2fdbe416247 100644 --- a/htdocs/core/modules/stocktransfer/doc/pdf_eagle_proforma.modules.php +++ b/htdocs/core/modules/stocktransfer/doc/pdf_eagle_proforma.modules.php @@ -8,7 +8,7 @@ * Copyright (C) 2012 Cedric Salvador * Copyright (C) 2015 Marcos García * Copyright (C) 2017 Ferran Marcet - * Copyright (C) 2018-2025 Frédéric France + * Copyright (C) 2018-2026 Frédéric France * Copyright (C) 2021 Gauthier VERDOL * Copyright (C) 2024-2025 MDW * Copyright (C) 2024 Nick Fragoulis @@ -1264,7 +1264,7 @@ class pdf_eagle_proforma extends ModelePDFStockTransfer $pdf->SetFont('', '', $default_font_size + 1); - // Date prévue depart + // Expected departure date if (!empty($object->date_prevue_depart)) { $posy += 4; $pdf->SetXY($posx, $posy); @@ -1272,7 +1272,7 @@ class pdf_eagle_proforma extends ModelePDFStockTransfer $pdf->MultiCell($w, 4, $outputlangs->transnoentities("DatePrevueDepart")." : ".dol_print_date($object->date_prevue_depart, "day", false, $outputlangs, true), '', 'R'); } - // Date prévue arrivée + // Expected arrival date if (!empty($object->date_prevue_arrivee)) { $posy += 4; $pdf->SetXY($posx, $posy); @@ -1288,7 +1288,7 @@ class pdf_eagle_proforma extends ModelePDFStockTransfer $pdf->MultiCell($w, 4, $outputlangs->transnoentities("DateReelleDepart")." : ".dol_print_date($object->date_reelle_depart, "day", false, $outputlangs, true), '', 'R'); } - // Date reelle arrivée + // Actual arrival date if (!empty($object->date_reelle_arrivee)) { $posy += 4; $pdf->SetXY($posx, $posy); diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index 7e70881cd7f..31f601eead3 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -6,7 +6,7 @@ * Copyright (C) 2014 Florian Henry * Copyright (C) 2014 Raphaël Doursenaud * Copyright (C) 2015-2016 Marcos García - * Copyright (C) 2018-2025 Frédéric France + * Copyright (C) 2018-2026 Frédéric France * Copyright (C) 2018 Ferran Marcet * Copyright (C) 2019 Nicolas ZABOURI * Copyright (C) 2022 OpenDSI @@ -1376,7 +1376,7 @@ if (!empty($object->thirdparty)) { "invoice_supplier_rec" ]; - // seller.tva_assuj -> à injecter dans jsConf ou ailleurs + // seller.tva_assuj -> to inject into jsConf or elsewhere if (supplierElements.includes(jsConf.docObject.element) && !jsConf.docObject.seller_tva_assuj) { if (tva_tx !== 0) { tva_tx = 0; diff --git a/htdocs/datapolicy/class/datapolicycron.class.php b/htdocs/datapolicy/class/datapolicycron.class.php index 846325652cb..ab5e7e1900e 100644 --- a/htdocs/datapolicy/class/datapolicycron.class.php +++ b/htdocs/datapolicy/class/datapolicycron.class.php @@ -1,6 +1,6 @@ - * Copyright (C) 2018-2025 Frédéric France + * Copyright (C) 2018-2026 Frédéric France * Copyright (C) 2024 William Mead * Copyright (C) 2024-2025 MDW * Copyright (C) 2025 Quentin VIAL--GOUTEYRON @@ -241,7 +241,7 @@ class DataPolicyCron 'sql_template' => $sqltemplate, 'class' => 'Adherent', 'file' => DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php', - 'anonymize_fields' => array('lastname' => 'MAKEANONYMOUS', 'firstname' => 'MAKEANONYMOUS', 'societe' => '---', 'address' => '---', 'town' => '---', 'zip' => '---', 'phone' => '---', 'phone_perso' => '---', 'phone_mobile' => '---', 'email' => 'anonymous+__ID__@example.com', 'birth' => dol_mktime(0, 0, 0, 1, 1, 1900), 'photo' => '', 'url' => '---', 'fax' => '---', 'socialnetworks' => [], 'ip' => '0.0.0.0', 'note_private' => '---', 'note_public' => '---', 'statut' => 0), // Force status to "canceled / résilié" + 'anonymize_fields' => array('lastname' => 'MAKEANONYMOUS', 'firstname' => 'MAKEANONYMOUS', 'societe' => '---', 'address' => '---', 'town' => '---', 'zip' => '---', 'phone' => '---', 'phone_perso' => '---', 'phone_mobile' => '---', 'email' => 'anonymous+__ID__@example.com', 'birth' => dol_mktime(0, 0, 0, 1, 1, 1900), 'photo' => '', 'url' => '---', 'fax' => '---', 'socialnetworks' => [], 'ip' => '0.0.0.0', 'note_private' => '---', 'note_public' => '---', 'statut' => 0), // Force status to "canceled" 'call_params' => array( 'delete' => array('user'), // $object->delete($user) 'update' => array('user') // $object->update($user) diff --git a/htdocs/emailcollector/lib/emailcollector.lib.php b/htdocs/emailcollector/lib/emailcollector.lib.php index 7eb58caa4ce..43f44c92bf4 100644 --- a/htdocs/emailcollector/lib/emailcollector.lib.php +++ b/htdocs/emailcollector/lib/emailcollector.lib.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2024 MDW * * This program is free software: you can redistribute it and/or modify @@ -149,9 +149,9 @@ function getAttachments($jk, $mbox) /** * Get content of a joined file from its position into a given email * - * @param integer $jk numéro du mail - * @param string $fpos position de la pièce jointe - * @param integer $type type de la pièce jointe + * @param integer $jk mail number + * @param string $fpos attachment position + * @param integer $type attachment type * @param \IMAP\Connection $mbox object connection imap * @return string data */ diff --git a/htdocs/expedition/dispatch.php b/htdocs/expedition/dispatch.php index f2320c49163..86408126d02 100644 --- a/htdocs/expedition/dispatch.php +++ b/htdocs/expedition/dispatch.php @@ -7,7 +7,7 @@ * Copyright (C) 2014 Cedric Gross * Copyright (C) 2016 Florian Henry * Copyright (C) 2017-2022 Ferran Marcet - * Copyright (C) 2018-2025 Frédéric France + * Copyright (C) 2018-2026 Frédéric France * Copyright (C) 2019-2020 Christophe Battarel * Copyright (C) 2024-2026 MDW * @@ -1702,7 +1702,7 @@ if ($object->id > 0 || !empty($object->ref)) { print $formother->getHTMLScannerForm("barcodescannerjs", 'all', 1); } - // traitement entrepot par défaut + // default warehouse handling print ''."\n"; - // Formulaire de demande + // Leave request form print '
'."\n"; print ''."\n"; print ''."\n"; @@ -1589,18 +1589,18 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("TitleToValidCP"), $langs->trans("ConfirmToValidCP"), "confirm_send", '', 1, 1); } - // Si validation de la demande + // If validating the request if ($action == 'valid') { print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("TitleValidCP"), $langs->trans("ConfirmValidCP"), "confirm_valid", '', 1, 1); } - // Si refus de la demande + // If refusing the request if ($action == 'refuse') { $array_input = array(array('type' => "text", 'label' => $langs->trans('DetailRefusCP'), 'name' => "detail_refuse", 'size' => "50", 'value' => "")); print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id."&action=confirm_refuse", $langs->trans("TitleRefuseCP"), $langs->trans('ConfirmRefuseCP'), "confirm_refuse", $array_input, 1, 0); } - // Si annulation de la demande + // If cancelling the request if ($action == 'cancel') { print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("TitleCancelCP"), $langs->trans("ConfirmCancelCP"), "confirm_cancel", '', 1, 1); } diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index c259d287f5d..e1c971112ae 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -286,7 +286,7 @@ if (empty($reshook)) { } } foreach ($TusersToProcess as $u) { - // Check if there is already holiday for this period pour chaque user + // Check if there is already holiday for this period for each user $verifCP = $object->verifDateHolidayCP($u, $date_debut, $date_fin, $halfday); if (!$verifCP) { //setEventMessages($langs->trans("alreadyCPexist"), null, 'errors'); @@ -483,7 +483,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { '."\n"; - // Formulaire de demande + // Leave request form print ''."\n"; print ''."\n"; print ''."\n"; @@ -570,7 +570,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print $form->textwithpicto($langs->trans("DateDebCP"), $langs->trans("FirstDayOfHoliday")); print ''; print ''; - // Si la demande ne vient pas de l'agenda + // If the request does not come from the agenda if (!GETPOST('date_debut_')) { print $form->selectDate(-1, 'date_debut_', 0, 0, 0, '', 1, 1); } else { diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index c20af6a74cc..742dbe8d4e3 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -294,7 +294,7 @@ class Holiday extends CommonObject } /** - * Créer un congés payés dans la base de données + * Create a paid leave entry in the database * * @param User $user User that create * @param int $notrigger 0=launch triggers after, 1=disable triggers @@ -544,7 +544,7 @@ class Holiday extends CommonObject $sql .= " FROM ".MAIN_DB_PREFIX."holiday as cp, ".MAIN_DB_PREFIX."user as uu, ".MAIN_DB_PREFIX."user as ua"; $sql .= " WHERE cp.entity IN (".getEntity('holiday').")"; - $sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid"; // Hack pour la recherche sur le tableau + $sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid"; // Hack needed for search on the list $sql .= " AND cp.fk_user IN (".$this->db->sanitize($user_id).")"; // Selection filter @@ -675,7 +675,7 @@ class Holiday extends CommonObject $sql .= " FROM ".MAIN_DB_PREFIX."holiday as cp, ".MAIN_DB_PREFIX."user as uu, ".MAIN_DB_PREFIX."user as ua"; $sql .= " WHERE cp.entity IN (".getEntity('holiday').")"; - $sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid "; // Hack pour la recherche sur le tableau + $sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid "; // Hack needed for search on the list // Selection filtering if (!empty($filter)) { @@ -1600,7 +1600,7 @@ class Holiday extends CommonObject } /** - * Met à jour une option du module Holiday Payés + * Update an option of the Holiday module * * @param string $name name settings parameter * @param string $value true if update OK else false @@ -2291,7 +2291,7 @@ class Holiday extends CommonObject * * @param string $sqlorder SQL sort order * @param string $sqlwhere SQL where - * @return int -1 si erreur, 1 si OK et 2 si pas de résultat + * @return int -1 if error, 1 if OK, 2 if no result */ public function fetchLog($sqlorder, $sqlwhere) { diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index aac484b7d8f..167e30395c6 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -265,7 +265,7 @@ if ($id > 0) { $search_employee = $user_id; } -// Récupération des congés payés de l'utilisateur ou de tous les users de sa hierarchy +// Retrieve paid leave for the current user or for all users in their hierarchy // Load array $object->holiday $sql = "SELECT"; @@ -328,7 +328,7 @@ if (isset($extrafields->attributes[$object->table_element]['label']) && is_array } $sql .= ", ".MAIN_DB_PREFIX."user as uu, ".MAIN_DB_PREFIX."user as ua"; $sql .= " WHERE cp.entity IN (".getEntity('holiday').")"; -$sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid "; // Hack pour la recherche sur le tableau +$sql .= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid "; // Hack needed for search on the list // Search all if (!empty($search_all)) { $sql .= natural_search(array_keys($fieldstosearchall), $search_all); diff --git a/htdocs/hrm/class/skill.class.php b/htdocs/hrm/class/skill.class.php index 7db7f5f6392..87190b6a4f4 100644 --- a/htdocs/hrm/class/skill.class.php +++ b/htdocs/hrm/class/skill.class.php @@ -4,7 +4,7 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2024-2026 MDW * * This program is free software; you can redistribute it and/or modify @@ -1114,11 +1114,11 @@ class Skill extends CommonObject $result = ''; switch ($code) { case 0: $result = $langs->trans("TypeKnowHow"); - break; //"Savoir Faire" + break; // "Know-how" case 1: $result = $langs->trans("TypeHowToBe"); - break; // "Savoir être" + break; // "Soft skills" case 9: $result = $langs->trans("TypeKnowledge"); - break; //"Savoir" + break; // "Knowledge" } return $result; } @@ -1126,9 +1126,9 @@ class Skill extends CommonObject /** * Return clickable link of object (with eventually picto) * - * @param string $option Where point the link (0=> main card, 1,2 => shipment, 'nolink'=>No link) - * @param ?array $arraydata Array of data - * @return string HTML Code for Kanban thumb. + * @param string $option Where point the link (0=> main card, 1,2 => shipment, 'nolink'=>No link) + * @param ?array $arraydata Array of data + * @return string HTML Code for Kanban thumb. */ public function getKanbanView($option = '', $arraydata = null) { diff --git a/htdocs/hrm/evaluation_card.php b/htdocs/hrm/evaluation_card.php index dc8975821a5..ad349509b62 100644 --- a/htdocs/hrm/evaluation_card.php +++ b/htdocs/hrm/evaluation_card.php @@ -483,7 +483,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea include DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php'; } - $conf->modules_parts['tpl']['hrm'] = '/hrm/core/tpl/'; // Pour utilisation du tpl hrm sur cet écran + $conf->modules_parts['tpl']['hrm'] = '/hrm/core/tpl/'; // To use the hrm tpl on this screen print '
'; if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) { diff --git a/htdocs/hrm/lib/hrm_skillrank.lib.php b/htdocs/hrm/lib/hrm_skillrank.lib.php index e89f43f24da..242904f7033 100644 --- a/htdocs/hrm/lib/hrm_skillrank.lib.php +++ b/htdocs/hrm/lib/hrm_skillrank.lib.php @@ -4,6 +4,7 @@ * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND * Copyright (C) 2024 MDW + * Copyright (C) 2026 Frédéric France * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -112,7 +113,7 @@ function displayRankInfos($selected_rank, $fk_skill, $inputname = 'TNote', $mode require_once DOL_DOCUMENT_ROOT . '/hrm/class/skill.class.php'; require_once DOL_DOCUMENT_ROOT . '/hrm/class/skilldet.class.php'; - // On charge les différentes notes possibles pour la compétence $fk_skill + // Load the different possible ratings for skill $fk_skill $skilldet = new Skilldet($db); $Lines = $skilldet->fetchAll('ASC', 'rankorder', 0, 0, '(fk_skill:=:'.((int) $fk_skill).')'); diff --git a/htdocs/hrm/skill_card.php b/htdocs/hrm/skill_card.php index dbbb978fb94..106b1e6072f 100644 --- a/htdocs/hrm/skill_card.php +++ b/htdocs/hrm/skill_card.php @@ -4,7 +4,7 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND - * Copyright (C) 2023-2025 Frédéric France + * Copyright (C) 2023-2026 Frédéric France * Copyright (C) 2024-2026 MDW * * This program is free software; you can redistribute it and/or modify @@ -274,7 +274,7 @@ if ($action == 'create') { // SKILLDET ADD - //@todo je stop ici ... à continuer (affichage des 5 skilled input pour create action + //@todo stopped here ... to be continued (display of the 5 skill input fields for create action //print $object->showInputField($val, $key, $value, '', '['']', '', 0); print '' . "\n"; @@ -782,7 +782,7 @@ if ($action != "create" && $action != "edit") { print $objectline->getLibStatut(5); } elseif ($key == 'rowid') { print $objectline->showOutputField($val, $key, (string) $objectline->id, ''); - // ajout pencil + // add pencil icon print ''; } else { print $objectline->showOutputField($val, $key, $objectline->$key, ''); diff --git a/htdocs/hrm/skill_tab.php b/htdocs/hrm/skill_tab.php index 4db0f4c5499..4f6dfc6055a 100644 --- a/htdocs/hrm/skill_tab.php +++ b/htdocs/hrm/skill_tab.php @@ -4,7 +4,7 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2024 Alexandre Spangaro * Copyright (C) 2024-2026 MDW * @@ -606,7 +606,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } - // liste des evaluation liées + // list of linked evaluations if ($objecttype == 'user' && $permissiontoadd) { $evaltmp = new Evaluation($db); $job = new Job($db); diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 7bc7be4bcb0..aba4ac253b7 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -3,7 +3,7 @@ * Copyright (C) 2018-2019 Nicolas ZABOURI * Copyright (C) 2023 Alexandre Janniaux * Copyright (C) 2024-2026 MDW - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -279,7 +279,7 @@ function getLicenceHeader($user, $langs, $now) */ /** - * Post-generation validation — logs and displays a warning if residual myobject/mymodule tokens remain. + * Post-generation validation -- logs and displays a warning if residual myobject/mymodule tokens remain. * * @param string $destfile Path to the generated file * @param NamingContract $nc Contract used for generation @@ -439,7 +439,7 @@ if ($dirins && $action == 'initmodule' && $modulename) { // Test on permission '$this->picto = \'generic\';' => (empty($picto)) ? '$this->picto = \'generic\'' : '$this->picto = \'' . $picto . '\';', 'modulefamily' => $family, // Key '500000' would be cast to int(500000) by PHP, then renumbered to 0 by - // array_merge — causing str_replace to search for '0' instead of '500000'. + // array_merge -- causing str_replace to search for '0' instead of '500000'. // Use a string key that matches the exact assignment line to avoid this. '$this->numero = 500000' => '$this->numero = '.$idmodule, ] @@ -6236,7 +6236,7 @@ if ($module == 'initmodule') { value1 = $("#crud").val(); value2 = $("#permissionObj").val(); - // Vérifie si les deux sélections sont faites + // Check if both selections are made if (value1 && value2) { switch(value1.toLowerCase()){ case "read": diff --git a/htdocs/modulebuilder/template/class/actions_mymodule.class.php b/htdocs/modulebuilder/template/class/actions_mymodule.class.php index ffa49a32b3c..42b854cddad 100644 --- a/htdocs/modulebuilder/template/class/actions_mymodule.class.php +++ b/htdocs/modulebuilder/template/class/actions_mymodule.class.php @@ -1,6 +1,7 @@ * Copyright (C) ---Replace with your own copyright and developer email--- + * Copyright (C) 2026 Frédéric France * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -352,7 +353,7 @@ class ActionsMyModule extends CommonHookActions $counter = count($parameters['head']); $element = $parameters['object']->element; $id = $parameters['object']->id; - // verifier le type d'onglet comme member_stats où ça ne doit pas apparaitre + // check the tab type like member_stats where it should not appear // if (in_array($element, ['societe', 'member', 'contrat', 'fichinter', 'project', 'propal', 'commande', 'facture', 'order_supplier', 'invoice_supplier'])) { if (in_array($element, ['context1', 'context2'])) { $datacount = 0; diff --git a/htdocs/product/stats/facture.php b/htdocs/product/stats/facture.php index 1eb48544c50..110f627a1f7 100644 --- a/htdocs/product/stats/facture.php +++ b/htdocs/product/stats/facture.php @@ -1,11 +1,11 @@ - * Copyright (C) 2004-2016 Laurent Destailleur - * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2014 Juanjo Menent - * Copyright (C) 2014 Florian Henry - * Copyright (C) 2024 Frédéric France - * Copyright (C) 2026 Jon Bendtsen +/* Copyright (C) 2003-2007 Rodolphe Quiedeville + * Copyright (C) 2004-2016 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2014 Juanjo Menent + * Copyright (C) 2014 Florian Henry + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2026 Jon Bendtsen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -447,12 +447,14 @@ if ($id > 0 || !empty($ref)) { print '
'; $i = 0; + $colspan = 3; print '
'; - print ''; + print '
'; print ''; // Action column if ($conf->main_checkbox_left_column) { print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); + $colspan++; } print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "s.rowid", "", $option, '', $sortfield, $sortorder); print_liste_field_titre("Company", $_SERVER["PHP_SELF"], "s.nom", "", $option, '', $sortfield, $sortorder); @@ -547,7 +549,7 @@ if ($id > 0 || !empty($ref)) { } else { print ''; } - print ''; + print ''; print ''; print ''; print ''; diff --git a/htdocs/salaries/card.php b/htdocs/salaries/card.php index e44dc8d2f58..6f09059997b 100644 --- a/htdocs/salaries/card.php +++ b/htdocs/salaries/card.php @@ -3,7 +3,7 @@ * Copyright (C) 2014-2020 Laurent Destailleur * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2015 Charlie BENKE - * Copyright (C) 2018-2025 Frédéric France + * Copyright (C) 2018-2026 Frédéric France * Copyright (C) 2021 Gauthier VERDOL * Copyright (C) 2023 Maxime Nicolas * Copyright (C) 2023 Benjamin GREMBI @@ -296,7 +296,7 @@ if ($action == 'add' && empty($cancel) && $permissiontoadd) { $paiement->chid = $object->id; // deprecated $paiement->datep = $datep; $paiement->datev = $datev; - $paiement->amounts = array($object->id => $amount); // Tableau de montant + $paiement->amounts = array($object->id => $amount); // Amount array $paiement->fk_typepayment = $type_payment; $paiement->num_payment = GETPOST("num_payment", 'alphanohtml'); $paiement->note_private = GETPOST("note", 'restricthtml'); diff --git a/htdocs/salaries/class/api_salaries.class.php b/htdocs/salaries/class/api_salaries.class.php index d6cbc06a94b..2574466bc62 100644 --- a/htdocs/salaries/class/api_salaries.class.php +++ b/htdocs/salaries/class/api_salaries.class.php @@ -2,7 +2,7 @@ /* * Copyright (C) 2023 Marc Chenebaux * Copyright (C) 2025 MDW - * Copyright (C) 2025 Frédéric France + * Copyright (C) 2025-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -334,7 +334,7 @@ class Salaries extends DolibarrApi */ public function getPayments($pid) { - // A payment of salary can be done on different salaires of didderent user, so only users with permission + // A payment of salary can be done on different salaries of different users, so only users with permission // to read all area allowed. // TODO To support read or readchild case, the get must be done with a SQL that include the paid user with // a where on current user and childids of current user. diff --git a/htdocs/salaries/class/paymentsalary.class.php b/htdocs/salaries/class/paymentsalary.class.php index 926a61da233..595c3b08454 100644 --- a/htdocs/salaries/class/paymentsalary.class.php +++ b/htdocs/salaries/class/paymentsalary.class.php @@ -2,7 +2,7 @@ /* Copyright (C) 2011-2024 Alexandre Spangaro * Copyright (C) 2014 Juanjo Menent * Copyright (C) 2021 Gauthier VERDOL - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2024-2026 MDW * * This program is free software; you can redistribute it and/or modify @@ -255,7 +255,7 @@ class PaymentSalary extends CommonObject $totalamount = (float) price2num($totalamount, 'MT'); // this is to ensure the following test is no biaised by a potential float equal to 0.0000000000001 if ($totalamount == 0) { return -1; - } // On accepte les montants negatifs pour les rejets de prelevement mais pas null + } // Negative amounts are accepted (for direct debit rejections) but not null $this->db->begin(); @@ -799,7 +799,7 @@ class PaymentSalary extends CommonObject public function LibStatut($status, $mode = 0) { // phpcs:enable - global $langs; // TODO Renvoyer le libelle anglais et faire traduction a affichage + global $langs; // TODO Return the English label and translate at display time $langs->load('compta'); /*if ($mode == 0) diff --git a/htdocs/salaries/payment_salary.php b/htdocs/salaries/payment_salary.php index 13972956654..629095a2566 100644 --- a/htdocs/salaries/payment_salary.php +++ b/htdocs/salaries/payment_salary.php @@ -1,6 +1,6 @@ - * Copyright (C) 2016-2025 Frédéric France + * Copyright (C) 2016-2026 Frédéric France * Copyright (C) 2021 Gauthier VERDOL * Copyright (C) 2024-2025 MDW * @@ -116,7 +116,7 @@ if (($action == 'add_payment' || ($action == 'confirm_paiement' && $confirm == ' $paiement->fk_salary = $id; $paiement->chid = $id; // deprecated $paiement->datep = $datepaye; - $paiement->amounts = $amounts; // Tableau de montant + $paiement->amounts = $amounts; // Amount array $paiement->fk_typepayment = GETPOSTINT("paiementtype"); $paiement->num_payment = GETPOST("num_payment", 'alphanohtml'); $paiement->note = GETPOST("note", 'restricthtml'); @@ -164,7 +164,7 @@ llxHeader('', '', $help_url); $salary = $object; $sumpaid = 0.0; -// Formulaire de creation d'un paiement de charge +// Payment creation form if ($action == 'create') { $salary->accountid = $salary->fk_account ? $salary->fk_account : $salary->accountid; $salary->fk_typepayment = $salary->mode_reglement_id ? $salary->mode_reglement_id : $salary->paiementtype; @@ -328,7 +328,7 @@ if ($action == 'create') { print '
'; - // Bouton Save payment + // Save payment button print '
'; print '
'; print $form->buttonsSaveCancel("ToMakePayment", "Cancel", array(), true); diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index cd4f62f5abc..32c12ad3715 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -524,6 +524,9 @@ if (empty($reshook)) { $object->country_code = $tmparray['code']; $object->country = $tmparray['label']; } + if (empty($object->tva_intra)) { + $object->tva_intra = $object->calculateVATNumberFromProperties($object); + } } } diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 6e5a3caa6df..fbd33d6a524 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -5391,15 +5391,22 @@ class Societe extends CommonObject public function calculateVATNumberFromProperties($thirdparty) { if ($thirdparty->country_code == 'FR' && empty($thirdparty->tva_intra) && !empty($thirdparty->tva_assuj)) { - $siren = trim($thirdparty->idprof1); - if (empty($siren)) { - $siren = (int) substr(str_replace(' ', '', $thirdparty->idprof2), 0, 9); + require_once DOL_DOCUMENT_ROOT.'/core/lib/profid.lib.php'; + + $siren = preg_replace('/\s+/', '', (string) $thirdparty->idprof1); + $siret = preg_replace('/\s+/', '', (string) $thirdparty->idprof2); + if (!isValidSiren($siren)) { + if (!isValidSiret($siret)) { + return ''; + } + + $siren = substr($siret, 0, 9); } if (!empty($siren)) { // [FR + key code + SIREN number ] // Key VAT = [12 + 3 * (SIREN modulo 97)] modulo 97 - $cle = (12 + 3 * $siren % 97) % 97; - $tva_intra = 'FR' . $cle . $siren; + $cle = (12 + 3 * (((int) $siren) % 97)) % 97; + $tva_intra = 'FR' . str_pad((string) $cle, 2, '0', STR_PAD_LEFT) . $siren; } } diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 99e13e576bf..88bf860872a 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -1,7 +1,7 @@ * Copyright (C) 2016 Christophe Battarel - * Copyright (C) 2019-2025 Frédéric France + * Copyright (C) 2019-2026 Frédéric France * Copyright (C) 2020 Laurent Destailleur * Copyright (C) 2023-2025 Charlene Benke * Copyright (C) 2023-2024 Benjamin Falière @@ -1460,7 +1460,7 @@ class Ticket extends CommonObject } /** - * Charge dans cache la liste des sévérité de tickets (paramétrable dans dictionnaire) + * Load into cache the list of ticket severities (configurable in the dictionary) * * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ diff --git a/htdocs/ticket/contact.php b/htdocs/ticket/contact.php index 2cdee73461a..fd19f868a9f 100644 --- a/htdocs/ticket/contact.php +++ b/htdocs/ticket/contact.php @@ -3,7 +3,7 @@ * Copyright (C) 2011 Regis Houssin * Copyright (C) 2016 Christophe Battarel * Copyright (C) 2024-2025 MDW - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -118,7 +118,7 @@ if ($action == 'addcontact' && $user->hasRight('ticket', 'write')) { $internal_contacts = $object->listeContact(-1, 'internal', 0, 'SUPPORTTEC'); foreach ($internal_contacts as $key => $contact) { if ($contact['id'] !== $contactid) { - //print "user à effacer : ".$useroriginassign; + //print "user to delete: ".$useroriginassign; $result = $object->delete_contact($contact['rowid']); if ($result < 0) { $error++; diff --git a/htdocs/user/document.php b/htdocs/user/document.php index 915259c18d4..aea3c228f36 100644 --- a/htdocs/user/document.php +++ b/htdocs/user/document.php @@ -4,7 +4,7 @@ * Copyright (C) 2005-2015 Regis Houssin * Copyright (C) 2010 Juanjo Menent * Copyright (C) 2013 Cédric Salvador - * Copyright (C) 2024-2025 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2025 MDW * * This program is free software; you can redistribute it and/or modify @@ -69,7 +69,7 @@ if (getDolGlobalString('MAIN_USE_ADVANCED_PERMS')) { } // Define value to know what current user can do on properties of edited user if ($id) { - // $user est le user qui edite, $id est l'id de l'utilisateur edite + // $user is the user doing the edit, $id is the id of the user being edited $permissiontoedit = ((($user->id == $id) && $user->hasRight("user", "self", "write")) || (($user->id != $id) && $user->hasRight("user", "user", "write"))); $permissiontoeditpassword = ((($user->id == $id) && $user->hasRight("user", "self", "password")) || (($user->id != $id) && $user->hasRight("user", "user", "password"))); } diff --git a/htdocs/user/home.php b/htdocs/user/home.php index fcb829be61f..30d61a6090e 100644 --- a/htdocs/user/home.php +++ b/htdocs/user/home.php @@ -39,7 +39,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'userhome'; // To manage different context of search if (!$user->hasRight('user', 'user', 'lire') && !$user->admin) { - // Redirection vers la page de l'utilisateur + // Redirect to the user's own page header("Location: card.php?id=".$user->id); exit; } diff --git a/htdocs/user/ldap.php b/htdocs/user/ldap.php index 615a96564c0..07277b5863e 100644 --- a/htdocs/user/ldap.php +++ b/htdocs/user/ldap.php @@ -2,7 +2,7 @@ /* Copyright (C) 2006-2012 Laurent Destailleur * Copyright (C) 2006-2021 Regis Houssin * Copyright (C) 2024 William Mead - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,7 +21,7 @@ /** * \file htdocs/user/ldap.php * \ingroup ldap - * \brief Page fiche LDAP utilisateur + * \brief LDAP user record page */ // Load Dolibarr environment diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php index 2490a5aeb83..241be182f7d 100644 --- a/htdocs/user/param_ihm.php +++ b/htdocs/user/param_ihm.php @@ -55,7 +55,7 @@ if (!isset($id) || empty($id)) { } '@phan-var-force int<1,max> $id'; -// $user est le user qui edite, $id est l'id de l'utilisateur edite +// $user is the user doing the edit, $id is the id of the user being edited $caneditfield = ((($user->id == $id) && $user->hasRight("user", "self", "write")) || (($user->id != $id) && $user->hasRight("user", "user", "write"))); diff --git a/scripts/user/migrate_picture_path.php b/scripts/user/migrate_picture_path.php index 54ba0ccf8b3..5c72162d2b4 100755 --- a/scripts/user/migrate_picture_path.php +++ b/scripts/user/migrate_picture_path.php @@ -3,7 +3,7 @@ /* * Copyright (C) 2007-2016 Laurent Destailleur * Copyright (C) 2015 Jean Heimburger - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2025 MDW * * This program is free software; you can redistribute it and/or modify @@ -114,7 +114,7 @@ function migrate_user_filespath($u) { global $conf; - // Les fichiers implodets des users sont toujours sur l'entité 1 + // User files are always stored on entity 1 $dir = $conf->user->dir_output; $origin = $dir.'/'.get_exdir($u->id, 2, 0, 0, $u, 'user'); $destin = $dir.'/'.$u->id; diff --git a/scripts/user/sync_groups_ldap2dolibarr.php b/scripts/user/sync_groups_ldap2dolibarr.php index d81f27179af..8d744bd0b2e 100755 --- a/scripts/user/sync_groups_ldap2dolibarr.php +++ b/scripts/user/sync_groups_ldap2dolibarr.php @@ -4,7 +4,7 @@ * Copyright (C) 2005 Rodolphe Quiedeville * Copyright (C) 2006-2012 Laurent Destailleur * Copyright (C) 2013 Maxime Kohlhaas - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2025 MDW * * This program is free software; you can redistribute it and/or modify @@ -42,12 +42,6 @@ if (substr($sapi_type, 0, 3) == 'cgi') { } require_once $path."../../htdocs/master.inc.php"; -require_once DOL_DOCUMENT_ROOT.'/core/lib/functionscli.lib.php'; -require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"; -require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php"; -require_once DOL_DOCUMENT_ROOT."/user/class/user.class.php"; -require_once DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php"; - /** * @var Conf $conf * @var DoliDB $db @@ -55,6 +49,11 @@ require_once DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php"; * @var Translate $langs * @var User $user */ +require_once DOL_DOCUMENT_ROOT.'/core/lib/functionscli.lib.php'; +require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"; +require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php"; +require_once DOL_DOCUMENT_ROOT."/user/class/user.class.php"; +require_once DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php"; $langs->loadLangs(array("main", "errors")); @@ -120,7 +119,7 @@ print "----- To Dolibarr database:\n"; print "type=".$conf->db->type."\n"; print "host=".$conf->db->host."\n"; print "port=".$conf->db->port."\n"; -print "login=".$conf->db->user."\n"; +print "login=".(string) $conf->db->user."\n"; print "database=".$conf->db->name."\n"; print "----- Options:\n"; print "commitiferror=".$forcecommit."\n"; @@ -198,11 +197,11 @@ if ($result >= 0) { if ($tmpkey === 'count') { // @phpstan-ignore-line continue; } - if (empty($userList[$userdn])) { // Récupération de l'utilisateur - // Schéma rfc2307: les membres sont listés dans l'attribut memberUid sous form de login uniquement + if (empty($userList[$userdn])) { // Fetch the user + // rfc2307 schema: members are listed in the memberUid attribute as login names only if (getDolGlobalString('LDAP_GROUP_FIELD_GROUPMEMBERS') === 'memberUid') { $userKey = array($userdn); - } else { // Pour les autres schémas, les membres sont listés sous forme de DN completes + } else { // For other schemas, members are listed as full DNs $userFilter = explode(',', $userdn); $userKey = $ldap->getAttributeValues('('.$userFilter[0].')', getDolGlobalString('LDAP_KEY_USERS')); } @@ -213,9 +212,9 @@ if ($result >= 0) { $fuser = new User($db); if (getDolGlobalString('LDAP_KEY_USERS') == getDolGlobalString('LDAP_FIELD_SID')) { - $fuser->fetch(0, '', $userKey[0]); // Chargement du user concerné par le SID + $fuser->fetch(0, '', $userKey[0]); // Load the user matched by SID } elseif (getDolGlobalString('LDAP_KEY_USERS') == getDolGlobalString('LDAP_FIELD_LOGIN')) { - $fuser->fetch(0, $userKey[0]); // Chargement du user concerné par le login + $fuser->fetch(0, $userKey[0]); // Load the user matched by login } $userList[$userdn] = $fuser; diff --git a/scripts/user/sync_users_ldap2dolibarr.php b/scripts/user/sync_users_ldap2dolibarr.php index 451c7b1d86c..c975e2f2b69 100755 --- a/scripts/user/sync_users_ldap2dolibarr.php +++ b/scripts/user/sync_users_ldap2dolibarr.php @@ -3,7 +3,7 @@ /** * Copyright (C) 2005 Rodolphe Quiedeville * Copyright (C) 2006-2012 Laurent Destailleur - * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024-2026 Frédéric France * Copyright (C) 2025 MDW * * This program is free software; you can redistribute it and/or modify @@ -138,7 +138,7 @@ print "----- To Dolibarr database:\n"; print "type=".$conf->db->type."\n"; print "host=".$conf->db->host."\n"; print "port=".$conf->db->port."\n"; -print "login=".$conf->db->user."\n"; +print "login=".(string) $conf->db->user."\n"; print "database=".$conf->db->name."\n"; print "----- Options:\n"; print "commitiferror=".$forcecommit."\n"; @@ -204,9 +204,9 @@ if ($result >= 0) { $fuser = new User($db); if (getDolGlobalString('LDAP_KEY_USERS') == getDolGlobalString('LDAP_FIELD_SID')) { - $fuser->fetch(0, '', $ldapuser[getDolGlobalString('LDAP_KEY_USERS')]); // Chargement du user concerné par le SID + $fuser->fetch(0, '', $ldapuser[getDolGlobalString('LDAP_KEY_USERS')]); // Load the user matched by SID } elseif (getDolGlobalString('LDAP_KEY_USERS') == getDolGlobalString('LDAP_FIELD_LOGIN')) { - $fuser->fetch(0, $ldapuser[getDolGlobalString('LDAP_KEY_USERS')]); // Chargement du user concerné par le login + $fuser->fetch(0, $ldapuser[getDolGlobalString('LDAP_KEY_USERS')]); // Load the user matched by login } // Propriete membre
'.$form->textwithpicto($langs->trans("Total"), $langs->trans("Totalforthispage")).''.$total_qty.''.price($total_ht).'