# HG changeset patch # User durandn # Date 1469527749 -7200 # Node ID 89bfc54994557af3dcd411d7d4f668087424d750 # Parent cfb718dadcdfb03e05d0fbaa9a4a26f15bbed259 first pass on merge system diff -r cfb718dadcdf -r 89bfc5499455 src/iconolab/models.py --- a/src/iconolab/models.py Tue Jul 26 12:07:48 2016 +0200 +++ b/src/iconolab/models.py Tue Jul 26 12:09:09 2016 +0200 @@ -186,13 +186,14 @@ # Call when we're validating an awaiting revision whose parent isn't the current revision OR IF IT WAS CHANGED BY THE ANNOTATION AUTHOR @transaction.atomic def merge_existing_revision(self, title, description, fragment, tags, revision_to_merge): - merged_revision = self.make_new_revision(author=self.author, title=title, description=description, fragment=fragment, tags=tags) + merged_revision = self.make_new_revision(author=self.author, title=title, description=description, fragment=fragment, tags_json=tags) merged_revision.merge_parent_revision = revision_to_merge merged_revision.save() revision_to_merge.state = AnnotationRevision.STUDIED revision_to_merge.save() self.current_revision=merged_revision self.save() + return merged_revision class AnnotationRevision(models.Model): diff -r cfb718dadcdf -r 89bfc5499455 src/iconolab/templates/iconolab/change_annotation.html --- a/src/iconolab/templates/iconolab/change_annotation.html Tue Jul 26 12:07:48 2016 +0200 +++ b/src/iconolab/templates/iconolab/change_annotation.html Tue Jul 26 12:09:09 2016 +0200 @@ -101,7 +101,7 @@ {% endif %} {% csrf_token %} -
+
{% if form.title.errors %}
-
+
{% if form.description.errors %}
-
+
{% if form.comment.errors %}

Annotation révisée par {{ revision.author.username}}

diff -r cfb718dadcdf -r 89bfc5499455 src/iconolab/templates/iconolab/merge_revision.html --- a/src/iconolab/templates/iconolab/merge_revision.html Tue Jul 26 12:07:48 2016 +0200 +++ b/src/iconolab/templates/iconolab/merge_revision.html Tue Jul 26 12:09:09 2016 +0200 @@ -33,7 +33,7 @@   - +

@@ -51,6 +51,8 @@
Cette révision est la révision à partir de laquelle l'annotation proposée a été créée. + + {% if parent_revision.revision_guid == current_revision.revision_guid %}
Note: Dans ce cas précis, cette révision est identique à la révision courante. {% endif %}
@@ -67,19 +69,19 @@   - +
  - +

-
{% endblock %} diff -r cfb718dadcdf -r 89bfc5499455 src/iconolab/views.py --- a/src/iconolab/views.py Tue Jul 26 12:07:48 2016 +0200 +++ b/src/iconolab/views.py Tue Jul 26 12:09:09 2016 +0200 @@ -397,7 +397,6 @@ ) )(request) # Auto-reject the revision only if the proper query arg is set - print(request.GET) if "auto_reject" in request.GET and request.GET["auto_reject"] in ["True", "true", "1", "yes"]: annotation.reject_existing_revision(revision) return RedirectView.as_view( @@ -426,11 +425,59 @@ context['current_revision'] = annotation.current_revision context['current_tags_data'] = annotation.current_revision.get_tags_json() context['current_comment'] = annotation.current_revision.creation_comment.first() + + merge_form = AnnotationRevisionForm(instance=revision) + context['merge_form'] = merge_form return render(request, 'iconolab/merge_revision.html', context) def post(self, request, *args, **kwargs): # Handle merge form submit here - pass + success, result = self.check_kwargs(kwargs) + if success: + (collection, image, annotation, revision) = result + else: + return result(request) + collection_name = kwargs['collection_name'] + image_guid = kwargs['image_guid'] + annotation_guid = kwargs['annotation_guid'] + revision_guid = kwargs['revision_guid'] + + merge_revision_form = AnnotationRevisionForm(request.POST) + if merge_revision_form.is_valid(): + revision_title = merge_revision_form.cleaned_data['title'] + revision_description = merge_revision_form.cleaned_data['description'] + revision_fragment = merge_revision_form.cleaned_data['fragment'] + revision_tags_json = merge_revision_form.cleaned_data['tags'] + new_revision = annotation.merge_existing_revision(revision_title, revision_description, revision_fragment, revision_tags_json, revision) + revision_comment = merge_revision_form.cleaned_data['comment'] + comment = IconolabComment.objects.create( + comment = revision_comment, + revision = new_revision, + content_type = ContentType.objects.get(app_label='iconolab', model='annotation'), + content_object = annotation, + site = Site.objects.get(id=settings.SITE_ID), + object_pk = annotation.id, + user = request.user, + user_name = request.user.username + ) + return RedirectView.as_view(url=reverse('annotation_detail', kwargs={'collection_name': collection_name, 'image_guid': image_guid, 'annotation_guid': annotation_guid}))(request) + context = self.get_context_data(**kwargs) + context['image'] = image + context['merge_form'] = merge_revision_form + context['annotation'] = annotation + # Proposal data + context['proposal_revision'] = revision + context['proposal_tags_data'] = revision.get_tags_json() + context['proposal_comment'] = revision.creation_comment.first() + # Parent data + context['parent_revision'] = revision.parent_revision + context['parent_tags_data'] = revision.parent_revision.get_tags_json() + context['parent_comment'] = revision.parent_revision.creation_comment.first() + # Current data + context['current_revision'] = annotation.current_revision + context['current_tags_data'] = annotation.current_revision.get_tags_json() + context['current_comment'] = annotation.current_revision.creation_comment.first() + return render(request, 'iconolab/merge_revision.html', context) class NotFoundErrorView(View):