From 609fb88c723df69d7362c120a48ad04bc43dee39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 25 Jun 2017 18:19:01 +0200 Subject: [PATCH] create restore button basic functionality --- src/c3nav/editor/models/change.py | 4 ++++ src/c3nav/editor/templates/editor/changeset.html | 1 + .../editor/templates/editor/changeset_history.html | 4 ++++ .../templates/editor/fragment_change_groups.html | 4 ++-- src/c3nav/editor/views/changes.py | 10 ++++++++++ 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/c3nav/editor/models/change.py b/src/c3nav/editor/models/change.py index c989f54f..c99266b0 100644 --- a/src/c3nav/editor/models/change.py +++ b/src/c3nav/editor/models/change.py @@ -258,6 +258,10 @@ class Change(models.Model): return True return not getattr(current_obj, field.name).filter(pk=self.field_value).exists() + def restore(self, author): + if not self.can_restore: + return + def save(self, *args, **kwargs): if self.pk is not None: raise TypeError('change objects can not be edited (use update to set discarded_by)') diff --git a/src/c3nav/editor/templates/editor/changeset.html b/src/c3nav/editor/templates/editor/changeset.html index 068fbc62..6a187d82 100644 --- a/src/c3nav/editor/templates/editor/changeset.html +++ b/src/c3nav/editor/templates/editor/changeset.html @@ -16,6 +16,7 @@ {% trans 'View History' %}

+{% bootstrap_messages %} {% include 'editor/fragment_change_groups.html' %} diff --git a/src/c3nav/editor/templates/editor/changeset_history.html b/src/c3nav/editor/templates/editor/changeset_history.html index 838e17c2..b37685c3 100644 --- a/src/c3nav/editor/templates/editor/changeset_history.html +++ b/src/c3nav/editor/templates/editor/changeset_history.html @@ -4,6 +4,10 @@ {% include 'editor/fragment_modal_close.html' %}

{{ changeset.title }}

{% trans 'Changeset History' %}

+
+{% csrf_token %}

« {% trans 'back to changeset' %}

+{% bootstrap_messages %} {% include 'editor/fragment_change_groups.html' %} +
diff --git a/src/c3nav/editor/templates/editor/fragment_change_groups.html b/src/c3nav/editor/templates/editor/fragment_change_groups.html index 93019a21..ea73716e 100644 --- a/src/c3nav/editor/templates/editor/fragment_change_groups.html +++ b/src/c3nav/editor/templates/editor/fragment_change_groups.html @@ -36,9 +36,9 @@ {% endif %} {% if change.can_restore %} - + {% endif %} {% if change.created %} diff --git a/src/c3nav/editor/views/changes.py b/src/c3nav/editor/views/changes.py index 36f06f65..9ddcce59 100644 --- a/src/c3nav/editor/views/changes.py +++ b/src/c3nav/editor/views/changes.py @@ -2,6 +2,7 @@ import json from operator import itemgetter from django.conf import settings +from django.contrib import messages from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.utils.formats import date_format @@ -23,6 +24,15 @@ def changeset_detail(request, pk, show_history=False): ctx = group_changes(changeset, can_edit=can_edit, show_history=show_history) + if request.method == 'POST': + restore = request.POST.get('restore') + if restore.isdigit(): + change = changeset.changes.filter(pk=restore).first() + if change is not None and change.can_restore: + change.restore(request.user if request.user.is_authenticated else None) + messages.success(request, _('Original state has been restored!')) + return redirect(request.path) + if show_history: return render(request, 'editor/changeset_history.html', ctx)