aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2025-06-26 14:55:40 +0200
committerDavid Siegfried <david.siegfried@uni-vechta.de>2025-06-26 12:55:40 +0000
commit9f2d9d3353efd7563d4c107e389e3c79f593506f (patch)
tree79a49d3892b11d3d25e2f729a103902b08a7431a
parentad69795577372a66631baa624ea0d35c3f6eabcb (diff)
add index and set correct for auth_user_md5.matriculation_number, fixes #4577
Closes #4577 Merge request studip/studip!3392
-rw-r--r--db/migrations/5.5.32_index_and_correct_type_for_matriculation_number.php27
-rw-r--r--lib/models/User.php10
2 files changed, 37 insertions, 0 deletions
diff --git a/db/migrations/5.5.32_index_and_correct_type_for_matriculation_number.php b/db/migrations/5.5.32_index_and_correct_type_for_matriculation_number.php
new file mode 100644
index 0000000..e74ff6d
--- /dev/null
+++ b/db/migrations/5.5.32_index_and_correct_type_for_matriculation_number.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * @see https://gitlab.studip.de/studip/studip/-/issues/4577
+ */
+final class IndexAndCorrectTypeForMatriculationNumber extends Migration
+{
+ public function description()
+ {
+ return 'Sets the type of the matriculation number column correctly and adds an index';
+ }
+
+ public function up()
+ {
+ $query = "ALTER TABLE `auth_user_md5`
+ MODIFY COLUMN `matriculation_number` VARCHAR(255) COLLATE latin1_bin NULL DEFAULT NULL,
+ ADD UNIQUE INDEX `matriculation_number` (`matriculation_number`)";
+ DBManager::get()->exec($query);
+ }
+
+ public function down()
+ {
+ $query = "ALTER TABLE `auth_user_md5`
+ DROP INDEX `matriculation_number`,
+ MODIFY COLUMN `matriculation_number` VARCHAR(255) NULL DEFAULT NULL";
+ DBManager::get()->exec($query);
+ }
+}
diff --git a/lib/models/User.php b/lib/models/User.php
index 8e52589..18ab436 100644
--- a/lib/models/User.php
+++ b/lib/models/User.php
@@ -243,6 +243,16 @@ class User extends AuthUserMd5 implements Range, PrivacyObject, Studip\Calendar\
$config['registered_callbacks']['before_store'][] = 'cbClearCaches';
$config['registered_callbacks']['before_store'][] = 'cbStudipLog';
+ // Ensure matriculation number is always set to null if empty
+ $config['registered_callbacks']['before_store'][] = function (User $user) {
+ if (
+ isset($user->matriculation_number)
+ && trim($user->matriculation_number) === ''
+ ) {
+ $user->matriculation_number = null;
+ }
+ };
+
$info = new UserInfo();
$info_meta = $info->getTableMetadata();
foreach ($info_meta ['fields'] as $field => $meta) {