diff options
| author | Rasmus Fuhse <fuhse@data-quest.de> | 2024-04-29 14:47:17 +0000 |
|---|---|---|
| committer | Rasmus Fuhse <fuhse@data-quest.de> | 2024-04-29 14:47:17 +0000 |
| commit | 3abeb6de6112bd177a5f6b96dc944b5637c55b96 (patch) | |
| tree | d85f043b5814f75bc5944e0e926518787ec58ed0 /app | |
| parent | 3ffd2f46af742ee26ecf0884ea4729e37b873e93 (diff) | |
Resolve "Wiki: Einzelne Wikiversionen können nicht mehr gelöscht werden"
Closes #4079
Merge request studip/studip!2925
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/course/wiki.php | 82 | ||||
| -rw-r--r-- | app/controllers/jsupdater.php | 5 | ||||
| -rw-r--r-- | app/views/course/wiki/ask_deleting.php | 31 | ||||
| -rw-r--r-- | app/views/course/wiki/history.php | 20 |
4 files changed, 127 insertions, 11 deletions
diff --git a/app/controllers/course/wiki.php b/app/controllers/course/wiki.php index 738d0e7..567e285 100644 --- a/app/controllers/course/wiki.php +++ b/app/controllers/course/wiki.php @@ -142,12 +142,21 @@ class Course_WikiController extends AuthenticatedController Icon::create('settings'), ['data-dialog' => 'width=700'] ); - $action_menu->addButton( - 'delete', - _('Seite löschen'), - Icon::create('trash'), - ['data-confirm' => _('Wollen Sie wirklich die komplette Seite löschen?'), 'form' => 'delete_page'] - ); + if (count($this->page->versions) > 0) { + $action_menu->addLink( + $this->ask_deletingURL($this->page), + _('Seite / Version löschen'), + Icon::create('trash'), + ['data-dialog' => 'size=auto'] + ); + } else { + $action_menu->addButton( + 'delete', + _('Seite löschen'), + Icon::create('trash'), + ['data-confirm' => _('Wollen Sie wirklich die komplette Seite löschen?'), 'form' => 'delete_page'] + ); + } } $action_menu->addLink( '#', @@ -256,7 +265,10 @@ class Course_WikiController extends AuthenticatedController "[[ " . $values['name'], $p2['content'] ); - $p2->store(); + if ($p2->isDirty()) { + $p2['user_id'] = User::findCurrent()->id; + $p2->store(); + } } })->validate(); if (Request::isPost()) { @@ -272,9 +284,17 @@ class Course_WikiController extends AuthenticatedController $this->render_form($this->form); } + public function ask_deleting_action(WikiPage $page) + { + if (!$page->isEditable()) { + throw new AccessDeniedException(); + } + PageLayout::setTitle(_('Was genau soll gelöscht werden?')); + } + public function delete_action(WikiPage $page) { - if (!Request::isPost() || !CSRFProtection::verifyRequest()) { + if (!Request::isPost() || !$page->isEditable() || !CSRFProtection::verifyRequest()) { throw new AccessDeniedException(); } $name = $page->name; @@ -283,6 +303,38 @@ class Course_WikiController extends AuthenticatedController $this->redirect($this->allpagesURL()); } + public function deleteversion_action(WikiPage $page, $version_id = null) + { + if (!Request::isPost() || !$page->isEditable() || !CSRFProtection::verifyRequest()) { + throw new AccessDeniedException(); + } + if ($version_id === null) { + $version = $page->versions[0]; + if ($version) { + $page['name'] = $version['name']; + $page['content'] = $version['content']; + $page['user_id'] = $version['user_id']; + $page['chdate'] = $version['mkdate']; + $page->store(); + $version->delete(); + } else { + $page->delete(); + } + } else { + $version = WikiVersion::find($version_id); + if ($version['page_id'] === $page->id) { + $version->delete(); + } + } + PageLayout::postSuccess(_('Version wurde gelöscht.')); + if (Request::get('redirect_to') === 'page') { + $this->redirect($this->page($page)); + } else { + $this->redirect($this->history($page)); + } + + } + public function allpages_action() { $this->pages = WikiPage::findBySQL( @@ -535,8 +587,11 @@ class Course_WikiController extends AuthenticatedController } $page->content = \Studip\Markup::markAsHtml(trim(Request::get('content'))); - $page->store(); $user = User::findCurrent(); + if ($page->isDirty()) { + $page['user_id'] = $user->id; + $page->store(); + } $pageData = [ 'page_id' => $page->id, 'user_id' => $user->id @@ -774,6 +829,10 @@ class Course_WikiController extends AuthenticatedController 'type' => 'no', 'mapper' => function () { return $this->range->id; } ], + 'user_id' => [ + 'type' => 'no', + 'mapper' => function () { return User::findCurrent()->id; } + ], 'name' => [ 'required' => true, 'label' => _('Name der Seite'), @@ -828,7 +887,10 @@ class Course_WikiController extends AuthenticatedController '[[ ' . $values['name'] . ' ]]', $page->content ); - $page->store(); + if ($page->isDirty()) { + $page['user_id'] = User::findCurrent()->id; + $page->store(); + } } } } diff --git a/app/controllers/jsupdater.php b/app/controllers/jsupdater.php index 319edaa..a5425f9 100644 --- a/app/controllers/jsupdater.php +++ b/app/controllers/jsupdater.php @@ -299,7 +299,10 @@ class JsupdaterController extends AuthenticatedController $page->content = \Studip\Markup::markAsHtml( $pageInfo['wiki_editor_status']['page_content'] ); - $page->store(); + if ($page->isDirty()) { + $page['user_id'] = User::findCurrent()->id; + $page->store(); + } } $onlineData = [ 'user_id' => $user->id, diff --git a/app/views/course/wiki/ask_deleting.php b/app/views/course/wiki/ask_deleting.php new file mode 100644 index 0000000..5afd19f --- /dev/null +++ b/app/views/course/wiki/ask_deleting.php @@ -0,0 +1,31 @@ +<form action="" method="post"> + <?= CSRFProtection::tokenTag() ?> + <div class="file_select_possibilities"> + <div> + <div class="clickable"> + <?= Icon::create('archive2')->asInput(50, [ + 'formaction' => $controller->deleteversionURL($page, ['redirect_to' => 'page']), + 'data-confirm' => _('Wirklich die letzte Änderung löschen?') + ]) ?> + <button + class="undecorated" + data-confirm="<?= _('Wirklich die letzte Änderung löschen?') ?>" + formaction="<?= $controller->deleteversionURL($page, ['redirect_to' => 'page']) ?>"> + <?= _('Nur die letzte Änderung löschen') ?> + </button> + </div> + <div class="clickable"> + <?= Icon::create('wiki')->asInput(50, [ + 'formaction' => $controller->deleteURL($page), + 'data-confirm' => _('Wollen Sie wirklich die komplette Seite löschen?') + ]) ?> + <button + class="undecorated" + data-confirm="<?= _('Wollen Sie wirklich die komplette Seite löschen?') ?>" + formaction="<?= $controller->deleteURL($page) ?>"> + <?= _('Ganze Wikiseite löschen') ?> + </button> + </div> + </div> + </div> +</form> diff --git a/app/views/course/wiki/history.php b/app/views/course/wiki/history.php index 81fde59..cbd324d 100644 --- a/app/views/course/wiki/history.php +++ b/app/views/course/wiki/history.php @@ -45,6 +45,16 @@ <a href="<?= $controller->versiondiff($page) ?>" data-dialog> <?= Icon::create('log')->asImg(['class' => 'text-bottom']) ?> </a> + <? if ($page->isEditable()) : ?> + <form action="<?= $controller->deleteversion($page) ?>" + method="post" + class="inline" + title="<?= _('Version löschen') ?>" + data-confirm="<?= _('Wirklich diese Version löschen?') ?>"> + <?= CSRFProtection::tokenTag() ?> + <?= Icon::create('trash')->asInput() ?> + </form> + <? endif ?> </td> </tr> <? foreach ($page->versions as $i => $version) : ?> @@ -69,6 +79,16 @@ <a href="<?= $controller->versiondiff($page, $version->id) ?>" data-dialog> <?= Icon::create('log')->asImg(['class' => 'text-bottom']) ?> </a> + <? if ($page->isEditable()) : ?> + <form action="<?= $controller->deleteversion($page, $version->id) ?>" + method="post" + class="inline" + title="<?= _('Version löschen') ?>" + data-confirm="<?= _('Wirklich diese Version löschen?') ?>"> + <?= CSRFProtection::tokenTag() ?> + <?= Icon::create('trash')->asInput() ?> + </form> + <? endif ?> </td> </tr> <? endforeach ?> |
