From bcd76d3c5ac715a33668d4c6611b7be8f11e3404 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Mon, 8 Apr 2024 12:16:45 +0000
Subject: [PATCH] fixes #3964

Closes #3964

Merge request studip/studip!2824
---
 ....55_fix_collation_on_oer_campus_tables.php | 79 +++++++++++++++++++
 1 file changed, 79 insertions(+)
 create mode 100644 db/migrations/5.1.55_fix_collation_on_oer_campus_tables.php

diff --git a/db/migrations/5.1.55_fix_collation_on_oer_campus_tables.php b/db/migrations/5.1.55_fix_collation_on_oer_campus_tables.php
new file mode 100644
index 00000000000..8c9a8b4847e
--- /dev/null
+++ b/db/migrations/5.1.55_fix_collation_on_oer_campus_tables.php
@@ -0,0 +1,79 @@
+<?php
+
+/**
+ * This migration will set the columns of the oer campus to the correct state
+ * regarding the collations of some columns. This should only be necessary if
+ * the plugin "Lernmarktplatz" was installed before the migration of Stud.IP
+ * that introduced the oer campus. In any other case the tables should not be
+ * changed since they are already in the correct format.
+ *
+ * @see https://gitlab.studip.de/studip/studip/-/issues/3964
+ *
+ * @author Jan-Hendrik Willms <tleilax+studip@gmail.com>
+ */
+final class FixCollationOnOerCampusTables extends Migration
+{
+    public function description()
+    {
+        return 'Correct collations for oer campus tables';
+    }
+
+    protected function up()
+    {
+        $query = "ALTER TABLE `oer_abo`
+                  MODIFY COLUMN `user_id` CHAR(32) COLLATE `latin1_bin` NOT NULL DEFAULT '',
+                  MODIFY COLUMN `material_id` CHAR(32) COLLATE `latin1_bin` DEFAULT NULL";
+        DBManager::get()->exec($query);
+
+        $query = "ALTER TABLE `oer_comments`
+                  MODIFY COLUMN `comment_id` CHAR(32) COLLATE `latin1_bin` NOT NULL,
+                  MODIFY COLUMN `review_id` CHAR(32) COLLATE `latin1_bin` NOT NULL,
+                  MODIFY COLUMN `foreign_comment_id` CHAR(32) COLLATE `latin1_bin` DEFAULT NULL,
+                  MODIFY COLUMN `host_id` CHAR(32) COLLATE `latin1_bin` DEFAULT NULL,
+                  MODIFY COLUMN `user_id` CHAR(32) COLLATE `latin1_bin` NOT NULL";
+        DBManager::get()->exec($query);
+
+        $query = "ALTER TABLE `oer_downloadcounter`
+                  MODIFY COLUMN `counter_id` CHAR(32) COLLATE `latin1_bin` NOT NULL DEFAULT '',
+                  MODIFY COLUMN `material_id` CHAR(32) COLLATE `latin1_bin` NOT NULL";
+        DBManager::get()->exec($query);
+
+        $query = "ALTER TABLE `oer_hosts`
+                  MODIFY COLUMN `host_id` CHAR(32) COLLATE `latin1_bin` NOT NULL";
+        DBManager::get()->exec($query);
+
+        $query = "ALTER TABLE `oer_material`
+                  MODIFY COLUMN `material_id` CHAR(32) COLLATE `latin1_bin` NOT NULL,
+                  MODIFY COLUMN `foreign_material_id` CHAR(32) COLLATE `latin1_bin` DEFAULT NULL,
+                  MODIFY COLUMN `host_id` CHAR(32) COLLATE `latin1_bin` DEFAULT NULL";
+        DBManager::get()->exec($query);
+
+        $query = "ALTER TABLE `oer_material_users`
+                  MODIFY COLUMN `material_id` CHAR(32) COLLATE `latin1_bin` NOT NULL DEFAULT '',
+                  MODIFY COLUMN `user_id` CHAR(32) COLLATE `latin1_bin` NOT NULL DEFAULT ''";
+        DBManager::get()->exec($query);
+
+        $query = "ALTER TABLE `oer_reviews`
+                  MODIFY COLUMN `review_id` CHAR(32) COLLATE `latin1_bin` NOT NULL,
+                  MODIFY COLUMN `material_id` CHAR(32) COLLATE `latin1_bin` NOT NULL,
+                  MODIFY COLUMN `foreign_review_id` CHAR(32) COLLATE `latin1_bin` DEFAULT NULL,
+                  MODIFY COLUMN `user_id` CHAR(32) COLLATE `latin1_bin` NOT NULL,
+                  MODIFY COLUMN `host_id` CHAR(32) COLLATE `latin1_bin` DEFAULT NULL";
+        DBManager::get()->exec($query);
+
+        $query = "ALTER TABLE `oer_tags`
+                  MODIFY COLUMN `tag_hash` CHAR(32) COLLATE `latin1_bin` NOT NULL";
+        DBManager::get()->exec($query);
+
+        $query = "ALTER TABLE `oer_tags_material`
+                  MODIFY COLUMN `material_id` CHAR(32) COLLATE `latin1_bin` NOT NULL,
+                  MODIFY COLUMN `tag_hash` CHAR(32) COLLATE `latin1_bin` NOT NULL";
+        DBManager::get()->exec($query);
+
+        $query = "ALTER TABLE `oer_user`
+                  MODIFY COLUMN `user_id` CHAR(32) COLLATE `latin1_bin` NOT NULL,
+                  MODIFY COLUMN `foreign_user_id` CHAR(32) COLLATE `latin1_bin` NOT NULL,
+                  MODIFY COLUMN `host_id` CHAR(32) COLLATE `latin1_bin` NOT NULL";
+        DBManager::get()->exec($query);
+    }
+}
-- 
GitLab