aboutsummaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2024-12-04 08:48:02 +0000
committerJan-Hendrik Willms <tleilax+studip@gmail.com>2024-12-04 10:05:30 +0100
commit2125a02b0230de38fffb4196004a19733e8aa005 (patch)
tree1618e65b2869eea8299b668b1d2e241fd4ef88ec /db
parent498c43035767179f2dd9a9dac68e2b1784a3e428 (diff)
fixes #613
Closes #613 Merge request studip/studip!1801
Diffstat (limited to 'db')
-rw-r--r--db/migrations/5.3.27_remove_course_members_hide_configuration.php78
1 files changed, 78 insertions, 0 deletions
diff --git a/db/migrations/5.3.27_remove_course_members_hide_configuration.php b/db/migrations/5.3.27_remove_course_members_hide_configuration.php
new file mode 100644
index 0000000..de9a854
--- /dev/null
+++ b/db/migrations/5.3.27_remove_course_members_hide_configuration.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * @see https://gitlab.studip.de/studip/studip/-/issues/613
+ */
+final class RemoveCourseMembersHideConfiguration extends Migration
+{
+ public function description()
+ {
+ return 'Removes the configuration "COURSE_MEMBERS_HIDE" in favor of the setting in modules.';
+ }
+
+ protected function up()
+ {
+ // Migrate config settings
+ $query = "SELECT `pluginid`
+ FROM `plugins`
+ WHERE `pluginclassname` = 'CoreParticipants'";
+ $plugin_id = DBManager::get()->fetchColumn($query);
+
+ $query = "SELECT `range_id`
+ FROM `config_values`
+ JOIN `tools_activated` USING (`range_id`)
+ WHERE `field` = 'COURSE_MEMBERS_HIDE'
+ AND `plugin_id` = ?
+ AND IFNULL(`metadata`, '') NOT LIKE ?";
+ DBManager::get()->fetchFirst(
+ $query,
+ [$plugin_id, '%"visibility":"tutor"%'],
+ function ($course_id) use ($plugin_id) {
+ $metadata = $this->getMetaDataForCourseAndPlugin($course_id, $plugin_id);
+ $metadata['visibility'] = 'tutor';
+
+ $query = "UPDATE `tools_activated`
+ SET `metadata` = ?
+ WHERE `range_id` = ?
+ AND `plugin_id` = ?";
+ DBManager::get()->execute($query, [
+ json_encode($metadata),
+ $course_id,
+ $plugin_id
+ ]);
+ }
+ );
+
+ // Code taken from migration 1.305
+ $query = "DELETE `config`, `config_values`
+ FROM `config`
+ LEFT JOIN `config_values` USING (`field`)
+ WHERE `field` = 'COURSE_MEMBERS_HIDE'";
+ DBManager::get()->exec($query);
+ }
+
+ protected function down()
+ {
+ // Code taken from migration 1.305
+ $query = "INSERT IGNORE INTO `config` (`field`, `value`, `type`, `range`, `mkdate`, `chdate`, `description`)
+ VALUES (:name, :value, :type, :range, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), :description)";
+
+ $statement = DBManager::get()->prepare($query);
+ $statement->execute([
+ ':name' => 'COURSE_MEMBERS_HIDE',
+ ':description' => 'Über diese Option können Sie die Teilnehmendenliste für Studierende der Veranstaltung unsichtbar machen',
+ ':range' => 'course',
+ ':type' => 'boolean',
+ ':value' => '0'
+ ]);
+ }
+
+ private function getMetaDataForCourseAndPlugin(string $course_id, string $plugin_id): array
+ {
+ $query = "SELECT `metadata`
+ FROM `tools_activated`
+ WHERE `range_id` = ?
+ AND `plugin_id` = ?";
+ $value = DBManager::get()->fetchColumn($query, [$course_id, $plugin_id]);
+ return json_decode($value, true) ?: [];
+ }
+}