From 090163ecefd11c105ae9b289a9c5350b1a11aed4 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms Date: Thu, 24 Apr 2025 16:47:16 +0200 Subject: add user configuration to enable wiki autosave feature, fixes #5345 Closes #5345 Merge request studip/studip!4031 --- app/controllers/course/wiki.php | 19 ++++++++----- app/views/course/wiki/edit.php | 20 -------------- .../6.0.49_user_config_for_wiki_autosave.php | 31 ++++++++++++++++++++++ resources/vue/components/WikiEditor.vue | 27 +++++++++++++++++-- 4 files changed, 69 insertions(+), 28 deletions(-) delete mode 100644 app/views/course/wiki/edit.php create mode 100644 db/migrations/6.0.49_user_config_for_wiki_autosave.php diff --git a/app/controllers/course/wiki.php b/app/controllers/course/wiki.php index 6088044..52188d3 100644 --- a/app/controllers/course/wiki.php +++ b/app/controllers/course/wiki.php @@ -491,12 +491,19 @@ class Course_WikiController extends AuthenticatedController $online_user->chdate = time(); $online_user->store(); - $this->me_online = $online_user; - $this->online_users = WikiOnlineEditingUser::findBySQL( - "JOIN `auth_user_md5` USING (`user_id`) - WHERE `page_id` = ? - ORDER BY Nachname, Vorname", - [$page->id] + $this->render_vue_app( + Studip\VueApp::create('WikiEditor') + ->withProps([ + 'cancel-url' => $this->leave_editingURL($page), + 'chdate' => date('c', $page->chdate), + 'editing' => (bool) $online_user->editing, + 'enable-autosave' => $user->getConfiguration()->getValue('WIKI_ENABLE_AUTOSAVE'), + 'page-content' => $page->content, + 'page-id' => (int) $page->id, + 'save-url' => $this->saveURL($page), + 'users' => $page->getOnlineUsers(), + 'toc' => CoreWiki::getTOC($page), + ]) ); } diff --git a/app/views/course/wiki/edit.php b/app/views/course/wiki/edit.php deleted file mode 100644 index 40e0111..0000000 --- a/app/views/course/wiki/edit.php +++ /dev/null @@ -1,20 +0,0 @@ - - -withProps([ - 'cancel-url' => $controller->leave_editingURL($page), - 'chdate' => date('c', $page->chdate), - 'page-content' => $page->content, - 'editing' => (bool) $me_online->editing, - 'page-id' => (int) $page->id, - 'save-url' => $controller->saveURL($page), - 'users' => $page->getOnlineUsers(), - 'toc' => CoreWiki::getTOC($page), - ]) -?> diff --git a/db/migrations/6.0.49_user_config_for_wiki_autosave.php b/db/migrations/6.0.49_user_config_for_wiki_autosave.php new file mode 100644 index 0000000..43e66c1 --- /dev/null +++ b/db/migrations/6.0.49_user_config_for_wiki_autosave.php @@ -0,0 +1,31 @@ +exec($query); + } + + public function down() + { + $query = "DELETE `config`, `config_values` + FROM `config` + LEFT JOIN `config_values` USING (`field`) + WHERE `field` = 'WIKI_ENABLE_AUTOSAVE'"; + DBManager::get()->exec($query); + } +} diff --git a/resources/vue/components/WikiEditor.vue b/resources/vue/components/WikiEditor.vue index 8fc2e41..cd8a444 100644 --- a/resources/vue/components/WikiEditor.vue +++ b/resources/vue/components/WikiEditor.vue @@ -21,7 +21,7 @@

@@ -101,6 +101,10 @@ export default { type: Boolean, default: true }, + enableAutosave: { + type: Boolean, + default: false, + }, offlineThreshold: { type: Number, default: 60 * 1000 @@ -128,7 +132,7 @@ export default { }, data() { return { - autosave: false, + autosave: this.enableAutosave, content: this.pageContent, editor: null, isChanged: false, @@ -136,6 +140,7 @@ export default { lastFocussedDate: null, lastSaveDate: new Date(this.chdate), onlineUsers: this.users, + storingAutosave: false, }; }, computed: { @@ -254,6 +259,24 @@ export default { watch: { isChanged(current) { this.toggleSecurityHandler(current); + }, + autosave(current) { + this.storingAutosave = true; + + const id = [STUDIP.USER_ID, 'WIKI_ENABLE_AUTOSAVE'].join('_'); + + const data = { + id, + type: 'config-values', + attributes: { value: current } + }; + + STUDIP.jsonapi.withPromises() + .patch(`config-values/${id}`, { data: { data } }) + .then(response => { + this.autosave = response.data.attributes.value; + this.storingAutosave = false; + }); } } } -- cgit v1.0