diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php index dc29a2289..25846ef42 100644 --- a/core/attributedef.class.inc.php +++ b/core/attributedef.class.inc.php @@ -6346,13 +6346,6 @@ class AttributeDateTime extends AttributeDBField $oFormField = parent::MakeFormField($oObject, $oFormField); - // After call to the parent as it sets the current value - $oValue = $oObject->Get($this->GetCode()); - if ($oValue === $this->GetNullValue()) { - $oValue = $this->GetDefaultValue($oObject); - } - $oFormField->SetCurrentValue($this->GetFormat()->Format($oValue)); - return $oFormField; } @@ -6438,18 +6431,8 @@ class AttributeDateTime extends AttributeDBField public function GetDefaultValue(DBObject $oHostObject = null) { $sDefaultValue = $this->Get('default_value'); - if (!$this->IsNullAllowed() && utils::IsNotNullOrEmptyString($sDefaultValue)) { - try { - $oDate = new DateTimeImmutable($sDefaultValue); - } - catch (Exception $e) { - IssueLog::Error($e->getMessage(), null, [ - 'class' => get_class($this), - 'name' => $this->GetCode(), - 'stack' => $e->getTraceAsString()]); - return $this->GetNullValue(); - } - + if (utils::IsNotNullOrEmptyString($sDefaultValue)) { + $oDate = new DateTimeImmutable(Expression::FromOQL($sDefaultValue)->Evaluate([])); return $oDate->format($this->GetInternalFormat()); } return $this->GetNullValue(); diff --git a/core/event.class.inc.php b/core/event.class.inc.php index 6a731f1cc..4deadbdd6 100644 --- a/core/event.class.inc.php +++ b/core/event.class.inc.php @@ -39,7 +39,7 @@ class Event extends DBObject implements iDisplay MetaModel::Init_Params($aParams); //MetaModel::Init_InheritAttributes(); MetaModel::Init_AddAttribute(new AttributeText("message", array("allowed_values"=>null, "sql"=>"message", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array()))); - MetaModel::Init_AddAttribute(new AttributeDateTime("date", array("allowed_values"=>null, "sql"=>"date", "default_value"=>"now", "is_null_allowed"=>false, "depends_on"=>array()))); + MetaModel::Init_AddAttribute(new AttributeDateTime("date", array("allowed_values"=>null, "sql"=>"date", "default_value"=>"NOW()", "is_null_allowed"=>false, "depends_on"=>array()))); MetaModel::Init_AddAttribute(new AttributeString("userinfo", array("allowed_values"=>null, "sql"=>"userinfo", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array()))); // MetaModel::Init_AddAttribute(new AttributeString("userinfo", array("allowed_values"=>null, "sql"=>"userinfo", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array()))); diff --git a/tests/php-unit-tests/unitary-tests/core/AttributeDefinitionTest.php b/tests/php-unit-tests/unitary-tests/core/AttributeDefinitionTest.php index e875fbacb..5b25b455b 100644 --- a/tests/php-unit-tests/unitary-tests/core/AttributeDefinitionTest.php +++ b/tests/php-unit-tests/unitary-tests/core/AttributeDefinitionTest.php @@ -246,15 +246,12 @@ PHP // Given $oDateAttribute = new AttributeDateTime('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => '', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); $oDateAttribute->SetHostClass('WorkOrder'); - $oWorkOrder = MetaModel::NewObject('WorkOrder'); //When $defaultValue = $oDateAttribute->GetDefaultValue(); - $oField = $oDateAttribute->MakeFormField($oWorkOrder); // Then self::assertNull($defaultValue, 'Empty default value for DateTime attribute should give null default value'); - self::assertEmpty($oField->GetCurrentValue(), 'Empty default value for DateTime attribute should give empty form field'); } public function testDateEmptyDefaultReturnsNullAsDefaultValue() @@ -262,87 +259,86 @@ PHP // Given $oDateAttribute = new AttributeDate('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => '', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); $oDateAttribute->SetHostClass('WorkOrder'); - $oWorkOrder = MetaModel::NewObject('WorkOrder'); //When $defaultValue = $oDateAttribute->GetDefaultValue(); - $oField = $oDateAttribute->MakeFormField($oWorkOrder); // Then self::assertNull($defaultValue, 'Empty default value for Date attribute should give null default value'); - self::assertEmpty($oField->GetCurrentValue(), 'Empty default value for DateTime attribute should give empty form field'); } public function testDateTimeNowAsDefaultGivesCurrentDateAsDefaultValue() { // Given - $oDateAttribute = new AttributeDateTime('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => 'now', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); + $oDateAttribute = new AttributeDateTime('start_date', [ + 'sql' => 'start_date', + 'is_null_allowed' => false, + 'default_value' => 'NOW()', + 'allowed_values' => null, + 'depends_on' => [], + 'always_load_in_tables' => false + ]); $oDateAttribute->SetHostClass('WorkOrder'); - $oWorkOrder = MetaModel::NewObject('WorkOrder'); //When $defaultValue = $oDateAttribute->GetDefaultValue(); - $oField = $oDateAttribute->MakeFormField($oWorkOrder); // Then $sNow = date($oDateAttribute->GetInternalFormat()); self::assertEquals($sNow, $defaultValue, 'Now as default value for DateTime attribute should give current date as default value'); - self::assertEquals($sNow, $oField->GetCurrentValue(), 'Now as default value for DateTime attribute should give current date as form field'); } public function testDateNowAsDefaultGivesCurrentDateAsDefaultValue() { // Given - $oDateAttribute = new AttributeDate('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => 'now', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); + $oDateAttribute = new AttributeDate('start_date', [ + 'sql' => 'start_date', + 'is_null_allowed' => false, + 'default_value' => 'NOW()', + 'allowed_values' => null, + 'depends_on' => [], + 'always_load_in_tables' => false + ]); $oDateAttribute->SetHostClass('WorkOrder'); - $oWorkOrder = MetaModel::NewObject('WorkOrder'); //When $defaultValue = $oDateAttribute->GetDefaultValue(); - $oField = $oDateAttribute->MakeFormField($oWorkOrder); // Then $sNow = date($oDateAttribute->GetInternalFormat()); self::assertEquals($sNow, $defaultValue, 'Now as default value for Date attribute should give current date as default value'); - self::assertEquals($sNow, $oField->GetCurrentValue(), 'Now as default value for Date attribute should give current date as form field'); } public function testDateTimeIntervalAsDefaultGivesCorrectDateAsDefaultValue() { // Given - $oDateAttribute = new AttributeDateTime('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => '+1day', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); + $oDateAttribute = new AttributeDateTime('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => 'DATE_ADD(NOW(), INTERVAL 1 DAY)', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); $oDateAttribute->SetHostClass('WorkOrder'); - $oWorkOrder = MetaModel::NewObject('WorkOrder'); //When $defaultValue = $oDateAttribute->GetDefaultValue(); - $oField = $oDateAttribute->MakeFormField($oWorkOrder); // Then $oDate = new \DateTimeImmutable('+1day'); $sExpected = $oDate->format($oDateAttribute->GetInternalFormat()); self::assertEquals($sExpected, $defaultValue, 'Interval as default value for DateTime attribute should give correct date as default value'); - self::assertEquals($sExpected, $oField->GetCurrentValue(), 'Interval as default value for DateTime attribute should give correct date as form field'); } public function testDateIntervalAsDefaultGivesCorrectDateAsDefaultValue() { // Given - $oDateAttribute = new AttributeDate('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => '+1day', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); + $oDateAttribute = new AttributeDate('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => 'DATE_ADD(NOW(), INTERVAL 1 DAY)', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); $oDateAttribute->SetHostClass('WorkOrder'); - $oWorkOrder = MetaModel::NewObject('WorkOrder'); //When $defaultValue = $oDateAttribute->GetDefaultValue(); - $oField = $oDateAttribute->MakeFormField($oWorkOrder); // Then $oDate = new \DateTimeImmutable('+1day'); $sExpected = $oDate->format($oDateAttribute->GetInternalFormat()); self::assertEquals($sExpected, $defaultValue, 'Interval as default value for Date attribute should give correct date as default value'); - self::assertEquals($sExpected, $oField->GetCurrentValue(), 'Interval as default value for Date attribute should give correct date as form field'); } } \ No newline at end of file