diff options
| author | Ron Lucke <lucke@elan-ev.de> | 2024-11-04 11:39:35 +0000 |
|---|---|---|
| committer | Ron Lucke <lucke@elan-ev.de> | 2024-11-04 11:39:35 +0000 |
| commit | c7c10f40175d34d9c76fa90d328ff0cdc2c7dfd2 (patch) | |
| tree | b444b0206bd43cb87612f90f0f646eccff301348 /db | |
| parent | e8ce2c6e2bb858f9af664dbc5ac37edb958b8850 (diff) | |
Courseware: Rechte und Sichtbarkeit funktionieren nach unterschiedlichen Kriterien
Closes #3442
Merge request studip/studip!2635
Diffstat (limited to 'db')
3 files changed, 268 insertions, 0 deletions
diff --git a/db/migrations/6.0.27_add_unit_permissions.php b/db/migrations/6.0.27_add_unit_permissions.php new file mode 100644 index 0000000..c275a58 --- /dev/null +++ b/db/migrations/6.0.27_add_unit_permissions.php @@ -0,0 +1,93 @@ +<?php + +final class AddUnitPermissions extends Migration +{ + public function description() + { + return 'Add cols to cw_units table for permission settings'; + } + + public function up() + { + \DBManager::get()->exec("ALTER TABLE `cw_units` + ADD `permission_scope` ENUM('unit', 'structural_element') COLLATE latin1_bin NOT NULL DEFAULT 'unit' + AFTER `creator_id` + "); + \DBManager::get()->exec("ALTER TABLE `cw_units` + ADD `permission_type` ENUM('all', 'users', 'groups') COLLATE latin1_bin NOT NULL DEFAULT 'all' + AFTER `permission_scope` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_units` + ADD `visible` ENUM('always', 'never', 'period') COLLATE latin1_bin NOT NULL DEFAULT 'always' + AFTER `permission_type` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_units` + ADD `visible_all` TINYINT NOT NULL DEFAULT 0 + AFTER `visible` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_units` + ADD `writable` ENUM('always', 'never', 'period') COLLATE latin1_bin NOT NULL DEFAULT 'never' + AFTER `withdraw_date` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_units` + ADD `writable_all` TINYINT NOT NULL DEFAULT 0 + AFTER `writable` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_units` + ADD `writable_start_date` INT UNSIGNED DEFAULT NULL + AFTER `writable_all` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_units` + ADD `writable_end_date` INT UNSIGNED DEFAULT NULL + AFTER `writable_start_date` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_units` + ADD `visible_approval` TEXT NOT NULL + AFTER `writable_end_date` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_units` + ADD `writable_approval` TEXT NOT NULL + AFTER `visible_approval` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_units` + CHANGE `release_date` `visible_start_date` INT UNSIGNED DEFAULT NULL + "); + + \DBManager::get()->exec("ALTER TABLE `cw_units` + CHANGE `withdraw_date` `visible_end_date` INT UNSIGNED DEFAULT NULL + "); + + } + + public function down() + { + \DBManager::get()->exec("ALTER TABLE `cw_units` DROP `permission_scope`"); + \DBManager::get()->exec("ALTER TABLE `cw_units` DROP `permission_type`"); + \DBManager::get()->exec("ALTER TABLE `cw_units` DROP `visible`"); + \DBManager::get()->exec("ALTER TABLE `cw_units` DROP `visible_all`"); + \DBManager::get()->exec("ALTER TABLE `cw_units` DROP `writable`"); + \DBManager::get()->exec("ALTER TABLE `cw_units` DROP `writable_all`"); + \DBManager::get()->exec("ALTER TABLE `cw_units` DROP `writable_start_date`"); + \DBManager::get()->exec("ALTER TABLE `cw_units` DROP `writable_end_date`"); + \DBManager::get()->exec("ALTER TABLE `cw_units` DROP `visible_approval`"); + \DBManager::get()->exec("ALTER TABLE `cw_units` DROP `writable_approval`"); + + + \DBManager::get()->exec("ALTER TABLE `cw_units` + CHANGE `visible_start_date` `release_date` INT UNSIGNED DEFAULT NULL + "); + + \DBManager::get()->exec("ALTER TABLE `cw_units` + CHANGE `visible_end_date` `withdraw_date` INT UNSIGNED DEFAULT NULL + "); + } +}
\ No newline at end of file diff --git a/db/migrations/6.0.28_add_structural_element_permissions.php b/db/migrations/6.0.28_add_structural_element_permissions.php new file mode 100644 index 0000000..8c5b5dd --- /dev/null +++ b/db/migrations/6.0.28_add_structural_element_permissions.php @@ -0,0 +1,100 @@ +<?php + +final class AddStructuralElementPermissions extends Migration +{ + + public function description() + { + return 'Add cols to structural element for permission settings'; + } + public function up() + { + // add cols + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + ADD `permission_type` ENUM('all', 'users', 'groups') COLLATE latin1_bin NOT NULL DEFAULT 'all' + AFTER `commentable` + "); + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + ADD `visible` ENUM('always', 'never', 'period') COLLATE latin1_bin NOT NULL DEFAULT 'always' + AFTER `permission_type` + "); + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + ADD `visible_all` TINYINT NOT NULL DEFAULT 0 + AFTER `visible` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + ADD `writable` ENUM('always', 'never', 'period') COLLATE latin1_bin NOT NULL DEFAULT 'never' + AFTER `withdraw_date` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + ADD `writable_all` TINYINT NOT NULL DEFAULT 0 + AFTER `writable` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + ADD `writable_start_date` INT UNSIGNED NULL DEFAULT NULL + AFTER `writable_all` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + ADD `writable_end_date` INT UNSIGNED NULL DEFAULT NULL + AFTER `writable_start_date` + "); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + ADD `content_approval` TEXT NOT NULL + AFTER `write_approval` + "); + + // change cols + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + CHANGE `release_date` `visible_start_date` INT UNSIGNED NULL DEFAULT NULL + "); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + CHANGE `withdraw_date` `visible_end_date` INT UNSIGNED NULL DEFAULT NULL + "); + + \DBManager::get()->exec("UPDATE `cw_structural_elements` SET `visible_start_date` = NULL WHERE `visible_start_date` = 0 "); + + \DBManager::get()->exec("UPDATE `cw_structural_elements` SET `visible_end_date` = NULL WHERE `visible_end_date` = 0 "); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + CHANGE `read_approval` `visible_approval` TEXT NOT NULL + "); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + CHANGE `write_approval` `writable_approval` TEXT NOT NULL + "); + } + + public function down() + { + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` DROP `visible`"); + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` DROP `visible_all`"); + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` DROP `writable`"); + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` DROP `writable_all`"); + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` DROP `writable_start_date`"); + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` DROP `writable_end_date`"); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + CHANGE `visible_start_date` `release_date` INT UNSIGNED DEFAULT NULL + "); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + CHANGE `visible_end_date` `withdraw_date` INT UNSIGNED DEFAULT NULL + "); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + CHANGE `visible_approval` `read_approval` TEXT NOT NULL + "); + + \DBManager::get()->exec("ALTER TABLE `cw_structural_elements` + CHANGE `writable_approval` `write_approval` TEXT NOT NULL + "); + + } + +}
\ No newline at end of file diff --git a/db/migrations/6.0.29_update_structural_element_permissions.php b/db/migrations/6.0.29_update_structural_element_permissions.php new file mode 100644 index 0000000..5de8630 --- /dev/null +++ b/db/migrations/6.0.29_update_structural_element_permissions.php @@ -0,0 +1,75 @@ +<?php + +final class UpdateStructuralElementPermissions extends Migration +{ + public function description() + { + return 'Update structural element permissions for new settings'; + } + public function up() + { + $query = "SELECT * FROM `cw_structural_elements` WHERE `visible_approval` != '[]' AND `writable_approval` != '[]'"; + $rows_statement = DBManager::get()->prepare($query); + $rows = $rows_statement->execute(); + + $query = "UPDATE `cw_structural_elements` + SET + `permission_type` = :permission_type, + `visible` = :visible, + `writable` = :writable + `visible_approval` = :visible_approval, + `writable_approval` = :writable_approval, + WHERE `id` = :id"; + $statement = DBManager::get()->prepare($query); + + foreach ($rows as $row) { + $read_approval = json_decode($row['visible_approval'], true) ?: []; + $write_approval = json_decode($row['writable_approval'], true) ?: []; + $permission_type = $row['permission_type']; + $visible = $row['visible']; + $writable = $row['writable']; + $visible_approval = []; + $writable_approval = []; + if (!$read_approval['all'] && $write_approval['all']) { + $writable = 'always'; + } + + if (count($read_approval['groups']) || count($write_approval['groups'])) { + $permission_type = 'groups'; + $writable = 'always'; + $visible_approval = $read_approval['groups']; + $writable_approval = $write_approval['groups']; + } + if (count($read_approval['users']) || count($write_approval['users'])) { + $permission_type = 'users'; + $writable = 'always'; + $visible_approval = $read_approval['users']; + $writable_approval = $write_approval['users']; + } + + $statement->bindValue(':permission_type', $permission_type); + $statement->bindValue(':visible', $visible); + $statement->bindValue(':writable', $writable); + $statement->bindValue(':visible_approval', json_encode($visible_approval)); + $statement->bindValue(':writable_approval', json_encode($writable_approval)); + $statement->execute(); + } + + $query = "SELECT * FROM `cw_structural_elements` WHERE `visible_start_date` IS NOT NULL OR `visible_end_date` IS NOT NULL"; + $rows_statement = DBManager::get()->prepare($query); + $rows = $rows_statement->execute(); + + $query = "UPDATE `cw_structural_elements` + SET + `visible` = :visible, + WHERE `id` = :id"; + $statement = DBManager::get()->prepare($query); + + foreach ($rows as $row) { + $visible = 'period'; + + $statement->bindValue(':visible', $visible); + $statement->execute(); + } + } +}
\ No newline at end of file |
