From ca10fde9cf94fb13045cbe1d009759834641b4a7 Mon Sep 17 00:00:00 2001
From: Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de>
Date: Thu, 15 Sep 2022 12:51:43 +0000
Subject: [PATCH] partly fix broken SQL queries, re #1579

Merge request studip/studip!1008
---
 app/controllers/course/overview.php | 5 ++---
 lib/classes/I18NStringDatafield.php | 9 +++++----
 lib/models/User.class.php           | 6 +++---
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/app/controllers/course/overview.php b/app/controllers/course/overview.php
index fa30b1c38d9..966c0cac91d 100644
--- a/app/controllers/course/overview.php
+++ b/app/controllers/course/overview.php
@@ -96,9 +96,8 @@ class Course_OverviewController extends AuthenticatedController
                     foreach ((array) $rule['attributes'] as $val) {
                         if ($val == 1) {
                             // Es gibt also Zusatzangaben. Nun noch überprüfen ob der Nutzer diese Angaben schon gemacht hat...
-                            $count = DataField::countBySql("LEFT JOIN datafields_entries ON datafields_entries.datafield_id = datafields.datafield_id
-                                WHERE datafield_id.object_type = 'usersemdata' AND datafields_entries.sec_range_id = ? AND datafields_entries.range_id = ?",
-                                [$this->course_id, $GLOBALS['user']->id]
+                            $count = DataField::countBySql("LEFT JOIN datafields_entries USING (datafield_id) WHERE object_type = ? AND sec_range_id = ? AND range_id = ?",
+                                ['usersemdata', $this->course_id, $GLOBALS['user']->id]
                             );
                             if (!$count) {
                                 $show = true;
diff --git a/lib/classes/I18NStringDatafield.php b/lib/classes/I18NStringDatafield.php
index 69c0053d2a5..26e51a81ec3 100644
--- a/lib/classes/I18NStringDatafield.php
+++ b/lib/classes/I18NStringDatafield.php
@@ -59,8 +59,8 @@ class I18NStringDatafield extends I18NString
                 [$object_id[0], $object_id[1], $object_id[2]]
             );
             foreach ($this->lang as $lang => $value) {
-                if (mb_strlen($value)) {
-                    DataField::create(
+                if (strlen($value)) {
+                    DatafieldEntryModel::create(
                         [
                             'datafield_id' => $object_id[0],
                             'range_id' => $object_id[1],
@@ -87,14 +87,15 @@ class I18NStringDatafield extends I18NString
     public static function load($object_id, $table = '', $field = '', $base = null)
     {
         if (is_null($base)) {
-            $base = DataField::findOneBySQL(
+            $df = DatafieldEntryModel::findOneBySQL(
                 "`datafield_id` = ? AND `range_id` = ? AND `sec_range_id` = ? AND `lang` = ''",
                 $object_id
             );
+            $base = $df->content;
         }
         $table = null;
         $field = null;
-        return new self($base->content, self::fetchDataForField($object_id, $table, $field),
+        return new self($base, self::fetchDataForField($object_id, $table, $field),
                 compact('object_id', 'table', 'field'));
     }
 
diff --git a/lib/models/User.class.php b/lib/models/User.class.php
index 1fc2922375c..cbd5e908769 100644
--- a/lib/models/User.class.php
+++ b/lib/models/User.class.php
@@ -296,12 +296,12 @@ class User extends AuthUserMd5 implements Range, PrivacyObject
     public static function findByDatafield($datafield_id, $value)
     {
         return User::findMany(
-            SimpleCollection::createFromArray(
+            array_column(
                 DatafieldEntryModel::findBySQL(
                     'datafield_id = :datafield_id AND content = :value',
                     compact('datafield_id', 'value')
-                )
-            )->pluck('range_id')
+                ),
+                'range_id')
         );
     }
 
-- 
GitLab