diff --git a/SciPost_v1/settings/base.py b/SciPost_v1/settings/base.py index 0f3ea5de4bd041519094eb14dc7baf163ca6a74f..d5d7a8f606ab5cd27ab52f6036260623c1fe7cac 100644 --- a/SciPost_v1/settings/base.py +++ b/SciPost_v1/settings/base.py @@ -100,6 +100,7 @@ INSTALLED_APPS = ( 'partners', 'funders', 'stats', + 'petitions', 'webpack_loader', ) diff --git a/SciPost_v1/urls.py b/SciPost_v1/urls.py index ab3ea6f377dc701332e17b0f0a9f4152416c6126..cd3462f1bd2cd18e7e145be4bda23e1cc41d080b 100644 --- a/SciPost_v1/urls.py +++ b/SciPost_v1/urls.py @@ -43,6 +43,7 @@ urlpatterns = [ url(r'^meetings/', include('virtualmeetings.urls', namespace="virtualmeetings")), url(r'^news/', include('news.urls', namespace="news")), url(r'^notifications/', include('notifications.urls', namespace="notifications")), + url(r'^petitions/', include('petitions.urls', namespace="petitions")), url(r'^production/', include('production.urls', namespace="production")), url(r'^partners/', include('partners.urls', namespace="partners")), url(r'^stats/', include('stats.urls', namespace="stats")), diff --git a/news/templates/news/news_card_content_for_api.html b/news/templates/news/news_card_content_for_api.html index d5f80ce81649c01dd762df05107f45cbacdbb3c1..5815a30d32e69e9235ba758878f0e155072f3468 100644 --- a/news/templates/news/news_card_content_for_api.html +++ b/news/templates/news/news_card_content_for_api.html @@ -3,7 +3,7 @@ <div> <h5 class="text-muted mb-2">{{date}}</h5> <div> - {{blurb|truncatechars_html:90|safe}} + {{blurb|truncatechars_html:180|safe}} <br> <a href="{% url 'news:news' %}#news_{{id}}" class="my-1 d-inline-block">Read more</a> diff --git a/news/templates/news/news_card_content_short.html b/news/templates/news/news_card_content_short.html index 09f352dba28e09c03d01c1b99b85dee15a43dfb1..2f796a59052dbe0c60c8aea137a5fdd250c72036 100644 --- a/news/templates/news/news_card_content_short.html +++ b/news/templates/news/news_card_content_short.html @@ -3,7 +3,7 @@ <div> <h5 class="text-muted mb-2">{{news.date|date:'j F Y'}}</h5> <div> - {{news.blurb|truncatechars_html:90|safe}} + {{news.blurb|truncatechars_html:180|safe}} <br> <a href="{% url 'news:news' %}#news_{{news.id}}" class="my-1 d-inline-block">Read more</a> diff --git a/partners/admin.py b/partners/admin.py index ccb1ffbd115c8115883e9213827520e3ddb2d89c..057cd39487465a435361cfafbb2488b833cb0e8b 100644 --- a/partners/admin.py +++ b/partners/admin.py @@ -5,6 +5,7 @@ from .models import Contact, Partner, Consortium, Institution,\ MembershipAgreement, ContactRequest, PartnersAttachment + class AttachmentInline(admin.TabularInline): model = PartnersAttachment diff --git a/partners/migrations/0033_auto_20171003_2058.py b/partners/migrations/0033_auto_20171003_2058.py new file mode 100644 index 0000000000000000000000000000000000000000..be7d386c6842293568a7ad79c85abd5e49eea787 --- /dev/null +++ b/partners/migrations/0033_auto_20171003_2058.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.4 on 2017-10-03 18:58 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('scipost', '0065_authorshipclaim_publication'), + ('partners', '0032_auto_20170829_0727'), + ] + + operations = [ + migrations.CreateModel( + name='Petition', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=256)), + ('slug', models.SlugField()), + ('headline', models.CharField(max_length=256)), + ('statement', models.TextField()), + ('signatories', models.ManyToManyField(related_name='petitions', to='scipost.Contributor')), + ], + ), + ] diff --git a/partners/migrations/0034_auto_20171003_2109.py b/partners/migrations/0034_auto_20171003_2109.py new file mode 100644 index 0000000000000000000000000000000000000000..706955dfa76a33492164a1cbe974084c797e12e2 --- /dev/null +++ b/partners/migrations/0034_auto_20171003_2109.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.4 on 2017-10-03 19:09 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('partners', '0033_auto_20171003_2058'), + ] + + operations = [ + migrations.AlterField( + model_name='petition', + name='signatories', + field=models.ManyToManyField(blank=True, related_name='petitions', to='scipost.Contributor'), + ), + ] diff --git a/partners/migrations/0035_merge_20171004_0848.py b/partners/migrations/0035_merge_20171004_0848.py new file mode 100644 index 0000000000000000000000000000000000000000..ef6aa5fd82ce08519fde22d085e1e76014231cab --- /dev/null +++ b/partners/migrations/0035_merge_20171004_0848.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.4 on 2017-10-04 06:48 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('partners', '0033_auto_20171003_1512'), + ('partners', '0034_auto_20171003_2109'), + ] + + operations = [ + ] diff --git a/partners/migrations/0036_auto_20171004_2014.py b/partners/migrations/0036_auto_20171004_2014.py new file mode 100644 index 0000000000000000000000000000000000000000..256d70d53b58b1923693cb7a5db4a7f3e25772d9 --- /dev/null +++ b/partners/migrations/0036_auto_20171004_2014.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.4 on 2017-10-04 18:14 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('partners', '0035_merge_20171004_0848'), + ] + + operations = [ + migrations.RemoveField( + model_name='petition', + name='signatories', + ), + migrations.DeleteModel( + name='Petition', + ), + ] diff --git a/partners/models.py b/partners/models.py index 81ae52d853425aa9bf38d41ed89d8fd12f9b311a..17b28e604efa747ea3cd0ebdd1f167d3b0cea8c2 100644 --- a/partners/models.py +++ b/partners/models.py @@ -33,6 +33,7 @@ from scipost.models import get_sentinel_user, Contributor from scipost.storage import SecureFileStorage + ######################## # Prospective Partners # ######################## diff --git a/partners/templates/partners/supporting_partners.html b/partners/templates/partners/supporting_partners.html index 92d8bcb60a2d8c2176d65473ca3e0dd2638a497b..ab674d7406cb54b6be493d2c8a4ca15829f7a515 100644 --- a/partners/templates/partners/supporting_partners.html +++ b/partners/templates/partners/supporting_partners.html @@ -17,6 +17,29 @@ </div> </div> +<div class="row"> + <div class="col-12"> + <ul> + <li> + <p> + <strong>Are you a scientist?</strong><br/> + Is your institution or funding body not listed below as one of our current Supporting Partners?<br/> + Please petition them to join by sending a librarian/director/... a personalized email, starting from this <a href="mailto:?subject=Petition to support SciPost&body={% autoescape on %}{% include 'petitions/petition_email.html' %}{% endautoescape %}&cc=partners@scipost.org">template</a>.<br/> + You can also encourage them to join by <a href="{% url 'petitions:petition' slug='join-SPB' %}">signing our petition</a>. + </p> + </li> + <li> + <p> + <strong>Are you a librarian, funding agency representative or other potential supporter?</strong><br/> + Have a quick look at our <a href="{% static 'scipost/SPB/SciPost_Supporting_Partners_Board_Prospectus.pdf' %}">one-page Prospectus</a>.<br/> + Read detailed information in the draft <a href="{% static 'scipost/SPB/SciPost_Supporting_Partner_Agreement.pdf' %}">Partner Agreement</a>, and <a href="mailto:partners@scipost.org">contact us</a> to get further details. + </p> + </li> + </ul> + </div> +</div> + + <div class="row"> <div class="col-12"> <h3>Openness at strictly minimal cost: the role of professional academics</h3> diff --git a/petitions/__init__.py b/petitions/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/petitions/admin.py b/petitions/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..9dfc9a12a52b0499c25a0d85f0fc1b588520ed48 --- /dev/null +++ b/petitions/admin.py @@ -0,0 +1,17 @@ +from django.contrib import admin + +from .models import Petition, PetitionSignatory + + +class PetitionAdmin(admin.ModelAdmin): + prepopulated_fields = {'slug': ('title',)} + + +admin.site.register(Petition, PetitionAdmin) + + +class PetitionSignatoryAdmin(admin.ModelAdmin): + search_fields = ['last_name', 'country', 'institution'] + + +admin.site.register(PetitionSignatory, PetitionSignatoryAdmin) diff --git a/petitions/apps.py b/petitions/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..aef02c09b06a79f8743cfb740c788fecf73c1d01 --- /dev/null +++ b/petitions/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class PetitionsConfig(AppConfig): + name = 'petitions' diff --git a/petitions/forms.py b/petitions/forms.py new file mode 100644 index 0000000000000000000000000000000000000000..8ce10ab92e4cb0b333aa3e6256de8d2a66db7d33 --- /dev/null +++ b/petitions/forms.py @@ -0,0 +1,10 @@ +from django import forms + +from .models import PetitionSignatory + + +class SignPetitionForm(forms.ModelForm): + class Meta: + model = PetitionSignatory + fields = ['title', 'first_name', 'last_name', + 'email', 'country_of_employment', 'affiliation'] diff --git a/petitions/managers.py b/petitions/managers.py new file mode 100644 index 0000000000000000000000000000000000000000..e21badb0810bd0be41432dc5b49eabdd007f4704 --- /dev/null +++ b/petitions/managers.py @@ -0,0 +1,9 @@ +from django.db import models + + +class PetitionSignatoryQuerySet(models.QuerySet): + def verified(self): + return self.filter(verified=True) + + def unverified(self): + return self.filter(verified=False) diff --git a/petitions/migrations/0001_initial.py b/petitions/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..801a4fb65d08f94ce7495cf87502cf1a53e63993 --- /dev/null +++ b/petitions/migrations/0001_initial.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.4 on 2017-10-04 18:14 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django_countries.fields + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('scipost', '0065_authorshipclaim_publication'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Petition', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=256)), + ('slug', models.SlugField()), + ('headline', models.CharField(max_length=256)), + ('statement', models.TextField()), + ('created', models.DateTimeField(auto_now_add=True)), + ('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='PetitionSignatory', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(choices=[('PR', 'Prof.'), ('DR', 'Dr'), ('MR', 'Mr'), ('MRS', 'Mrs'), ('MS', 'Ms')], max_length=4)), + ('first_name', models.CharField(max_length=128)), + ('last_name', models.CharField(max_length=128)), + ('email', models.EmailField(max_length=254)), + ('country_of_employment', django_countries.fields.CountryField(max_length=2)), + ('affiliation', models.CharField(max_length=300, verbose_name='affiliation')), + ('signed_on', models.DateTimeField(auto_now_add=True)), + ('verification_key', models.CharField(blank=True, max_length=40)), + ('verified', models.BooleanField(default=False)), + ('petition', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='petitions.Petition')), + ('signatory', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor')), + ], + ), + ] diff --git a/petitions/migrations/0002_auto_20171004_2107.py b/petitions/migrations/0002_auto_20171004_2107.py new file mode 100644 index 0000000000000000000000000000000000000000..6803454eae6f9ad46aadf5f5a4582fae31b4e262 --- /dev/null +++ b/petitions/migrations/0002_auto_20171004_2107.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.4 on 2017-10-04 19:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('petitions', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='petitionsignatory', + options={'verbose_name_plural': 'petition signatories'}, + ), + ] diff --git a/petitions/migrations/0003_auto_20171004_2139.py b/petitions/migrations/0003_auto_20171004_2139.py new file mode 100644 index 0000000000000000000000000000000000000000..47b2fe956c0698ca553a356ad8b4f15ebfe40a62 --- /dev/null +++ b/petitions/migrations/0003_auto_20171004_2139.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.4 on 2017-10-04 19:39 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('petitions', '0002_auto_20171004_2107'), + ] + + operations = [ + migrations.AlterModelOptions( + name='petitionsignatory', + options={'ordering': ['last_name', 'country_of_employment', 'affiliation'], 'verbose_name_plural': 'petition signatories'}, + ), + migrations.AlterField( + model_name='petitionsignatory', + name='petition', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='petition_signatories', to='petitions.Petition'), + ), + migrations.AlterField( + model_name='petitionsignatory', + name='signatory', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='petition_signatories', to='scipost.Contributor'), + ), + ] diff --git a/petitions/migrations/0004_petition_preamble.py b/petitions/migrations/0004_petition_preamble.py new file mode 100644 index 0000000000000000000000000000000000000000..0f6007370c4e5051f55ec4ea5fd424624ae02a0b --- /dev/null +++ b/petitions/migrations/0004_petition_preamble.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.4 on 2017-10-05 10:53 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('petitions', '0003_auto_20171004_2139'), + ] + + operations = [ + migrations.AddField( + model_name='petition', + name='preamble', + field=models.TextField(blank=True, null=True), + ), + ] diff --git a/petitions/migrations/__init__.py b/petitions/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/petitions/models.py b/petitions/models.py new file mode 100644 index 0000000000000000000000000000000000000000..fec56dbd666f2f6bfc7dfec414c436132da14f03 --- /dev/null +++ b/petitions/models.py @@ -0,0 +1,51 @@ +from django.core.urlresolvers import reverse +from django.contrib.auth.models import User +from django.db import models + +from django_countries.fields import CountryField + +from .managers import PetitionSignatoryQuerySet + +from scipost.constants import TITLE_CHOICES + + +class Petition(models.Model): + title = models.CharField(max_length=256) + slug = models.SlugField() + headline = models.CharField(max_length=256) + preamble = models.TextField(blank=True, null=True) + statement = models.TextField() + creator = models.ForeignKey(User, on_delete=models.CASCADE) + created = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return self.title + + def get_absolute_url(self): + return reverse('petitions:petition', kwargs={'slug': self.slug}) + + +class PetitionSignatory(models.Model): + petition = models.ForeignKey('petitions.Petition', on_delete=models.CASCADE) + signatory = models.ForeignKey('scipost.Contributor', on_delete=models.CASCADE, + blank=True, null=True) + title = models.CharField(max_length=4, choices=TITLE_CHOICES) + first_name = models.CharField(max_length=128) + last_name = models.CharField(max_length=128) + email = models.EmailField() + country_of_employment = CountryField() + affiliation = models.CharField(max_length=300, verbose_name='affiliation') + signed_on = models.DateTimeField(auto_now_add=True) + verification_key = models.CharField(max_length=40, blank=True) + verified = models.BooleanField(default=False) + + objects = PetitionSignatoryQuerySet.as_manager() + + class Meta: + default_related_name = 'petition_signatories' + ordering = ['last_name', 'country_of_employment', 'affiliation'] + verbose_name_plural = 'petition signatories' + + def __str__(self): + return '%s, %s %s (%s)' % (self.last_name, self.get_title_display(), + self.first_name, self.petition.slug) diff --git a/petitions/templates/petitions/petition.html b/petitions/templates/petitions/petition.html new file mode 100644 index 0000000000000000000000000000000000000000..f04d85ff3325a5f130fc0a374740ddf32f424e41 --- /dev/null +++ b/petitions/templates/petitions/petition.html @@ -0,0 +1,53 @@ +{% extends 'scipost/base.html' %} + +{% block pagetitle %}: Petition{% endblock pagetitle %} + +{% load bootstrap %} + +{% block content %} + +<div class="row"> + <div class="col-12"> + <h1 class="highlight">{{ petition.headline }}</h1> + {% if petition.preamble %} + <h3>Preamble:</h3> + <p>{{ petition.preamble|safe|escape|linebreaksbr }}</p> + {% endif %} + <h3>Petition statement:</h3> + <p>{{ petition.statement|safe|escape|linebreaksbr }}</p> + {% if not is_signed %} + <h3>Please consider signing this petition</h3> + <form action="{{ petition.get_absolute_url }}" method="post"> + {% csrf_token %} + {{ form|bootstrap:'3,9' }} + <input class="btn btn-primary" type="submit" value="Sign this petition" /> + </form> + {% else %} + <h3>Thank you for signing this petition!</h3> + <p>Please invite your colleagues to also sign.</p> + {% endif %} + + </div> +</div> + +<div class="row"> + <div class="col-12"> + <h2>Signatories</h2> + <table class="table"> + {% for signatory in petition.petition_signatories.verified %} + <tr> + <td>{{ signatory.last_name }}</td> + <td>{{ signatory.get_title_display }}</td> + <td>{{ signatory.first_name }}</td> + <td>{{ signatory.affiliation }}</td> + <td>{{ signatory.get_country_of_employment_display }}</td> + </tr> + {% empty %} + <tr><td>No signatories found</td></tr> + {% endfor %} + </table> + </div> +</div> + + +{% endblock content %} diff --git a/petitions/templates/petitions/petition_email.html b/petitions/templates/petitions/petition_email.html new file mode 100644 index 0000000000000000000000000000000000000000..eb4b4543014eccc45b54335eab833b576e94fbfb --- /dev/null +++ b/petitions/templates/petitions/petition_email.html @@ -0,0 +1,18 @@ +[PLEASE FILL IN THE TO FIELD ABOVE (keeping partners@scipost.org in cc)]%0D%0A +%0D%0A +Dear ...%0D%0A +%0D%0A +[PLEASE WRITE A PERSONALIZED MESSAGE]%0D%0A +%0D%0A +Here under, you will find basic information about SciPost and how you can support it.%0D%0A +%0D%0A +Sincerely,%0D%0A +[YOUR SIGNATURE]%0D%0A +%0D%0A +%0D%0A +%0D%0A +SciPost (https://scipost.org) is a top-quality next-generation Open Access publication portal managed by professional scientists. Its principles, ideals and implementation can be found at https://scipost.org/about and https://scipost.org/FAQ.%0D%0A +%0D%0A +SciPost follows a different funding model than most traditional publishers. It operates on an entirely not-for-profit basis, and charges neither subscription fees nor article processing charges; instead, its activities are financed through a cost-slashing consortial model.%0D%0A +%0D%0A +By making a small financial commitment, the institutions and organizations that benefit from SciPost’s activities can become Supporting Partners. This enables SciPost to perform all of its publication-related activities, maintain its online portal and implement its long-term development plan. Details of the consortial funding scheme and how to join can be found at https://scipost.org/partners or by emailing partners@scipost.org.%0D%0A diff --git a/petitions/tests.py b/petitions/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6 --- /dev/null +++ b/petitions/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/petitions/urls.py b/petitions/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..7175ce752a716d15049fcfbcbb7608bd0f510601 --- /dev/null +++ b/petitions/urls.py @@ -0,0 +1,9 @@ +from django.conf.urls import url + +from . import views + +urlpatterns = [ + url(r'^(?P<slug>[-\w]+)/verify_signature/(?P<key>.+)$', + views.verify_signature, name='verify_signature'), + url(r'^(?P<slug>[-\w]+)$', views.petition, name='petition'), +] diff --git a/petitions/views.py b/petitions/views.py new file mode 100644 index 0000000000000000000000000000000000000000..8a7a9c7026f058617eeae1f072abbf47104d8cdf --- /dev/null +++ b/petitions/views.py @@ -0,0 +1,97 @@ +import hashlib +import random +import string + +from django.contrib import messages +from django.core.mail import EmailMultiAlternatives +from django.shortcuts import get_object_or_404, render, redirect +from django.template import Context, Template + +from .models import Petition, PetitionSignatory +from .forms import SignPetitionForm + + +def petition(request, slug): + petition = get_object_or_404(Petition, slug=slug) + + is_signed = False + initial = {} + if request.user.is_authenticated: + is_signed = petition.petition_signatories.verified().filter( + signatory=request.user.contributor).exists() + initial = { + 'title': request.user.contributor.title, + 'first_name': request.user.first_name, + 'last_name': request.user.last_name, + 'email': request.user.email, + 'country_of_employment': request.user.contributor.country_of_employment, + 'affiliation': request.user.contributor.affiliation, + } + + form = SignPetitionForm(request.POST or None, initial=initial) + if form.is_valid(): + signature = form.save(commit=False) + signature.petition = petition + message = ('<h3>Many thanks for signing!</h3>' + '<p>Please invite your colleagues to also sign.</p>') + if request.user.is_authenticated: + signature.signatory = request.user.contributor + signature.verified = True + else: + # Generate verification key and link + salt = "" + for i in range(5): + salt = salt + random.choice(string.ascii_letters) + salt = salt.encode('utf8') + verificationsalt = form.cleaned_data['last_name'] + verificationsalt = verificationsalt.encode('utf8') + verification_key = hashlib.sha1(salt+verificationsalt).hexdigest() + signature.verification_key = verification_key + message += '\n<p>You will receive an email with a verification link.</p>' + email_text = ('Please click on the link below to confirm ' + 'your signature of the petition: \n' + 'https://scipost.org/petitions/' + + petition.slug + '/verify_signature/' + verification_key + '.\n') + email_text_html = ( + '<p>Please click on the link below to confirm ' + 'your signature of the petition:</p>' + '<p><a href="https://scipost.org/petitions/{{ slug }}/verify_signature' + '/{{ key }}">confirm your signature</a></p>') + html_template = Template(email_text_html) + html_version = html_template.render(Context({'slug': petition.slug, + 'key': verification_key})) + emailmessage = EmailMultiAlternatives( + 'Petition signature verification', + email_text, + 'SciPost petitions<petitions@scipost.org>', + [form.cleaned_data['email']], + bcc=['petitions@scipost.org']) + emailmessage.attach_alternative(html_version, 'text/html') + emailmessage.send() + signature.save() + messages.success(request, message) + return redirect(petition.get_absolute_url()) + + context = { + 'petition': petition, + 'is_signed': is_signed, + 'form': form, + } + return render(request, 'petitions/petition.html', context) + + +def verify_signature(request, slug, key): + petition = get_object_or_404(Petition, slug=slug) + try: + signature = petition.petition_signatories.get(verification_key=key) + except PetitionSignatory.DoesNotExist: + messages.warning(request, ('Unknown signature key.')) + return redirect(petition.get_absolute_url()) + + if not signature.verified: + # Slight reduction of db write-use + signature.verified = True + signature.save() + messages.success(request, ('<h3>Many thanks for confirming your signature.</h3>' + '<p>Please invite your colleagues to also sign.</p>')) + return redirect(petition.get_absolute_url()) diff --git a/production/signals.py b/production/signals.py index d89834391fe659fbc15119ddfcd9934d14efd13e..4ee8e46494cd4b5367d48ebecd1d245319b13e5f 100644 --- a/production/signals.py +++ b/production/signals.py @@ -51,7 +51,6 @@ def notify_stream_status_change(sender, instance, created, **kwargs): sender -- User instance instance -- ProductionStream instance """ - if instance.status == constants.PROOFS_ACCEPTED: administators = Group.objects.get(name='Editorial Administrators') for user in administators.user_set.all(): diff --git a/scipost/models.py b/scipost/models.py index 88a69d14e41057de35432fbb2e73192181a9d541..92d9f20429454017cf9634938617bd2ee781c849 100644 --- a/scipost/models.py +++ b/scipost/models.py @@ -84,6 +84,9 @@ class Contributor(models.Model): def is_currently_available(self): return not self.unavailability_periods.today().exists() + def is_EdCol_Admin(self): + return self.user.groups.filter(name='Editorial Administrators').exists() + def is_SP_Admin(self): return self.user.groups.filter(name='SciPost Administrators').exists() diff --git a/scipost/static/scipost/SPB/SciPost_Supporting_Partner_Agreement.pdf b/scipost/static/scipost/SPB/SciPost_Supporting_Partner_Agreement.pdf index db013469658f2b128320a15750ff5ef25d2f71b3..9ceeb075f17d3d3297638dbc93eff559d7fdb1c5 100644 Binary files a/scipost/static/scipost/SPB/SciPost_Supporting_Partner_Agreement.pdf and b/scipost/static/scipost/SPB/SciPost_Supporting_Partner_Agreement.pdf differ diff --git a/scipost/static/scipost/SPB/SciPost_Supporting_Partners_Board_Prospectus.pdf b/scipost/static/scipost/SPB/SciPost_Supporting_Partners_Board_Prospectus.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a601150698bfcb5a3d4070d6176752e451f3c1fe Binary files /dev/null and b/scipost/static/scipost/SPB/SciPost_Supporting_Partners_Board_Prospectus.pdf differ diff --git a/scipost/static/scipost/assets/css/_general.scss b/scipost/static/scipost/assets/css/_general.scss index bd291703ecce886c40d13ad9a4f17b24884c2537..1b588ba860c314f02a84144451264ecebcc3e91f 100644 --- a/scipost/static/scipost/assets/css/_general.scss +++ b/scipost/static/scipost/assets/css/_general.scss @@ -39,3 +39,8 @@ footer .logos a { body > .container { padding-bottom: 1.5rem; } + +.quote-border { + border-left: 3px solid $scipost-lightblue; + padding-left: 1rem; +} diff --git a/scipost/static/scipost/assets/css/_list_group.scss b/scipost/static/scipost/assets/css/_list_group.scss index c53b6f4402fdc24831b92465bec378caf65f1c9e..7387c9c85f91dd41b8e5ec56003f3fc6bcb80099 100644 --- a/scipost/static/scipost/assets/css/_list_group.scss +++ b/scipost/static/scipost/assets/css/_list_group.scss @@ -9,40 +9,17 @@ border-top-color: #f9f9f9; } ul.events-list { - padding-left: 30px; + padding-left: 0; li { padding-top: 0.5rem; padding-bottom: 0.5rem; border: 0; - &:before { - content: ''; - width: 12px; - height: 12px; - left: -24px; - border-radius: 99px; - position: absolute; - top: 11px; - background: #fff; - border: 2px solid $scipost-darkblue; - z-index: 99; - } - - &:after { - content: ''; - width: 2px; - height: calc(100% - 18px); - position: absolute; - left: -19px; - background: $scipost-darkblue;; - top: 26px; - z-index: 97; - border-radius: 99px; - } - - &:last-child:after { - content: none; + .time { + max-width: 9rem; + min-width: 9rem; + width: 9rem; } } } diff --git a/scipost/static/scipost/assets/js/notifications.js b/scipost/static/scipost/assets/js/notifications.js index 6f85c449bd19b4f917a6aee7affc17bdf1c267fc..5900e9eddb03d2e24297916bd10a3a260402d966 100644 --- a/scipost/static/scipost/assets/js/notifications.js +++ b/scipost/static/scipost/assets/js/notifications.js @@ -5,7 +5,7 @@ var notify_api_url_list = "/notifications/api/list/"; var notify_api_url_toggle_read = "/notifications/mark-toggle/"; var notify_api_url_mark_all_read = "/notifications/mark-all-as-read/"; var notify_fetch_count = "5"; -var notify_refresh_period = 15000; +var notify_refresh_period = 60000; var consecutive_misfires = 0; var registered_functions = [fill_notification_badge]; @@ -91,7 +91,7 @@ function fill_notification_badge(data) { } function get_notification_list() { - var data = fetch_api_data(notify_api_url_list, function(data) { + fetch_api_data(notify_api_url_list, true, function(data) { var messages = data.list.map(function (item) { var message = ''; @@ -128,10 +128,13 @@ function get_notification_list() { }); } -function fetch_api_data(url, callback) { +function fetch_api_data(url, once, callback) { if (!url) { var url = notify_api_url_count; } + if (!once) { + var once = false; + } if (registered_functions.length > 0) { //only fetch data if a function is setup @@ -153,17 +156,28 @@ function fetch_api_data(url, callback) { r.open("GET", url + '?max=' + notify_fetch_count, true); r.send(); } - if (consecutive_misfires < 10) { - setTimeout(fetch_api_data,notify_refresh_period); - } else { - var badges = document.getElementsByClassName(notify_badge_class); - if (badges) { - for (var i=0; i < badges.length; i++){ - badges[i].innerHTML = "!"; - badges[i].title = "Connection lost!" + var timer = null; + if (!once) { + if (consecutive_misfires < 10 && !once) { + timer = setTimeout(fetch_api_data, notify_refresh_period); + } else { + var badges = document.getElementsByClassName(notify_badge_class); + if (badges) { + for (var i=0; i < badges.length; i++){ + badges[i].innerHTML = "!"; + badges[i].title = "Connection lost!" + } } } } + + return stop; + function stop() { + if (timer) { + clearTimeout(timer); + timer = 0; + } + } } setTimeout(fetch_api_data, 1000); diff --git a/scipost/static/scipost/assets/js/scripts.js b/scipost/static/scipost/assets/js/scripts.js index df1b212a3db8b5d5ef3f2a27cdf0db7479903e53..31e9384a2a3542b6ccf449dfe5e311dc712558fe 100644 --- a/scipost/static/scipost/assets/js/scripts.js +++ b/scipost/static/scipost/assets/js/scripts.js @@ -1,10 +1,17 @@ -import tooltip from './tooltip.js'; import notifications from './notifications.js'; function hide_all_alerts() { $(".alert").fadeOut(300); } +var activate_tooltip = function() { + jQuery('[data-toggle="tooltip"]').tooltip({ + animation: false, + fallbackPlacement: 'clockwise', + placement: 'auto' + }); +} + var getUrlParameter = function getUrlParameter(sParam) { var sPageURL = decodeURIComponent(window.location.search.substring(1)), sURLVariables = sPageURL.split('&'), diff --git a/scipost/static/scipost/assets/js/tooltip.js b/scipost/static/scipost/assets/js/tooltip.js deleted file mode 100644 index f636b484f0f08f51adc9dcc92ad1d83a4f6985e2..0000000000000000000000000000000000000000 --- a/scipost/static/scipost/assets/js/tooltip.js +++ /dev/null @@ -1,9 +0,0 @@ -var activate_tooltip = function() { - jQuery('[data-toggle="tooltip"]').tooltip({ - animation: false, - fallbackPlacement: 'clockwise', - placement: 'auto' - }); -} - -activate_tooltip(); diff --git a/scipost/templates/scipost/index.html b/scipost/templates/scipost/index.html index f3ac59a3f7e27a01cabc8d02b0552bba89113761..c5cc4d3b4c455618213d1fcdd9b1ac2e854e049e 100644 --- a/scipost/templates/scipost/index.html +++ b/scipost/templates/scipost/index.html @@ -120,11 +120,14 @@ <div> <p> - SciPost guarantees free online access to all publications in all its Journals and does not charge any article processing fees for publishing. Supporting Partners provide operating funds to SciPost. + SciPost guarantees free online access to all publications in all its Journals and does not charge any article processing fees for publishing. Supporting Partners provide operating funds to SciPost through a cost-slashing consortial model. </p> <p> - Institutions: consider joining our <a href="{% url 'partners:partners' %}">Supporting Partners Board</a>. SciPost cannot exist without your support. + Institutions: consider joining our <a href="{% url 'partners:partners' %}">Supporting Partners Board</a>. SciPost cannot exist without your support. Look at our <a href="{% static 'scipost/SPB/SciPost_Supporting_Partners_Board_Prospectus.pdf' %}">one-page Prospectus</a> and at our full <a href="{% static 'scipost/SPB/SciPost_Supporting_Partner_Agreement.pdf' %}">Partner Agreement</a>. </p> + <p> + <span style="color: red;">Scientists, please help us out:</span> if it is not listed on our <a href="{% url 'partners:partners' %}">Partners page</a>, please encourage your institution (through a librarian, director, ...) to join by <a href="{% url 'petitions:petition' slug='join-SPB' %}">signing our petition</a>, and by personally emailing them directly using this <a href="mailto:?subject=Petition to support SciPost&body={% autoescape on %}{% include 'petitions/petition_email.html' %}{% endautoescape %}&cc=partners@scipost.org">email template</a>. + </p> </div> </div> </div><!-- End Partners --> diff --git a/scipost/templates/scipost/navbar.html b/scipost/templates/scipost/navbar.html index d946d267599f9f75c182318174de04f7b0222327..ef66e3d109922ea8d862d26fffecbbd32430eb0c 100644 --- a/scipost/templates/scipost/navbar.html +++ b/scipost/templates/scipost/navbar.html @@ -51,11 +51,6 @@ <a class="nav-link" href="{% url 'production:production' %}">Production</a> </li> {% endif %} - {% if perms.scipost.can_oversee_refereeing %} - <li class="nav-item{% if '/submissions/admin' in request.path %} active{% endif %}"> - <a class="nav-link" href="{% url 'submissions:admin' %}">Editorial Administration</a> - </li> - {% endif %} {% if user.contributor %} <li class="nav-item{% if '/personal_page' in request.path %} active{% endif %}"> <a class="nav-link" href="{% url 'scipost:personal_page' %}">Personal Page</a> diff --git a/scipost/templates/scipost/personal_page.html b/scipost/templates/scipost/personal_page.html index ccdef253c64c9c545f4c960d931331a336ad1e7f..202a0041ce9d9785f111980618c3e11840d5e65d 100644 --- a/scipost/templates/scipost/personal_page.html +++ b/scipost/templates/scipost/personal_page.html @@ -296,7 +296,7 @@ <h3>Editorial Admin actions</h3> <ul> <li><a href="{% url 'submissions:reports_accepted_list' %}">Accepted Reports</a>{% if nr_reports_without_pdf %} ({{nr_reports_without_pdf}} unfinished){% endif %}</li> - <li><a href="{% url 'submissions:admin' %}">Editorial Administration Page</a></li> + <li><a href="{% url 'submissions:pool' %}">Submissions Pool</a></li> <li><a href="{% url 'submissions:treated_submissions_list' %}">Fully treated Submissions</a>{% if nr_treated_submissions_without_pdf %} ({{nr_treated_submissions_without_pdf}} unfinished){% endif %}</li> <li><a href="{% url 'journals:harvest_citedby_list' %}">Harvest citedby data</a></li> <li><a href="{% url 'journals:manage_metadata' %}">Manage Publication metadata</a></li> diff --git a/scipost/templatetags/scipost_extras.py b/scipost/templatetags/scipost_extras.py index a378cf31277cdda85e8874504559044eeb7d42a1..ed9aaebcbce23e8b509aaaf3042a31d11b9de8f6 100644 --- a/scipost/templatetags/scipost_extras.py +++ b/scipost/templatetags/scipost_extras.py @@ -1,6 +1,6 @@ from django import template -from ..constants import subject_areas_dict, subject_areas_raw_dict +from ..constants import subject_areas_dict from ..models import Contributor register = template.Library() diff --git a/scipost/templatetags/user_groups.py b/scipost/templatetags/user_groups.py new file mode 100644 index 0000000000000000000000000000000000000000..eac1a8b142a94351ee09751cae447afec31aa901 --- /dev/null +++ b/scipost/templatetags/user_groups.py @@ -0,0 +1,12 @@ +from django import template + +register = template.Library() + + +@register.simple_tag +def is_edcol_admin(user): + """ + Assign template variable (boolean) to check if user is Editorial Administator. + This assignment is limited to a certain context block! + """ + return user.groups.filter(name='Editorial Administrators').exists() or user.is_superuser() diff --git a/submissions/templates/partials/submissions/admin/submission_details.html b/submissions/templates/partials/submissions/admin/submission_details.html deleted file mode 100644 index 39969bdc536c7e7dc0974c1fdb5ceaf89b2bd093..0000000000000000000000000000000000000000 --- a/submissions/templates/partials/submissions/admin/submission_details.html +++ /dev/null @@ -1,147 +0,0 @@ -{% load guardian_tags %} -{% load scipost_extras %} -{% load submissions_extras %} - - -<div class="card border-secondary mt-2 submission-detail"> - <div class="card-body"> - <h5 class="pb-0">{{submission.get_subject_area_display}}</h5> - <h3 class="card-title"> - <a href="{{submission.get_absolute_url}}">{{submission.title}}</a> - </h3> - - <p class="card-text mb-3">by {{submission.author_list}}</p> - <h3>Info</h3> - <table class="text-muted w-100 mb-1"> - <tr> - <td style="min-width: 40%;">Version</td> - <td>{{submission.arxiv_vn_nr}} ({% if submission.is_current %}current version{% else %}deprecated version {{submission.arxiv_vn_nr}}{% endif %})</td> - </tr> - <tr> - <td>Submitted</td> - <td>{{submission.submission_date}} to {{submission.get_submitted_to_journal_display}}</td> - </tr> - - {% if submission.acceptance_date %} - <tr> - <td>Accepted</td> - <td>{{submission.acceptance_date}}</td> - </tr> - {% endif %} - - <tr> - <td>Latest activity</td> - <td>{{submission.latest_activity}}</td> - </tr> - <tr> - <td>Editor-in-charge</td> - <td> - {% if submission.editor_in_charge %} - {{ submission.editor_in_charge }} - {% elif perms.scipost.can_assign_submissions %} - <a href="{% url 'submissions:assign_submission' submission.arxiv_identifier_w_vn_nr %}">Send a new assignment request</a> - {% else %} - - - {% endif %} - </td> - </tr> - <tr> - <td>Status</td> - <td>{{ submission.get_status_display }}</td> - </tr> - <tr> - <td>Refereeing cycle</td> - <td>{{ submission.get_refereeing_cycle_display }}</td> - </tr> - - {% include 'partials/submissions/refereeing_status_as_tr.html' with submission=submission %} - - <tr> - <td>Comments</td> - <td> - {{submission.comments.vetted.count}} - <span class="circle-clickable" data-toggle="tooltip" data-placement='bottom' data-html="true" title="{{submission.comments.regular_comments.vetted.count}} comments<br>{{submission.comments.author_replies.vetted.count}} author replies<hr>{{submission.comments.awaiting_vetting.count}} awaiting vetting">?</span> - </td> - </tr> - - <tr> - <td>Reporting deadline</td> - <td> - {% if submission.reporting_deadline > now %} - in {{submission.reporting_deadline|timeuntil}} - {% else %} - {{submission.reporting_deadline|timesince}} ago - {% endif %} - </td> - </tr> - - <tr> - <td>Plagiarism score</td> - <td> - {% if submission.plagiarism_report %} - {{ submission.plagiarism_report.score }}% - {% else %} - <a href="{% url 'submissions:plagiarism' submission.arxiv_identifier_w_vn_nr %}">Run plagiarism check</a> - {% endif %} - </td> - </tr> - - </table> - <a href="{% url 'submissions:editorial_page' submission.arxiv_identifier_w_vn_nr %}" class="d-inline-block mb-3">Go to Editorial Page</a> - - <h3>Actions</h3> - - <ul class="pl-4 mb-3"> - {# EIC Assignments #} - {% if perms.scipost.can_assign_submissions %} - {% if not submission.editor_in_charge %} - <li>EIC Assignment requests:</li> - <ul> - {% for assignment in submission.editorial_assignments.all %} - {% include 'submissions/_assignment_info.html' with assignment=assignment %} - {% empty %} - <li>None found. <a href="{% url 'submissions:assign_submission' submission.arxiv_identifier_w_vn_nr %}">Send a first assignment request</a></li> - {% endfor %} - </ul> - <li><a href="{% url 'submissions:assign_submission' submission.arxiv_identifier_w_vn_nr %}">Send a new assignment request</a></li> - <li><a href="{% url 'submissions:assignment_failed' submission.arxiv_identifier_w_vn_nr %}">Close pre-screening: failure to find EIC</a></li> - {% endif %} - {% endif %} - - {# Plagiarism #} - <li><a href="{% url 'submissions:plagiarism' submission.arxiv_identifier_w_vn_nr %}">Manage plagiarism report</a></li> - - {# Compile pdfs #} - {% if submission.reports.accepted.exists %} - <li><a href="{% url 'submissions:reports_accepted_list' %}?submission={{submission.arxiv_identifier_w_vn_nr}}">Compile accepted reports</a></li> - {% endif %} - - {# Communication #} - {% if submission.editor_in_charge %} - <li><a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype='StoE' %}">Send a communication to the Editor-in-charge</a></li> - {% endif %} - - {# EIC Recommendations #} - {% if submission.eicrecommendations.exists %} - <li>See Editorial Recommendations:</li> - <ul> - {% for rec in submission.eicrecommendations.all %} - <li><a href="{% url 'submissions:eic_recommendation_detail' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr rec_id=rec.id %}">{{rec.get_recommendation_display}}</a></li> - {% endfor %} - </ul> - {% endif %} - - {# Accepted submission actions #} - {% if submission.status == 'accepted' %} - <li><a href="{% url 'submissions:treated_submission_pdf_compile' submission.arxiv_identifier_w_vn_nr %}">Update the Refereeing Package pdf</a></li> - <li>After proofs have been accepted, you can <a href="{% url 'journals:initiate_publication' %}">initiate the publication process</a> (leads to the validation page)</li> - {% endif %} - </ul> - - - <h3>Events</h3> - <div id="eventslist"> - {% include 'submissions/submission_event_list.html' with events=submission.events.for_eic %} - </div> - </div> -</div> diff --git a/submissions/templates/partials/submissions/admin/submission_li.html b/submissions/templates/partials/submissions/admin/submission_li.html deleted file mode 100644 index 0581df05cb3f822992a09b38bb1357069bc57e87..0000000000000000000000000000000000000000 --- a/submissions/templates/partials/submissions/admin/submission_li.html +++ /dev/null @@ -1,24 +0,0 @@ -<div class="row pool-item mb-0"> - <div class="icons{% if is_current %} text-info{% endif %}"> - {% include 'partials/submissions/admin/submission_tooltip.html' with submission=submission %} - - {% if submission.status == 'unassigned' %} - <i class="fa fa-exclamation mt-1 px-1 text-danger" data-toggle="tooltip" data-html="true" title="This Submission does not have a Editor-in-charge"></i> - {% endif %} - </div> - <div class="item col-auto"> - <p class="mb-1"> - <a href="{% url 'submissions:admin' submission.arxiv_identifier_w_vn_nr %}">{{ submission.title }}</a><br> - <em>by {{ submission.author_list }}</em> - </p> - - <p class="card-text mb-2"> - <a href="{% url 'submissions:admin' submission.arxiv_identifier_w_vn_nr %}" data-toggle="dynamic" data-target="#details" data-toggle="dynamic" data-target="">See details</a> - {% if submission.editor_in_charge == request.user.contributor %} - · <a href="{% url 'submissions:editorial_page' submission.arxiv_identifier_w_vn_nr %}">Go directly to editorial page</a> - {% endif %} - </p> - - <p class="label label-{% if submission.status == 'unassigned' %}outline-danger{% else %}secondary{% endif %} label-sm">{{ submission.get_status_display }}</p> - </div> -</div> diff --git a/submissions/templates/partials/submissions/pool/submission_details.html b/submissions/templates/partials/submissions/pool/submission_details.html index 4b45732367b38ee70410bf1231deabbc75c5fc9e..032739c452da25847ed4887f2cc669d4f9af6e3c 100644 --- a/submissions/templates/partials/submissions/pool/submission_details.html +++ b/submissions/templates/partials/submissions/pool/submission_details.html @@ -1,7 +1,10 @@ {% load guardian_tags %} {% load scipost_extras %} {% load submissions_extras %} +{% load user_groups %} +{% get_obj_perms request.user for submission as "sub_perms" %} +{% is_edcol_admin request.user as is_ECAdmin %} <div class="card submission-detail"> {% include 'submissions/_submission_card_fellow_content.html' with submission=submission %} @@ -20,9 +23,6 @@ {% endfor %} </ul> - - - {% get_obj_perms request.user for submission as "sub_perms" %} {% if "can_take_editorial_actions" in sub_perms or is_ECAdmin %} {% include 'submissions/_required_actions_block.html' with submission=submission %} <h4> @@ -30,31 +30,60 @@ </h4> {% endif %} - {% if perms.scipost.can_assign_submissions %} - {% if submission.editorial_assignments.exists %} - <h4>EIC Assignment requests:</h4> - <ul> - {% for assignment in submission.editorial_assignments.all %} - {% include 'submissions/_assignment_info.html' with assignment=assignment %} - {% endfor %} - </ul> - {% endif %} - {% if submission.editor_in_charge == None %} - <h4>Actions:</h4> - <ul> - <li><a href="{% url 'submissions:assign_submission' submission.arxiv_identifier_w_vn_nr %}">Send a new assignment request</a></li> - <li><a href="{% url 'submissions:assignment_failed' submission.arxiv_identifier_w_vn_nr %}">Close pre-screening: failure to find EIC</a></li> - </ul> - {% endif %} - {% endif %} - {% if is_ECAdmin %} - <h4> - <a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype='StoE' %}">Send a communication to the Editor-in-charge</a> - </h4> - {% if submission.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 %} + <h3>Editorial Administration</h3> + <ul class="pl-4 mb-3"> + {# EIC Assignments #} + {% if perms.scipost.can_assign_submissions %} + <li>EIC Assignment requests:</li> + <ul class="pl-3"> + {% for assignment in submission.editorial_assignments.all %} + {% include 'submissions/_assignment_info.html' with assignment=assignment %} + {% empty %} + <li>No assignment requests have been sent</li> + {% endfor %} + + {% if not submission.editor_in_charge %} + <li><a href="{% url 'submissions:assign_submission' submission.arxiv_identifier_w_vn_nr %}">Send a new assignment request</a></li> + <li><a href="{% url 'submissions:assignment_failed' submission.arxiv_identifier_w_vn_nr %}">Close pre-screening: failure to find EIC</a></li> + {% endif %} + </ul> + {% endif %} + + {# Plagiarism #} + <li><a href="{% url 'submissions:plagiarism' submission.arxiv_identifier_w_vn_nr %}">Manage plagiarism report</a></li> + + {# Compile pdfs #} + {% if submission.reports.accepted.exists %} + <li><a href="{% url 'submissions:reports_accepted_list' %}?submission={{submission.arxiv_identifier_w_vn_nr}}">Compile accepted reports</a></li> + {% endif %} + + {# Communication #} + {% if submission.editor_in_charge %} + <li><a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype='StoE' %}">Send a communication to the Editor-in-charge</a></li> + {% endif %} + + {# EIC Recommendations #} + {% if submission.eicrecommendations.exists %} + <li>See Editorial Recommendations:</li> + <ul class="pl-3"> + {% for rec in submission.eicrecommendations.all %} + <li><a href="{% url 'submissions:eic_recommendation_detail' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr rec_id=rec.id %}">{{rec.get_recommendation_display}}</a></li> + {% endfor %} + </ul> + {% endif %} + + {# Accepted submission actions #} + {% if submission.status == 'accepted' %} + <li><a href="{% url 'submissions:treated_submission_pdf_compile' submission.arxiv_identifier_w_vn_nr %}">Update the Refereeing Package pdf</a></li> + <li>After proofs have been accepted, you can <a href="{% url 'journals:initiate_publication' %}">initiate the publication process</a> (leads to the validation page)</li> + {% endif %} + </ul> + + <h3>Events</h3> + <div id="eventslist"> + {% include 'submissions/submission_event_list.html' with events=submission.events.for_eic %} + </div> {% endif %} </div> </div> diff --git a/submissions/templates/partials/submissions/pool/submission_li.html b/submissions/templates/partials/submissions/pool/submission_li.html index 73bc7fa516e69125906942aef32ac11b5fbac287..f56f5df73002123e71f31d908920f7cc9d0bfa47 100644 --- a/submissions/templates/partials/submissions/pool/submission_li.html +++ b/submissions/templates/partials/submissions/pool/submission_li.html @@ -1,6 +1,6 @@ <div class="row pool-item mb-0"> <div class="icons{% if is_current %} text-info{% endif %}"> - {% include 'partials/submissions/admin/submission_tooltip.html' with submission=submission %} + {% include 'partials/submissions/pool/submission_tooltip.html' with submission=submission %} {% if submission.status == 'unassigned' %} <i class="fa fa-exclamation mt-1 px-1 text-danger" data-toggle="tooltip" data-html="true" title="You can volunteer to become Editor-in-charge"></i> diff --git a/submissions/templates/partials/submissions/admin/submission_tooltip.html b/submissions/templates/partials/submissions/pool/submission_tooltip.html similarity index 100% rename from submissions/templates/partials/submissions/admin/submission_tooltip.html rename to submissions/templates/partials/submissions/pool/submission_tooltip.html diff --git a/submissions/templates/partials/submissions/refereeing_status_as_tr.html b/submissions/templates/partials/submissions/refereeing_status_as_tr.html index 6a9692aa6033791ca716766ee6288dafc76907cf..05c0db715947fe69912930d07835e44381f45761 100644 --- a/submissions/templates/partials/submissions/refereeing_status_as_tr.html +++ b/submissions/templates/partials/submissions/refereeing_status_as_tr.html @@ -1,10 +1,10 @@ {% if submission.refereeing_cycle != 'direct_rec' %} <tr> <td>Referees invited</td> - <td>{{submission.referee_invitations.count}} <span class="circle-clickable" data-placement='bottom' data-toggle="tooltip" data-html="true" title="{{submission.referee_invitations.accepted.count}} accepted<br>{{submission.referee_invitations.declined.count}} declined<br>{{submission.referee_invitations.pending.count}} response pending">?</span> + <td>{{submission.referee_invitations.count}} <small><span class="fa fa-info-circle" data-placement='bottom' data-toggle="tooltip" data-html="true" title="{{submission.referee_invitations.accepted.count}} accepted<br>{{submission.referee_invitations.declined.count}} declined<br>{{submission.referee_invitations.pending.count}} response pending"></span></small> <tr> <tr> <td>Reports obtained</td> - <td>{{submission.reports.accepted.count}} <span class="circle-clickable" data-placement='bottom' data-toggle="tooltip" data-html="true" title="{{submission.reports.accepted.invited.count}} invited<br>{{submission.reports.accepted.contributed.count}} contributed<hr>{{submission.reports.awaiting_vetting.count}} awaiting vetting<br>{{submission.reports.rejected.count}} rejected">?</span> + <td>{{submission.reports.accepted.count}} <small><span class="fa fa-info-circle" data-placement='bottom' data-toggle="tooltip" data-html="true" title="{{submission.reports.accepted.invited.count}} invited<br>{{submission.reports.accepted.contributed.count}} contributed<hr>{{submission.reports.awaiting_vetting.count}} awaiting vetting<br>{{submission.reports.rejected.count}} rejected"></span></small> <tr> {% endif %} diff --git a/submissions/templates/submissions/_submission_card_fellow_content.html b/submissions/templates/submissions/_submission_card_fellow_content.html index 6af2e213aa06bba299eb2d3c13987b10b0b3fbfa..49c7e881e218d6a7ee18075fcb771ff665ebb658 100644 --- a/submissions/templates/submissions/_submission_card_fellow_content.html +++ b/submissions/templates/submissions/_submission_card_fellow_content.html @@ -1,7 +1,82 @@ -{% extends 'submissions/_submission_card_fellow_content_sparse.html' %} +{% extends 'submissions/_submission_card_base.html' %} {% block card_block_footer %} - {{block.super}} + <p class="card-text mb-3">by {{submission.author_list}}</p> + <table class="text-muted w-100 mb-1"> + <tr> + <td style="min-width: 40%;">Version</td> + <td>{{submission.arxiv_vn_nr}} ({% if submission.is_current %}current version{% else %}deprecated version {{submission.arxiv_vn_nr}}{% endif %})</td> + </tr> + <tr> + <td>Submitted</td> + <td>{{submission.submission_date}} to {{submission.get_submitted_to_journal_display}}</td> + </tr> - {% include 'submissions/_submission_refereeing_status.html' with submission=submission %} + {% if submission.acceptance_date %} + <tr> + <td>Accepted</td> + <td>{{submission.acceptance_date}}</td> + </tr> + {% endif %} + + <tr> + <td>Latest activity</td> + <td>{{submission.latest_activity}}</td> + </tr> + <tr> + <td>Editor-in-charge</td> + <td> + {% if submission.editor_in_charge %} + {{ submission.editor_in_charge }} + {% elif perms.scipost.can_assign_submissions %} + <a href="{% url 'submissions:assign_submission' submission.arxiv_identifier_w_vn_nr %}">Send a new assignment request</a> + {% else %} + - + {% endif %} + </td> + </tr> + <tr> + <td>Status</td> + <td>{{ submission.get_status_display }}</td> + </tr> + <tr> + <td>Refereeing cycle</td> + <td>{{ submission.get_refereeing_cycle_display }}</td> + </tr> + + {% include 'partials/submissions/refereeing_status_as_tr.html' with submission=submission %} + + <tr> + <td>Comments</td> + <td> + {{submission.comments.vetted.count}} + <small><span class="fa fa-info-circle" data-toggle="tooltip" data-placement='bottom' data-html="true" title="{{submission.comments.regular_comments.vetted.count}} comments<br>{{submission.comments.author_replies.vetted.count}} author replies<hr>{{submission.comments.awaiting_vetting.count}} awaiting vetting"></span></small> + </td> + </tr> + + <tr> + <td>Reporting deadline</td> + <td> + {% if submission.reporting_deadline > now %} + in {{ submission.reporting_deadline|timeuntil }} + {% else %} + {{ submission.reporting_deadline|timesince }} ago + {% endif %} + </td> + </tr> + + {% if perms.scipost.can_do_plagiarism_checks %} + <tr> + <td>Plagiarism score</td> + <td> + {% if submission.plagiarism_report %} + {{ submission.plagiarism_report.score }}% + {% else %} + <a href="{% url 'submissions:plagiarism' submission.arxiv_identifier_w_vn_nr %}">Run plagiarism check</a> + {% endif %} + </td> + </tr> + {% endif %} + + </table> {% endblock %} diff --git a/submissions/templates/submissions/_submission_card_fellow_content_sparse.html b/submissions/templates/submissions/_submission_card_fellow_content_sparse.html deleted file mode 100644 index 8fbd9b1aeb82e3675874435338df0f7a40cdb66a..0000000000000000000000000000000000000000 --- a/submissions/templates/submissions/_submission_card_fellow_content_sparse.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends 'submissions/_submission_card_content.html' %} - -{% block card_block_footer %} - {{block.super}} - - <!-- Fellow specific info --> - {% if submission.status == 'unassigned' %} - <p class="card-text text-danger">Status: {{ submission.get_status_display }}. You can volunteer to become Editor-in-charge by <a href="{% url 'submissions:volunteer_as_EIC' submission.arxiv_identifier_w_vn_nr %}">clicking here</a>.</p> - {% else %} - <p class="card-text">Editor-in-charge: <em>{{ submission.editor_in_charge }}</em></p> - <p class="card-text">Status: {{ submission.get_status_display }}</p> - {% endif %} -{% endblock %} diff --git a/submissions/templates/submissions/admin/base.html b/submissions/templates/submissions/admin/base.html index e238b581c8e1952ae403c814db783bf57f98f4ea..49b66534f3568f9661f205e0e6e18e9ab9a0f96f 100644 --- a/submissions/templates/submissions/admin/base.html +++ b/submissions/templates/submissions/admin/base.html @@ -4,7 +4,11 @@ <nav class="breadcrumb py-md-2 px-0 hidden-sm-down"> <div class="container"> {% block breadcrumb_items %} - <a href="{% url 'submissions:admin' %}" class="breadcrumb-item">Editorial Administration</a> + {% if submission %} + <a href="{% url 'submissions:pool' submission.arxiv_identifier_w_vn_nr %}" class="breadcrumb-item">Pool</a> + {% else %} + <a href="{% url 'submissions:pool' %}" class="breadcrumb-item">Pool</a> + {% endif %} {% endblock %} </div> </nav> diff --git a/submissions/templates/submissions/admin/editorial_admin.html b/submissions/templates/submissions/admin/editorial_admin.html deleted file mode 100644 index 8c23d6beb54f3791e2f0fda8b08b3590c74bd77d..0000000000000000000000000000000000000000 --- a/submissions/templates/submissions/admin/editorial_admin.html +++ /dev/null @@ -1,99 +0,0 @@ -{% extends 'submissions/admin/base.html' %} - -{% load scipost_extras %} - -{% block pagetitle %}: Editorial Administration{% endblock pagetitle %} - -{% block breadcrumb_items %} - {{ block.super }} - <span class="breadcrumb-item">{% if submission %}{{ submission.arxiv_identifier_w_vn_nr }}{% else %}All events in the last 24 hours{% endif %}</span> -{% endblock %} - -{% block body_class %}{{ block.super }} editorial-admin{% endblock %} - -{% block content %} -<div class="row"> - <div class="col-md-7"> - <h1>Editorial Administration Page</h1> - - <p> - {% if submission %} - <a href="{% url 'submissions:admin' %}">All events in the last 24 hours</a><br> - {% endif %} - <a href="{% url 'submissions:pool' %}">Go to the pool</a> - </p> - - {% if recommendations_to_prepare_for_voting %} - <h3>Recommendations to prepare for voting <i class="fa fa-exclamation-circle text-warning"></i></h3> - <ul> - {% for recommendation in recommendations_to_prepare_for_voting %} - <li>On Editorial Recommendation: {{ recommendation }}<br> - <a href="{% url 'submissions:prepare_for_voting' rec_id=recommendation.id %}">Prepare for voting</a> - </li> - {% endfor %} - </ul> - {% endif %} - - {% if recommendations_undergoing_voting %} - <h3>Recommendations undergoing voting <i class="fa fa-exclamation-circle text-warning"></i></h3> - <ul class="fa-ul"> - {% for recommendation in recommendations_undergoing_voting %} - <li>{% include 'partials/submissions/admin/recommendation_tooltip.html' with classes='fa-li' recommendation=recommendation %} - On Editorial Recommendation: {{ recommendation }}<br> - <a href="{% url 'submissions:admin_recommendation' recommendation.submission.arxiv_identifier_w_vn_nr %}">See Editorial Recommendation</a> - </li> - {% endfor %} - </ul> - {% endif %} - - {% if recommendations_to_prepare_for_voting or recommendations_undergoing_voting %} - <hr> - {% endif %} - - <h3>Submissions currently in pre-screening</h3> - <ul class="list-unstyled" data-target="active-list"> - {% for sub in submission_list.prescreening %} - <li class="p-2{% if sub == submission %} active{% endif %}"> - {% include 'partials/submissions/admin/submission_li.html' with submission=sub %} - </li> - {% empty %} - <li>No Submissions are currently in pre-screening</li> - {% endfor %} - </ul> - - <h3>Submissions currently in refereeing round</h3> - <ul class="list-unstyled" data-target="active-list"> - {% for sub in submission_list.actively_refereeing %} - <li class="p-2{% if sub == submission %} active{% endif %}"> - {% include 'partials/submissions/admin/submission_li.html' with submission=sub %} - </li> - {% empty %} - <li>No Submissions are currently in refereeing round</li> - {% endfor %} - </ul> - - <h3>Submissions accepted</h3> - <ul class="list-unstyled" data-target="active-list"> - {% for sub in submission_list.accepted %} - <li class="p-2{% if sub == submission %} active{% endif %}"> - {% include 'partials/submissions/admin/submission_li.html' with submission=sub %} - </li> - {% empty %} - <li>All accepted Submissions are published</li> - {% endfor %} - </ul> - </div> - - <div class="col-md-5" id="details"> - {% if submission %} - {% include 'partials/submissions/admin/submission_details.html' with submission=submission %} - {% else %} - <h3><em>Click on a submission to see its summary and actions</em></h3> - <h2>All events in the last 24 hours</h2> - <div id="eventslist" class=""> - {% include 'submissions/submission_event_list_general.html' with events=latest_events %} - </div> - {% endif %} - </div> -</div> -{% endblock content %} diff --git a/submissions/templates/submissions/admin/recommendation.html b/submissions/templates/submissions/admin/recommendation.html index a4eed96cbcd805ad7f90cddf7655bfa75873fdae..43deb3def36289814b0ac16ef1e4d9e243765929 100644 --- a/submissions/templates/submissions/admin/recommendation.html +++ b/submissions/templates/submissions/admin/recommendation.html @@ -1,10 +1,10 @@ -{% extends 'submissions/pool/base.html' %} +{% extends 'submissions/admin/base.html' %} {% load bootstrap %} {% load scipost_extras %} {% block breadcrumb_items %} - <a href="{% url 'submissions:admin' %}" class="breadcrumb-item">Editorial Administration</a> + {{ block.super }} <span class="breadcrumb-item">Editorial Recommendation</span> {% endblock %} @@ -14,7 +14,7 @@ <h1 class="highlight">Editorial Recommendation</h1> <div class="card card-outline-secondary"> - {% include 'submissions/_submission_card_fellow_content_sparse.html' with submission=object.submission %} + {% include 'submissions/_submission_card_fellow_content.html' with submission=object.submission %} </div> <div class="card card-outline-secondary"> diff --git a/submissions/templates/submissions/pool.html b/submissions/templates/submissions/pool.html index ee80629ae9547d42966b84e0561162da0c09bac8..632bb4fe8b832e60ace7193cee4052cfb862c128 100644 --- a/submissions/templates/submissions/pool.html +++ b/submissions/templates/submissions/pool.html @@ -45,7 +45,7 @@ <div class="col-12" id="undergoing_rec_{{rec.id}}"> <div class="card card-outline-secondary"> - {% include 'submissions/_submission_card_fellow_content_sparse.html' with submission=rec.submission %} + {% include 'submissions/_submission_card_fellow_content.html' with submission=rec.submission %} </div> <div class="card card-outline-secondary"> @@ -131,7 +131,7 @@ <div class="row"> <div class="col-12" id="prepare_rec_{{rec.id}}"> <div class="card card-outline-secondary"> - {% include 'submissions/_submission_card_fellow_content_sparse.html' with submission=rec.submission %} + {% include 'submissions/_submission_card_fellow_content.html' with submission=rec.submission %} </div> <div class="card card-outline-secondary"> diff --git a/submissions/templates/submissions/pool/pool.html b/submissions/templates/submissions/pool/pool.html index f304a5068691ef1752024a24e507eb474d131f58..97758bf7d200b5414411822a62b3c25fa99375bd 100644 --- a/submissions/templates/submissions/pool/pool.html +++ b/submissions/templates/submissions/pool/pool.html @@ -4,6 +4,7 @@ {% load guardian_tags %} {% load scipost_extras %} {% load submissions_extras %} +{% load user_groups %} {% block breadcrumb_items %} <a href="{% url 'scipost:personal_page' %}" class="breadcrumb-item">Personal Page</a> @@ -18,15 +19,45 @@ {% block pagetitle %}: Submissions Pool{% endblock pagetitle %} {% block content %} - {% with is_ECAdmin=request.user|is_in_group:'Editorial Administrators' %} - <a href="{% url 'submissions:pool' %}?test=1">See old pool layout</a> - <div class="row"> - <div class="col-md-7"> - <h1>SciPost Submissions Pool</h1> - {% if is_ECAdmin %} - <a href="{% url 'submissions:admin' %}">Go to the Editorial Administration</a> + {% is_edcol_admin request.user as is_ECAdmin %} + + <a href="{% url 'submissions:pool' %}?test=1">See old pool layout</a> + <div class="row"> + <div class="col-md-7"> + <h1>SciPost Submissions Pool</h1> + {% if is_ECAdmin %} + + {% if recommendations_to_prepare_for_voting or recommendations_undergoing_voting %} + <div class="quote-border"> + <h2 class="text-primary">Administrative Tasks</h2> + + {% if recommendations_to_prepare_for_voting %} + <h3>Recommendations to prepare for voting <i class="fa fa-exclamation-circle text-warning"></i></h3> + <ul> + {% for recommendation in recommendations_to_prepare_for_voting %} + <li>On Editorial Recommendation: {{ recommendation }}<br> + <a href="{% url 'submissions:prepare_for_voting' rec_id=recommendation.id %}">Prepare for voting</a> + </li> + {% endfor %} + </ul> + {% endif %} + + {% if recommendations_undergoing_voting %} + <h3>Recommendations undergoing voting <i class="fa fa-exclamation-circle text-warning"></i></h3> + <ul class="fa-ul"> + {% for recommendation in recommendations_undergoing_voting %} + <li>{% include 'partials/submissions/admin/recommendation_tooltip.html' with classes='fa-li' recommendation=recommendation %} + On Editorial Recommendation: {{ recommendation }}<br> + <a href="{% url 'submissions:admin_recommendation' recommendation.submission.arxiv_identifier_w_vn_nr %}">See Editorial Recommendation</a> + </li> + {% endfor %} + </ul> + {% endif %} + </div> {% endif %} + {% endif %} + {% if assignments_to_consider or recs_to_vote_on %} {% if assignments_to_consider %} <h3>Your open Assignment Requests <i class="fa fa-exclamation-circle text-warning"></i></h3> <ul> @@ -48,43 +79,47 @@ {% endfor %} </ul> {% endif %} + <hr> + {% endif %} - {% if assignments_to_consider or recs_to_vote_on %} - <hr> - {% endif %} + {% if search_form %} + <h3>Filter by status</h3> + <form method="get" class="auto-submit mb-3"> + {{ search_form|bootstrap:'12,12' }} + </form> + {% endif %} - {% if search_form %} - <h3>Filter by status</h3> - <form method="get" class="auto-submit mb-3"> - {{ search_form|bootstrap:'12,12' }} - </form> - {% endif %} + <ul class="list-unstyled" data-target="active-list"> + <!-- Submissions list --> + {% for sub in submissions_in_pool %} + <li class="p-2{% if sub == submission %} active{% endif %}"> + {% if sub == submission %} + {% include 'partials/submissions/pool/submission_li.html' with submission=sub is_current=1 %} + {% else %} + {% include 'partials/submissions/pool/submission_li.html' with submission=sub is_current=0 %} + {% endif %} + </li> + {% empty %} + <li> + <h3 class="text-center"><i class="fa fa-question fa-2x"></i><br>No Submissions found.</h3> + </li> + {% endfor %} + </ul> + </div><!-- End page content --> - <ul class="list-unstyled" data-target="active-list"> - <!-- Submissions list --> - {% for sub in submissions_in_pool %} - <li class="p-2{% if sub == submission %} active{% endif %}"> - {% if sub == submission %} - {% include 'partials/submissions/pool/submission_li.html' with submission=sub is_current=1 %} - {% else %} - {% include 'partials/submissions/pool/submission_li.html' with submission=sub is_current=0 %} - {% endif %} - </li> - {% empty %} - <li> - <h3 class="text-center"><i class="fa fa-question fa-2x"></i><br>No Submissions found.</h3> - </li> - {% endfor %} - </ul> - </div><!-- End page content --> + <div class="col-md-5" id="details"> + {% if submission %} + {% include 'partials/submissions/pool/submission_details.html' with submission=submission remark_form=remark_form is_ECAdmin=is_ECAdmin user=request.user %} + {% else %} + <h3><em>Click on a submission to see its summary and actions</em></h3> - <div class="col-md-5" id="details"> - {% if submission %} - {% include 'partials/submissions/pool/submission_details.html' with submission=submission remark_form=remark_form is_ECAdmin=is_ECAdmin user=request.user %} - {% else %} - <h3><em>Click on a submission to see its summary and actions</em></h3> + {% if is_ECAdmin %} + <h2>All events in the last 24 hours</h2> + <div id="eventslist"> + {% include 'submissions/submission_event_list_general.html' with events=latest_events %} + </div> {% endif %} - </div> + {% endif %} </div> - {% endwith %} + </div> {% endblock %} diff --git a/submissions/templates/submissions/submission_event_list.html b/submissions/templates/submissions/submission_event_list.html index 01e3d1b2dad54dc98a151d7ca30b49035114e786..8194ea235122e48368e462ea0a23b32b21cadc72 100644 --- a/submissions/templates/submissions/submission_event_list.html +++ b/submissions/templates/submissions/submission_event_list.html @@ -3,9 +3,9 @@ <ul class="list-group list-group-flush events-list"> {% for event in events %} <li class="list-group-item"> - <div> - {{event.text}}<br> - <span class="text-muted">{{event.created}}</span> + <div class="d-flex flex-nowrap justify-content-start"> + <div class="time text-muted pr-2">{{event.created}}</div> + <div class="content">{{event.text}}</div> </div> </li> {% empty %} diff --git a/submissions/templates/submissions/submission_event_list_general.html b/submissions/templates/submissions/submission_event_list_general.html index a9d0b0d84d32f1fbf8845d4150b2e441d230c82a..d129c7591cd5a06e0ce51a9af010231902b2b567 100644 --- a/submissions/templates/submissions/submission_event_list_general.html +++ b/submissions/templates/submissions/submission_event_list_general.html @@ -3,10 +3,12 @@ <ul class="list-group list-group-flush events-list"> {% for event in events %} <li class="list-group-item"> - <div> - <strong>{{event.text}}</strong><br> - Submission: <a href="{{event.submission.get_absolute_url}}">{{event.submission.title}} ({{event.submission.arxiv_identifier_w_vn_nr}})</a><br> - <span class="text-muted">{{event.created}}</span> + <div class="d-flex flex-nowrap justify-content-start"> + <div class="time text-muted pr-2">{{event.created}}</div> + <div class="content"> + <strong>{{event.text}}</strong><br> + Submission: <a href="{{event.submission.get_absolute_url}}">{{event.submission.title}} ({{event.submission.arxiv_identifier_w_vn_nr}})</a><br> + </div> </div> </li> {% empty %} diff --git a/submissions/templates/submissions/treated_submissions_list.html b/submissions/templates/submissions/treated_submissions_list.html index c9b167bd9832f074302c794376cfd497b0413f2c..00834954245222b0030dd6d5a5a9736eb669af00 100644 --- a/submissions/templates/submissions/treated_submissions_list.html +++ b/submissions/templates/submissions/treated_submissions_list.html @@ -1,7 +1,7 @@ {% extends 'scipost/_personal_page_base.html' %} {% block breadcrumb_items %} - {{block.super}} + {{ block.super }} <span class="breadcrumb-item">Treated Submissions</span> {% endblock %} diff --git a/submissions/urls.py b/submissions/urls.py index 6cd83e4ec6d855ebde05931aa76a0cafb7b863b5..2b9232e49bee589d62af54a5cb7668bc139f6553 100644 --- a/submissions/urls.py +++ b/submissions/urls.py @@ -25,9 +25,6 @@ urlpatterns = [ views.submission_refereeing_package_pdf, name='refereeing_package_pdf'), # Editorial Administration - url(r'^admin$', views.EditorialSummaryView.as_view(), name='admin'), - url(r'^admin/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.EditorialSummaryView.as_view(), name='admin'), url(r'^admin/treated$', views.treated_submissions_list, name='treated_submissions_list'), url(r'^admin/{regex}/reports/compile$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), views.treated_submission_pdf_compile, name='treated_submission_pdf_compile'), diff --git a/submissions/views.py b/submissions/views.py index a5c852c5544512e2d70ce4acaffb71930ab4797b..4ed908994533cbb79abac583505dd98ebc204d4c 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -360,6 +360,7 @@ def pool(request, arxiv_identifier_w_vn_nr=None): .exclude(submission__status__in=SUBMISSION_STATUS_VOTING_DEPRECATED)) rec_vote_form = RecommendationVoteForm() remark_form = RemarkForm() + context = { 'submissions_in_pool': submissions_in_pool, 'submission_status': SUBMISSION_STATUS, @@ -391,8 +392,12 @@ def pool(request, arxiv_identifier_w_vn_nr=None): except Submission.DoesNotExist: pass + # EdColAdmin related variables + if request.user.contributor.is_EdCol_Admin(): + context['latest_events'] = SubmissionEvent.objects.for_eic().last_hours() + # Temporary test logic: only testers see the new Pool - if context['submission'] and request.GET.get('json'): + if context['submission'] and request.is_ajax(): template = 'partials/submissions/pool/submission_details.html' elif is_tester(request.user) and not request.GET.get('test'): template = 'submissions/pool/pool.html' @@ -1541,43 +1546,6 @@ class EICRecommendationView(SubmissionAdminViewMixin, DetailView): return ctx -class EditorialSummaryView(SubmissionAdminViewMixin, ListView): - """ - Show all submission currently active in a refereeing process. - In addition show all EIC events of the last 24 hours. - """ - permission_required = 'scipost.can_oversee_refereeing' - template_name = 'submissions/admin/editorial_admin.html' - - def get_context_data(self, *args, **kwargs): - context = super().get_context_data(*args, **kwargs) - - # Pick submission from `submission_list` to include proper filters such as author filters. - if self.kwargs.get('arxiv_identifier_w_vn_nr'): - try: - context['submission'] = context['submission_list'].get( - arxiv_identifier_w_vn_nr=self.kwargs['arxiv_identifier_w_vn_nr']) - except Submission.DoesNotExist: - context['submission'] = None - - if not context.get('submission'): - context['latest_events'] = SubmissionEvent.objects.for_eic().last_hours() - - context['recommendations_undergoing_voting'] = ( - EICRecommendation.objects.get_for_user_in_pool(self.request.user) - .filter(submission__status='put_to_EC_voting')) - context['recommendations_to_prepare_for_voting'] = ( - EICRecommendation.objects.get_for_user_in_pool(self.request.user) - .filter(submission__status='voting_in_preparation')) - return context - - def get_template_names(self): - if self.request.GET.get('json'): - return ['partials/submissions/admin/submission_details.html'] - else: - return ['submissions/admin/editorial_admin.html'] - - class PlagiarismView(SubmissionAdminViewMixin, UpdateView): permission_required = 'scipost.can_do_plagiarism_checks' template_name = 'submissions/admin/plagiarism_report.html'