Newer
Older
import random
import requests
from django.contrib.auth.decorators import login_required
from django.contrib.contenttypes.models import ContentType
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse
from django.conf import settings
from django.db import transaction
from django.http import Http404, HttpResponse
from django.utils import timezone
from django.views.generic.detail import DetailView
from django.views.generic.edit import UpdateView
from django.shortcuts import get_object_or_404, render, redirect
from .helpers import paper_nr_string, issue_doi_label_from_doi_label
from .models import Journal, Issue, Publication, Deposit, DOAJDeposit,\
GenericDOIDeposit, PublicationAuthorsTable
from .forms import FundingInfoForm, InitiatePublicationForm, ValidatePublicationForm,\
UnregisteredAuthorForm, CreateMetadataXMLForm, CitationListBibitemsForm,\
ReferenceFormSet, CreateMetadataDOAJForm, DraftPublicationForm,\
PublicationGrantsForm, DraftPublicationApprovalForm
from .utils import JournalUtils
from comments.models import Comment
from funders.forms import FunderSelectForm, GrantSelectForm
from funders.models import Funder, Grant
from submissions.models import Submission, Report
from scipost.models import Contributor
from production.constants import PROOFS_PUBLISHED
from production.models import ProductionEvent
from production.signals import notify_stream_status_change
from guardian.decorators import permission_required
def journals(request):
'''Main landing page for Journals application.'''
return render(request, 'journals/journals.html', context)
def landing_page(request, doi_label):
journal = get_object_or_404(Journal, doi_label=doi_label)
start_date__lte=timezone.now(),
until_date__gte=timezone.now()).order_by('-until_date').first()
until_date__lte=timezone.now()).order_by('-until_date').first()
prev_issue = None
if current_issue:
prev_issue = (Issue.objects.published(in_volume__in_journal=journal,
start_date__lt=current_issue.start_date)
.order_by('start_date').last())
context = {
'current_issue': current_issue,
'prev_issue': prev_issue,
return render(request, 'journals/journal_landing_page.html', context)
def issues(request, doi_label):
journal = get_object_or_404(Journal, doi_label=doi_label)
issues = Issue.objects.published(in_volume__in_journal=journal).order_by('-until_date')
context = {
'issues': issues,
}
return render(request, 'journals/journal_issues.html', context)
Display page for the most recent 20 publications in SciPost Physics.
journal = get_object_or_404(Journal, doi_label=doi_label)
recent_papers = Publication.objects.published().filter(
in_issue__in_volume__in_journal=journal).order_by('-publication_date',
'-paper_nr')[:20]
context = {
'recent_papers': recent_papers,
return render(request, 'journals/journal_recent.html', context)
def accepted(request, doi_label):
"""
Display page for submissions to SciPost Physics which
have been accepted but are not yet published.
"""
journal = get_object_or_404(Journal, doi_label=doi_label)
accepted_SP_submissions = (Submission.objects.accepted()
.filter(submitted_to_journal=journal.name)
.order_by('-latest_activity'))
context = {
'accepted_SP_submissions': accepted_SP_submissions,
return render(request, 'journals/journal_accepted.html', context)
def info_for_authors(request, doi_label):
journal = get_object_or_404(Journal, doi_label=doi_label)
return render(request, 'journals/%s_info_for_authors.html' % doi_label, context)
def about(request, doi_label):
journal = get_object_or_404(Journal, doi_label=doi_label)
return render(request, 'journals/%s_about.html' % doi_label, context)
def issue_detail(request, doi_label):
issue = Issue.objects.get_published(doi_label=doi_label)
journal = issue.in_volume.in_journal
papers = issue.publication_set.order_by('paper_nr')
next_issue = (Issue.objects.published(in_volume__in_journal=journal,
start_date__gt=issue.start_date)
.order_by('start_date').first())
prev_issue = (Issue.objects.published(in_volume__in_journal=journal,
start_date__lt=issue.start_date)
.order_by('start_date').last())
context = {
'issue': issue,
'prev_issue': prev_issue,
'next_issue': next_issue,
return render(request, 'journals/journal_issue_detail.html', context)
#######################
# Publication process #
#######################
class PublicationGrantsView(PermissionsMixin, UpdateView):
"""
Add/update grants associated to a Publication.
"""
permission_required = 'scipost.can_draft_publication'
queryset = Publication.objects.drafts()
slug_field = slug_url_kwarg = 'doi_label'
form_class = PublicationGrantsForm
template_name = 'journals/grants_form.html'
class PublicationGrantsRemovalView(PermissionsMixin, DetailView):
"""
Remove grant associated to a Publication.
"""
permission_required = 'scipost.can_draft_publication'
queryset = Publication.objects.drafts()
slug_field = slug_url_kwarg = 'doi_label'
def get(self, request, *args, **kwargs):
super().get(request, *args, **kwargs)
grant = get_object_or_404(Grant, id=kwargs.get('grant_id'))
self.object.grants.remove(grant)
return redirect(reverse('journals:update_grants', args=(self.object.doi_label,)))
class DraftPublicationUpdateView(PermissionsMixin, UpdateView):
"""
Any Production Officer or Administrator can draft a new publication without publishing here.
The actual publishing is done lin a later stadium, after the draft has been finished.
"""
queryset = Publication.objects.drafts()
slug_url_kwarg = 'arxiv_identifier_w_vn_nr'
Loading
Loading full blame...