diff --git a/app/controllers/privacy.php b/app/controllers/privacy.php index 60d3c33488d7f24fbc7549d0441486894bafdad9..ee1f1574293b6b8ada0736f6e91c871ea0afbec9 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 bb3bcddc60ad9691ac50098e2f798982467f69ee..870e96ba3c8e488a1d96b5690e9a9bf75319a0e2 100644 --- a/lib/classes/Privacy.php +++ b/lib/classes/Privacy.php @@ -43,7 +43,20 @@ class Privacy 'content' => [ 'FileRef', 'ForumEntry', - 'WikiPage' + 'WikiPage', + 'Courseware\Unit', + 'Courseware\StructuralElement', + 'Courserware\StructuralElementComment', + 'Courserware\StructuralElementFeedback', + 'Courseware\TaskGroup', + 'Courseware\TaskFeedback', + '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 05d5d45c1b12d984bca1bab4a8e1bc64435a0804..bd0361897dd65c93f11a903f1dc86d032f93f581 100644 --- 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 = []) { @@ -222,4 +222,22 @@ class Block extends \SimpleORMap return StructuralElement::build($structuralElement, false); } + + /** + * 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 16f3a73293dc2737386c62bb6e8474041902302b..fc6811120b1c25ae68fd3555636d665993825b01 100644 --- 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 = []) { @@ -57,4 +57,21 @@ class BlockComment extends \SimpleORMap return StructuralElement::build($structuralElement, false); } + + /** + * 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 422577097a1948119fef61ffb93421bfda53769f..21eed5d0a3714d0356e45cfe6d3ac6dcd030930f 100644 --- 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 = []) { @@ -55,4 +55,21 @@ class BlockFeedback extends \SimpleORMap return StructuralElement::build($structuralElement, false); } + + /** + * 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 e11954825cc6d656d78ad9de00cf987b7acd9ca4..ddff953a289bcda05db2c4a159e927a3888760ac 100644 --- 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 = ? ORDER BY chdate', [$user->id]); } + + /** + * 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 088f53959c44dd5a05d24b5714f80ac83d2e580d..082a9a0176904f136b2ef46c17180b190e11e9ad 100644 --- 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 = []) { @@ -142,4 +142,22 @@ class Container extends \SimpleORMap return [$blockMap, $newBlockList]; } + + /** + * 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 deaab1a177c62ac18d0f66da8b9d70bea844e62e..3e405f3b2f01d10710ef3047395dd56dc55a7117 100644 --- a/lib/models/Courseware/StructuralElement.php +++ b/lib/models/Courseware/StructuralElement.php @@ -53,7 +53,7 @@ use User; * @SuppressWarnings(PHPMD.TooManyPublicMethods) * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) */ -class StructuralElement extends \SimpleORMap +class StructuralElement extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -1091,4 +1091,22 @@ SQL; } } } + + /** + * 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/StructuralElementComment.php b/lib/models/Courseware/StructuralElementComment.php index e5fbc818a9c98a3c661667c34f61eb1f926431e2..1e046c4d4e798ae6fe104b88251764ce8a51399a 100644 --- a/lib/models/Courseware/StructuralElementComment.php +++ b/lib/models/Courseware/StructuralElementComment.php @@ -21,7 +21,7 @@ use User; * @property \User $user belongs_to User * @property \Courseware\StructuralElement $structural_element belongs_to Courseware\StructuralElement */ -class StructuralElementComment extends \SimpleORMap +class StructuralElementComment extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -39,4 +39,21 @@ class StructuralElementComment 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_structural_element_comments WHERE user_id = ?', + [$storage->user_id] + ); + if ($comments) { + $storage->addTabularData(_('Courseware Seiten Kommentare'), 'cw_structural_element_comments', $comments); + } + } } diff --git a/lib/models/Courseware/StructuralElementFeedback.php b/lib/models/Courseware/StructuralElementFeedback.php index a2e3b8b97ab099bb0d6bb7b25cf3f31ee968e842..c7435d06b67c219a38efd2ea499ba8e906bd5b89 100644 --- a/lib/models/Courseware/StructuralElementFeedback.php +++ b/lib/models/Courseware/StructuralElementFeedback.php @@ -21,7 +21,7 @@ use User; * @property \User $user belongs_to User * @property \Courseware\StructuralElement $structural_element belongs_to Courseware\StructuralElement */ -class StructuralElementFeedback extends \SimpleORMap +class StructuralElementFeedback extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -39,4 +39,21 @@ class StructuralElementFeedback 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_structural_element_feedbacks WHERE user_id = ?', + [$storage->user_id] + ); + if ($feedback) { + $storage->addTabularData(_('Courseware Seiten Feedback'), 'cw_structural_element_feedbacks', $feedback); + } + } } diff --git a/lib/models/Courseware/TaskFeedback.php b/lib/models/Courseware/TaskFeedback.php index 57e2ce0705323ff1a603deb5af00f62095816449..987aae9f5c0c4629f86e32a15d81157b026e3391 100644 --- a/lib/models/Courseware/TaskFeedback.php +++ b/lib/models/Courseware/TaskFeedback.php @@ -22,7 +22,7 @@ use User; * @property \User $lecturer belongs_to User * @property \Courseware\Task $task belongs_to Courseware\Task */ -class TaskFeedback extends \SimpleORMap +class TaskFeedback extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -55,4 +55,21 @@ class TaskFeedback extends \SimpleORMap return StructuralElement::build($structuralElement, false); } + + /** + * 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_task_feedbacks WHERE lecturer_id = ?', + [$storage->user_id] + ); + if ($feedback) { + $storage->addTabularData(_('Courseware Aufgaben Feedback'), 'cw_task_feedbacks', $feedback); + } + } } diff --git a/lib/models/Courseware/TaskGroup.php b/lib/models/Courseware/TaskGroup.php index 7ca6eb1fa121d8c205a7327e414edcf24026fb9f..d32866390a935b0569d808bf338e3c5fbd5f4415 100644 --- a/lib/models/Courseware/TaskGroup.php +++ b/lib/models/Courseware/TaskGroup.php @@ -25,7 +25,7 @@ use User; * @property \Courseware\StructuralElement $structural_element belongs_to Courseware\StructuralElement * @property \SimpleORMapCollection $tasks has_many Courseware\Task */ -class TaskGroup extends \SimpleORMap +class TaskGroup extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -58,4 +58,22 @@ class TaskGroup extends \SimpleORMap return $solvers; } + + /** + * 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) + { + $task_groups = \DBManager::get()->fetchAll( + 'SELECT * FROM cw_task_groups WHERE lecturer_id = ?', + [$storage->user_id] + ); + if ($task_groups) { + $storage->addTabularData(_('Courseware Aufgaben'), 'cw_task_groups', $task_groups); + } + + } } diff --git a/lib/models/Courseware/Unit.php b/lib/models/Courseware/Unit.php index 5c470c901ff893aa92819151d49a21dad7f58c23..647f9f9fb700632c9c98b1b87bd480f6ea53b595 100644 --- a/lib/models/Courseware/Unit.php +++ b/lib/models/Courseware/Unit.php @@ -31,7 +31,7 @@ use User; * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) */ -class Unit extends \SimpleORMap +class Unit extends \SimpleORMap implements \PrivacyObject { protected static function configure($config = []) { @@ -110,4 +110,21 @@ class Unit extends \SimpleORMap return $newUnit; } + /** + * 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) + { + $units = \DBManager::get()->fetchAll( + 'SELECT * FROM cw_units WHERE creator_id = ?', + [$storage->user_id] + ); + if ($units) { + $storage->addTabularData(_('Courseware Lernmaterialien'), 'cw_units', $units); + } + + } } diff --git a/lib/models/Courseware/UserDataField.php b/lib/models/Courseware/UserDataField.php index 914cab0361511405f3d53bd71d546e296af36da6..af608809acd279f4a959f9442091ba93fa76ce26 100644 --- 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 d4355f55454b4085c7e1b2aac94f126b98d5d3f0..195fd89222ba5373c191979ab720f75821d5adf6 100644 --- 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 2a9161ac7277e90aa9c05f18598b90455f52c389..56a205c2f0546c96efaf05ff3306be3ef1af01f4 100644 --- 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} @@ -146,58 +146,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';