aboutsummaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorRon Lucke <lucke@elan-ev.de>2024-11-04 11:39:35 +0000
committerRon Lucke <lucke@elan-ev.de>2024-11-04 11:39:35 +0000
commitc7c10f40175d34d9c76fa90d328ff0cdc2c7dfd2 (patch)
treeb444b0206bd43cb87612f90f0f646eccff301348 /db
parente8ce2c6e2bb858f9af664dbc5ac37edb958b8850 (diff)
Courseware: Rechte und Sichtbarkeit funktionieren nach unterschiedlichen Kriterien
Closes #3442 Merge request studip/studip!2635
Diffstat (limited to 'db')
-rw-r--r--db/migrations/6.0.27_add_unit_permissions.php93
-rw-r--r--db/migrations/6.0.28_add_structural_element_permissions.php100
-rw-r--r--db/migrations/6.0.29_update_structural_element_permissions.php75
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