From 0858b8d8dc5be5976aa7e7a42015f11841835b6e Mon Sep 17 00:00:00 2001 From: David Siegfried <david.siegfried@uni-vechta.de> Date: Thu, 4 Apr 2024 14:02:30 +0000 Subject: [PATCH] fixes #3950 Closes #3950 Merge request studip/studip!2808 --- app/controllers/jsupdater.php | 111 +++++++++++++++++----------------- 1 file changed, 57 insertions(+), 54 deletions(-) diff --git a/app/controllers/jsupdater.php b/app/controllers/jsupdater.php index eb6032d9df0..319edaaac91 100644 --- a/app/controllers/jsupdater.php +++ b/app/controllers/jsupdater.php @@ -290,71 +290,74 @@ class JsupdaterController extends AuthenticatedController ] ); $page = WikiPage::find($page_id); - if ($page && $page->isEditable()) { - if ( - $pageInfo['wiki_editor_status']['focussed'] == $page_id - && !empty($pageInfo['wiki_editor_status']['page_content']) - ) { - $page->content = \Studip\Markup::markAsHtml( - $pageInfo['wiki_editor_status']['page_content'] + if ($page) { + if ($page->isEditable()) { + if ( + $pageInfo['wiki_editor_status']['focussed'] == $page_id + && !empty($pageInfo['wiki_editor_status']['page_content']) + ) { + $page->content = \Studip\Markup::markAsHtml( + $pageInfo['wiki_editor_status']['page_content'] + ); + $page->store(); + } + $onlineData = [ + 'user_id' => $user->id, + 'page_id' => $page_id + ]; + $online = WikiOnlineEditingUser::findOneBySQL( + "`user_id` = :user_id AND `page_id` = :page_id", + $onlineData ); - $page->store(); - } - $onlineData = [ - 'user_id' => $user->id, - 'page_id' => $page_id - ]; - $online = WikiOnlineEditingUser::findOneBySQL( - "`user_id` = :user_id AND `page_id` = :page_id", - $onlineData - ); - if (!$online) { - $online = WikiOnlineEditingUser::build($onlineData); - } - $editingUsers = WikiOnlineEditingUser::countBySQL( - "`page_id` = ? AND `editing` = 1 AND `user_id` != ?", - [$page->id, $user->id] - ); - if ($editingUsers > 0) { - $online->editing = 0; - } elseif ($online->editing && $online->editing_request) { - // this is the mode that this user requested the editing mode and was granted to get it: - $online->editing_request = 0; - } elseif ($online->editing_request) { - $other_requests = WikiOnlineEditingUser::countBySql("`page_id` = ? AND `editing_request` = 1 AND `user_id` != ?", [ - $page->id, - $user->id, - ]); - if ($other_requests === 0) { - $online->editing_request = 0; - $online->editing = 1; + if (!$online) { + $online = WikiOnlineEditingUser::build($onlineData); } - } else { - if ($pageInfo['wiki_editor_status']['focussed'] == $page_id) { - $online->editing = 1; - } else { - $other_users = WikiOnlineEditingUser::countBySql("`page_id` = ? AND `user_id` != ?", [ + $editingUsers = WikiOnlineEditingUser::countBySQL( + "`page_id` = ? AND `editing` = 1 AND `user_id` != ?", + [$page->id, $user->id] + ); + if ($editingUsers > 0) { + $online->editing = 0; + } else if ($online->editing && $online->editing_request) { + // this is the mode that this user requested the editing mode and was granted to get it: + $online->editing_request = 0; + } else if ($online->editing_request) { + $other_requests = WikiOnlineEditingUser::countBySql("`page_id` = ? AND `editing_request` = 1 AND `user_id` != ?", [ $page->id, $user->id, ]); - if ($other_users === 0) { - // if I'm the only user I don't need to lose the edit mode + if ($other_requests === 0) { + $online->editing_request = 0; + $online->editing = 1; + } + } else { + if ($pageInfo['wiki_editor_status']['focussed'] == $page_id) { $online->editing = 1; } else { - $online->editing = 0; + $other_users = WikiOnlineEditingUser::countBySql("`page_id` = ? AND `user_id` != ?", [ + $page->id, + $user->id, + ]); + if ($other_users === 0) { + // if I'm the only user I don't need to lose the edit mode + $online->editing = 1; + } else { + $online->editing = 0; + } } } + $online->chdate = time(); + $online->store(); + $data['contents'][$page_id] = wikiReady($page->content, true, $page->range_id, $page_id); + $data['wysiwyg_contents'][$page_id] = $page->content; + $data['pages'][$page_id]['editing'] = $online->editing; + } + else { + $data['pages'][$page_id]['editing'] = 0; } - $online->chdate = time(); - $online->store(); - $data['contents'][$page_id] = wikiReady($page->content, true, $page->range_id, $page_id); - $data['wysiwyg_contents'][$page_id] = $page->content; - $data['pages'][$page_id]['editing'] = $online->editing; - } else { - $data['pages'][$page_id]['editing'] = 0; + $data['pages'][$page_id]['chdate'] = $page->chdate; + $data['users'][$page_id] = $page->getOnlineUsers(); } - $data['pages'][$page_id]['chdate'] = $page->chdate; - $data['users'][$page_id] = $page->getOnlineUsers(); } } return $data; -- GitLab