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