From 975ca162ead60c7fe9af7c6981161b8c56012ce3 Mon Sep 17 00:00:00 2001
From: Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de>
Date: Wed, 1 Nov 2023 15:51:23 +0000
Subject: [PATCH] mark cloned objects as new, fixes #3398

Closes #3398

Merge request studip/studip!2315
---
 lib/models/SimpleORMap.class.php | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/models/SimpleORMap.class.php b/lib/models/SimpleORMap.class.php
index 5c7e0959276..3ff4cc08328 100644
--- a/lib/models/SimpleORMap.class.php
+++ b/lib/models/SimpleORMap.class.php
@@ -640,6 +640,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
         $ret = [];
         do  {
             $clone = clone $record;
+            $clone->setNew(false);
             $stmt->setFetchMode(PDO::FETCH_INTO, $clone);
 
             if ($clone = $stmt->fetch()) {
@@ -694,6 +695,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
         $ret = [];
         do {
             $clone = clone $record;
+            $clone->setNew(false);
             $st->setFetchMode(PDO::FETCH_INTO, $clone);
 
             if ($clone = $st->fetch()) {
@@ -719,10 +721,6 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
             $sql = "WHERE {$sql}";
         }
 
-        $class = get_called_class();
-        $record = new $class();
-        $record->setNew(false);
-
         $db_table = static::db_table();
         $st = DBManager::get()->prepare("SELECT `{$db_table}`.* FROM `{$db_table}` {$sql}");
         $st->execute($params);
@@ -735,6 +733,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
         $ret = 0;
         do {
             $clone = clone $record;
+            $clone->setNew(false);
             $st->setFetchMode(PDO::FETCH_INTO, $clone);
 
             if ($clone = $st->fetch()) {
@@ -1045,6 +1044,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
      */
     function __clone()
     {
+        $this->setNew(true);
         //all references link still to old object => reset all aliases
         foreach ($this->alias_fields() as $alias => $field) {
             if (isset($this->db_fields()[$field])) {
-- 
GitLab