From 49bbb6ae775b5cfda4d0966323b08c9ffef2ad21 Mon Sep 17 00:00:00 2001 From: Geert Kapteijns <ghkapteijns@gmail.com> Date: Thu, 18 May 2017 18:18:18 +0200 Subject: [PATCH] link to commentary page if it already exists --- commentaries/forms.py | 47 +++++++++++++------ .../_doi_query_commentary_exists.html | 1 + .../request_published_article.html | 2 +- commentaries/test_views.py | 6 ++- commentaries/views.py | 20 ++++---- 5 files changed, 47 insertions(+), 29 deletions(-) create mode 100644 commentaries/templates/commentaries/_doi_query_commentary_exists.html diff --git a/commentaries/forms.py b/commentaries/forms.py index a47a70af1..0af8bc931 100644 --- a/commentaries/forms.py +++ b/commentaries/forms.py @@ -3,6 +3,9 @@ import re from django import forms from django.shortcuts import get_object_or_404 from django.urls import reverse +from django.utils.safestring import mark_safe +from django.template.loader import get_template +from django.template import Context from .models import Commentary from .constants import COMMENTARY_PUBLISHED, COMMENTARY_PREPRINT @@ -22,9 +25,12 @@ class DOIToQueryForm(forms.Form): def clean_doi(self): input_doi = self.cleaned_data['doi'] - if Commentary.objects.filter(pub_DOI=input_doi).exists(): - error_message = 'There already exists a Commentary Page on this publication.' - raise forms.ValidationError(error_message) + commentary = Commentary.objects.filter(pub_DOI=input_doi) + if commentary.exists(): + error_message = get_template('commentaries/_doi_query_commentary_exists.html').render( + Context({'arxiv_or_DOI_string': commentary[0].arxiv_or_DOI_string}) + ) + raise forms.ValidationError(mark_safe(error_message)) caller = DOICaller(input_doi) if caller.is_valid: @@ -52,9 +58,12 @@ class ArxivQueryForm(forms.Form): def clean_identifier(self): identifier = self.cleaned_data['identifier'] - if Commentary.objects.filter(arxiv_identifier=identifier).exists(): - error_message = 'There already exists a Commentary Page on this arXiv preprint.' - raise forms.ValidationError(error_message) + commentary = Commentary.objects.filter(arxiv_identifier=identifier) + if commentary.exists(): + error_message = get_template('commentaries/_doi_query_commentary_exists.html').render( + Context({'arxiv_or_DOI_string': commentary[0].arxiv_or_DOI_string}) + ) + raise forms.ValidationError(mark_safe(error_message)) caller = ArxivCaller(identifier) if caller.is_valid: @@ -80,6 +89,10 @@ class RequestCommentaryForm(forms.ModelForm): 'pub_date': 'Format: YYYY-MM-DD' } + def save(self, *args, **kwargs): + self.instance.parse_links_into_urls() + return super().save(self, *args, **kwargs) + class RequestArxivPreprintForm(RequestCommentaryForm): class Meta(RequestCommentaryForm.Meta): @@ -96,15 +109,18 @@ class RequestArxivPreprintForm(RequestCommentaryForm): def clean_arxiv_identifier(self): arxiv_identifier = self.cleaned_data['arxiv_identifier'] - if Commentary.objects.filter(arxiv_identifier=arxiv_identifier).exists(): - error_message = 'There already exists a Commentary Page on this arXiv preprint.' - raise forms.ValidationError(error_message) + commentary = Commentary.objects.filter(arxiv_identifier=arxiv_identifier) + if commentary.exists(): + error_message = get_template('commentaries/_doi_query_commentary_exists.html').render( + Context({'arxiv_or_DOI_string': commentary[0].arxiv_or_DOI_string}) + ) + raise forms.ValidationError(mark_safe(error_message)) return arxiv_identifier def save(self, *args, **kwargs): self.instance.type = COMMENTARY_PREPRINT - return super(RequestArxivPreprintForm, self).save(*args, **kwargs) + return super().save(*args, **kwargs) class RequestPublishedArticleForm(RequestCommentaryForm): @@ -122,15 +138,18 @@ class RequestPublishedArticleForm(RequestCommentaryForm): def clean_pub_DOI(self): input_doi = self.cleaned_data['pub_DOI'] - if Commentary.objects.filter(pub_DOI=input_doi).exists(): - error_message = 'There already exists a Commentary Page on this publication.' - raise forms.ValidationError(error_message) + commentary = Commentary.objects.filter(pub_DOI=input_doi) + if commentary.exists(): + error_message = get_template('commentaries/_doi_query_commentary_exists.html').render( + Context({'arxiv_or_DOI_string': commentary[0].arxiv_or_DOI_string}) + ) + raise forms.ValidationError(mark_safe(error_message)) return input_doi def save(self, *args, **kwargs): self.instance.type = COMMENTARY_PUBLISHED - return super(RequestPublishedArticleForm, self).save(*args, **kwargs) + return super().save(*args, **kwargs) class VetCommentaryForm(forms.Form): diff --git a/commentaries/templates/commentaries/_doi_query_commentary_exists.html b/commentaries/templates/commentaries/_doi_query_commentary_exists.html new file mode 100644 index 000000000..2cc621178 --- /dev/null +++ b/commentaries/templates/commentaries/_doi_query_commentary_exists.html @@ -0,0 +1 @@ +There already exists a <a href="{% url 'commentaries:commentary' arxiv_or_DOI_string=arxiv_or_DOI_string %}">Commentary Page</a> on this publication. diff --git a/commentaries/templates/commentaries/request_published_article.html b/commentaries/templates/commentaries/request_published_article.html index f9bc472a3..b0bf7365a 100644 --- a/commentaries/templates/commentaries/request_published_article.html +++ b/commentaries/templates/commentaries/request_published_article.html @@ -16,7 +16,7 @@ <div class='col-12 col-md-8'> <form action="{% url 'commentaries:prefill_using_DOI' %}" method="post"> {% csrf_token %} - {{ doi_query_form|bootstrap }} + {{ query_form|bootstrap }} <input class="btn btn-secondary" type="submit" value="Query DOI"/> </form> </div> diff --git a/commentaries/test_views.py b/commentaries/test_views.py index 2454c1026..dbb0bb6c6 100644 --- a/commentaries/test_views.py +++ b/commentaries/test_views.py @@ -36,7 +36,7 @@ class RequestPublishedArticleTest(TestCase): self.commentary_instance = UnvettedCommentaryFactory.build(requested_by=ContributorFactory()) self.valid_form_data = model_form_data(self.commentary_instance, RequestPublishedArticleForm) - def test_commentary_gets_created_with_correct_type(self): + def test_commentary_gets_created_with_correct_type_and_link(self): request = RequestFactory().post(self.target, self.valid_form_data) request.user = UserFactory() @@ -46,6 +46,7 @@ class RequestPublishedArticleTest(TestCase): commentary = Commentary.objects.first() self.assertEqual(commentary.pub_DOI, self.valid_form_data['pub_DOI']) self.assertEqual(commentary.type, 'published') + self.assertEqual(commentary.arxiv_or_DOI_string, commentary.pub_DOI) class RequestArxivPreprintTest(TestCase): @@ -58,7 +59,7 @@ class RequestArxivPreprintTest(TestCase): # so model_form_data doesn't include it. self.valid_form_data['arxiv_identifier'] = self.commentary_instance.arxiv_identifier - def test_commentary_gets_created_with_correct_type(self): + def test_commentary_gets_created_with_correct_type_and_link(self): request = RequestFactory().post(self.target, self.valid_form_data) request.user = UserFactory() @@ -68,6 +69,7 @@ class RequestArxivPreprintTest(TestCase): commentary = Commentary.objects.first() self.assertEqual(commentary.arxiv_identifier, self.valid_form_data['arxiv_identifier']) self.assertEqual(commentary.type, 'preprint') + self.assertEqual(commentary.arxiv_or_DOI_string, "arXiv:" + self.commentary_instance.arxiv_identifier) class VetCommentaryRequestsTest(TestCase): """Test cases for `vet_commentary_requests` view method""" diff --git a/commentaries/views.py b/commentaries/views.py index de97bac21..4c50ca0eb 100644 --- a/commentaries/views.py +++ b/commentaries/views.py @@ -41,8 +41,6 @@ class RequestCommentary(CreateView): return super().form_valid(form) -@method_decorator(permission_required( - 'scipost.can_request_commentary_pages', raise_exception=True), name='dispatch') class RequestPublishedArticle(RequestCommentary): form_class = RequestPublishedArticleForm template_name = 'commentaries/request_published_article.html' @@ -53,8 +51,6 @@ class RequestPublishedArticle(RequestCommentary): return context -@method_decorator(permission_required( - 'scipost.can_request_commentary_pages', raise_exception=True), name='dispatch') class RequestArxivPreprint(RequestCommentary): form_class = RequestArxivPreprintForm template_name = 'commentaries/request_arxiv_preprint.html' @@ -68,10 +64,10 @@ class RequestArxivPreprint(RequestCommentary): @permission_required('scipost.can_request_commentary_pages', raise_exception=True) def prefill_using_DOI(request): if request.method == "POST": - doi_query_form = DOIToQueryForm(request.POST) + query_form = DOIToQueryForm(request.POST) # The form checks if doi is valid and commentary doesn't already exist. - if doi_query_form.is_valid(): - prefill_data = doi_query_form.request_published_article_form_prefill_data() + if query_form.is_valid(): + prefill_data = query_form.request_published_article_form_prefill_data() form = RequestPublishedArticleForm(initial=prefill_data) messages.success(request, strings.acknowledge_doi_query, fail_silently=True) else: @@ -79,7 +75,7 @@ def prefill_using_DOI(request): context = { 'form': form, - 'doi_query_form': doi_query_form, + 'query_form': query_form, } return render(request, 'commentaries/request_published_article.html', context) else: @@ -89,9 +85,9 @@ def prefill_using_DOI(request): @permission_required('scipost.can_request_commentary_pages', raise_exception=True) def prefill_using_arxiv_identifier(request): if request.method == "POST": - arxiv_query_form = ArxivQueryForm(request.POST) - if arxiv_query_form.is_valid(): - prefill_data = arxiv_query_form.request_arxiv_preprint_form_prefill_data() + query_form = ArxivQueryForm(request.POST) + if query_form.is_valid(): + prefill_data = query_form.request_arxiv_preprint_form_prefill_data() form = RequestArxivPreprintForm(initial=prefill_data) messages.success(request, strings.acknowledge_arxiv_query, fail_silently=True) else: @@ -99,7 +95,7 @@ def prefill_using_arxiv_identifier(request): context = { 'form': form, - 'arxiv_query_form': arxiv_query_form, + 'query_form': query_form, } return render(request, 'commentaries/request_arxiv_preprint.html', context) else: -- GitLab