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' %}
+
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)