diff --git a/SciPost_v1/settings.py b/SciPost_v1/settings.py index 7b8d9b8b0e4017e06420eb678430f9de4b47c36f..ba93d4e07b69cc9e186ca249f6c17fc0e969e08f 100644 --- a/SciPost_v1/settings.py +++ b/SciPost_v1/settings.py @@ -172,3 +172,6 @@ SERVER_EMAIL = host_settings["SERVER_EMAIL"] # Own settings JOURNALS_DIR = host_settings["JOURNALS_DIR"] + +CROSSREF_LOGIN_ID = host_settings["CROSSREF_LOGIN_ID"] +CROSSREF_LOGIN_PASSWORD = host_settings["CROSSREF_LOGIN_PASSWORD"] diff --git a/journals/forms.py b/journals/forms.py index 26398f30b0362163a1f7193525bf6d84c29c5636..6cb3082d3121f8f0635d8161c9f503057b516c89 100644 --- a/journals/forms.py +++ b/journals/forms.py @@ -76,8 +76,10 @@ class ValidatePublicationForm(forms.ModelForm): class Meta: model = Publication exclude = ['authors', 'authors_claims', 'authors_false_claims', + 'metadata', 'metadata_xml', 'latest_activity',] + class CitationListBibitemsForm(forms.Form): latex_bibitems = forms.CharField(widget=forms.Textarea()) @@ -85,3 +87,22 @@ class CitationListBibitemsForm(forms.Form): super(CitationListBibitemsForm, self).__init__(*args, **kwargs) self.fields['latex_bibitems'].widget.attrs.update( {'rows': 30, 'cols': 50, 'placeholder': 'Paste the .tex bibitems here'}) + + +class FundingInfoForm(forms.Form): + funding_statement = forms.CharField(widget=forms.Textarea()) + + def __init__(self, *args, **kwargs): + super(FundingInfoForm, self).__init__(*args, **kwargs) + self.fields['funding_statement'].widget.attrs.update( + {'rows': 10, 'cols': 50, + 'placeholder': 'Paste the funding info statement here'}) + + +class CreateMetadataXMLForm(forms.Form): + metadata_xml = forms.CharField(widget=forms.Textarea()) + + def __init__(self, *args, **kwargs): + super(CreateMetadataXMLForm, self).__init__(*args, **kwargs) + self.fields['metadata_xml'].widget.attrs.update( + {'rows': 50, 'cols': 50, }) diff --git a/journals/models.py b/journals/models.py index 8be8e59132d64a567875ae215f97b0516a51f4f7..19be6ee4c6e75a23580be0fcd69ac3a98b5ff01c 100644 --- a/journals/models.py +++ b/journals/models.py @@ -152,6 +152,7 @@ class Publication(models.Model): author_list = models.CharField(max_length=1000, verbose_name="author list") # Authors which have been mapped to contributors: authors = models.ManyToManyField (Contributor, blank=True, related_name='authors_pub') + first_author = models.ForeignKey (Contributor, blank=True, null=True) authors_claims = models.ManyToManyField (Contributor, blank=True, related_name='authors_pub_claims') authors_false_claims = models.ManyToManyField (Contributor, blank=True, @@ -222,7 +223,7 @@ class Publication(models.Model): '<p class="publicationTitle"><a href="{% url \'scipost:publication_detail\' doi_string=doi_string %}">{{ title }}</a></p>' '<p class="publicationAuthors">{{ author_list }}</p>' '<p class="publicationReference">{{ citation }} ' - '| published {{ pub_date}}</p>' + '| published {{ pub_date }}</p>' '<p class="publicationAbstract">{{ abstract }}</p>' '<ul class="publicationClickables">' '<li><button class="toggleAbstractButton">Toggle abstract</button></li>' @@ -276,3 +277,20 @@ class Publication(models.Model): 'arxiv_identifier_w_vn_nr': self.accepted_submission.arxiv_identifier_w_vn_nr }) return template.render(context) + + +class Deposit(models.Model): + """ + Each time a Crossref deposit is made for a Publication, + a Deposit object instance is created containing the Publication's + current version of the metadata_xml field. + All deposit history is thus contained here. + """ + publication = models.ForeignKey(Publication) + doi_batch_id = models.CharField(max_length=40, default='') + metadata_xml = models.TextField(blank=True, null=True) + deposition_date = models.DateTimeField(default=timezone.now) + + def __str__(self): + return (deposition_date.strftime('%Y-%m-%D') + + ' for ' + publication.doi_string) diff --git a/journals/templates/journals/create_citation_list_metadata.html b/journals/templates/journals/create_citation_list_metadata.html index a26a879832518c6b5667bdf897c913ebeaa78fe3..222f70d6bc30befb83c12d40d3094af1776b7530 100644 --- a/journals/templates/journals/create_citation_list_metadata.html +++ b/journals/templates/journals/create_citation_list_metadata.html @@ -1,25 +1,28 @@ {% extends 'scipost/base.html' %} -{% block pagetitle %}: Create citation list xml{% endblock pagetitle %} +{% block pagetitle %}: Create citation list metadata{% endblock pagetitle %} {% block bodysup %} <section> <div class="flex-greybox"> - <h1>Create citation list XML page</h1> + <h1>Create citation list metadata page</h1> </div> {% if errormessage %} <h2 style="color: red;">{{ errormessage }}</h2> {% endif %} - <form action="{% url 'journals:create_citation_list_metadata' publication_id=publication.id %}" method="post" enctype="multipart/form-data"> + <form action="{% url 'journals:create_citation_list_metadata' doi_string=publication.doi_string %}" method="post"> {% csrf_token %} {{ bibitems_form.as_p }} <input type="submit" value="Submit"> </form> + <hr class="hr6"/> + + <h3>Current citation list metadata:</h3> <table> {% for citation in citation_list %} <tr> @@ -28,6 +31,10 @@ {% endfor %} </table> + <hr class="hr6"/> + + <h3>Once you're happy with this metadata, you can <a href="{% url 'scipost:publication_detail' doi_string=publication.doi_string %}">return to the publication's page</a></h3> + </section> diff --git a/journals/templates/journals/create_funding_info_metadata.html b/journals/templates/journals/create_funding_info_metadata.html new file mode 100644 index 0000000000000000000000000000000000000000..fb8d3997196cf0ef58cae54e04da9cbcb26812db --- /dev/null +++ b/journals/templates/journals/create_funding_info_metadata.html @@ -0,0 +1,35 @@ +{% extends 'scipost/base.html' %} + +{% block pagetitle %}: Create funding info metadata{% endblock pagetitle %} + +{% block bodysup %} + + +<section> + <div class="flex-greybox"> + <h1>Create funding info metadata page</h1> + </div> + + {% if errormessage %} + <h2 style="color: red;">{{ errormessage }}</h2> + {% endif %} + + <form action="{% url 'journals:create_funding_info_metadata' doi_string=publication.doi_string %}" method="post"> + {% csrf_token %} + {{ funding_info_form.as_p }} + <input type="submit" value="Submit"> + </form> + + <hr class="hr6"/> + + <h3>Current funding info metadata:</h3> + <p>{{ funding_statement }}</p> + + <hr class="hr6"/> + + <h3>Once you're happy with this metadata, you can <a href="{% url 'scipost:publication_detail' doi_string=publication.doi_string %}">return to the publication's page</a></h3> + +</section> + + +{% endblock bodysup %} diff --git a/journals/templates/journals/create_metadata_xml.html b/journals/templates/journals/create_metadata_xml.html new file mode 100644 index 0000000000000000000000000000000000000000..271d8fc09f248cb7d4c21c7739c02db80f966e25 --- /dev/null +++ b/journals/templates/journals/create_metadata_xml.html @@ -0,0 +1,26 @@ +{% extends 'scipost/base.html' %} + +{% block pagetitle %}: Create metadata xml{% endblock pagetitle %} + +{% block bodysup %} + + +<section> + <div class="flex-greybox"> + <h1>Create metadata XML (for Crossref deposit)</h1> + </div> + + {% if errormessage %} + <h2 style="color: red;">{{ errormessage }}</h2> + {% endif %} + + <form action="{% url 'journals:create_metadata_xml' doi_string=publication.doi_string %}" method="post"> + {% csrf_token %} + {{ create_metadata_xml_form.as_p }} + <input type="submit" value="Accept the metadata"> + </form> + +</section> + + +{% endblock bodysup %} diff --git a/journals/templates/journals/publication_detail.html b/journals/templates/journals/publication_detail.html index 2157fce7d6d8ba9825fcf77636e8b3519a9b0340..4b18fef1915bd4dcbe33d346503930bc308a92f3 100644 --- a/journals/templates/journals/publication_detail.html +++ b/journals/templates/journals/publication_detail.html @@ -2,6 +2,8 @@ {% block pagetitle %}: Publication detail{% endblock pagetitle %} +{% load scipost_extras %} + {% block bodysup %} @@ -17,6 +19,17 @@ </div> </div> + {% if request.user|is_in_group:'Editorial Administrators' %} + <h3>Editorial Administration: Metadata creation and registration</h3> + <ul> + <li><a href="{% url 'journals:create_citation_list_metadata' doi_string=publication.doi_string%}">Create/update citation list metadata</a></li> + <li><a href="{% url 'journals:create_funding_info_metadata' doi_string=publication.doi_string%}">Create/update funding info metadata</a></li> + <li><a href="{% url 'journals:create_metadata_xml' doi_string=publication.doi_string %}">Create/update the XML metadata</a></li> + <li><a href="{% url 'journals:test_metadata_xml_deposit' doi_string=publication.doi_string %}">Test metadata depost (via Crossref test server)</li> + </ul> + {% endif %} + + {% include 'journals/scipost_physics_footer.html' %} </section> diff --git a/journals/templates/journals/test_metadata_xml_deposit.html b/journals/templates/journals/test_metadata_xml_deposit.html new file mode 100644 index 0000000000000000000000000000000000000000..e5aa593ed06e357a8829dde201465b16b4c2a255 --- /dev/null +++ b/journals/templates/journals/test_metadata_xml_deposit.html @@ -0,0 +1,25 @@ +{% extends 'scipost/base.html' %} + +{% block pagetitle %}: Test metadata XML deposit{% endblock pagetitle %} + +{% block bodysup %} + + +<section> + <div class="flex-greybox"> + <h1>Test metadata deposit</h1> + </div> + + {% if errormessage %} + <h2 style="color: red;">{{ errormessage }}</h2> + {% endif %} + + <h3>Response headers:</h3> + <p>{{ response_headers }}</p> + + <h3>Once you're happy, you can <a href="{% url 'scipost:publication_detail' doi_string=publication.doi_string %}">return to the publication's page</a></h3> + +</section> + + +{% endblock bodysup %} diff --git a/journals/urls.py b/journals/urls.py index 3dec7c8fd2856da7a1abef075042dbe9739a49ec..5e34974f36b5b3a68c0f3ce484f9225acec43a44 100644 --- a/journals/urls.py +++ b/journals/urls.py @@ -43,7 +43,18 @@ urlpatterns = [ url(r'^validate_publication$', journals_views.validate_publication, name='validate_publication'), - url(r'^create_citation_list_metadata/(?P<publication_id>[0-9]+)$', + #url(r'^create_citation_list_metadata/(?P<publication_id>[0-9]+)$', + url(r'^create_citation_list_metadata/(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$', journals_views.create_citation_list_metadata, name='create_citation_list_metadata'), + url(r'^create_funding_info_metadata/(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$', + journals_views.create_funding_info_metadata, + name='create_funding_info_metadata'), + #url(r'^create_metadata_xml/(?P<publication_id>[0-9]+)$', + url(r'^create_metadata_xml/(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$', + journals_views.create_metadata_xml, + name='create_metadata_xml'), + url(r'^test_metadata_xml_deposit/(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$', + journals_views.test_metadata_xml_deposit, + name='test_metadata_xml_deposit'), ] diff --git a/journals/views.py b/journals/views.py index b7b552a6cc2e1bf89ca851578c507828c68f07e4..eb8c358a7deb313f96a98ccaa267b09660d5de7f 100644 --- a/journals/views.py +++ b/journals/views.py @@ -1,5 +1,9 @@ import datetime +import hashlib import os +import random +import requests +import string from django.conf import settings from django.utils import timezone @@ -147,6 +151,20 @@ def upload_proofs(request): return render(request, 'journals/upload_proofs.html') +####################### +# Publication process # +####################### + +# @permission_required('scipost.can_publish_accepted_submission', return_403=True) +# @transaction.atomic +# def publishing_workspace(request): +# """ +# Page containing post-acceptance publishing workflow items. +# """ +# accepted_submissions = Submission.objects.filter(status='accepted') +# context = {'accepted_submissions': accepted_submissions,} +# return render(request, 'journals/publishing_workspace.html', context) + @permission_required('scipost.can_publish_accepted_submission', return_403=True) @transaction.atomic @@ -229,6 +247,10 @@ def initiate_publication(request): @permission_required('scipost.can_publish_accepted_submission', return_403=True) @transaction.atomic def validate_publication(request): + """ + This creates a Publication instance from the ValidatePublicationForm, + pre-filled by the initiate_publication method above. + """ # TODO: move from uploads to Journal folder # TODO: create metadata # TODO: set DOI, register with Crossref @@ -278,12 +300,13 @@ def validate_publication(request): @permission_required('scipost.can_publish_accepted_submission', return_403=True) @transaction.atomic -def create_citation_list_metadata(request, publication_id): +def create_citation_list_metadata(request, doi_string): """ Called by an Editorial Administrator. - This populates the citation_list_xml field in a Publication instance. + This populates the citation_list dictionary entry + in the metadata field in a Publication instance. """ - publication = get_object_or_404(Publication, pk=publication_id) + publication = get_object_or_404(Publication, doi_string=doi_string) if request.method == 'POST': bibitems_form = CitationListBibitemsForm(request.POST, request.FILES) if bibitems_form.is_valid(): @@ -300,10 +323,213 @@ def create_citation_list_metadata(request, publication_id): bibitems_form = CitationListBibitemsForm() context = {'publication': publication, 'bibitems_form': bibitems_form, - 'citation_list': publication.metadata['citation_list'],} + } + if request.method == 'POST': + context['citation_list'] = publication.metadata['citation_list'] return render(request, 'journals/create_citation_list_metadata.html', context) +@permission_required('scipost.can_publish_accepted_submission', return_403=True) +@transaction.atomic +def create_funding_info_metadata(request, doi_string): + """ + Called by an Editorial Administrator. + This populates the funding_info dictionary entry + in the metadata field in a Publication instance. + """ + publication = get_object_or_404(Publication, doi_string=doi_string) + if request.method == 'POST': + funding_info_form = FundingInfoForm(request.POST) + if funding_info_form.is_valid(): + publication.metadata['funding_statement'] = funding_info_form.cleaned_data['funding_statement'] + publication.save() + + initial = {'funding_statement': '',} + try: + initial['funding_statement'] = publication.metadata['funding_statement'] + except KeyError: + pass + context = {'publication': publication, + 'funding_info_form': FundingInfoForm(initial=initial),} + + return render(request, 'journals/create_funding_info_metadata.html', context) + + +@permission_required('scipost.can_publish_accepted_submission', return_403=True) +@transaction.atomic +def create_metadata_xml(request, doi_string): + """ + To be called by an EdAdmin after the citation_list, + funding_info entries have been filled. + Populates the metadata_xml field of a Publication instance. + The contents can then be sent to Crossref for registration. + """ + publication = get_object_or_404(Publication, doi_string=doi_string) + + if request.method == 'POST': + create_metadata_xml_form = CreateMetadataXMLForm(request.POST) + if create_metadata_xml_form.is_valid(): + publication.metadata_xml = create_metadata_xml_form.cleaned_data['metadata_xml'] + publication.save() + return redirect(reverse('scipost:publication_detail', + kwargs={'doi_string': publication.doi_string,})) + + # create a doi_batch_id + salt = "" + for i in range(5): + salt = salt + random.choice(string.ascii_letters) + salt = salt.encode('utf8') + idsalt = publication.title[:10] + idsalt = idsalt.encode('utf8') + doi_batch_id = hashlib.sha1(salt+idsalt).hexdigest() + + #publication.metadata_xml = ( + initial = {'metadata_xml': ''} + initial['metadata_xml'] += ( + '<?xml version="1.0" encoding="UTF-8"?>\n' + '<doi_batch version="4.3.7" xmlns="http://www.crossref.org/schema/4.3.7" ' + 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' + 'xsi:schemaLocation="http://www.crossref.org/schema/4.3.7 ' + 'http://www.crossref.org/shema/deposit/crossref4.3.7.xsd">\n' + '<head>\n' + '<doi_batch_id>' + str(doi_batch_id) + '</doi_batch_id>\n' + '<timestamp>' + timezone.now().strftime('%Y%m%d%H%M%S') + '</timestamp>\n' + '<depositor>\n' + '<depositor_name>scipost</depositor_name>\n' + '<email_address>admin@scipost.org</email_address>\n' + '</depositor>\n' + '<registrant>scipost</registrant>\n' + '</head>\n' + '<body>\n' + '<journal>\n' + '<journal_metadata>\n' + '<full_title>' + publication.in_issue.in_volume.in_journal.name + '</full_title>\n' + '<abbrev_title>' + + journal_name_abbrev_citation(publication.in_issue.in_volume.in_journal.name) + + '</abbrev_title>\n' + '<doi_data>\n' + '<doi>' + publication.in_issue.in_volume.in_journal.doi_string + '</doi>\n' + '<resource>https://scipost.org/' + + publication.in_issue.in_volume.in_journal.doi_string + '</resource>\n' + '</doi_data>\n' + '</journal_metadata>\n' + '<journal_issue>\n' + '<publication_date media_type=\'online\'>\n' + '<year>' + publication.publication_date.strftime('%Y') + '</year>\n' + '</publication_date>\n' + '<journal_volume>\n' + '<volume>' + str(publication.in_issue.in_volume.number) + '</volume>\n' + '</journal_volume>\n' + '<issue>' + str(publication.in_issue.number) + '</issue>\n' + '</journal_issue>\n' + '<journal_article publication_type=\'full_text\'>\n' + '<titles><title>' + publication.title + '</title></titles>\n' + '<contributors>\n' + ) + # Precondition: all authors MUST be listed in authors field of publication instance, + # this to be checked by EdAdmin before publishing. + for author in publication.authors.all(): + if author == publication.first_author: + #publication.metadata_xml += ( + initial['metadata_xml'] += ( + '<person_name sequence=\'first\' contributor_role=\'author\'> ' + '<given_name>' + author.user.first_name + '</given_name> ' + '<surname>' + author.user.last_name + '</surname> ' + '</person_name>\n' + ) + else: + #publication.metadata_xml += ( + initial['metadata_xml'] += ( + '<person_name sequence=\'additional\' contributor_role=\'author\'> ' + '<given_name>' + author.user.first_name + '</given_name> ' + '<surname>' + author.user.last_name + '</surname> ' + '</person_name>\n' + ) + if author.orcid_id: + #publication.metadata_xml += '<ORCID>' + author.orcid_id + '</ORCID>\n' + initial['metadata_xml'] += '<ORCID>' + author.orcid_id + '</ORCID>\n' + + #publication.metadata_xml += '</contributors>\n' + initial['metadata_xml'] += '</contributors>\n' + + #publication.metadata_xml += ( + initial['metadata_xml'] += ( + '<publication_date media_type=\'online\'>\n' + '<month>' + publication.publication_date.strftime('%m') + '</month>' + '<day>' + publication.publication_date.strftime('%d') + '</day>' + '<year>' + publication.publication_date.strftime('%Y') + '</year>' + '</publication_date>\n' + '<publisher_item><item_number item_number_type="article_number">' + + paper_nr_string(publication.paper_nr) + + '</item_number></publisher_item>/n' + '<doi_data>\n' + '<doi>' + publication.doi_string + '</doi>' + '<resource>https://scipost.org/' + publication.doi_string + '</resource>' + '</doi_data>\n' + ) + if publication.metadata['citation_list']: + #publication.metadata_xml += '<citation_list>\n' + initial['metadata_xml'] += '<citation_list>\n' + for ref in publication.metadata['citation_list']: + #publication.metadata_xml += ( + initial['metadata_xml'] += ( + '<citation key="' + ref['key'] + '">' + '<doi>' + ref['doi'] + '</doi>' + '</citation>\n' + ) + #publication.metadata_xml += '</citation_list>\n' + initial['metadata_xml'] += '</citation_list>\n' + + #publication.metadata_xml += ( + initial['metadata_xml'] += ( + '</journal_article>\n' + '</journal>\n' + ) + publication.metadata_xml += '</body>\n</doi_batch>' + initial['metadata_xml'] += '</body>\n</doi_batch>' + publication.save() + #else: + # errormessage = 'The form was invalidly filled.' + + context = {'publication': publication, + 'create_metadata_xml_form': CreateMetadataXMLForm(initial=initial), + } + return render(request, 'journals/create_metadata_xml.html', context) + + +@permission_required('scipost.can_publish_accepted_submission', return_403=True) +@transaction.atomic +def test_metadata_xml_deposit(request, doi_string): + """ + Prior to the actual Crossref metadata deposit, + test the metadata_xml using the Crossref test server. + Makes use of the python requests module. + """ + publication = get_object_or_404 (Publication, doi_string=doi_string) + url = 'https://test.crossref.org/servlet/deposit' + #headers = {'Content-type': 'multipart/form-data'} + params = {'operation': 'doMDUpload', + 'login_id': settings.CROSSREF_LOGIN_ID, + 'login_passwd': settings.CROSSREF_LOGIN_PASSWORD, + } + #auth = (settings.CROSSREF_LOGIN_ID, settings.CROSSREF_LOGIN_PASSWORD) + files = {'fname': ('metadata.xml', publication.metadata_xml, 'multipart/form-data', {}),} + #files = {'file': (publication.metadata_xml),} + r = requests.post(url, + #auth=auth, + #headers=headers, + params=params, + files=files) + response_headers = r.headers + context = {'response_headers': response_headers,} + return render(requests, 'journals/text_metadata_xml_deposit.html', context) + + + +########### +# Viewing # +########### + def publication_detail(request, doi_string): publication = get_object_or_404 (Publication, doi_string=doi_string) context = {'publication': publication,} diff --git a/scipost/templates/scipost/about.html b/scipost/templates/scipost/about.html index e0bd5b7fdf70c34def8f9be0431f8761aeac587f..b0571b56996f6c5a8634c8774e3de0a32e1bc0b2 100644 --- a/scipost/templates/scipost/about.html +++ b/scipost/templates/scipost/about.html @@ -173,16 +173,17 @@ <li>Prof. <a href="https://www.uibk.ac.at/exphys/ultracold/people/christoph.naegerl/">H.-C. Nägerl</a><br/>(Innsbruck)</li> <li>Prof. <a href="http://www.physics.miami.edu/~nepomechie/">R. Nepomechie</a><br/>(U. of Miami)</li> <li>Prof. <a href="https://staff.fnwi.uva.nl/b.nienhuis/">B. Nienhuis</a><br/>(U. van Amsterdam)</li> + <li>Prof. <a href="http://www.kip.uni-heidelberg.de/people/index.php?num=552">M. Oberthaler</a><br/>(U. Heidelberg)</li> </ul> </div> <div class="flex-whitebox"> <ul> - <li>Prof. <a href="http://www.kip.uni-heidelberg.de/people/index.php?num=552">M. Oberthaler</a><br/>(U. Heidelberg)</li> <li>Prof. <a href="http://www.thp.uni-koeln.de/rosch">A. Rosch</a><br/>(U. of Cologne)</li> <li>Prof. <a href="http://www.phy.ohiou.edu/people/faculty/sandler.html">N. Sandler</a><br/>(Ohio)</li> <li>Prof. <a href="https://staff.fnwi.uva.nl/c.j.m.schoutens/">C.J.M. Schoutens</a><br/>(U. van Amsterdam)</li> <li>Prof. <a href="http://www-thphys.physics.ox.ac.uk/people/SteveSimon/">S. H. Simon</a><br/>(U. of Oxford)</li> <li>Prof. <a href="http://bec.science.unitn.it/infm-bec/people/stringari.html">S. Stringari</a><br/>(Trento)</li> + <li>Prof. <a href="http://www.physique.usherbrooke.ca/pages/en/node/3412">A.-M. Tremblay</a><br/>(Sherbrooke)</li> <li>Prof. <a href="http://trivediresearch.org.ohio-state.edu">N. Trivedi</a><br/>(Ohio State U.)</li> </ul> </div> diff --git a/submissions/models.py b/submissions/models.py index 949ccb36b58959e5e5439727a60412480d8710f4..134b75de22ff441652c217b9533a9d819fc31df0 100644 --- a/submissions/models.py +++ b/submissions/models.py @@ -556,7 +556,7 @@ RANKING_CHOICES = ( ranking_choices_dict = dict(RANKING_CHOICES) REPORT_REC = ( - (1, 'Publish as Tier I (top 10% of papers in this journal)'), + (1, 'Publish as Tier I (top 10% of papers in this journal) NOTE: NOT YET OPEN, WAIT FOR EARLY 2017'), (2, 'Publish as Tier II (top 50% of papers in this journal)'), (3, 'Publish as Tier III (meets the criteria of this journal)'), (-1, 'Ask for minor revision'), diff --git a/submissions/templates/submissions/pool.html b/submissions/templates/submissions/pool.html index c410ed3fc242740b3c359fd4c7e7be0e957cfc75..64077183fb1b95d1988be20ffc0da46c4d0de556 100644 --- a/submissions/templates/submissions/pool.html +++ b/submissions/templates/submissions/pool.html @@ -234,6 +234,10 @@ $(document).ready(function(){ {% endif %} {% if request.user|is_in_group:'Editorial Administrators' %} <h4><a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr comtype='StoE' %}">Send a communication to the Editor-in-charge</a></h4> + {% if sub.status == 'accepted' %} + <h4>After proofs have been accepted, you can + <a href="{% url 'journals:initiate_publication' %}">initiate the publication process</a> (leads to the validation page)</h4> + {% endif %} {% endif %} {% endif %} {% endfor %} diff --git a/submissions/utils.py b/submissions/utils.py index 217c8dc06ba71bdce45b71fa3f872f6ca8ba1d27..c08bf36b53cb83e698dddf993c201cb35fd94038 100644 --- a/submissions/utils.py +++ b/submissions/utils.py @@ -700,7 +700,7 @@ class SubmissionUtils(object): elif cls.invitation.accepted == False: email_text += ('declined (due to reason: ' + assignment_refusal_reasons_dict[cls.invitation.refusal_reason] + ') ') - email_text_html += 'declined (due to reason: {{ reason }})' + email_text_html += 'declined (due to reason: {{ reason }}) ' email_text += ('to referee Submission\n\n' + cls.invitation.submission.title + ' by ' @@ -1130,6 +1130,9 @@ class SubmissionUtils(object): ', with a promotion to <strong>Select</strong>. We warmly congratulate you ' 'on this achievement, which is reserved to papers deemed in ' 'the top ten percent of papers we publish.</p>') + else: + email_text += '.' + email_text_html += '.' email_text += ('\n\nYour manuscript will now be taken charge of by our ' 'production team, who will soon send you proofs ' 'to check before final publication.')