diff --git a/ChangeLog b/ChangeLog
index 8cc161dceaf..49961068401 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -31,16 +31,16 @@ The following changes may create regressions for some external modules, but were
***** ChangeLog for 23.0.3 compared to 23.0.2 *****
-FIX: #36589 (#38037)
-FIX: #37552 (#38073)
-FIX: #37649 (#38101)
-FIX: #37759
-FIX: #37760
-FIX: #37761
-FIX: #37762
-FIX: #37805
-FIX: #38074 (#38075)
-FIX: #38131 (#38140)
+FIX: #36589 (#38037) There is no save button in the "Variant attributes extrafields" and "Variant attributes values extrafields" tabs of the product variant module
+FIX: #37552 (#38073) Webportal Proposals, Sales orders and Invoices links not working
+FIX: #37649 (#38101) Gross price not calculated in supplier orders
+FIX: #37759 Security: Sales Orders API Cross Customer Creation Privilege Escalation
+FIX: #37760 Security: Commercial Proposals API Cross Customer Creation Privilege Escalation
+FIX: #37761 Security: Tickets API Cross Customer Ticket Targeted Read Privilege Escalation
+FIX: #37762 Security: Tickets API Cross Customer Ticket Targeted Update Privilege Escalation
+FIX: #37805 Api endpoint /proposals/ref/{ref} fail with message : "Bad Request" - No proposal with id=0 can exist when using propal API and searching by ref
+FIX: #38074 (#38075) Asset Depreciation List - SQL error message
+FIX: #38131 (#38140) Bug in Recurring Customer Invoice
FIX: Accountancy - Select journal - Problem with the label (#37979)
FIX: AccountingAccount cache — silent reference mutation in accounting journals (#37981)
FIX: a param must not come from end user entry.
@@ -66,7 +66,7 @@ FIX: IDOR on messaging.php - Credit Aksoum Abderrahmane
FIX: Some remaining cross-customer object creation on API (proposal, orders) - Credit Mitch311
FIX: add permission test on legacy filemanager - Credit Aksoum Abderrahmane
FIX: Can use AI module to make SSRF call. Credit Dilip
-FIX: #GHSA-crgg-h74r-2m8r (#37636)
+FIX: #GHSA-crgg-h74r-2m8r (#37636) - FIX: Access to documents via the API for external users
FIX: #GHSA-hq5j-39f9-qxcv (#37812)
FIX: SQL Injection via Operator Injection in Contract Service List
SEC: Better sanitization param for GETPOST of htmlheader of website page - See commit bbbbb56c6455514dcd0acca53afc17a92ed21bb9
diff --git a/htdocs/core/ajax/selectobject.php b/htdocs/core/ajax/selectobject.php
index 73830ffbfd7..aae638a7a04 100644
--- a/htdocs/core/ajax/selectobject.php
+++ b/htdocs/core/ajax/selectobject.php
@@ -109,7 +109,10 @@ if ($objectdesc) {
$InfoFieldList[3] = preg_replace('/:\w*$/', '', $vartmp); // take the filter field
$classname = $InfoFieldList[0];
- $classpath = dol_sanitizePathName($InfoFieldList[1]);
+ $classpath = '';
+ if (!empty($InfoFieldList[1])) {
+ $classpath = dol_sanitizePathName($InfoFieldList[1]);
+ }
//$addcreatebuttonornot = empty($InfoFieldList[2]) ? 0 : $InfoFieldList[2];
$filter = empty($InfoFieldList[3]) ? '' : $InfoFieldList[3];
diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php
index 67d9a3f4591..43a70482a71 100644
--- a/htdocs/core/class/extrafields.class.php
+++ b/htdocs/core/class/extrafields.class.php
@@ -2579,7 +2579,7 @@ class ExtraFields
while ($obj = $this->db->fetch_object($resql)) {
$c = new Categorie($this->db);
$c->fetch($obj->rowid);
- if ($mode != 'list') {
+ if ((string) $mode != 'list') {
$ways = $c->print_all_ways(); // $ways[0] = "ccc2 >> ccc2a >> ccc2a1" with html formatted text
foreach ($ways as $way) {
$toprint[] = '
color ? ' style="background: #'.$c->color.';"' : ' style="background: #bbb"').'>'.img_object('', 'category').' '.$way.'';
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index 79a0657a52d..1c6b5435c87 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -3656,7 +3656,7 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi
if (in_array($object->element, array('product', 'bank_account', 'project_task'))) {
/** @var Product|Account|Task $object */
if (!empty($object->label)) {
- $morehtmlref .= '' . $object->label . '
';
+ $morehtmlref .= '' . $object->label . '
';
}
}
// Show address and email
@@ -3691,7 +3691,7 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi
// $morehtmlstatus is part under the status
// $morehtmlright is part of htmlright
- print '';
+ print '
';
print $form->showrefnav($object, $paramid, $morehtml, $shownav, $fieldid, $fieldref, $morehtmlref, $moreparam, $nodbprefix, $morehtmlleft, $morehtmlstatus, $morehtmlright);
print '
';
print '
';
diff --git a/htdocs/product/class/html.formproduct.class.php b/htdocs/product/class/html.formproduct.class.php
index d422340aad8..848ef30c61a 100644
--- a/htdocs/product/class/html.formproduct.class.php
+++ b/htdocs/product/class/html.formproduct.class.php
@@ -633,11 +633,12 @@ class FormProduct
$return .= '"';
if ($mode == 1 && $lines->short_label == $selected) {
$return .= ' selected';
- } elseif ($mode == 2 && $lines->scale == $selected) {
+ } elseif ($mode == 2 && (int) $lines->scale === (int) $selected) { // Careful null !== 0 !== '0' and when 0 is saved bdd store null
$return .= ' selected';
} elseif ($mode == 0 && $lines->id == $selected) {
$return .= ' selected';
}
+
$return .= '>';
if ($measuring_style == 'time') {
$return .= $langs->trans(ucfirst((string) $lines->label));
diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php
index c4ee236df3d..3810d32f497 100644
--- a/htdocs/theme/eldy/global.inc.php
+++ b/htdocs/theme/eldy/global.inc.php
@@ -841,6 +841,9 @@ input.pageplusone {
.anchorundermenu {
scroll-margin-top: 80px;
}
+.banner-object-label {
+ opacity: 0.8;
+}
select:invalid, select.--error {
color: gray;
diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php
index 0567e756112..517c73d73a2 100644
--- a/htdocs/theme/md/style.css.php
+++ b/htdocs/theme/md/style.css.php
@@ -990,6 +990,9 @@ input.pageplusone {
.anchorundermenu {
scroll-margin-top: 80px;
}
+.banner-object-label {
+ opacity: 0.8;
+}
select:invalid, select.--error {
color: gray;
diff --git a/htdocs/variants/class/ProductCombination.class.php b/htdocs/variants/class/ProductCombination.class.php
index 1c9e5b2453a..25e02359d60 100644
--- a/htdocs/variants/class/ProductCombination.class.php
+++ b/htdocs/variants/class/ProductCombination.class.php
@@ -523,10 +523,10 @@ class ProductCombination
$child->price_autogen = $parent->price_autogen;
$child->weight = $parent->weight;
// Only when Parent Status are updated
- if (is_object($parent->oldcopy) && !$parent->oldcopy->isEmpty() && ($parent->status != $parent->oldcopy->status)) {
+ if (is_object($parent->oldcopy) && !empty($parent->oldcopy->id) && ($parent->status != $parent->oldcopy->status)) {
$child->status = $parent->status;
}
- if (is_object($parent->oldcopy) && !$parent->oldcopy->isEmpty() && ($parent->status_buy != $parent->oldcopy->status_buy)) {
+ if (is_object($parent->oldcopy) && !empty($parent->oldcopy->id) && ($parent->status_buy != $parent->oldcopy->status_buy)) {
$child->status_buy = $parent->status_buy;
}