Skip to content
Snippets Groups Projects
Commit 3abeb6de authored by Rasmus Fuhse's avatar Rasmus Fuhse
Browse files

Resolve "Wiki: Einzelne Wikiversionen können nicht mehr gelöscht werden"

Closes #4079

Merge request studip/studip!2925
parent 3ffd2f46
No related branches found
No related tags found
No related merge requests found
......@@ -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();
}
}
}
}
......
......@@ -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,
......
<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>
......@@ -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 ?>
......
......@@ -152,7 +152,7 @@ class WikiPage extends SchemaProvider
*/
private function addAuthorRelationship($relationships, $wiki, $includeList)
{
if ($wiki->user_id) {
if ($wiki->user_id && $wiki->user_id !== 'nobody') {
$relationships[self::REL_AUTHOR] = [
self::RELATIONSHIP_LINKS => [
Link::RELATED => $this->createLinkToResource($wiki->user),
......
......@@ -92,7 +92,7 @@ class WikiPage extends SimpleORMap implements PrivacyObject
protected function createVersion()
{
$this->user_id = User::findCurrent()->id;
$last_version = $this->versions[0];
if (
!$this->isNew()
&& $this->content['content'] !== $this->content_db['content']
......@@ -100,6 +100,7 @@ class WikiPage extends SimpleORMap implements PrivacyObject
$this->content_db['user_id'] !== $this->content['user_id']
|| $this->content_db['chdate'] < time() - 60 * 30
)
&& (!$last_version || $last_version['content'] !== $this['content'])
) {
//Neue Version anlegen:
WikiVersion::create([
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment