From 2394ba61250dc67915488c71dea42eb4e0492833 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Wed, 13 Nov 2024 15:43:59 +0000 Subject: [PATCH] load translations before comparing i18n field contents in SimpleORMap::isFieldDirty(), fixes #4864 Closes #4864 Merge request studip/studip!3643 --- lib/classes/SimpleORMap.php | 8 ++++++++ tests/unit/lib/classes/SimpleOrMapNodbTest.php | 11 ++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/classes/SimpleORMap.php b/lib/classes/SimpleORMap.php index d2cbcdca166..f3993c2706e 100644 --- a/lib/classes/SimpleORMap.php +++ b/lib/classes/SimpleORMap.php @@ -2233,6 +2233,14 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate if ($this->content[$field] === null || $this->content_db[$field] === null) { return $this->content[$field] !== $this->content_db[$field]; } else if ($this->content[$field] instanceof I18NString || $this->content_db[$field] instanceof I18NString) { + // Trigger loading of translations + if ($this->content[$field] instanceof I18NString) { + $this->content[$field]->toArray(); + } + if ($this->content_db[$field] instanceof I18NString) { + $this->content_db[$field]->toArray(); + } + return $this->content[$field] != $this->content_db[$field]; } else { return (string)$this->content[$field] !== (string)$this->content_db[$field]; diff --git a/tests/unit/lib/classes/SimpleOrMapNodbTest.php b/tests/unit/lib/classes/SimpleOrMapNodbTest.php index 3ede1aa8e0a..9fa1eed3f62 100644 --- a/tests/unit/lib/classes/SimpleOrMapNodbTest.php +++ b/tests/unit/lib/classes/SimpleOrMapNodbTest.php @@ -25,8 +25,6 @@ class auth_user_md5 extends SimpleORMap $config['serialized_fields']['jsondata'] = 'JSONArrayObject'; $config['notification_map']['after_store'] = 'auth_user_md5DidCreateOrUpdate'; - $config['i18n_fields'] = ['i18n_field']; - parent::configure($config); } @@ -366,7 +364,14 @@ class SimpleOrMapNodbTest extends \Codeception\Test\Unit self::setupFixture(); $result = [ - 'definition as list' => [new auth_user_md5()], + 'definition as list' => [new class extends SimpleORMap { + protected static function configure($config = []) + { + $config['db_table'] = 'auth_user_md5'; + $config['i18n_fields'] = ['i18n_field']; + parent::configure($config); + } + }], 'definition as associative array' => [new class extends SimpleORMap { protected static function configure($config = []) { -- GitLab