diff --git a/preprints/models.py b/preprints/models.py index 9562e70c84aa3ac3ade1bd6425237f527515023a..f5453e6ef688792d81bc50c5736f87aac15046ae 100644 --- a/preprints/models.py +++ b/preprints/models.py @@ -46,3 +46,10 @@ class Preprint(models.Model): if self._file: return reverse('preprints:pdf', args=(self.identifier_w_vn_nr,)) raise Http404 + + @property + def citation_pdf_url(self): + """Return the absolute URL of the pdf for the meta tag for Google Scholar.""" + if self._file: # means this is a SciPost-hosted preprint + return "https://scipost.org%s" % self.get_absolute_url() + return self.get_absolute_url().replace("/abs/", "/pdf/") diff --git a/preprints/urls.py b/preprints/urls.py index f26597ca45ee4ed8854c5c5deb5fec5a3b6615a3..7aa565feeb2a0d74ef02cf0bed3638b68e68ea0c 100644 --- a/preprints/urls.py +++ b/preprints/urls.py @@ -6,10 +6,15 @@ from django.conf.urls import url from . import views -from submissions.constants import SCIPOST_PREPRINT_W_VN_REGEX +from submissions.constants import SUBMISSIONS_NO_VN_REGEX, SUBMISSIONS_COMPLETE_REGEX app_name = 'preprints' urlpatterns = [ - url(r'^{regex}/$'.format(regex=SCIPOST_PREPRINT_W_VN_REGEX), views.preprint_pdf, name='pdf'), + url(r'^{regex}/$'.format(regex=SUBMISSIONS_NO_VN_REGEX), + views.preprint_latest_pdf, + name='latest_pdf'), + url(r'^{regex}/$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + views.preprint_pdf, + name='pdf'), ] diff --git a/preprints/views.py b/preprints/views.py index e8db3f2f9b704379a552bdd665dd650ea49ecc6d..5d22b4cd413b57a405b0973a496b9cf2d9300487 100644 --- a/preprints/views.py +++ b/preprints/views.py @@ -5,6 +5,7 @@ import os from django.http import Http404, HttpResponse from django.shortcuts import get_object_or_404, redirect +from django.urls import reverse from submissions.helpers import check_verified_author from submissions.models import Submission @@ -39,3 +40,12 @@ def preprint_pdf(request, identifier_w_vn_nr): filename = '{}{}'.format(preprint.identifier_w_vn_nr, extension) response['Content-Disposition'] = ('filename=' + filename) return response + + +def preprint_latest_pdf(request, identifier_wo_vn_nr): + submission = Submission.objects.filter( + preprint__identifier_wo_vn_nr=identifier_wo_vn_nr).first() + if not submission: + raise Http404 + return redirect(reverse('preprints:pdf', + args=[submission.get_latest_version().preprint.identifier_w_vn_nr,])) diff --git a/production/admin.py b/production/admin.py index 7d25d09e34181c214476a4080134a74ebfad87e8..1cbe428b2d95e34b0c61d497c2bfd256002f1adc 100644 --- a/production/admin.py +++ b/production/admin.py @@ -27,7 +27,8 @@ class ProductionEventInline(admin.TabularInline): class ProductionStreamAdmin(GuardedModelAdmin): - search_fields = ['submission'] + search_fields = ['submission__author_list', 'submission__title', + 'submission__preprint__identifier_w_vn_nr'] list_filter = ['status'] list_display = ['submission', 'opened', 'status', event_count] inlines = ( diff --git a/submissions/constants.py b/submissions/constants.py index ec50bdda6fd2e850e9c2cae94fda4c7d24884bef..d5f22cfaed2ba451344d29de1897a314a71118b5 100644 --- a/submissions/constants.py +++ b/submissions/constants.py @@ -277,7 +277,6 @@ scipost_regex_wo_vn = 'scipost_[0-9]{4,}_[0-9]{4,}' scipost_regex_w_vn = 'scipost_[0-9]{4,}_[0-9]{4,}v[0-9]{1,2}' SUBMISSIONS_NO_VN_REGEX = '(?P<identifier_wo_vn_nr>(%s|%s))' % (arxiv_regex_wo_vn, scipost_regex_wo_vn) SUBMISSIONS_COMPLETE_REGEX = '(?P<identifier_w_vn_nr>(%s|%s))' % (arxiv_regex_w_vn, scipost_regex_w_vn) -SCIPOST_PREPRINT_W_VN_REGEX = '(?P<identifier_w_vn_nr>%s)' % scipost_regex_w_vn # `EXPLICIT_REGEX_MANUSCRIPT_CONSTRAINTS` tracks the regex rules for the manuscripts diff --git a/submissions/forms.py b/submissions/forms.py index 1e5bf9f401b115aa25023c37d65867389d1b7aa3..754f5091e77eaacbf2e1ed4b0e077e87e1975dc4 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -1301,10 +1301,13 @@ class EICRecommendationForm(forms.ModelForm): def clean(self): cleaned_data = super().clean() - if (cleaned_data['recommendation'] == EIC_REC_PUBLISH and - cleaned_data['tier'] == ''): - raise forms.ValidationError( - 'If you recommend Publish, please also provide a Tier.') + if cleaned_data['recommendation'] == EIC_REC_PUBLISH: + if not cleaned_data['for_journal']: + raise forms.ValidationError( + 'If you recommend Publish, please specify for which Journal.') + if cleaned_data['tier'] == '': + raise forms.ValidationError( + 'If you recommend Publish, please also provide a Tier.') def save(self): recommendation = super().save(commit=False) diff --git a/submissions/models/submission.py b/submissions/models/submission.py index f0b7d48e81ae01ec44b6832f40d3c75f2ecac0d7..09fbb48e4f29f528aba1475afeb504956a08665f 100644 --- a/submissions/models/submission.py +++ b/submissions/models/submission.py @@ -161,6 +161,18 @@ class Submission(models.Model): self.publication.doi_string, self.publication.publication_date.strftime('%Y')) return header + @property + def authors_as_list(self): + """Returns a python list of the authors, extracted from author_list field.""" + # Start by separating in comma's + comma_separated = self.author_list.split(',') + authors_as_list = [] + for entry in comma_separated: + and_separated = entry.split(' and ') + for subentry in and_separated: + authors_as_list.append(subentry.lstrip().rstrip()) + return authors_as_list + def touch(self): """Update latest activity timestamp.""" Submission.objects.filter(id=self.id).update(latest_activity=timezone.now()) diff --git a/submissions/templates/submissions/submission_detail.html b/submissions/templates/submissions/submission_detail.html index 4fffc0744019db4fa209a6d5dbb503c61170804f..1b693cf7de8d9f568127f0485a79f14b6faf75d2 100644 --- a/submissions/templates/submissions/submission_detail.html +++ b/submissions/templates/submissions/submission_detail.html @@ -11,6 +11,16 @@ <span class="breadcrumb-item">{{ submission.preprint.identifier_w_vn_nr }}</span> {% endblock %} +{% block headsup %} + <meta name="citation_title" content="{{ submission.title }}"/> + {% for author in submission.authors_as_list %} + <meta name="citation_author" content="{{ author }}"/> + {% endfor %} + <meta name="citation_online_date" content="{{ submission.submission_date|date:'Y/m/d' }}"/> + <meta name="citation_pdf_url" content="{{ submission.preprint.citation_pdf_url }}"/> +{% endblock headsup %} + + {% block content %} <div class="row">