From 24b2852830e209bbf863e5508a4a5da10f88c75d Mon Sep 17 00:00:00 2001 From: XavierGR Date: Fri, 18 Apr 2025 11:16:52 +0200 Subject: [PATCH] Log warning when integer is set to invalid value --- core/attributedef.class.inc.php | 10 ++++------ core/dbobject.class.php | 11 ++++++++--- core/metamodel.class.php | 1 + 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php index 43bd99394..2666c99d2 100644 --- a/core/attributedef.class.inc.php +++ b/core/attributedef.class.inc.php @@ -2735,7 +2735,7 @@ class AttributeDBFieldVoid extends AttributeDefinition public function GetPrerequisiteAttributes($sClass = null) { $aPrerequisiteAttributes = $this->Get("depends_on"); - if($this->HasParam('expression')) { + if($this->IsComputed()) { $aPrerequisiteAttributes = array_merge($aPrerequisiteAttributes, $this->GetComputedPrerequisiteAttributes()); } return $aPrerequisiteAttributes; @@ -2983,14 +2983,12 @@ class AttributeInteger extends AttributeDBField public function MakeRealValue($proposedValue, $oHostObj) { - if (is_null($proposedValue)) + if (is_null($proposedValue) || $proposedValue === '') { return null; + } elseif(gettype($proposedValue) !== 'integer') { + IssueLog::Warning("Trying to set integer attribute ".$this->GetCode()." to type".gettype($proposedValue)"."); } - if ($proposedValue === '') - { - return null; - } // 0 is transformed into '' ! return (int)$proposedValue; } diff --git a/core/dbobject.class.php b/core/dbobject.class.php index 0c7cd86e9..7c5300cdb 100644 --- a/core/dbobject.class.php +++ b/core/dbobject.class.php @@ -706,10 +706,10 @@ abstract class DBObject implements iDisplay } $this->_Set($sAttCode, $realvalue); - $this->UpdateMetaAttributes(array($sAttCode)); - $this->UpdateDependentComputedAttributes($sAttCode); + $this->UpdateMetaAttributes(array($sAttCode)); + // The object has changed, reset caches $this->m_bCheckStatus = null; @@ -7001,6 +7001,7 @@ abstract class DBObject implements iDisplay * @return void * @throws CoreException * @throws OQLException + * @throws Exception */ private function UpdateDependentComputedAttributes(string $sAttCode): void { @@ -7008,7 +7009,11 @@ abstract class DBObject implements iDisplay $oAttDef = MetaModel::GetAttributeDef(get_class($this), $sCode); if ($oAttDef->IsComputed()) { $oExpression = Expression::FromOQL($oAttDef->GetParams()['expression']); - $this->_Set($sCode, $this->EvaluateExpression($oExpression)); + $value = $this->EvaluateExpression($oExpression); + $aAllowedValues = $oAttDef->GetAllowedValues(); + if(is_null($aAllowedValues) || in_array($value, $aAllowedValues)) { + $this->_Set($sCode, $oAttDef->MakeRealValue($value, $this)); + } ; } } } diff --git a/core/metamodel.class.php b/core/metamodel.class.php index 41aecd2cd..1661464db 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -2661,6 +2661,7 @@ abstract class MetaModel */ public static function GetAttributeFlags($sClass, $sState, $sAttCode) { + $iFlags = 0; if (self::HasLifecycle($sClass)) { $aStates = MetaModel::EnumStates($sClass); if (!array_key_exists($sState, $aStates)) {