diff options
| author | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2024-12-04 08:48:02 +0000 |
|---|---|---|
| committer | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2024-12-04 10:05:30 +0100 |
| commit | 2125a02b0230de38fffb4196004a19733e8aa005 (patch) | |
| tree | 1618e65b2869eea8299b668b1d2e241fd4ef88ec /db | |
| parent | 498c43035767179f2dd9a9dac68e2b1784a3e428 (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.php | 78 |
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) ?: []; + } +} |
