From 4bc15fd3978e108f6bcc53e78f6d77a5746cc683 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms Date: Fri, 26 May 2023 12:45:29 +0000 Subject: fix #797 Merge request studip/studip!1817 --- app/controllers/privacy.php | 2 +- lib/classes/Privacy.php | 10 +++++- lib/models/Courseware/Block.php | 20 ++++++++++- lib/models/Courseware/BlockComment.php | 19 +++++++++- lib/models/Courseware/BlockFeedback.php | 19 +++++++++- lib/models/Courseware/Bookmark.php | 19 +++++++++- lib/models/Courseware/Container.php | 20 ++++++++++- lib/models/Courseware/StructuralElement.php | 20 ++++++++++- lib/models/Courseware/UserDataField.php | 19 +++++++++- lib/models/Courseware/UserProgress.php | 19 +++++++++- lib/modules/CoursewareModule.class.php | 54 +---------------------------- 11 files changed, 158 insertions(+), 63 deletions(-) diff --git a/app/controllers/privacy.php b/app/controllers/privacy.php index 60d3c33..ee1f157 100644 --- a/app/controllers/privacy.php +++ b/app/controllers/privacy.php @@ -439,7 +439,7 @@ class PrivacyController extends AuthenticatedController 'content' => [ 'icon' => Icon::create('forum2'), 'title' => _('Inhalte'), - 'description' => _('Dateien, Forum, Wiki, Literaturlisten'), + 'description' => _('Courseware, Dateien, Forum, Wiki, Literaturlisten'), ], 'quest' => [ 'icon' => Icon::create('vote'), diff --git a/lib/classes/Privacy.php b/lib/classes/Privacy.php index 90ba9f7..a271824 100644 --- a/lib/classes/Privacy.php +++ b/lib/classes/Privacy.php @@ -43,7 +43,15 @@ class Privacy 'content' => [ 'FileRef', 'ForumEntry', - 'WikiPage' + 'WikiPage', + 'Courseware\StructuralElement', + 'Courseware\Bookmark', + 'Courseware\Container', + 'Courseware\Block', + 'Courserware\BlockComment', + 'Courserware\BlockFeedback', + 'Courseware\UserDataField', + 'Courseware\UserProgress' ], 'quest' => [ 'Evaluation', diff --git a/lib/models/Courseware/Block.php b/lib/models/Courseware/Block.php index 48009fe..ecf366c 100755 --- a/lib/models/Courseware/Block.php +++ b/lib/models/Courseware/Block.php @@ -36,7 +36,7 @@ use User; * @property \User $edit_blocker belongs_to User * @property \Courseware\Container $container belongs_to Courseware\Container */ -class Block extends \SimpleORMap +class Block extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -207,4 +207,22 @@ class Block extends \SimpleORMap return 'error'; } } + + /** + * Export available data of a given user into a storage object + * (an instance of the StoredUserData class) for that user. + * + * @param StoredUserData $storage object to store data into + */ + public static function exportUserData(\StoredUserData $storage) + { + $blocks = \DBManager::get()->fetchAll( + 'SELECT * FROM cw_blocks WHERE owner_id = ? OR editor_id = ?', + [$storage->user_id, $storage->user_id] + ); + if ($blocks) { + $storage->addTabularData(_('Courseware Blöcke'), 'cw_blocks', $blocks); + } + + } } diff --git a/lib/models/Courseware/BlockComment.php b/lib/models/Courseware/BlockComment.php index c985e89..3f6f511 100755 --- a/lib/models/Courseware/BlockComment.php +++ b/lib/models/Courseware/BlockComment.php @@ -23,7 +23,7 @@ use User; * @property \User $user belongs_to User * @property \Courseware\Block $block belongs_to Courseware\Block */ -class BlockComment extends \SimpleORMap +class BlockComment extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -41,4 +41,21 @@ class BlockComment extends \SimpleORMap parent::configure($config); } + + /** + * Export available data of a given user into a storage object + * (an instance of the StoredUserData class) for that user. + * + * @param StoredUserData $storage object to store data into + */ + public static function exportUserData(\StoredUserData $storage) + { + $comments = \DBManager::get()->fetchAll( + 'SELECT * FROM cw_block_comments WHERE user_id = ?', + [$storage->user_id] + ); + if ($comments) { + $storage->addTabularData(_('Courseware Block Kommentare'), 'cw_block_comments', $comments); + } + } } diff --git a/lib/models/Courseware/BlockFeedback.php b/lib/models/Courseware/BlockFeedback.php index 08e5c6f..e43fa22 100755 --- a/lib/models/Courseware/BlockFeedback.php +++ b/lib/models/Courseware/BlockFeedback.php @@ -21,7 +21,7 @@ use User; * @property \User $user belongs_to User * @property \Courseware\Block $block belongs_to Courseware\Block */ -class BlockFeedback extends \SimpleORMap +class BlockFeedback extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -39,4 +39,21 @@ class BlockFeedback extends \SimpleORMap parent::configure($config); } + + /** + * Export available data of a given user into a storage object + * (an instance of the StoredUserData class) for that user. + * + * @param StoredUserData $storage object to store data into + */ + public static function exportUserData(\StoredUserData $storage) + { + $feedback = \DBManager::get()->fetchAll( + 'SELECT * FROM cw_block_feedbacks WHERE user_id = ?', + [$storage->user_id] + ); + if ($feedback) { + $storage->addTabularData(_('Courseware Block Feedback'), 'cw_block_feedback', $feedback); + } + } } diff --git a/lib/models/Courseware/Bookmark.php b/lib/models/Courseware/Bookmark.php index d6e5910..30cbbe7 100755 --- a/lib/models/Courseware/Bookmark.php +++ b/lib/models/Courseware/Bookmark.php @@ -20,7 +20,7 @@ namespace Courseware; * @property \User $user belongs_to User * @property \Courseware\StructuralElement $element belongs_to Courseware\StructuralElement */ -class Bookmark extends \SimpleORMap +class Bookmark extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -62,4 +62,21 @@ class Bookmark extends \SimpleORMap { return self::findBySQL('user_id = ?', [$userId]); } + + /** + * Export available data of a given user into a storage object + * (an instance of the StoredUserData class) for that user. + * + * @param StoredUserData $storage object to store data into + */ + public static function exportUserData(\StoredUserData $storage) + { + $bookmarks = \DBManager::get()->fetchAll( + 'SELECT * FROM cw_bookmarks WHERE user_id = ?', + [$storage->user_id] + ); + if ($bookmarks) { + $storage->addTabularData(_('Courseware Lesezeichen'), 'cw_bookmarks', $bookmarks); + } + } } diff --git a/lib/models/Courseware/Container.php b/lib/models/Courseware/Container.php index 1f621e5..c0566d2 100755 --- a/lib/models/Courseware/Container.php +++ b/lib/models/Courseware/Container.php @@ -33,7 +33,7 @@ use User; * @property \User $edit_blocker belongs_to User * @property \Courseware\StructuralElement $structural_element belongs_to Courseware\StructuralElement */ -class Container extends \SimpleORMap +class Container extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -140,4 +140,22 @@ class Container extends \SimpleORMap return $blockMap; } + + /** + * Export available data of a given user into a storage object + * (an instance of the StoredUserData class) for that user. + * + * @param StoredUserData $storage object to store data into + */ + public static function exportUserData(\StoredUserData $storage) + { + $containers = \DBManager::get()->fetchAll( + 'SELECT * FROM cw_containers WHERE owner_id = ? OR editor_id = ?', + [$storage->user_id, $storage->user_id] + ); + if ($containers) { + $storage->addTabularData(_('Courseware Abschnitte'), 'cw_containers', $containers); + } + + } } diff --git a/lib/models/Courseware/StructuralElement.php b/lib/models/Courseware/StructuralElement.php index 10fb17f..8361c2c 100755 --- a/lib/models/Courseware/StructuralElement.php +++ b/lib/models/Courseware/StructuralElement.php @@ -48,7 +48,7 @@ use User; * @SuppressWarnings(PHPMD.TooManyPublicMethods) * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) */ -class StructuralElement extends \SimpleORMap +class StructuralElement extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -693,4 +693,22 @@ SQL; $child->copy($user, $newElement); } } + + /** + * Export available data of a given user into a storage object + * (an instance of the StoredUserData class) for that user. + * + * @param StoredUserData $storage object to store data into + */ + public static function exportUserData(\StoredUserData $storage) + { + $structuralElements = \DBManager::get()->fetchAll( + 'SELECT * FROM cw_structural_elements WHERE ? IN (owner_id, editor_id, range_id)', + [$storage->user_id] + ); + if ($structuralElements) { + $storage->addTabularData(_('Courseware Seiten'), 'cw_structural_elements', $structuralElements); + } + + } } diff --git a/lib/models/Courseware/UserDataField.php b/lib/models/Courseware/UserDataField.php index 914cab0..af60880 100755 --- a/lib/models/Courseware/UserDataField.php +++ b/lib/models/Courseware/UserDataField.php @@ -21,7 +21,7 @@ namespace Courseware; * @property \Courseware\Block $block belongs_to Courseware\Block * @property \User $user belongs_to User */ -class UserDataField extends \SimpleORMap +class UserDataField extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -67,4 +67,21 @@ class UserDataField extends \SimpleORMap return $userDataField; } + + /** + * Export available data of a given user into a storage object + * (an instance of the StoredUserData class) for that user. + * + * @param StoredUserData $storage object to store data into + */ + public static function exportUserData(\StoredUserData $storage) + { + $userData = \DBManager::get()->fetchAll( + 'SELECT * FROM cw_user_data_fields WHERE user_id = ?', + [$storage->user_id] + ); + if ($userData) { + $storage->addTabularData(_('Courseware Nutzerdaten'), 'cw_user_data_fields', $userData); + } + } } diff --git a/lib/models/Courseware/UserProgress.php b/lib/models/Courseware/UserProgress.php index d4355f5..195fd89 100755 --- a/lib/models/Courseware/UserProgress.php +++ b/lib/models/Courseware/UserProgress.php @@ -21,7 +21,7 @@ namespace Courseware; * @property \Courseware\Block $block belongs_to Courseware\Block * @property \User $user belongs_to User */ -class UserProgress extends \SimpleORMap +class UserProgress extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -63,4 +63,21 @@ class UserProgress extends \SimpleORMap return $progress; } + + /** + * Export available data of a given user into a storage object + * (an instance of the StoredUserData class) for that user. + * + * @param StoredUserData $storage object to store data into + */ + public static function exportUserData(\StoredUserData $storage) + { + $userProgresses = \DBManager::get()->fetchAll( + 'SELECT * FROM cw_user_progresses WHERE user_id = ?', + [$storage->user_id] + ); + if ($userProgresses) { + $storage->addTabularData(_('Courseware Fortschritt'), 'cw_user_progresses', $userProgresses); + } + } } diff --git a/lib/modules/CoursewareModule.class.php b/lib/modules/CoursewareModule.class.php index 4c7b972..354659f 100755 --- a/lib/modules/CoursewareModule.class.php +++ b/lib/modules/CoursewareModule.class.php @@ -3,7 +3,7 @@ use Courseware\Instance; use Courseware\StructuralElement; -class CoursewareModule extends CorePlugin implements SystemPlugin, StudipModule, PrivacyPlugin +class CoursewareModule extends CorePlugin implements SystemPlugin, StudipModule { /** * {@inheritdoc} @@ -144,58 +144,6 @@ class CoursewareModule extends CorePlugin implements SystemPlugin, StudipModule, ]; } - /** - * {@inheritdoc} - */ - public function exportUserData(StoredUserData $storage) - { - $db = DBManager::get(); - - $structuralElements = $db->fetchAll( - 'SELECT * FROM cw_structural_elements WHERE owner_id = ? OR editor_id = ? OR range_id = ?', - [$storage->user_id, $storage->user_id, $storage->user_id] - ); - $storage->addTabularData(_('Courseware-Strukturelemente-Ergebnisse'), 'cw_structural_elements', $structuralElements); - - $containers = $db->fetchAll( - 'SELECT * FROM cw_containers WHERE owner_id = ? OR editor_id = ?', - [$storage->user_id, $storage->user_id] - ); - $storage->addTabularData(_('Courseware-Container-Ergebnisse'), 'cw_containers', $containers); - - $blocks = $db->fetchAll( - 'SELECT * FROM cw_blocks WHERE owner_id = ? OR editor_id = ?', - [$storage->user_id, $storage->user_id] - ); - $storage->addTabularData(_('Courseware-Blöcke-Ergebnisse'), 'cw_blocks', $blocks); - - $comments = $db->fetchAll( - 'SELECT * FROM cw_block_comments WHERE user_id = ?', - [$storage->user_id] - ); - $storage->addTabularData(_('Courseware-Kommentare-Ergebnisse'), 'cw_block_comments', $comments); - - $userData = $db->fetchAll( - 'SELECT * FROM cw_user_data_fields WHERE user_id = ?', - [$storage->user_id] - ); - $storage->addTabularData(_('Courseware-Nutzer-Daten-Ergebnisse'), 'cw_user_data_fields', $userData); - - $userProgresses = $db->fetchAll( - 'SELECT * FROM cw_user_progresses WHERE user_id = ?', - [$storage->user_id] - ); - $storage->addTabularData(_('Courseware-Nutzer-Fortschritt-Ergebnisse'), 'cw_user_progresses', $userProgresses); - - $bookmarks = $db->fetchAll( - 'SELECT * FROM cw_bookmarks WHERE user_id = ?', - [$storage->user_id] - ); - $storage->addTabularData(_('Courseware-Lesezeichen-Ergebnisse'), 'cw_bookmarks', $bookmarks); - - - } - public function isActivatableForContext(Range $context) { return $context->getRangeType() === 'course'; -- cgit v1.0