From c731ff48bd1e08cedc5df437a82235c48dcf7a67 Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Mon, 27 Mar 2017 22:48:55 +0200 Subject: [PATCH] Improve journals html in models --- journals/admin.py | 26 ++++++++++- journals/models.py | 41 +++++------------ .../journals/_publication_citations.html | 46 +++++++++++++++++++ .../journals/publication_detail.html | 27 +++++------ journals/views.py | 10 ++-- 5 files changed, 101 insertions(+), 49 deletions(-) create mode 100644 journals/templates/journals/_publication_citations.html diff --git a/journals/admin.py b/journals/admin.py index 711eca57f..acd232a6a 100644 --- a/journals/admin.py +++ b/journals/admin.py @@ -1,27 +1,49 @@ -from django.contrib import admin +from django.contrib import admin, messages -from journals.models import Journal, Volume, Issue, Publication +from journals.models import Journal, Volume, Issue, Publication, Deposit class JournalAdmin(admin.ModelAdmin): search_fields = ['name'] + admin.site.register(Journal, JournalAdmin) class VolumeAdmin(admin.ModelAdmin): pass + admin.site.register(Volume, VolumeAdmin) class IssueAdmin(admin.ModelAdmin): pass + admin.site.register(Issue, IssueAdmin) class PublicationAdmin(admin.ModelAdmin): search_fields = ['title', 'author_list'] + admin.site.register(Publication, PublicationAdmin) + + +class DepositAdmin(admin.ModelAdmin): + list_display = ('doi_batch_id', 'publication', 'deposition_date',) + readonly_fields = ('publication', 'doi_batch_id', 'metadata_xml', 'deposition_date',) + actions = None + + def message_user(self, request, *args): + return messages.warning(request, 'Sorry, Deposit\'s are readonly.') + + def has_add_permission(self, *args): + return False + + def has_delete_permission(self, *args): + return False + + +admin.site.register(Deposit, DepositAdmin) diff --git a/journals/models.py b/journals/models.py index e411c9835..ac6a47892 100644 --- a/journals/models.py +++ b/journals/models.py @@ -5,7 +5,7 @@ from django.utils import timezone from .constants import SCIPOST_JOURNALS, SCIPOST_JOURNALS_DOMAINS,\ STATUS_DRAFT, STATUS_PUBLISHED, ISSUE_STATUSES -from .helpers import paper_nr_string, journal_name_abbrev_citation +from .helpers import paper_nr_string, journal_name_abbrev_doi, journal_name_abbrev_citation from .managers import IssueManager, PublicationManager from scipost.constants import SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS @@ -30,6 +30,12 @@ class Journal(models.Model): def __str__(self): return self.name + def get_abbreviation_citation(self): + return journal_name_abbrev_citation(self.name) + + def get_abbreviation_doi(self): + return journal_name_abbrev_doi(self.name) + class Volume(models.Model): in_journal = models.ForeignKey(Journal, on_delete=models.CASCADE) @@ -132,38 +138,15 @@ class Publication(models.Model): + ', published ' + self.publication_date.strftime('%Y-%m-%d')) return header + def get_paper_nr(self): + return paper_nr_string(self.paper_nr) + def citation(self): - return (journal_name_abbrev_citation(self.in_issue.in_volume.in_journal.name) + return (self.in_issue.in_volume.in_journal.get_abbreviation_citation() + ' ' + str(self.in_issue.in_volume.number) - + ', ' + paper_nr_string(self.paper_nr) + + ', ' + self.get_paper_nr() + ' (' + self.publication_date.strftime('%Y') + ')') - def citation_for_web(self): - citation = ('{{ abbrev }} <strong>{{ volume_nr }}</strong>' - ', {{ paper_nr }} ({{ year }})') - template = Template(citation) - context = Context( - {'abbrev': journal_name_abbrev_citation(self.in_issue.in_volume.in_journal.name), - 'volume_nr': str(self.in_issue.in_volume.number), - 'issue_nr': str(self.in_issue.number), - 'paper_nr': paper_nr_string(self.paper_nr), - 'year': self.publication_date.strftime('%Y'), }) - return template.render(context) - - def citation_for_web_linked(self): - citation = ('<a href="{% url \'scipost:publication_detail\' doi_string=doi_string %}">' - '{{ abbrev }} <strong>{{ volume_nr }}</strong>' - ', {{ paper_nr }} ({{ year }})</a>') - template = Template(citation) - context = Context( - {'doi_string': self.doi_string, - 'abbrev': journal_name_abbrev_citation(self.in_issue.in_volume.in_journal.name), - 'volume_nr': str(self.in_issue.in_volume.number), - 'issue_nr': str(self.in_issue.number), - 'paper_nr': paper_nr_string(self.paper_nr), - 'year': self.publication_date.strftime('%Y'), }) - return template.render(context) - def citations_as_ul(self): output = '<ul>' context = Context({}) diff --git a/journals/templates/journals/_publication_citations.html b/journals/templates/journals/_publication_citations.html new file mode 100644 index 000000000..a7954a898 --- /dev/null +++ b/journals/templates/journals/_publication_citations.html @@ -0,0 +1,46 @@ +XX +{% comment %} +output = '<ul>' +context = Context({}) +nr = 0 +{ + first_author_given_name: 'John', + first_author_surname: 'Doe', + multiauthors: true + article_title: 'Phase transitions on 2D Ising model', + journal_abbreviation: 'SciPostPhys', + vol: '' + +} +for cit in self.citedby: + output += '<li>{{ auth_' + str(nr) + ' }}' + context['auth_' + str(nr)] = (cit['first_author_given_name'] + + ' ' + cit['first_author_surname']) + if cit['multiauthors']: + output += ' <em>et al.</em>' + output += (', <em>{{ title_' + str(nr) + ' }}</em>, <br/>' + '{{ journal_abbrev_' + str(nr) + ' }}') + context['title_' + str(nr)] = cit['article_title'] + context['journal_abbrev_' + str(nr)] = cit['journal_abbreviation'] + if cit['volume']: + context['volume_' + str(nr)] = cit['volume'] + output += ' <strong>{{ volume_' + str(nr) + ' }}</strong>' + output += ', ' + if cit['first_page']: + output += '{{ first_page_' + str(nr) + ' }}' + context['first_page_' + str(nr)] = cit['first_page'] + elif cit['item_number']: + output += '{{ item_number_' + str(nr) + ' }}' + context['item_number_' + str(nr)] = cit['item_number'] + output += (' ({{ year_' + str(nr) + ' }}) ' + '<a href="https://doi.org/{{ doi_' + str(nr) + ' }}" ' + 'target="_blank">[Crossref]</a>') + context['year_' + str(nr)] = cit['year'] + context['doi_' + str(nr)] = cit['doi'] + output += '</li>' + nr += 1 +output += '</ul>' +template = Template(output) +return template.render(context) + +{% endcomment %} diff --git a/journals/templates/journals/publication_detail.html b/journals/templates/journals/publication_detail.html index 8b9d46ecd..b903b60bf 100644 --- a/journals/templates/journals/publication_detail.html +++ b/journals/templates/journals/publication_detail.html @@ -43,21 +43,22 @@ {% include 'journals/_publication_details.html' with publication=publication %} {% if publication.citedby|length >= 1 %} -<hr> -<div class="row"> - <div class="col-6 col-md-2"> - <h3 class="mb-2">Cited by {{ publication.citedby|length }}</h3> - <button class="btn btn-sm btn-secondary" id="citationslistbutton">Toggle view</button> - </div> - <div class="col-6 col-md-2"> - <img src="{% static 'scipost/images/citedby.gif' %}" alt="Crossref Cited-by" width="64" /> + <hr> + <div class="row"> + <div class="col-6 col-md-2"> + <h3 class="mb-2">Cited by {{ publication.citedby|length }}</h3> + <button class="btn btn-sm btn-secondary" id="citationslistbutton">Toggle view</button> + </div> + <div class="col-6 col-md-2"> + <img src="{% static 'scipost/images/citedby.gif' %}" alt="Crossref Cited-by" width="64" /> + </div> </div> -</div> -<div class="row" id="citationslist"> - <div class="col-12"> - {{ publication.citations_as_ul }} + <div class="row" id="citationslist"> + <div class="col-12"> + {# {% include 'journals/_publication_citations.html' with publication=publication %}#} + {{ publication.citations_as_ul }} + </div> </div> -</div> {% endif %} <div class="row"> diff --git a/journals/views.py b/journals/views.py index 5a4bf03f7..8fefa369b 100644 --- a/journals/views.py +++ b/journals/views.py @@ -13,7 +13,7 @@ from django.db import transaction from django.http import HttpResponse from .exceptions import PaperNumberingError -from .helpers import journal_name_abbrev_citation, journal_name_abbrev_doi, paper_nr_string +from .helpers import paper_nr_string from .models import Issue, Publication, UnregisteredAuthor from .forms import FundingInfoForm, InitiatePublicationForm, ValidatePublicationForm,\ UnregisteredAuthorForm, CreateMetadataXMLForm, CitationListBibitemsForm @@ -143,7 +143,7 @@ def initiate_publication(request): if paper_nr > 999: raise PaperNumberingError(paper_nr) doi_label = ( - journal_name_abbrev_doi(current_issue.in_volume.in_journal.name) + current_issue.in_volume.in_journal.get_abbreviation_doi() + '.' + str(current_issue.in_volume.number) + '.' + str(current_issue.number) + '.' + paper_nr_string(paper_nr) ) @@ -153,7 +153,7 @@ def initiate_publication(request): '\ttitle={{' + submission.title + '}},\n' '\tauthor={' + submission.author_list.replace(',', ' and') + '},\n' '\tjournal={' - + journal_name_abbrev_citation(current_issue.in_volume.in_journal.name) + + current_issue.in_volume.in_journal.get_abbreviation_citation() + '},\n' '\tvolume={' + str(current_issue.in_volume.number) + '},\n' '\tissue={' + str(current_issue.number) + '},\n' @@ -222,7 +222,7 @@ def validate_publication(request): # Move file to final location initial_path = publication.pdf_file.path new_dir = (settings.MEDIA_ROOT + publication.in_issue.path + '/' - + paper_nr_string(publication.paper_nr)) + + publication.get_paper_nr()) new_path = new_dir + '/' + publication.doi_label.replace('.', '_') + '.pdf' os.makedirs(new_dir) os.rename(initial_path, new_path) @@ -456,7 +456,7 @@ def create_metadata_xml(request, doi_string): '<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) + + + publication.in_issue.in_volume.in_journal.get_abbreviation_citation() + '</abbrev_title>\n' '<issn>' + publication.in_issue.in_volume.in_journal.issn + '</issn>\n' '<doi_data>\n' -- GitLab