';
+ }
+
+ print '';
+}
+
/**
- * Show footer of company in HTML pages
+ * Show footer of company in HTML public pages
*
* @param Societe $fromcompany Third party
* @param Translate $langs Output language
diff --git a/htdocs/core/modules/commande/doc/pdf_proforma.modules.php b/htdocs/core/modules/commande/doc/pdf_proforma.modules.php
index e4199a5bf8e..0b068fbfa22 100644
--- a/htdocs/core/modules/commande/doc/pdf_proforma.modules.php
+++ b/htdocs/core/modules/commande/doc/pdf_proforma.modules.php
@@ -47,7 +47,7 @@ class pdf_proforma extends pdf_eratosthene
*/
public function __construct($db)
{
- global $conf, $langs, $mysoc;
+ global $langs;
parent::__construct($db);
diff --git a/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php b/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php
index 94878e5d2ae..ff383d66c81 100644
--- a/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php
+++ b/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php
@@ -195,8 +195,8 @@ class doc_generic_project_odt extends ModelePDFProjects
'task_label' => $task->label,
'task_description' => $task->description,
'task_fk_parent' => $task->fk_task_parent,
- 'task_duration' => $task->duration,
- 'task_duration_hour' => convertSecondToTime($task->duration, 'all'),
+ 'task_duration' => $task->duration_effective,
+ 'task_duration_hour' => convertSecondToTime($task->duration_effective, 'all'),
'task_planned_workload' => $task->planned_workload,
'task_planned_workload_hour' => convertSecondToTime($task->planned_workload, 'all'),
'task_progress' => $task->progress,
diff --git a/htdocs/core/modules/project/doc/pdf_timespent.modules.php b/htdocs/core/modules/project/doc/pdf_timespent.modules.php
index 70f83aec0e3..6c91a182b0f 100644
--- a/htdocs/core/modules/project/doc/pdf_timespent.modules.php
+++ b/htdocs/core/modules/project/doc/pdf_timespent.modules.php
@@ -307,7 +307,7 @@ class pdf_timespent extends ModelePDFProjects
//$progress=($object->lines[$i]->progress?$object->lines[$i]->progress.'%':'');
$datestart = dol_print_date($object->lines[$i]->date_start, 'day');
$dateend = dol_print_date($object->lines[$i]->date_end, 'day');
- $duration = convertSecondToTime((int) $object->lines[$i]->duration, 'allhourmin');
+ $duration = convertSecondToTime((int) $object->lines[$i]->duration_effective, 'allhourmin');
$showpricebeforepagebreak = 1;
diff --git a/htdocs/core/tpl/commonfields_add.tpl.php b/htdocs/core/tpl/commonfields_add.tpl.php
index 8e1c87a7a2e..787537d1381 100644
--- a/htdocs/core/tpl/commonfields_add.tpl.php
+++ b/htdocs/core/tpl/commonfields_add.tpl.php
@@ -1,7 +1,8 @@
- * Copyright (C) 2024 MDW
+/* Copyright (C) 2017 Laurent Destailleur
+ * Copyright (C) 2024 MDW
* Copyright (C) 2024 Frédéric France
+ * Copyright (C) 2025 Benjamin Falière
*
* 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
@@ -69,11 +70,13 @@ foreach ($object->fields as $key => $val) {
}
print '"';
print '>';
+ print '';
print '';
print '
';
if (!empty($val['picto'])) {
diff --git a/htdocs/document.php b/htdocs/document.php
index 7f8a17c3d0e..bab5a9b5b5e 100644
--- a/htdocs/document.php
+++ b/htdocs/document.php
@@ -79,6 +79,8 @@ if ((isset($_GET["modulepart"]) && $_GET["modulepart"] == 'medias')) {
/**
* Header empty
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $head Optional head lines
* @param string $title HTML title
* @param string $help_url Url links to help page
@@ -103,6 +105,8 @@ function llxHeader($head = '', $title = '', $help_url = '', $target = '', $disab
/**
* Footer empty
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @ignore
* @param string $comment A text to add as HTML comment into HTML generated page
* @param string $zone 'private' (for private pages) or 'public' (for public pages)
diff --git a/htdocs/ecm/class/ecmfiles.class.php b/htdocs/ecm/class/ecmfiles.class.php
index 142aaf70270..28db17eceb0 100644
--- a/htdocs/ecm/class/ecmfiles.class.php
+++ b/htdocs/ecm/class/ecmfiles.class.php
@@ -1013,9 +1013,17 @@ class EcmFiles extends CommonObject
} elseif ($option == 'commande_fournisseur') {
$tmppath = preg_replace('/^fournisseur\/commande\//', '', $this->filepath);
} else {
- $tmppath = preg_replace('/^[^\/]+\//', '', $this->filepath);
+ if ((int) $this->entity > 1) {
+ // Remove the part "entityid/commande/" into "entityid/commande/REFXXX" to get only the ref
+ $tmppath = preg_replace('/^\d+\/[^\/]+\//', '', $this->filepath);
+ } else {
+ // Remove the part "commande/" into "commande/REFXXX" to get only the ref
+ $tmppath = preg_replace('/^[^\/]+\//', '', $this->filepath);
+ }
}
- $url = DOL_URL_ROOT.'/document.php?modulepart='.urlencode($option).'&file='.urlencode($tmppath.'/'.$this->filename).'&entity='.$this->entity;
+ //var_dump($this->filepath);
+
+ $url = DOL_URL_ROOT.'/document.php?modulepart='.urlencode($option).'&file='.urlencode($tmppath.'/'.$this->filename).'&entity='.((int) $this->entity);
} else {
$url = DOL_URL_ROOT.'/ecm/file_card.php?id='.$this->id;
}
diff --git a/htdocs/expedition/dispatch.php b/htdocs/expedition/dispatch.php
index 0711f4597fb..b2baa27b425 100644
--- a/htdocs/expedition/dispatch.php
+++ b/htdocs/expedition/dispatch.php
@@ -785,13 +785,16 @@ if ($object->id > 0 || !empty($object->ref)) {
print '
'; // Dispatch column
print '
'; // Warehouse column
- $sql = "SELECT ed.rowid, ed.qty, ed.fk_entrepot,";
- $sql .= " eb.batch, eb.eatby, eb.sellby, cd.fk_product";
- $sql .= " FROM ".MAIN_DB_PREFIX."expeditiondet as ed";
- $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."expeditiondet_batch as eb on ed.rowid = eb.fk_expeditiondet";
- $sql .= " JOIN ".MAIN_DB_PREFIX."commandedet as cd on ed.fk_elementdet = cd.rowid";
- $sql .= " WHERE ed.fk_elementdet =".(int) $objp->rowid;
- $sql .= " AND ed.fk_expedition =".(int) $object->id;
+ $sql = "SELECT ed.rowid";
+ $sql .= ", cd.fk_product";
+ $sql .= ", ".$db->ifsql('eb.rowid IS NULL', 'ed.qty', 'eb.qty')." as qty";
+ $sql .= ", ed.fk_entrepot";
+ $sql .= ", eb.batch, eb.eatby, eb.sellby";
+ $sql .= " FROM ".$db->prefix()."expeditiondet as ed";
+ $sql .= " LEFT JOIN ".$db->prefix()."expeditiondet_batch as eb on ed.rowid = eb.fk_expeditiondet";
+ $sql .= " INNER JOIN ".$db->prefix()."commandedet as cd on ed.fk_origin_line = cd.rowid";
+ $sql .= " WHERE ed.fk_origin_line = ".(int) $objp->rowid;
+ $sql .= " AND ed.fk_expedition = ".(int) $object->id;
$sql .= " ORDER BY ed.rowid, ed.fk_elementdet";
$resultsql = $db->query($sql);
diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php
index c0d84059027..a964ea621b4 100644
--- a/htdocs/expedition/shipment.php
+++ b/htdocs/expedition/shipment.php
@@ -94,7 +94,7 @@ $result = restrictedArea($user, 'expedition', 0, ''); // We use 0 for id, becaus
$permissiontoread = $user->hasRight('expedition', 'lire');
$permissiontoadd = $user->hasRight('expedition', 'creer'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
-$permissiontodelete = $user->hasRight('expedition', 'supprimer') || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT);
+$permissiontodelete = $user->hasRight('expedition', 'supprimer') || ($permissiontoadd && ((int) $object->status == $object::STATUS_DRAFT));
$permissionnote = $user->hasRight('expedition', 'creer'); // Used by the include of actions_setnotes.inc.php
$permissiondellink = $user->hasRight('expedition', 'creer'); // Used by the include of actions_dellink.inc.php
diff --git a/htdocs/fourn/facture/card-rec.php b/htdocs/fourn/facture/card-rec.php
index 86150a73118..c3529974a76 100644
--- a/htdocs/fourn/facture/card-rec.php
+++ b/htdocs/fourn/facture/card-rec.php
@@ -737,6 +737,7 @@ if (empty($reshook)) {
unset($_POST['date_end_fill']);
unset($_POST['situations']);
unset($_POST['progress']);
+ unset($_POST['fourn_ref']);
} else {
setEventMessages($object->error, $object->errors, 'errors');
}
@@ -879,6 +880,7 @@ if (empty($reshook)) {
unset($_POST['date_endyear']);
unset($_POST['situations']);
unset($_POST['progress']);
+ unset($_POST['fourn_ref']);
} else {
setEventMessages($object->error, $object->errors, 'errors');
}
diff --git a/htdocs/imports/emptyexample.php b/htdocs/imports/emptyexample.php
index cd05fcfe1ac..6673681f83d 100644
--- a/htdocs/imports/emptyexample.php
+++ b/htdocs/imports/emptyexample.php
@@ -31,6 +31,8 @@ if (!defined('NOTOKENRENEWAL')) {
/**
* This file is a wrapper, so empty header
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $head Optional head lines
* @param string $title HTML title
* @param string $help_url Url links to help page
@@ -48,7 +50,7 @@ if (!defined('NOTOKENRENEWAL')) {
* @param int $disablenoindex Disable the "noindex" on meta robot header
* @return void
*/
-function llxHeaderEmptyExample($head = '', $title = '', $help_url = '', $target = '', $disablejs = 0, $disablehead = 0, $arrayofjs = '', $arrayofcss = '', $morequerystring = '', $morecssonbody = '', $replacemainareaby = '', $disablenofollow = 0, $disablenoindex = 0)
+function llxHeader($head = '', $title = '', $help_url = '', $target = '', $disablejs = 0, $disablehead = 0, $arrayofjs = '', $arrayofcss = '', $morequerystring = '', $morecssonbody = '', $replacemainareaby = '', $disablenofollow = 0, $disablenoindex = 0) // @phan-suppress-current-line PhanRedefineFunction
{
print 'Build an import example file';
}
@@ -56,12 +58,14 @@ function llxHeaderEmptyExample($head = '', $title = '', $help_url = '', $target
/**
* This file is a wrapper, so empty footer
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $comment A text to add as HTML comment into HTML generated page
* @param string $zone 'private' (for private pages) or 'public' (for public pages)
* @param int $disabledoutputofmessages Clear all messages stored into session without displaying them
* @return void
*/
-function llxFooterEmptyExample($comment = '', $zone = 'private', $disabledoutputofmessages = 0)
+function llxFooter($comment = '', $zone = 'private', $disabledoutputofmessages = 0) // @phan-suppress-current-line PhanRedefineFunction
{
print '';
}
@@ -90,9 +94,9 @@ $langs->load("exports");
if (empty($datatoimport)) {
$user->loadRights();
- llxHeaderEmptyExample();
+ llxHeader();
print '
Bad value for datatoimport.
';
- llxFooterEmptyExample();
+ llxFooter();
exit;
}
diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang
index c89a5f9a3f9..1af4cfa6c57 100644
--- a/htdocs/langs/en_US/accountancy.lang
+++ b/htdocs/langs/en_US/accountancy.lang
@@ -412,6 +412,7 @@ SaleExport=Export sale
SaleEEC=Sale in EEC
SaleEECWithVAT=Sale in EEC with a VAT not null, so we suppose this is NOT an intracommunautary sale and the suggested account is the standard product account.
SaleEECWithoutVATNumber=Sale in EEC with no VAT but the VAT ID of third party is not defined. We fall back on the account for standard sales. You can fix the VAT ID of the third party, or change the product account suggested for binding if needed.
+AnySale=Any sale
ForbiddenTransactionAlreadyExported=Forbidden: The transaction has been validated and/or exported.
ForbiddenTransactionAlreadyValidated=Forbidden: The transaction has been validated.
DataMustHaveBeenTransferredInAccounting=The transfer of data in accounting must have been done
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index df17e0ee429..a8c61ef799f 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -2137,6 +2137,7 @@ MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
MAIN_DOCUMENTS_LOGO_HEIGHT=Height for logo on PDF
DOC_SHOW_FIRST_SALES_REP=Show first sales representative
MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Add column for picture on proposal lines
+MAIN_GENERATE_DOCUMENTS_WITH_PICTURE=Add column for picture on document lines
MAIN_DOCUMENTS_WITH_PICTURE_WIDTH=Width of the column if a picture is added on lines
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_UNIT_PRICE=Hide the unit price column on quotation requests
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_TOTAL_COLUMN=Hide the total price column on quotation requests
@@ -2611,3 +2612,5 @@ UploadExtensionRestriction=List of forbidden file extensions to upload
UploadExtensionRestrictionExemple=htm, html, shtml, js, php
Privileges=Privileges
FieldsLinked=Fields Linked
+PDF_XXX_SHOW_PRICE_INCL_TAX=Show column Price including tax
+AvailableWithSomePDFTemplatesOnly=Feature not supported on old PDF templates
diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang
index 1f9126c5962..038534f56fa 100644
--- a/htdocs/langs/en_US/errors.lang
+++ b/htdocs/langs/en_US/errors.lang
@@ -31,6 +31,7 @@ ErrorFromToAccountsMustDiffers=Source and targets bank accounts must be differen
ErrorBadThirdPartyName=Bad value for third-party name
ForbiddenBySetupRules=Forbidden by setup rules
ErrorProdIdIsMandatory=The %s is mandatory
+ErrorProdIdIsMandatoryForEuThirdparties=The %s is mandatory for customers in EEC
ErrorAccountancyCodeCustomerIsMandatory=The accountancy code of customer %s is mandatory
ErrorAccountancyCodeSupplierIsMandatory=The accountancy code of supplier %s is mandatory
ErrorBadCustomerCodeSyntax=Bad syntax for customer code
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index 0b07dd0b80a..b08badda776 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -1633,6 +1633,8 @@ if (!function_exists("llxHeader")) {
/**
* Show HTML header HTML + BODY + Top menu + left menu + DIV
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $head Optional head lines
* @param string $title HTML title
* @param string $help_url Url links to help page
@@ -1649,7 +1651,7 @@ if (!function_exists("llxHeader")) {
* @param int $disablenofollow Disable the "nofollow" on meta robot header
* @param int $disablenoindex Disable the "noindex" on meta robot header
* @return void
- * @phan-suppress PhanRedefineFunction (Also defined in htdocs/asterisk/wrapper)
+ * @phan-suppress PhanRedefineFunction
*/
function llxHeader($head = '', $title = '', $help_url = '', $target = '', $disablejs = 0, $disablehead = 0, $arrayofjs = '', $arrayofcss = '', $morequerystring = '', $morecssonbody = '', $replacemainareaby = '', $disablenofollow = 0, $disablenoindex = 0)
{
@@ -3876,11 +3878,13 @@ if (!function_exists("llxFooter")) {
* Close div /DIV class=fiche + /DIV id-right + /DIV id-container + /BODY + /HTML.
* If global var $delayedhtmlcontent was filled, we output it just before closing the body.
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $comment A text to add as HTML comment into HTML generated page
* @param string $zone 'private' (for private pages) or 'public' (for public pages)
* @param int $disabledoutputofmessages Clear all messages stored into session without displaying them
* @return void
- * @phan-suppress PhanRedefineFunction // Also defined at asterisk/wrapper.php
+ * @phan-suppress PhanRedefineFunction
*/
function llxFooter($comment = '', $zone = 'private', $disabledoutputofmessages = 0)
{
diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php
index b406d67b761..37c0f19ee04 100644
--- a/htdocs/product/class/product.class.php
+++ b/htdocs/product/class/product.class.php
@@ -5561,8 +5561,6 @@ class Product extends CommonObject
*/
public function getChildsArbo($id, $firstlevelonly = 0, $level = 1, $parents = array())
{
- global $alreadyfound;
-
if (empty($id)) {
return array();
}
@@ -5579,9 +5577,6 @@ class Product extends CommonObject
dol_syslog(get_class($this).'::getChildsArbo id='.$id.' level='.$level. ' parents='.(is_array($parents) ? implode(',', $parents) : $parents), LOG_DEBUG);
- if ($level == 1) {
- $alreadyfound = array($id => 1); // We init array of found object to start of tree, so if we found it later (should not happened), we stop immediately
- }
// Protection against infinite loop
if ($level > 30) {
return array();
@@ -5590,14 +5585,16 @@ class Product extends CommonObject
$res = $this->db->query($sql);
if ($res) {
$prods = array();
+ if ($this->db->num_rows($res) > 0) {
+ $parents[] = $id;
+ }
+
while ($rec = $this->db->fetch_array($res)) {
- if (!empty($alreadyfound[$rec['rowid']])) {
+ if (in_array($rec['id'], $parents)) {
dol_syslog(get_class($this).'::getChildsArbo the product id='.$rec['rowid'].' was already found at a higher level in tree. We discard to avoid infinite loop', LOG_WARNING);
- if (in_array($rec['id'], $parents)) {
- continue; // We discard this child if it is already found at a higher level in tree in the same branch.
- }
+ continue; // We discard this child if it is already found at a higher level in tree in the same branch.
}
- $alreadyfound[$rec['rowid']] = 1;
+
$prods[$rec['rowid']] = array(
0 => $rec['rowid'],
1 => $rec['qty'],
@@ -5611,7 +5608,6 @@ class Product extends CommonObject
//$prods[$this->db->escape($rec['label'])]= array(0=>$rec['id'],1=>$rec['qty'],2=>$rec['fk_product_type']);
//$prods[$this->db->escape($rec['label'])]= array(0=>$rec['id'],1=>$rec['qty']);
if (empty($firstlevelonly)) {
- $parents[] = $rec['rowid'];
$listofchilds = $this->getChildsArbo($rec['rowid'], 0, $level + 1, $parents);
foreach ($listofchilds as $keyChild => $valueChild) {
$prods[$rec['rowid']]['childs'][$keyChild] = $valueChild;
diff --git a/htdocs/public/agenda/agendaexport.php b/htdocs/public/agenda/agendaexport.php
index 12046197b2a..921d652d1a5 100644
--- a/htdocs/public/agenda/agendaexport.php
+++ b/htdocs/public/agenda/agendaexport.php
@@ -1,6 +1,7 @@
* Copyright (C) 2024 Frédéric France
+ * Copyright (C) 2025 MDW
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -58,6 +59,8 @@ if (!defined('NOIPCHECK')) {
/**
* Header function
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $title Title
* @param string $head Head array
* @param int $disablejs More content into html header
@@ -66,16 +69,18 @@ if (!defined('NOIPCHECK')) {
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
print 'Export agenda cal';
}
/**
* Footer function
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @return void
*/
-function llxFooterVierge()
+function llxFooterVierge() // @phan-suppress-current-line PhanRedefineFunction
{
print '';
}
diff --git a/htdocs/public/bookcal/index.php b/htdocs/public/bookcal/index.php
index fc41027d6a8..41e25d9d24e 100644
--- a/htdocs/public/bookcal/index.php
+++ b/htdocs/public/bookcal/index.php
@@ -3,7 +3,7 @@
* Copyright (C) 2006-2017 Laurent Destailleur
* Copyright (C) 2009-2012 Regis Houssin
* Copyright (C) 2023 anthony Berton
- * Copyright (C) 2024 MDW
+ * Copyright (C) 2024-2025 MDW
* Copyright (C) 2024 Frédéric France
*
* This program is free software; you can redistribute it and/or modify
@@ -125,6 +125,8 @@ $errmsg = '';
/**
* Show header for booking
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $title Title
* @param string $head Head array
* @param int $disablejs More content into html header
@@ -133,7 +135,7 @@ $errmsg = '';
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
global $conf, $langs, $mysoc;
@@ -190,7 +192,7 @@ function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $
* Actions
*/
-if ($action == 'add' ) { // Test on permission not required here (anonymous action protected by mitigation of /public/... urls)
+if ($action == 'add') { // Test on permission not required here (anonymous action protected by mitigation of /public/... urls)
$error = 0;
$idcontact = 0;
$calendar = $object;
@@ -272,7 +274,7 @@ if ($action == 'add' ) { // Test on permission not required here (anonymous acti
'id' => $contact->id,
'mandatory' => 0,
'answer_status' => 0,
- 'transparency' =>0,
+ 'transparency' => 0,
]
];
$actioncomm->ip = getUserRemoteIP();
diff --git a/htdocs/public/company/new.php b/htdocs/public/company/new.php
index f7942e267c5..e52cc805ecd 100644
--- a/htdocs/public/company/new.php
+++ b/htdocs/public/company/new.php
@@ -8,7 +8,7 @@
* Copyright (C) 2018 Alexandre Spangaro
* Copyright (C) 2021 Waël Almoman
* Copyright (C) 2022 Udo Tamm
- * Copyright (C) 2024 MDW
+ * Copyright (C) 2024-2025 MDW
*
* 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
@@ -28,7 +28,6 @@
* \file htdocs/public/company/new.php
* \ingroup prospect
* \brief Example of form to add a new prospect
- *
*/
if (!defined('NOLOGIN')) {
@@ -110,6 +109,8 @@ $extrafields->fetch_name_optionals_label($objectsoc->table_element); // fetch op
/**
* Show header for new prospect
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $title Title
* @param string $head Head array
* @param int $disablejs More content into html header
@@ -118,7 +119,7 @@ $extrafields->fetch_name_optionals_label($objectsoc->table_element); // fetch op
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
global $conf, $langs, $mysoc;
@@ -165,9 +166,11 @@ function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $
/**
* Show footer for new societe
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @return void
*/
-function llxFooterVierge()
+function llxFooterVierge() // @phan-suppress-current-line PhanRedefineFunction
{
global $conf, $langs;
diff --git a/htdocs/public/cron/cron_run_jobs_by_url.php b/htdocs/public/cron/cron_run_jobs_by_url.php
index 2c2bd2e7670..bb27393d688 100644
--- a/htdocs/public/cron/cron_run_jobs_by_url.php
+++ b/htdocs/public/cron/cron_run_jobs_by_url.php
@@ -3,7 +3,7 @@
* Copyright (C) 2013 Florian Henry
* Copyright (C) 2013-2015 Laurent Destailleur
* Copyright (C) 2017 Regis Houssin
- * Copyright (C) 2024 MDW
+ * Copyright (C) 2024-2025 MDW
* Copyright (C) 2024 Frédéric France
*
* This program is free software; you can redistribute it and/or modify
@@ -161,6 +161,7 @@ if (is_array($object->lines) && (count($object->lines) > 0)) {
// Loop over job
foreach ($object->lines as $line) {
+ '@phan-var-force Cronjob $line';
dol_syslog("cron_run_jobs.php cronjobid: ".$line->id." priority=".$line->priority." entity=".$line->entity." label=".$line->label, LOG_DEBUG);
echo "cron_run_jobs.php cronjobid: ".$line->id." priority=".$line->priority." entity=".$line->entity." label=".$line->label;
diff --git a/htdocs/public/demo/index.php b/htdocs/public/demo/index.php
index 2c23ea5420c..386ed8cf212 100644
--- a/htdocs/public/demo/index.php
+++ b/htdocs/public/demo/index.php
@@ -4,7 +4,7 @@
* Copyright (C) 2010 Regis Houssin
* Copyright (C) 2015 Raphaël Doursenaud
* Copyright (C) 2024 Frédéric France
- * Copyright (C) 2024 MDW
+ * Copyright (C) 2024-2025 MDW
*
* 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
@@ -476,6 +476,8 @@ $db->close();
/**
* Show header for demo
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $title Title
* @param string $head Head array
* @param int $disablejs More content into html header
@@ -484,7 +486,7 @@ $db->close();
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
top_httphead();
@@ -496,9 +498,11 @@ function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $
/**
* Show footer for demo
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @return void
*/
-function llxFooterVierge()
+function llxFooterVierge() // @phan-suppress-current-line PhanRedefineFunction
{
printCommonFooter('public');
diff --git a/htdocs/public/donations/donateurs_code.php b/htdocs/public/donations/donateurs_code.php
index 8c84311b6c6..f9c5e526c62 100644
--- a/htdocs/public/donations/donateurs_code.php
+++ b/htdocs/public/donations/donateurs_code.php
@@ -1,6 +1,7 @@
* Copyright (C) 2018-2025 Frédéric France
+ * Copyright (C) 2025 MDW
*
* 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,6 +35,9 @@ if (!defined('NOIPCHECK')) {
// C'est un wrapper, donc header vierge
/**
+ * Header function
+ *
+ * Note: also called by functions.lib:recordNotFound
*
* @param string $title Title
* @param string $head Head array
@@ -43,16 +47,18 @@ if (!defined('NOIPCHECK')) {
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
print 'List of donators';
}
/**
- * Header function
+ * Footer function
+ *
+ * Note: also called by functions.lib:recordNotFound
*
* @return void
*/
-function llxFooterVierge()
+function llxFooterVierge() // @phan-suppress-current-line PhanRedefineFunction
{
print '';
}
diff --git a/htdocs/public/emailing/mailing-read.php b/htdocs/public/emailing/mailing-read.php
index 9504034a64a..20e4fde4f5a 100644
--- a/htdocs/public/emailing/mailing-read.php
+++ b/htdocs/public/emailing/mailing-read.php
@@ -4,6 +4,7 @@
* Copyright (C) 2005-2011 Laurent Destailleur
* Copyright (C) 2012 Florian Henry
* Copyright (C) 2024 Frédéric France
+ * Copyright (C) 2025 MDW
*
* 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
@@ -54,6 +55,8 @@ if (!defined('NOSESSION')) {
/**
* Header empty
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $head Optional head lines
* @param string $title HTML title
* @param string $help_url Url links to help page
@@ -71,7 +74,7 @@ if (!defined('NOSESSION')) {
* @param int $disablenoindex Disable the "noindex" on meta robot header
* @return void
*/
-function llxHeader($head = '', $title = '', $help_url = '', $target = '', $disablejs = 0, $disablehead = 0, $arrayofjs = '', $arrayofcss = '', $morequerystring = '', $morecssonbody = '', $replacemainareaby = '', $disablenofollow = 0, $disablenoindex = 0)
+function llxHeader($head = '', $title = '', $help_url = '', $target = '', $disablejs = 0, $disablehead = 0, $arrayofjs = '', $arrayofcss = '', $morequerystring = '', $morecssonbody = '', $replacemainareaby = '', $disablenofollow = 0, $disablenoindex = 0) // @phan-suppress-current-line PhanRedefineFunction
{
}
@@ -79,12 +82,14 @@ function llxHeader($head = '', $title = '', $help_url = '', $target = '', $disab
/**
* Footer empty
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $comment A text to add as HTML comment into HTML generated page
* @param string $zone 'private' (for private pages) or 'public' (for public pages)
* @param int $disabledoutputofmessages Clear all messages stored into session without displaying them
* @return void
*/
-function llxFooter($comment = '', $zone = 'private', $disabledoutputofmessages = 0)
+function llxFooter($comment = '', $zone = 'private', $disabledoutputofmessages = 0) // @phan-suppress-current-line PhanRedefineFunction
{
}
diff --git a/htdocs/public/eventorganization/attendee_new.php b/htdocs/public/eventorganization/attendee_new.php
index 5359e60e2b0..e477f039a7e 100644
--- a/htdocs/public/eventorganization/attendee_new.php
+++ b/htdocs/public/eventorganization/attendee_new.php
@@ -1,7 +1,7 @@
* Copyright (C) 2023 Laurent Destailleur
- * Copyright (C) 2024-2025 MDW
+ * Copyright (C) 2024-2025 MDW
* Copyright (C) 2024 Frédéric France
*
* This program is free software; you can redistribute it and/or modify
@@ -171,6 +171,8 @@ $extrafields->fetch_name_optionals_label($object->table_element); // fetch optio
/**
* Show header for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $title Title
* @param string $head Head array
* @param int $disablejs More content into html header
@@ -179,7 +181,7 @@ $extrafields->fetch_name_optionals_label($object->table_element); // fetch optio
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
global $conf, $langs, $mysoc;
@@ -226,9 +228,11 @@ function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $
/**
* Show footer for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @return void
*/
-function llxFooterVierge()
+function llxFooterVierge() // @phan-suppress-current-line PhanRedefineFunction
{
print '';
@@ -546,7 +550,7 @@ if (empty($reshook) && $action == 'add' && (!empty($conference->id) && $conferen
$resultprod = 0;
if (getDolGlobalInt('SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION') > 0) {
- $resultprod = $productforinvoicerow->fetch(getDolGlobalString('SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION'));
+ $resultprod = $productforinvoicerow->fetch(getDolGlobalInt('SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION'));
}
$facture = null;
@@ -664,7 +668,7 @@ if (empty($reshook) && $action == 'add' && (!empty($conference->id) && $conferen
// Get email content from template
$arraydefaultmessage = null;
- $labeltouse = getDolGlobalString('EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT');
+ $labeltouse = getDolGlobalInt('EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT');
if (!empty($labeltouse)) {
$arraydefaultmessage = $formmail->getEMailTemplate($db, 'eventorganization_send', $user, $outputlangs, $labeltouse, 1, '');
}
@@ -673,8 +677,8 @@ if (empty($reshook) && $action == 'add' && (!empty($conference->id) && $conferen
$subject = $arraydefaultmessage->topic;
$msg = $arraydefaultmessage->content;
} else {
- $subject = null;
- $msg = null;
+ $subject = '';
+ $msg = '';
}
$substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $thirdparty);
@@ -909,7 +913,7 @@ if ((!empty($conference->id) && $conference->status == ConferenceOrBooth::STATUS
print '
' . $langs->trans('State') . '
';
if ($country_code) {
print img_picto('', 'state', 'class="pictofixedwidth"');
- print $formcompany->select_state(GETPOST("state_id"), $country_code);
+ print $formcompany->select_state(GETPOSTINT("state_id"), $country_code);
} else {
print '';
}
diff --git a/htdocs/public/eventorganization/subscriptionok.php b/htdocs/public/eventorganization/subscriptionok.php
index 5b3be5058eb..daebe11fe54 100644
--- a/htdocs/public/eventorganization/subscriptionok.php
+++ b/htdocs/public/eventorganization/subscriptionok.php
@@ -5,6 +5,7 @@
* Copyright (C) 2021 Waël Almoman
* Copyright (C) 2021 Dorian Vabre
* Copyright (C) 2024 Frédéric France
+ * Copyright (C) 2025 MDW
*
* 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
@@ -96,6 +97,8 @@ if (empty($conf->eventorganization->enabled)) {
/**
* Show header for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $title Title
* @param string $head Head array
* @param int $disablejs More content into html header
@@ -104,7 +107,7 @@ if (empty($conf->eventorganization->enabled)) {
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderSubscriptionOk($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
global $user, $conf, $langs, $mysoc;
@@ -177,7 +180,7 @@ if (getDolGlobalString('ONLINE_PAYMENT_CSS_URL')) {
$conf->dol_hide_topmenu = 1;
$conf->dol_hide_leftmenu = 1;
-llxHeaderVierge($langs->trans("PaymentForm"));
+llxHeaderSubscriptionOk($langs->trans("PaymentForm"));
// Show message
diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php
index df26dbf783a..51c4191195d 100644
--- a/htdocs/public/members/new.php
+++ b/htdocs/public/members/new.php
@@ -8,7 +8,7 @@
* Copyright (C) 2018 Alexandre Spangaro
* Copyright (C) 2021 Waël Almoman
* Copyright (C) 2022 Udo Tamm
- * Copyright (C) 2024 MDW
+ * Copyright (C) 2024-2025 MDW
*
* 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
@@ -113,6 +113,8 @@ $user->loadDefaultValues();
/**
* Show header for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $title Title
* @param string $head Head array
* @param int $disablejs More content into html header
@@ -121,7 +123,7 @@ $user->loadDefaultValues();
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
global $conf, $langs, $mysoc;
@@ -168,9 +170,11 @@ function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $
/**
* Show footer for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @return void
*/
-function llxFooterVierge()
+function llxFooterVierge() // @phan-suppress-current-line PhanRedefineFunction
{
global $conf, $langs;
@@ -697,7 +701,7 @@ if (getDolGlobalString('MEMBER_SKIP_TABLE') || getDolGlobalString('MEMBER_NEWFOR
print '
';
}
diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php
index 2eca6baf62a..d1ccd9df208 100644
--- a/htdocs/public/payment/newpayment.php
+++ b/htdocs/public/payment/newpayment.php
@@ -191,7 +191,7 @@ if ($source == 'organizedeventregistration') { // Test on permission not requir
}
} elseif ($source == 'boothlocation') { // Test on permission not required here (anonymous action protected by mitigation of /public/... urls)
// Getting the amount to pay, the invoice, finding the thirdparty
- $invoiceid = GETPOST('ref');
+ $invoiceid = GETPOSTINT('ref');
$invoice = new Facture($db);
$resultinvoice = $invoice->fetch($invoiceid);
if ($resultinvoice <= 0) {
@@ -478,7 +478,7 @@ if ($action == 'dopayment') { // Test on permission not required here (anonymous
dol_syslog("SCRIPT_URI: ".(empty($_SERVER["SCRIPT_URI"]) ? '' : $_SERVER["SCRIPT_URI"]), LOG_DEBUG); // If defined script uri must match domain of PAYPAL_API_OK and PAYPAL_API_KO
// A redirect is added if API call successful
- $mesg = print_paypal_redirect($PAYPAL_API_PRICE, $PAYPAL_API_DEVISE, $PAYPAL_PAYMENT_TYPE, $PAYPAL_API_OK, $PAYPAL_API_KO, $FULLTAG);
+ $mesg = print_paypal_redirect((float) $PAYPAL_API_PRICE, $PAYPAL_API_DEVISE, $PAYPAL_PAYMENT_TYPE, $PAYPAL_API_OK, $PAYPAL_API_KO, $FULLTAG);
// If we are here, it means the Paypal redirect was not done, so we show error message
$action = '';
@@ -990,7 +990,7 @@ if (getDolGlobalString('MAIN_IMAGE_PUBLIC_PAYMENT')) {
print ''."\n";
-print ''."\n";
+print ''."\n";
// Additional information for each payment system
if (isModEnabled('paypal')) {
print ''."\n";
@@ -1022,7 +1022,7 @@ if (getDolGlobalString('PAYMENT_NEWFORM_TEXT')) {
}
if (empty($text)) {
$text .= '
'."\n";
// Amount
diff --git a/htdocs/public/payment/paymentko.php b/htdocs/public/payment/paymentko.php
index bcb33857397..88de37b4b11 100644
--- a/htdocs/public/payment/paymentko.php
+++ b/htdocs/public/payment/paymentko.php
@@ -3,7 +3,7 @@
* Copyright (C) 2006-2013 Laurent Destailleur
* Copyright (C) 2012 Regis Houssin
* Copyright (C) 2024-2025 Frédéric France
- * Copyright (C) 2024-2025 MDW
+ * Copyright (C) 2024-2025 MDW
*
* 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
@@ -93,10 +93,12 @@ if (isModEnabled('paypal')) {
$PAYPALPAYERID = GETPOST('PayerID');
}
}
+/*
if (isModEnabled('paybox')) {
}
if (isModEnabled('stripe')) {
}
+*/
$FULLTAG = GETPOST('FULLTAG');
if (empty($FULLTAG)) {
@@ -180,6 +182,7 @@ dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_payment');
// Set $appli for emails title
$appli = $mysoc->name;
$error = 0;
+$FinalPaymentAmt = 0;
if (!empty($_SESSION['ipaddress'])) { // To avoid to make action twice
@@ -214,7 +217,7 @@ if (!empty($_SESSION['ipaddress'])) { // To avoid to make action twice
if (empty($myCompanyDefaultLang) || $myCompanyDefaultLang === 'auto') {
// We must guess the language from the company country. We must not use the language of the visitor. This is a technical email for supervision
// so it must always be into the same language.
- $myCompanyDefaultLang = getLanguageCodeFromCountryCode($mysoc->country_code);
+ $myCompanyDefaultLang = (string) getLanguageCodeFromCountryCode($mysoc->country_code);
}
$companylangs = new Translate('', $conf);
diff --git a/htdocs/public/payment/paymentok.php b/htdocs/public/payment/paymentok.php
index 26b2db6e80b..24757d2b4a9 100644
--- a/htdocs/public/payment/paymentok.php
+++ b/htdocs/public/payment/paymentok.php
@@ -425,6 +425,7 @@ $appli = $mysoc->name;
// Make complementary actions (post payment actions if payment is ok)
$ispostactionok = 0;
+$paymentTypeId = 0;
$postactionmessages = array();
if ($ispaymentok) {
// Set permission for the anonymous user
@@ -466,7 +467,6 @@ if ($ispaymentok) {
dol_syslog("We have to process member with id=".$tmptag['MEM']." result1=".$result1." result2=".$result2, LOG_DEBUG, 0, '_payment');
if ($result1 > 0 && $result2 > 0) {
- $paymentTypeId = 0;
if ($paymentmethod == 'paybox') {
$paymentTypeId = getDolGlobalInt('PAYBOX_PAYMENT_MODE_FOR_PAYMENTS');
}
@@ -576,7 +576,7 @@ if ($ispaymentok) {
$datesubscription = dol_get_first_day((int) dol_print_date($datesubscription, "%Y"));
}
- $datesubend = null;
+ $datesubend = 0;
if ($datesubscription && $defaultdelay && $defaultdelayunit) {
$datesubend = dol_time_plus_duree($datesubscription, $defaultdelay, $defaultdelayunit);
// the new end date of subscription must be in futur
@@ -643,6 +643,7 @@ if ($ispaymentok) {
$option = 'none';
}
$sendalsoemail = 1;
+ $crowid = 0;
// Record the subscription then complementary actions
$db->begin();
@@ -663,10 +664,12 @@ if ($ispaymentok) {
}
}
+ $autocreatethirdparty = 0;
+
if (!$error) {
dol_syslog("Call ->subscriptionComplementaryActions option=".$option, LOG_DEBUG, 0, '_payment');
- $autocreatethirdparty = 1; // will create thirdparty if member not yet linked to a thirdparty
+ $autocreatethirdparty = 1; // will create third party if member not yet linked to a thirdparty
$result = $object->subscriptionComplementaryActions($crowid, $option, $accountid, $datesubscription, $paymentdate, $operation, $label, $amount, $num_chq, $emetteur_nom, $emetteur_banque, $autocreatethirdparty, $TRANSACTIONID, $service);
if ($result < 0) {
@@ -708,7 +711,7 @@ if ($ispaymentok) {
$service = 'StripeLive';
$servicestatus = 1;
}
- $stripeacc = null; // No Oauth/connect use for public pages
+ $stripeacc = ''; // No Oauth/connect use for public pages
$thirdparty = new Societe($db);
$thirdparty->fetch($thirdparty_id);
@@ -1298,7 +1301,7 @@ if ($ispaymentok) {
require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorbooth.class.php';
include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
$object = new Facture($db);
- $result = $object->fetch($ref);
+ $result = $object->fetch((int) $ref); // @phan-suppress-curren-line PhanPluginSuspiciousParamPosition
if ($result) {
$paymentTypeId = 0;
if ($paymentmethod == 'paybox') {
@@ -1439,7 +1442,7 @@ if ($ispaymentok) {
$thirdparty = new Societe($db);
$resultthirdparty = $thirdparty->fetch($attendeetovalidate->fk_soc);
if ($resultthirdparty < 0) {
- setEventMessages($resultthirdparty->error, $resultthirdparty->errors, "errors");
+ setEventMessages($thirdparty->error, $thirdparty->errors, "errors");
} else {
require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
@@ -1452,7 +1455,7 @@ if ($ispaymentok) {
// Get email content from template
$arraydefaultmessage = null;
- $idoftemplatetouse = getDolGlobalString('EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT'); // Email to send for Event organization registration
+ $idoftemplatetouse = getDolGlobalInt('EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT'); // Email to send for Event organization registration
if (!empty($idoftemplatetouse)) {
$arraydefaultmessage = $formmail->getEMailTemplate($db, 'conferenceorbooth', $user, $outputlangs, $idoftemplatetouse, 1, '');
@@ -1529,7 +1532,7 @@ if ($ispaymentok) {
require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorbooth.class.php';
include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
$object = new Facture($db);
- $result = $object->fetch($ref);
+ $result = $object->fetch((int) $ref); // @phan-suppress-current-line PhanPluginSuspiciousParamPosition
if ($result) {
$FinalPaymentAmt = $_SESSION["FinalPaymentAmt"];
@@ -1655,9 +1658,9 @@ if ($ispaymentok) {
$booth->status = ConferenceOrBooth::STATUS_SUGGESTED;
$resultboothupdate = $booth->update($user);
if ($resultboothupdate < 0) {
- // Finding the thirdparty by getting the invoice
+ // Finding the third party by getting the invoice
$invoice = new Facture($db);
- $resultinvoice = $invoice->fetch($ref);
+ $resultinvoice = $invoice->fetch((int) $ref); // @phan-suppress-current-line PhanPluginSuspiciousParamPosition
if ($resultinvoice < 0) {
$postactionmessages[] = 'Could not find the associated invoice.';
$ispostactionok = -1;
@@ -1681,7 +1684,7 @@ if ($ispaymentok) {
// Get email content from template
$arraydefaultmessage = null;
- $idoftemplatetouse = getDolGlobalString('EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH'); // Email sent after registration for a Booth
+ $idoftemplatetouse = getDolGlobalInt('EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH'); // Email sent after registration for a Booth
if (!empty($idoftemplatetouse)) {
$arraydefaultmessage = $formmail->getEMailTemplate($db, 'conferenceorbooth', $user, $outputlangs, $idoftemplatetouse, 1, '');
@@ -1960,11 +1963,11 @@ if ($ispaymentok) {
// Send an email to the admins
if ($sendemail) {
// Get default language to use for the company for supervision emails
- $myCompanyDefaultLang = $mysoc->default_lang;
+ $myCompanyDefaultLang = (string) $mysoc->default_lang;
if (empty($myCompanyDefaultLang) || $myCompanyDefaultLang === 'auto') {
// We must guess the language from the company country. We must not use the language of the visitor. This is a technical email for supervision
// so it must always be into the same language.
- $myCompanyDefaultLang = getLanguageCodeFromCountryCode($mysoc->country_code);
+ $myCompanyDefaultLang = (string) getLanguageCodeFromCountryCode($mysoc->country_code);
}
$companylangs = new Translate('', $conf);
@@ -2125,7 +2128,7 @@ unset($_SESSION["TRANSACTIONID"]);
if (empty($doactionsthenredirect)) {
print "\n\n";
- print "\n";
+ print "\n";
}
diff --git a/htdocs/public/project/index.php b/htdocs/public/project/index.php
index 8b399217059..cf1cfb715f2 100644
--- a/htdocs/public/project/index.php
+++ b/htdocs/public/project/index.php
@@ -1,6 +1,7 @@
* Copyright (C) 2024 Frédéric France
+ * Copyright (C) 2025 MDW
*
* 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
@@ -111,6 +112,8 @@ if (empty($conf->project->enabled)) {
/**
* Show header for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $title Title
* @param string $head Head array
* @param int $disablejs More content into html header
@@ -119,7 +122,7 @@ if (empty($conf->project->enabled)) {
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
global $conf, $langs, $mysoc;
@@ -168,9 +171,11 @@ function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $
/**
* Show footer for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @return void
*/
-function llxFooterVierge()
+function llxFooterVierge() // @phan-suppress-current-line PhanRedefineFunction
{
print '';
diff --git a/htdocs/public/project/new.php b/htdocs/public/project/new.php
index a794d2f5735..35dece5c502 100644
--- a/htdocs/public/project/new.php
+++ b/htdocs/public/project/new.php
@@ -6,7 +6,7 @@
* Copyright (C) 2012 J. Fernando Lagrange
* Copyright (C) 2018-2024 Frédéric France
* Copyright (C) 2018 Alexandre Spangaro
- * Copyright (C) 2024 MDW
+ * Copyright (C) 2024-2025 MDW
*
* 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
@@ -98,6 +98,8 @@ if (empty($conf->project->enabled)) {
/**
* Show header for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $title Title
* @param string $head Head array
* @param int $disablejs More content into html header
@@ -106,7 +108,7 @@ if (empty($conf->project->enabled)) {
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
global $conf, $langs, $mysoc;
@@ -154,9 +156,11 @@ function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $
/**
* Show footer for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @return void
*/
-function llxFooterVierge()
+function llxFooterVierge() // @phan-suppress-current-line PhanRedefineFunction
{
print '';
diff --git a/htdocs/public/project/suggestbooth.php b/htdocs/public/project/suggestbooth.php
index 4136c172d97..6e57db70241 100644
--- a/htdocs/public/project/suggestbooth.php
+++ b/htdocs/public/project/suggestbooth.php
@@ -125,6 +125,8 @@ if (empty($conf->eventorganization->enabled)) {
/**
* Show header for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $title Title
* @param string $head Head array
* @param int $disablejs More content into html header
@@ -133,7 +135,7 @@ if (empty($conf->eventorganization->enabled)) {
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
global $conf, $langs, $mysoc;
@@ -181,9 +183,11 @@ function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $
/**
* Show footer for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @return void
*/
-function llxFooterVierge()
+function llxFooterVierge() // @phan-suppress-current-line PhanRedefineFunction
{
print '';
@@ -331,7 +335,7 @@ if (empty($reshook) && $action == 'add') { // Test on permission not required he
// Adding supplier tag and tag from setup to thirdparty
$category = new Categorie($db);
- $resultcategory = $category->fetch(getDolGlobalString('EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH'));
+ $resultcategory = $category->fetch(getDolGlobalInt('EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH'));
if ($resultcategory <= 0) {
$error++;
@@ -433,7 +437,7 @@ if (empty($reshook) && $action == 'add') { // Test on permission not required he
$facture = null;
if (!empty((float) $project->price_booth)) {
$productforinvoicerow = new Product($db);
- $resultprod = $productforinvoicerow->fetch(getDolGlobalString('SERVICE_BOOTH_LOCATION'));
+ $resultprod = $productforinvoicerow->fetch(getDolGlobalInt('SERVICE_BOOTH_LOCATION'));
if ($resultprod < 0) {
$error++;
$errmsg .= $productforinvoicerow->error;
@@ -516,7 +520,7 @@ if (empty($reshook) && $action == 'add') { // Test on permission not required he
// Get email content from template
$arraydefaultmessage = null;
- $labeltouse = getDolGlobalString('EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH');
+ $labeltouse = getDolGlobalInt('EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH');
if (!empty($labeltouse)) {
$arraydefaultmessage = $formmail->getEMailTemplate($db, 'conferenceorbooth', $user, $outputlangs, $labeltouse, 1, '');
}
@@ -699,7 +703,7 @@ print '';
if (!getDolGlobalString('SOCIETE_DISABLE_STATE')) {
print '
'.$langs->trans('State').'
';
if ($country_code) {
- print $formcompany->select_state(GETPOST("state_id"), $country_code);
+ print $formcompany->select_state(GETPOSTINT("state_id"), $country_code);
} else {
print '';
}
diff --git a/htdocs/public/project/suggestconference.php b/htdocs/public/project/suggestconference.php
index ed927a0bd8d..26f4be49abd 100644
--- a/htdocs/public/project/suggestconference.php
+++ b/htdocs/public/project/suggestconference.php
@@ -126,6 +126,8 @@ if (empty($conf->eventorganization->enabled)) {
/**
* Show header for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $title Title
* @param string $head Head array
* @param int $disablejs More content into html header
@@ -134,7 +136,7 @@ if (empty($conf->eventorganization->enabled)) {
* @param string[]|string $arrayofcss Array of complementary css files
* @return void
*/
-function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
+function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = []) // @phan-suppress-current-line PhanRedefineFunction
{
global $conf, $langs, $mysoc;
@@ -182,9 +184,11 @@ function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $
/**
* Show footer for new member
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @return void
*/
-function llxFooterVierge()
+function llxFooterVierge() // @phan-suppress-current-line PhanRedefineFunction
{
print '';
@@ -330,7 +334,7 @@ if (empty($reshook) && $action == 'add') { // Test on permission not required he
// Adding supplier tag and tag from setup to thirdparty
$category = new Categorie($db);
- $resultcategory = $category->fetch(getDolGlobalString('EVENTORGANIZATION_CATEG_THIRDPARTY_CONF'));
+ $resultcategory = $category->fetch(getDolGlobalInt('EVENTORGANIZATION_CATEG_THIRDPARTY_CONF'));
if ($resultcategory <= 0) {
$error++;
@@ -446,7 +450,7 @@ if (empty($reshook) && $action == 'add') { // Test on permission not required he
// Get email content from template
$arraydefaultmessage = null;
- $labeltouse = getDolGlobalString('EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF');
+ $labeltouse = getDolGlobalInt('EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF');
if (!empty($labeltouse)) {
$arraydefaultmessage = $formmail->getEMailTemplate($db, 'conferenceorbooth', $user, $outputlangs, $labeltouse, 1, '');
}
@@ -635,7 +639,7 @@ print '
';
if (!getDolGlobalString('SOCIETE_DISABLE_STATE')) {
print '
'.$langs->trans('State').'
';
if ($country_code) {
- print $formcompany->select_state(GETPOST("state_id"), $country_code);
+ print $formcompany->select_state(GETPOSTINT("state_id"), $country_code);
} else {
print '';
}
diff --git a/htdocs/public/project/viewandvote.php b/htdocs/public/project/viewandvote.php
index 336c695d0bc..d36defc47b1 100644
--- a/htdocs/public/project/viewandvote.php
+++ b/htdocs/public/project/viewandvote.php
@@ -178,6 +178,7 @@ $idvote = GETPOSTINT("vote");
$hashedvote = dol_hash(getDolGlobalString('EVENTORGANIZATION_SECUREKEY').'vote'.$idvote);
if ($idvote > 0) {
+ $votestatus = 'err';
if (in_array($hashedvote, $listofvotes)) {
// Has already voted
$votestatus = 'ko';
diff --git a/htdocs/public/recruitment/view.php b/htdocs/public/recruitment/view.php
index 87127f7f906..33869758f48 100644
--- a/htdocs/public/recruitment/view.php
+++ b/htdocs/public/recruitment/view.php
@@ -1,7 +1,7 @@
* Copyright (C) 2024 Frédéric France
- * Copyright (C) 2024 MDW
+ * Copyright (C) 2024-2025 MDW
*
* 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
@@ -363,7 +363,7 @@ if (empty($emailforcontact)) {
}
}
print '';
-print $tmpuser->getFullName(-1);
+print $tmpuser->getFullName($langs);
print ' '.dol_print_email($emailforcontact, 0, 0, 1, 0, 0, 'envelope');
print '';
print ' ';
diff --git a/htdocs/public/stripe/ipn.php b/htdocs/public/stripe/ipn.php
index e04053634d7..f47bfb3a322 100644
--- a/htdocs/public/stripe/ipn.php
+++ b/htdocs/public/stripe/ipn.php
@@ -2,7 +2,7 @@
/* Copyright (C) 2018-2020 Thibault FOUCART
* Copyright (C) 2018-2024 Frédéric France
* Copyright (C) 2023 Laurent Destailleur
- * Copyright (C) 2024 MDW
+ * Copyright (C) 2024-2025 MDW
*
* 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
@@ -96,7 +96,7 @@ if (empty($endpoint_secret)) {
if (getDolGlobalString('STRIPE_USER_ACCOUNT_FOR_ACTIONS')) {
// We set the user to use for all ipn actions in Dolibarr
$user = new User($db);
- $user->fetch(getDolGlobalString('STRIPE_USER_ACCOUNT_FOR_ACTIONS'));
+ $user->fetch(getDolGlobalInt('STRIPE_USER_ACCOUNT_FOR_ACTIONS'));
$user->loadRights();
} else {
httponly_accessforbidden('Error: Setup of module Stripe not complete for mode '.dol_escape_htmltag($service).'. The STRIPE_USER_ACCOUNT_FOR_ACTIONS is not defined.', 400, 1);
@@ -252,13 +252,13 @@ if ($event->type == 'payout.created' && getDolGlobalString('STRIPE_AUTO_RECORD_P
$db->begin();
if (!$error) {
- $bank_line_id_from = $accountfrom->addline($dateo, $typefrom, $label, -1 * (float) price2num($amount), '', '', $user);
+ $bank_line_id_from = $accountfrom->addline($dateo, $typefrom, $label, -1 * (float) price2num($amount), '', 0, $user);
}
if (!($bank_line_id_from > 0)) {
$error++;
}
if (!$error) {
- $bank_line_id_to = $accountto->addline($dateo, $typeto, $label, price2num($amount), '', '', $user);
+ $bank_line_id_to = $accountto->addline($dateo, $typeto, $label, (float) price2num($amount), '', 0, $user);
}
if (!($bank_line_id_to > 0)) {
$error++;
@@ -367,12 +367,12 @@ if ($event->type == 'payout.created' && getDolGlobalString('STRIPE_AUTO_RECORD_P
$obj = $db->fetch_object($result);
if ($obj) {
if ($obj->type == 'ban') {
+ $pdid = $obj->rowid;
+ $directdebitorcreditransfer_id = $obj->fk_prelevement_bons;
if ($obj->traite == 1) {
// This is a direct-debit with an order (llx_bon_prelevement) ALREADY generated, so
// it means we received here the confirmation that payment request is finished.
- $pdid = $obj->rowid;
$invoice_id = $obj->fk_facture;
- $directdebitorcreditransfer_id = $obj->fk_prelevement_bons;
$payment_amountInDolibarr = $obj->amount;
$paymentTypeCodeInDolibarr = $obj->type;
@@ -382,9 +382,9 @@ if ($event->type == 'payout.created' && getDolGlobalString('STRIPE_AUTO_RECORD_P
}
}
if ($obj->type == 'card' || empty($obj->type)) {
+ $pdid = $obj->rowid;
if ($obj->traite == 0) {
// This is a card payment not already flagged as sent to Stripe.
- $pdid = $obj->rowid;
$invoice_id = $obj->fk_facture;
$payment_amountInDolibarr = $obj->amount;
$paymentTypeCodeInDolibarr = empty($obj->type) ? 'card' : $obj->type;
@@ -827,7 +827,7 @@ if ($event->type == 'payout.created' && getDolGlobalString('STRIPE_AUTO_RECORD_P
$amountdisputestripe = $object->amoutndispute; // In stripe format
$amountdispute = $amountdisputestripe; // In real currency format
- $invoice_id = "";
+ $invoice_id = 0;
$paymentTypeCode = ""; // payment type according to Stripe
$paymentTypeCodeInDolibarr = ""; // payment type according to Dolibarr
$payment_amount = 0;
@@ -861,7 +861,7 @@ if ($event->type == 'payout.created' && getDolGlobalString('STRIPE_AUTO_RECORD_P
$payment_amountInDolibarr = $obj->amount;
$paymentTypeCodeInDolibarr = empty($obj->type) ? 'card' : $obj->type;
- dol_syslog("Found the payment intent for card in database (pdid = ".$pdid." directdebitorcreditransfer_id=".$directdebitorcreditransfer_id.")");
+ dol_syslog("Found the payment intent for card in database (pdid = ".$pdid.")");
}
} else {
dol_syslog("Payment intent ".$TRANSACTIONID." not found into database, so ignored.");
diff --git a/htdocs/public/test/test_arrays.php b/htdocs/public/test/test_arrays.php
index 2a34c55d129..bbb87be938d 100644
--- a/htdocs/public/test/test_arrays.php
+++ b/htdocs/public/test/test_arrays.php
@@ -1,5 +1,6 @@
+ * Copyright (C) 2025 MDW
*
* 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
@@ -201,7 +202,7 @@ $sortfield = 'aaa';
$sortorder = 'ASC';
$tasksarray = array(1, 2, 3); // To force having several lines
$tagidfortablednd = 'tablelines3';
-if (!isset($moreforfilter)) {
+if (!isset($moreforfilter)) { // @phan-suppress-current-line PhanPluginUndeclaredVariableIsset
$moreforfilter = '';
}
if (!empty($conf->use_javascript_ajax)) {
@@ -228,7 +229,7 @@ if ($socid) {
if (isset($showbirthday) && $showbirthday) {
$nav .= '';
}
-if (isset($pid) && $pid) {
+if (isset($pid) && $pid) { // @phan-suppress-current-line PhanPluginUndeclaredVariableIsset
$nav .= '';
}
if ($type) {
diff --git a/htdocs/public/ticket/create_ticket.php b/htdocs/public/ticket/create_ticket.php
index dd72277cfb2..1f04dca7251 100644
--- a/htdocs/public/ticket/create_ticket.php
+++ b/htdocs/public/ticket/create_ticket.php
@@ -2,7 +2,7 @@
/* Copyright (C) 2013-2016 Jean-François FERRY
* Copyright (C) 2016 Christophe Battarel
* Copyright (C) 2023 Laurent Destailleur
- * Copyright (C) 2024 MDW
+ * Copyright (C) 2024-2025 MDW
* Copyright (C) 2024 Frédéric France
*
* This program is free software; you can redistribute it and/or modify
@@ -153,12 +153,13 @@ if (empty($reshook)) {
$upload_dir_tmp = $vardir.'/temp/'.session_id();
// TODO Delete only files that was uploaded from form
- dol_remove_file_process(GETPOST('removedfile'), 0, 0);
+ dol_remove_file_process(GETPOSTINT('removedfile'), 0, 0);
$action = 'create_ticket';
}
if ($action == 'create_ticket' && GETPOST('save', 'alpha')) { // Test on permission not required. This is a public form. Security is managed by mitigation.
$error = 0;
+ $cid = -1;
$origin_email = GETPOST('email', 'email');
if (empty($origin_email)) {
$error++;
@@ -166,16 +167,18 @@ if (empty($reshook)) {
$action = '';
} else {
// Search company saved with email
- $searched_companies = $object->searchSocidByEmail($origin_email, '0');
+ $searched_companies = $object->searchSocidByEmail($origin_email, 0);
// Chercher un contact existent avec cette address email
// Le premier contact trouvé est utilisé pour déterminer le contact suivi
$contacts = $object->searchContactByEmail($origin_email);
+ if (!is_array($contacts)) {
+ $contacts = array();
+ }
// Ensure that contact is active and select first active contact
- $cid = -1;
foreach ($contacts as $key => $contact) {
- if ((int) $contact->statut == 1) {
+ if ((int) $contact->status == 1) {
$cid = $key;
break;
}
@@ -195,7 +198,7 @@ if (empty($reshook)) {
$contact_phone = '';
if ($with_contact) {
// set linked contact to add in form
- if (is_array($contacts) && count($contacts) == 1) {
+ if (/* is_array($contacts) && */ count($contacts) == 1) {
$with_contact = current($contacts);
}
@@ -309,7 +312,7 @@ if (empty($reshook)) {
if ($result < 0) {
$error++;
$errors = ($company->error ? array($company->error) : $company->errors);
- array_push($object->errors, $errors);
+ $object->errors = array_merge($object->errors, $errors);
$action = 'create_ticket';
}
@@ -324,7 +327,7 @@ if (empty($reshook)) {
if ($result < 0) {
$error++;
$errors = ($with_contact->error ? array($with_contact->error) : $with_contact->errors);
- array_push($object->errors, $errors);
+ $object->errors = array_merge($object->errors, $errors);
$action = 'create_ticket';
} else {
$contacts = array($with_contact);
@@ -336,7 +339,7 @@ if (empty($reshook)) {
$object->fk_soc = $searched_companies[0]->id;
}
- if (is_array($contacts) && count($contacts) > 0 && $cid >= 0) {
+ if (/* is_array($contacts) && */ count($contacts) > 0 && $cid >= 0) {
$object->fk_soc = $contacts[$cid]->socid;
$usertoassign = $contacts[$cid]->id;
}
@@ -363,7 +366,9 @@ if (empty($reshook)) {
if ($id <= 0) {
$error++;
$errors = ($object->error ? array($object->error) : $object->errors);
- array_push($object->errors, $object->error ? array($object->error) : $object->errors);
+ if ($object->error) {
+ array_push($object->errors, $object->error);
+ }
$action = 'create_ticket';
}
}
@@ -421,8 +426,8 @@ if (empty($reshook)) {
$sendtocc = '';
$deliveryreceipt = 0;
- if (getDolGlobalString('TICKET_DISABLE_MAIL_AUTOCOPY_TO') !== '') {
- $old_MAIN_MAIL_AUTOCOPY_TO = getDolGlobalString('TICKET_DISABLE_MAIL_AUTOCOPY_TO');
+ $old_MAIN_MAIL_AUTOCOPY_TO = getDolGlobalString('TICKET_DISABLE_MAIL_AUTOCOPY_TO');
+ if ($old_MAIN_MAIL_AUTOCOPY_TO !== '') {
$conf->global->MAIN_MAIL_AUTOCOPY_TO = '';
}
include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
@@ -432,7 +437,7 @@ if (empty($reshook)) {
} else {
$result = $mailfile->sendfile();
}
- if (getDolGlobalString('TICKET_DISABLE_MAIL_AUTOCOPY_TO') !== '') {
+ if ($old_MAIN_MAIL_AUTOCOPY_TO !== '') {
$conf->global->MAIN_MAIL_AUTOCOPY_TO = $old_MAIN_MAIL_AUTOCOPY_TO;
}
@@ -464,8 +469,8 @@ if (empty($reshook)) {
$from = getDolGlobalString('MAIN_INFO_SOCIETE_NOM') . ' <' . getDolGlobalString('TICKET_NOTIFICATION_EMAIL_FROM').'>';
$replyto = $from;
- if (getDolGlobalString('TICKET_DISABLE_MAIL_AUTOCOPY_TO') !== '') {
- $old_MAIN_MAIL_AUTOCOPY_TO = getDolGlobalString('TICKET_DISABLE_MAIL_AUTOCOPY_TO');
+ $old_MAIN_MAIL_AUTOCOPY_TO = getDolGlobalString('TICKET_DISABLE_MAIL_AUTOCOPY_TO');
+ if ($old_MAIN_MAIL_AUTOCOPY_TO !== '') {
$conf->global->MAIN_MAIL_AUTOCOPY_TO = '';
}
include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
@@ -475,7 +480,7 @@ if (empty($reshook)) {
} else {
$result = $mailfile->sendfile();
}
- if ((getDolGlobalString('TICKET_DISABLE_MAIL_AUTOCOPY_TO') !== '')) {
+ if ($old_MAIN_MAIL_AUTOCOPY_TO !== '') {
$conf->global->MAIN_MAIL_AUTOCOPY_TO = $old_MAIN_MAIL_AUTOCOPY_TO;
}
}
diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php
index d769ac209a0..a4a3b4697a9 100644
--- a/htdocs/public/ticket/list.php
+++ b/htdocs/public/ticket/list.php
@@ -1,8 +1,7 @@
+/* Copyright (C) 2013-2016 Jean-François FERRY
+ * Copyright (C) 2024-2025 MDW
* Copyright (C) 2024 Frédéric France
- */
-/* Copyright (C) 2013-2016 Jean-François FERRY
*
* 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
@@ -253,25 +252,25 @@ if ($action == "view_ticketlist") {
// Definition of fields for list
$arrayfields = array(
- 't.datec' => array('label' => $langs->trans("Date"), 'checked' => 1),
- 't.date_read' => array('label' => $langs->trans("TicketReadOn"), 'checked' => 0),
- 't.date_close' => array('label' => $langs->trans("TicketCloseOn"), 'checked' => 0),
- 't.ref' => array('label' => $langs->trans("Ref"), 'checked' => 1),
- //'t.track_id' => array('label' => $langs->trans("IDTracking"), 'checked' => 0),
- 't.fk_statut' => array('label' => $langs->trans("Status"), 'checked' => 1),
- 't.subject' => array('label' => $langs->trans("Subject"), 'checked' => 1),
- 'type.code' => array('label' => $langs->trans("Type"), 'checked' => 1),
- 'category.code' => array('label' => $langs->trans("Category"), 'checked' => 1),
- 'severity.code' => array('label' => $langs->trans("Severity"), 'checked' => 1),
- 't.progress' => array('label' => $langs->trans("Progression"), 'checked' => 0),
- //'t.fk_contract' => array('label' => $langs->trans("Contract"), 'checked' => 0),
- 't.fk_user_create' => array('label' => $langs->trans("Author"), 'checked' => 1),
- 't.fk_user_assign' => array('label' => $langs->trans("AssignedTo"), 'checked' => 0),
+ 't.datec' => array('label' => $langs->trans("Date"), 'checked' => '1'),
+ 't.date_read' => array('label' => $langs->trans("TicketReadOn"), 'checked' => '0'),
+ 't.date_close' => array('label' => $langs->trans("TicketCloseOn"), 'checked' => '0'),
+ 't.ref' => array('label' => $langs->trans("Ref"), 'checked' => '1'),
+ //'t.track_id' => array('label' => $langs->trans("IDTracking"), 'checked' => '0'),
+ 't.fk_statut' => array('label' => $langs->trans("Status"), 'checked' => '1'),
+ 't.subject' => array('label' => $langs->trans("Subject"), 'checked' => '1'),
+ 'type.code' => array('label' => $langs->trans("Type"), 'checked' => '1'),
+ 'category.code' => array('label' => $langs->trans("Category"), 'checked' => '1'),
+ 'severity.code' => array('label' => $langs->trans("Severity"), 'checked' => '1'),
+ 't.progress' => array('label' => $langs->trans("Progression"), 'checked' => '0'),
+ //'t.fk_contract' => array('label' => $langs->trans("Contract"), 'checked' => '0'),
+ 't.fk_user_create' => array('label' => $langs->trans("Author"), 'checked' => '1'),
+ 't.fk_user_assign' => array('label' => $langs->trans("AssignedTo"), 'checked' => '0'),
- //'t.entity'=>array('label'=>$langs->trans("Entity"), 'checked'=>1, 'enabled'=>(isModEnabled('multicompany') && empty($conf->multicompany->transverse_mode))),
- //'t.datec' => array('label' => $langs->trans("DateCreation"), 'checked' => 0, 'position' => 500),
- //'t.tms' => array('label' => $langs->trans("DateModificationShort"), 'checked' => 0, 'position' => 2)
- //'t.statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000),
+ //'t.entity'=>array('label'=>$langs->trans("Entity"), 'checked' => '1', 'enabled'=>(isModEnabled('multicompany') && empty($conf->multicompany->transverse_mode))),
+ //'t.datec' => array('label' => $langs->trans("DateCreation"), 'checked' => '0', 'position' => 500),
+ //'t.tms' => array('label' => $langs->trans("DateModificationShort"), 'checked' => '0', 'position' => 2)
+ //'t.statut'=>array('label'=>$langs->trans("Status"), 'checked' => '1', 'position'=>1000),
);
if (!getDolGlobalString('TICKET_SHOW_PROGRESSION')) {
@@ -284,7 +283,7 @@ if ($action == "view_ticketlist") {
if ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate') {
$enabled = abs((int) dol_eval($extrafields->attributes[$object->table_element]['list'][$key], 1, 1, '2'));
$enabled = (($enabled == 0 || $enabled == 3) ? 0 : $enabled);
- $arrayfields["ef.".$key] = array('label' => $extrafields->attributes[$object->table_element]['label'][$key], 'checked' => ($extrafields->attributes[$object->table_element]['list'][$key] < 0) ? 0 : 1, 'position' => $extrafields->attributes[$object->table_element]['pos'][$key], 'enabled' => $enabled && $extrafields->attributes[$object->table_element]['perms'][$key]);
+ $arrayfields["ef.".$key] = array('label' => $extrafields->attributes[$object->table_element]['label'][$key], 'checked' => ($extrafields->attributes[$object->table_element]['list'][$key] < 0) ? '0' : '1', 'position' => $extrafields->attributes[$object->table_element]['pos'][$key], 'enabled' => (string) (int) ($enabled && $extrafields->attributes[$object->table_element]['perms'][$key]));
}
}
}
diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php
index 41a51463b2d..63a4df51b62 100644
--- a/htdocs/public/ticket/view.php
+++ b/htdocs/public/ticket/view.php
@@ -2,6 +2,7 @@
/* Copyright (C) 2013-2016 Jean-François FERRY
* Copyright (C) 2018-2024 Frédéric France
* Copyright (C) 2023 Benjamin Falière
+ * Copyright (C) 2025 MDW
*
* 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
@@ -103,9 +104,9 @@ if ($cancel) {
$action = 'view_ticket';
}
+$display_ticket = false;
if (in_array($action, array("view_ticket", "presend", "close", "confirm_public_close", "add_message", "add_contact"))) { // Test on permission not required here. Done later by using the $track_id + check email in session
$error = 0;
- $display_ticket = false;
if (!strlen($track_id)) {
$error++;
array_push($object->errors, $langs->trans("ErrorFieldRequired", $langs->transnoentities("TicketTrackId")));
@@ -124,7 +125,7 @@ if (in_array($action, array("view_ticket", "presend", "close", "confirm_public_c
}
if (!$error) {
- $ret = $object->fetch('', '', $track_id);
+ $ret = $object->fetch(0, '', $track_id);
if ($ret && $object->dao->id > 0) {
// Check if emails provided is the one of author
$emailofticket = CMailFile::getValidAddress($object->dao->origin_email, 2);
@@ -404,7 +405,7 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a
$baseurl = getDolGlobalString('TICKET_URL_PUBLIC_INTERFACE', DOL_URL_ROOT.'/public/ticket/');
$formticket->param = array('track_id' => $object->dao->track_id, 'fk_user_create' => '-1',
- 'returnurl' => $baseurl.'view.php'.(!empty($entity) && isModEnabled('multicompany')?'?entity='.$entity:''));
+ 'returnurl' => $baseurl.'view.php'.(!empty($entity) && isModEnabled('multicompany') ? '?entity='.$entity : ''));
$formticket->withfile = 2;
$formticket->withcancel = 1;
@@ -415,7 +416,7 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a
if ($action != 'presend') {
$baseurl = getDolGlobalString('TICKET_URL_PUBLIC_INTERFACE', DOL_URL_ROOT.'/public/ticket/');
- print '
';
print "
\n";
print "
\n";
diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php
index 3c46fd80675..5e7686e6d52 100644
--- a/htdocs/user/class/user.class.php
+++ b/htdocs/user/class/user.class.php
@@ -2650,7 +2650,7 @@ class User extends CommonObject
public function send_password($user, $password = '', $changelater = 0)
{
// phpcs:enable
- global $conf, $langs, $mysoc;
+ global $conf, $langs;
global $dolibarr_main_url_root;
require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
@@ -2663,12 +2663,12 @@ class User extends CommonObject
$outputlangs = new Translate("", $conf);
if (isset($this->conf->MAIN_LANG_DEFAULT)
- && $this->conf->MAIN_LANG_DEFAULT != 'auto') { // If user has defined its own language (rare because in most cases, auto is used)
- $outputlangs->getDefaultLang($this->conf->MAIN_LANG_DEFAULT);
+ && getDolGlobalString('MAIN_LANG_DEFAULT') != 'auto') { // If user has defined its own language (rare because in most cases, auto is used)
+ $outputlangs->getDefaultLang(getDolGlobalString('MAIN_LANG_DEFAULT'));
}
- if ($this->conf->MAIN_LANG_DEFAULT) {
- $outputlangs->setDefaultLang($this->conf->MAIN_LANG_DEFAULT);
+ if (getDolGlobalString('MAIN_LANG_DEFAULT')) {
+ $outputlangs->setDefaultLang(getDolGlobalString('MAIN_LANG_DEFAULT'));
} else { // If user has not defined its own language, we used current language
$outputlangs = $langs;
}
@@ -2729,7 +2729,7 @@ class User extends CommonObject
$mailfile = new CMailFile(
$subject,
$this->email,
- $conf->global->MAIN_MAIL_EMAIL_FROM,
+ getDolGlobalString("MAIN_MAIL_EMAIL_FROM_PASSWORDRESET", getDolGlobalString("MAIN_MAIL_EMAIL_FROM")),
$mesg,
array(),
array(),
diff --git a/htdocs/viewimage.php b/htdocs/viewimage.php
index 1bbf7224a02..f2f38ee3c05 100644
--- a/htdocs/viewimage.php
+++ b/htdocs/viewimage.php
@@ -3,7 +3,7 @@
* Copyright (C) 2005-2016 Laurent Destailleur
* Copyright (C) 2005-2016 Regis Houssin
* Copyright (C) 2024 Frédéric France
- * Copyright (C) 2024 MDW
+ * Copyright (C) 2024-2025 MDW
*
* 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
@@ -114,6 +114,8 @@ if (is_numeric($entity)) {
/**
* Header empty
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $head Optional head lines
* @param string $title HTML title
* @param string $help_url Url links to help page
@@ -131,18 +133,20 @@ if (is_numeric($entity)) {
* @param int $disablenoindex Disable the "noindex" on meta robot header
* @return void
*/
-function llxHeader($head = '', $title = '', $help_url = '', $target = '', $disablejs = 0, $disablehead = 0, $arrayofjs = '', $arrayofcss = '', $morequerystring = '', $morecssonbody = '', $replacemainareaby = '', $disablenofollow = 0, $disablenoindex = 0)
+function llxHeader($head = '', $title = '', $help_url = '', $target = '', $disablejs = 0, $disablehead = 0, $arrayofjs = '', $arrayofcss = '', $morequerystring = '', $morecssonbody = '', $replacemainareaby = '', $disablenofollow = 0, $disablenoindex = 0) // @phan-suppress-current-line PhanRedefineFunction
{
}
/**
* Footer empty
*
+ * Note: also called by functions.lib:recordNotFound
+ *
* @param string $comment A text to add as HTML comment into HTML generated page
* @param string $zone 'private' (for private pages) or 'public' (for public pages)
* @param int $disabledoutputofmessages Clear all messages stored into session without displaying them
* @return void
*/
-function llxFooter($comment = '', $zone = 'private', $disabledoutputofmessages = 0)
+function llxFooter($comment = '', $zone = 'private', $disabledoutputofmessages = 0) // @phan-suppress-current-line PhanRedefineFunction
{
}
diff --git a/htdocs/webportal/class/webportalorder.class.php b/htdocs/webportal/class/webportalorder.class.php
index 1cbf082dccb..8c11ba5d92f 100644
--- a/htdocs/webportal/class/webportalorder.class.php
+++ b/htdocs/webportal/class/webportalorder.class.php
@@ -166,7 +166,7 @@ class WebPortalOrder extends Commande
*/
public function getTooltipContentArray($params)
{
- global $conf, $langs;
+ global $langs;
$datas = [];
@@ -174,9 +174,8 @@ class WebPortalOrder extends Commande
return ['optimize' => $langs->trans("WebPortalOrder")];
}
$datas['picto'] = img_picto('', $this->picto) . ' ' . $langs->trans("WebPortalOrder") . '';
- if (isset($this->status)) {
- $datas['picto'] .= ' ' . $this->getLibStatut(5);
- }
+ $datas['picto'] .= ' ' . $this->getLibStatut(5);
+
$datas['ref'] .= ' ' . $langs->trans('Ref') . ': ' . $this->ref;
return $datas;