From 450559fb101346340c7f0ae953b15a5efe84c1e0 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 23 Apr 2015 00:57:58 +0100 Subject: [PATCH] Working revision view --- RIGS/rigboard.py | 53 ++++++++++++++++++++++--- RIGS/templates/RIGS/event_revision.html | 0 RIGS/templates/RIGS/revision_list.html | 45 +++++++++++++++++---- RIGS/urls.py | 8 +++- requirements.txt | 3 +- 5 files changed, 93 insertions(+), 16 deletions(-) create mode 100644 RIGS/templates/RIGS/event_revision.html diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index ed57827d..a680742c 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -17,6 +17,9 @@ from django.contrib import messages from z3c.rml import rml2pdf from PyPDF2 import PdfFileMerger, PdfFileReader import reversion +import diff_match_patch +import simplejson +from reversion.helpers import generate_patch_html from RIGS import models, forms import datetime @@ -181,15 +184,55 @@ class EventArchive(generic.ArchiveIndexView): return qs -class RevisionList(generic.ListView): +class EventRevisions(generic.ListView): model = reversion.revisions.Version template_name = "RIGS/revision_list.html" - def get_queryset(self): + # def get_queryset(self): + # thisEvent = get_object_or_404(models.Event, pk=self.kwargs['pk']) + # items = reversion.get_for_object(thisEvent) + # #logger.info('There are '+items[0].date_created) + # return items + + def get_context_data(self, **kwargs): + # Call the base implementation first to get a context + #context = super(PublisherDetail, self).get_context_data(**kwargs) + # Add in a QuerySet of all the books + context = {} thisEvent = get_object_or_404(models.Event, pk=self.kwargs['pk']) - items = reversion.get_for_object(thisEvent) - logger.info('There are '+str(len(items))) - return items + revisions = reversion.get_for_object(thisEvent) + #logger.info('There are '+items[0].date_created) + items = [] + for revisionNo, thisRevision in enumerate(revisions): + thisItem = {} + thisItem['revision'] = thisRevision.revision + if revisionNo >= len(revisions)-1: + thisItem['changedKeys'] = {} + else: + old_version = revisions[revisionNo+1] + new_version = thisRevision + old_version_obj = simplejson.loads(old_version.serialized_data)[0]['fields'] + new_version_obj = simplejson.loads(new_version.serialized_data)[0]['fields'] + thisItem['changedKeys'] = {} + for key,value in new_version_obj.iteritems(): + if value != old_version_obj[key]: + thisItem['changedKeys'][key] = generate_patch_html(old_version, new_version, key, cleanup="semantic") + items.append(thisItem) + logger.info(thisItem) + context['object_list'] = items + logger.info('done') + return context +class EventRevision(generic.DetailView): + model = reversion.revisions.Revision + template_name = "RIGS/event_revision.html" + + def get_queryset(self): + pk=self.kwargs['pk'] + thisVersion = get_object_or_404(reversion.models.Revision, pk=self.kwargs['pk']) + #items = reversion.revisions.Version + #thisVersion. + + return self.model.objects.filter(pk=pk) \ No newline at end of file diff --git a/RIGS/templates/RIGS/event_revision.html b/RIGS/templates/RIGS/event_revision.html new file mode 100644 index 00000000..e69de29b diff --git a/RIGS/templates/RIGS/revision_list.html b/RIGS/templates/RIGS/revision_list.html index ba0e6444..a65a8e0a 100644 --- a/RIGS/templates/RIGS/revision_list.html +++ b/RIGS/templates/RIGS/revision_list.html @@ -1,14 +1,43 @@ {% extends 'base.html' %} +{% load static %} {% block title %}Revisions{% endblock %} +{% block js %} + + + +{% endblock %} + {% block content %} -hello - + + + + + + + + + + + {% for version in object_list %} + + + + + + + {% endfor %} + + +
DateUserChanges
{{ version.revision.pk }}{{ version.revision.date_created }}{{ version.revision.user.name }}{% for key, value in version.changedKeys.iteritems %} + + {% endfor %}
+ + + {{ thediff }} {% endblock %} \ No newline at end of file diff --git a/RIGS/urls.py b/RIGS/urls.py index b2bebdba..a5b07dbc 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -78,8 +78,12 @@ urlpatterns = patterns('', name='event_duplicate'), url(r'^event/archive/$', login_required()(rigboard.EventArchive.as_view()), name='event_archive'), - url(r'^event/(?P\d+)/revisions/$', - permission_required_with_403('RIGS.view_event')(rigboard.RevisionList.as_view()), + + url(r'^event_revisions/(?P\d+)/$', + permission_required_with_403('RIGS.view_event')(rigboard.EventRevisions.as_view()), + name='event_revisions'), + url(r'^event_revision/(?P\d+)/$', + permission_required_with_403('RIGS.view_event')(rigboard.EventRevision.as_view()), name='event_revisions'), # Finance diff --git a/requirements.txt b/requirements.txt index 2afebf22..c0ee8f46 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,4 +10,5 @@ pillow==2.7.0 reportlab==2.7 z3c.rml==2.7.2 pyPDF2==1.23 -django-ical==1.3 \ No newline at end of file +django-ical==1.3 +diff_match_patch \ No newline at end of file