SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 54c655f0 authored by Jorran de Wit's avatar Jorran de Wit
Browse files

Comment vetting is made possible for the EIC

parent 5482722f
No related branches found
No related tags found
No related merge requests found
from django.contrib import admin from django.contrib import admin
from guardian.admin import GuardedModelAdmin
from .constants import STATUS_VETTED from .constants import STATUS_VETTED
from .models import Comment from .models import Comment
...@@ -13,7 +15,7 @@ def comment_is_vetted(comment): ...@@ -13,7 +15,7 @@ def comment_is_vetted(comment):
return comment.status is STATUS_VETTED return comment.status is STATUS_VETTED
class CommentAdmin(admin.ModelAdmin): class CommentAdmin(GuardedModelAdmin):
list_display = (comment_opening, 'author', 'date_submitted', comment_is_vetted) list_display = (comment_opening, 'author', 'date_submitted', comment_is_vetted)
date_hierarchy = 'date_submitted' date_hierarchy = 'date_submitted'
list_filter = ('status',) list_filter = ('status',)
......
...@@ -3,7 +3,7 @@ from django.db import models ...@@ -3,7 +3,7 @@ from django.db import models
from .constants import STATUS_PENDING from .constants import STATUS_PENDING
class CommentManager(models.Manager): class CommentManager(models.QuerySet):
def vetted(self): def vetted(self):
return self.filter(status__gte=1) return self.filter(status__gte=1)
......
...@@ -61,7 +61,7 @@ class Comment(TimeStampedModel): ...@@ -61,7 +61,7 @@ class Comment(TimeStampedModel):
in_disagreement = models.ManyToManyField('scipost.Contributor', related_name='in_disagreement', in_disagreement = models.ManyToManyField('scipost.Contributor', related_name='in_disagreement',
blank=True) blank=True)
objects = CommentManager() objects = CommentManager.as_manager()
class Meta: class Meta:
permissions = ( permissions = (
......
{% load bootstrap %}
{% load filename %}
{% load file_extentions %}
<div class="card card-vetting">
<div class="card-header">
{% if comment.commentary %}
<h2>From Commentary (<a href="{{comment.commentary.get_absolute_url}}">link</a>)</h2>
{% include 'commentaries/_commentary_summary.html' with commentary=comment.commentary %}
{% endif %}
{% if comment.submission %}
<h2>From Submission (<a href="{{comment.submission.get_absolute_url}}">link</a>)</h2>
{% include 'submissions/_submission_summary_short.html' with submission=comment.submission %}
{% endif %}
{% if comment.thesislink %}
<h2>From Thesis Link (<a href="{{comment.thesislink.get_absolute_url}}">link</a>)</h2>
{% include 'theses/_thesislink_information.html' with thesislink=comment.thesislink %}
{% endif %}
</div>
<div class="card-block">
<h2 class="card-title">The Comment to be vetted:</h2>
<div class="row">
<div class="col-md-6">
{% include 'comments/_comment_identifier_vetting.html' with comment=comment %}
<hr class="small">
<h3>Comment text:</h3>
<p>{{ comment.comment_text }}</p>
{% if comment.file_attachment %}
<h3>Attachment:</h3>
<p>
<a target="_blank" href="{{ comment.file_attachment.url }}">
{% if comment.file_attachment|is_image %}
<img class="attachment attachment-comment" src="{{ comment.file_attachment.url }}">
{% else %}
{{ comment.file_attachment|filename }}<br><small>{{ comment.file_attachment.size|filesizeformat }}</small>
{% endif %}
</a>
</p>
{% endif %}
{% if comment.remarks_for_editors %}
<h3>Remarks for Editors only:</h3>
<p>{{ comment.remarks_for_editors }}</p>
{% endif %}
</div>
<div class="col-md-6">
<form action="{% url 'comments:vet_submitted_comment' comment_id=comment.id %}" method="post">
{% csrf_token %}
{{ form|bootstrap }}
<input class="btn btn-primary" type="submit" value="Submit" />
</form>
</div>
</div>
</div>
</div>
{% extends 'scipost/base.html' %}
{% load bootstrap %}
{% load filename %}
{% load file_extentions %}
{% block pagetitle %}: vet comments{% endblock pagetitle %}
{% block content %}
<div class="row">
<div class="col-12">
<h1 class="highlight">SciPost Comment to vet:</h1>
</div>
</div>
{% include 'comments/_vet_comment_form.html' with comment=comment form=form %}
{% endblock content %}
{% extends 'scipost/base.html' %}
{% load bootstrap %}
{% load filename %}
{% load file_extentions %}
{% block pagetitle %}: vet comments{% endblock pagetitle %}
{% block content %}
{% if not comments_to_vet %}
<div class="row">
<div class="col-12">
<h1 class="highlight">There are no comments for you to vet.</h1>
</div>
</div>
{% else %}
<div class="row">
<div class="col-12">
<h1 class="highlight">SciPost Comments to vet:</h1>
</div>
</div>
<div class="row">
<div class="col-12">
{% for comment_to_vet in comments_to_vet %}
<div class="card card-vetting">
<div class="card-header">
{% if comment_to_vet.commentary %}
<h2>From Commentary (<a href="{% url 'commentaries:commentary' arxiv_or_DOI_string=comment_to_vet.commentary.arxiv_or_DOI_string %}">link</a>)</h2>
{% include 'commentaries/_commentary_summary.html' with commentary=comment_to_vet.commentary %}
{% endif %}
{% if comment_to_vet.submission %}
<h2>From Submission (<a href="{% url 'submissions:submission' arxiv_identifier_w_vn_nr=comment_to_vet.submission.arxiv_identifier_w_vn_nr %}">link</a>)</h2>
{% include 'submissions/_submission_summary_short.html' with submission=comment_to_vet.submission %}
{% endif %}
{% if comment_to_vet.thesislink %}
<h2>From Thesis Link (<a href="{% url 'theses:thesis' comment_to_vet.thesislink.id %}">link</a>)</h2>
{% include 'theses/_thesislink_information.html' with thesislink=comment_to_vet.thesislink %}
{% endif %}
</div>
<div class="card-block">
<h2 class="card-title">The Comment to be vetted:</h2>
<div class="row">
<div class="col-md-6">
{% include 'comments/_comment_identifier_vetting.html' with comment=comment_to_vet %}
<hr class="small">
<h3>Comment text:</h3>
<p>{{ comment_to_vet.comment_text }}</p>
{% if comment_to_vet.file_attachment %}
<h3>Attachment:</h3>
<p>
<a target="_blank" href="{{ comment_to_vet.file_attachment.url }}">
{% if comment_to_vet.file_attachment|is_image %}
<img class="attachment attachment-comment" src="{{ comment_to_vet.file_attachment.url }}">
{% else %}
{{ comment_to_vet.file_attachment|filename }}<br><small>{{ comment_to_vet.file_attachment.size|filesizeformat }}</small>
{% endif %}
</a>
</p>
{% endif %}
{% if comment_to_vet.remarks_for_editors %}
<h3>Remarks for Editors only:</h3>
<p>{{ comment_to_vet.remarks_for_editors }}</p>
{% endif %}
</div>
<div class="col-md-6">
<form action="{% url 'comments:vet_submitted_comment_ack' comment_id=comment_to_vet.id %}" method="post">
{% csrf_token %}
{{ form|bootstrap }}
<input class="btn btn-primary" type="submit" value="Submit" />
</form>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endif %}
{% endblock content %}
{% extends 'scipost/base.html' %}
{% block pagetitle %}: vet comments{% endblock pagetitle %}
{% block content %}
{% if not comments_to_vet %}
<div class="row">
<div class="col-12">
<h1 class="highlight">There are no comments for you to vet.</h1>
</div>
</div>
{% else %}
<div class="row">
<div class="col-12">
<h1 class="highlight">SciPost Comments to vet:</h1>
</div>
</div>
<div class="row">
<div class="col-12">
{% for comment_to_vet in comments_to_vet %}
{% include 'comments/_vet_comment_form.html' with comment=comment_to_vet form=form %}
{% endfor %}
</div>
</div>
{% endif %}
{% endblock content %}
...@@ -4,11 +4,15 @@ from . import views ...@@ -4,11 +4,15 @@ from . import views
urlpatterns = [ urlpatterns = [
# Comments # Comments
url(r'^reply_to_comment/(?P<comment_id>[0-9]+)$', views.reply_to_comment, name='reply_to_comment'), url(r'^reports/(?P<report_id>[0-9]+)/reply$', views.reply_to_report, name='reply_to_report'),
url(r'^reply_to_report/(?P<report_id>[0-9]+)$', views.reply_to_report, name='reply_to_report'), url(r'^vet_submitted$', views.vet_submitted_comments_list, name='vet_submitted_comments_list'),
url(r'^vet_submitted_comments$', views.vet_submitted_comments, name='vet_submitted_comments'), url(r'^new/(?P<type_of_object>[a-z]+)/(?P<object_id>[0-9]+)$', views.new_comment,
url(r'^vet_submitted_comment_ack/(?P<comment_id>[0-9]+)$', views.vet_submitted_comment_ack, name='vet_submitted_comment_ack'), name='new_comment'),
url(r'^express_opinion/(?P<comment_id>[0-9]+)$', views.express_opinion, name='express_opinion'), url(r'^(?P<comment_id>[0-9]+)/reply$', views.reply_to_comment, name='reply_to_comment'),
url(r'^express_opinion/(?P<comment_id>[0-9]+)/(?P<opinion>[AND])$', views.express_opinion, name='express_opinion'), url(r'^(?P<comment_id>[0-9]+)/vet$', views.vet_submitted_comment,
url(r'^new_comment/(?P<type_of_object>[a-z]+)/(?P<object_id>[0-9]+)$', views.new_comment, name='new_comment') name='vet_submitted_comment'),
url(r'^(?P<comment_id>[0-9]+)/express_opinion$', views.express_opinion,
name='express_opinion'),
url(r'^(?P<comment_id>[0-9]+)/express_opinion/(?P<opinion>[AND])$', views.express_opinion,
name='express_opinion'),
] ]
from django.utils import timezone from django.utils import timezone
from django.shortcuts import get_object_or_404, render, redirect from django.shortcuts import get_object_or_404, render, redirect
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required, login_required
from django.contrib import messages from django.contrib import messages
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.db import transaction
from guardian.shortcuts import assign_perm, get_objects_for_user
import strings import strings
from .models import Comment from .models import Comment
...@@ -30,122 +32,139 @@ def new_comment(request, **kwargs): ...@@ -30,122 +32,139 @@ def new_comment(request, **kwargs):
if type_of_object == "thesislink": if type_of_object == "thesislink":
_object = get_object_or_404(ThesisLink.objects.open_for_commenting(), id=object_id) _object = get_object_or_404(ThesisLink.objects.open_for_commenting(), id=object_id)
new_comment.thesislink = _object new_comment.thesislink = _object
new_comment.save()
elif type_of_object == "submission": elif type_of_object == "submission":
_object = get_object_or_404(Submission.objects.open_for_commenting(), id=object_id) _object = get_object_or_404(Submission.objects.open_for_commenting(), id=object_id)
new_comment.submission = _object new_comment.submission = _object
new_comment.submission.add_event_for_eic('A new comment has been added.') new_comment.save()
_object.add_event_for_eic('A new comment has been added.')
# Add permissions for EIC only, the Vetting-group already has it!
assign_perm('comments.can_vet_comments', _object.editor_in_charge.user, new_comment)
elif type_of_object == "commentary": elif type_of_object == "commentary":
_object = get_object_or_404(Commentary.objects.open_for_commenting(), id=object_id) _object = get_object_or_404(Commentary.objects.open_for_commenting(), id=object_id)
new_comment.commentary = _object new_comment.commentary = _object
new_comment.save()
new_comment.save()
messages.success(request, strings.acknowledge_submit_comment) messages.success(request, strings.acknowledge_submit_comment)
return redirect(_object.get_absolute_url()) return redirect(_object.get_absolute_url())
@permission_required('scipost.can_vet_comments', raise_exception=True) @permission_required('scipost.can_vet_comments', raise_exception=True)
def vet_submitted_comments(request): def vet_submitted_comments_list(request):
comments_to_vet = Comment.objects.awaiting_vetting().order_by('date_submitted') comments_to_vet = Comment.objects.awaiting_vetting().order_by('date_submitted')
form = VetCommentForm() form = VetCommentForm()
context = {'comments_to_vet': comments_to_vet, 'form': form} context = {'comments_to_vet': comments_to_vet, 'form': form}
return(render(request, 'comments/vet_submitted_comments.html', context)) return(render(request, 'comments/vet_submitted_comments_list.html', context))
@permission_required('scipost.can_vet_comments', raise_exception=True) @login_required
def vet_submitted_comment_ack(request, comment_id): @transaction.atomic
if request.method == 'POST': def vet_submitted_comment(request, comment_id):
form = VetCommentForm(request.POST) # Method `get_objects_for_user` gets all Comments that are assigned to the user
comment = Comment.objects.get(pk=comment_id) # or *all* comments if user has the `scipost.can_vet_comments` permission.
if form.is_valid(): comment = get_object_or_404((get_objects_for_user(request.user, 'comments.can_vet_comments')
if form.cleaned_data['action_option'] == '1': .awaiting_vetting()),
# accept the comment as is id=comment_id)
comment.status = 1 form = VetCommentForm(request.POST or None)
comment.vetted_by = request.user.contributor if form.is_valid():
comment.save() if form.cleaned_data['action_option'] == '1':
# accept the comment as is
new_comment.submission.add_event_for_eic('A Comment has been accepted.') comment.status = 1
new_comment.submission.add_event_for_author('A new comment has been added.') comment.vetted_by = request.user.contributor
comment.save()
email_text = ('Dear ' + comment.author.get_title_display() + ' '
+ comment.author.user.last_name + comment.submission.add_event_for_eic('A Comment has been accepted.')
', \n\nThe Comment you have submitted, ' comment.submission.add_event_for_author('A new Comment has been added.')
'concerning publication with title ')
if comment.commentary is not None: email_text = ('Dear ' + comment.author.get_title_display() + ' '
email_text += (comment.commentary.pub_title + ' by ' + comment.author.user.last_name +
+ comment.commentary.author_list ', \n\nThe Comment you have submitted, '
+ ' at Commentary Page https://scipost.org/commentary/' 'concerning publication with title ')
+ comment.commentary.arxiv_or_DOI_string) if comment.commentary is not None:
comment.commentary.latest_activity = timezone.now() email_text += (comment.commentary.pub_title + ' by '
comment.commentary.save() + comment.commentary.author_list
elif comment.submission is not None: + ' at Commentary Page https://scipost.org/commentary/'
email_text += (comment.submission.title + ' by ' + comment.commentary.arxiv_or_DOI_string)
+ comment.submission.author_list comment.commentary.latest_activity = timezone.now()
+ ' at Submission page https://scipost.org/submission/' comment.commentary.save()
+ comment.submission.arxiv_identifier_w_vn_nr) elif comment.submission is not None:
comment.submission.latest_activity = timezone.now() email_text += (comment.submission.title + ' by '
comment.submission.save() + comment.submission.author_list
if not comment.is_author_reply: + ' at Submission page https://scipost.org/submission/'
SubmissionUtils.load({'submission': comment.submission}) + comment.submission.arxiv_identifier_w_vn_nr)
SubmissionUtils.send_author_comment_received_email() comment.submission.latest_activity = timezone.now()
elif comment.thesislink is not None: comment.submission.save()
email_text += (comment.thesislink.title + ' by ' + comment.thesislink.author + if not comment.is_author_reply:
' at Thesis Link https://scipost.org/thesis/' SubmissionUtils.load({'submission': comment.submission})
+ str(comment.thesislink.id)) SubmissionUtils.send_author_comment_received_email()
comment.thesislink.latest_activity = timezone.now() elif comment.thesislink is not None:
comment.thesislink.save() email_text += (comment.thesislink.title + ' by ' + comment.thesislink.author +
email_text += (', has been accepted and published online.' + ' at Thesis Link https://scipost.org/thesis/'
'\n\nWe copy it below for your convenience.' + + str(comment.thesislink.id))
'\n\nThank you for your contribution, \nThe SciPost Team.' + comment.thesislink.latest_activity = timezone.now()
'\n\n' + comment.comment_text) comment.thesislink.save()
emailmessage = EmailMessage('SciPost Comment published', email_text, email_text += (', has been accepted and published online.' +
'comments@scipost.org', '\n\nWe copy it below for your convenience.' +
[comment.author.user.email], '\n\nThank you for your contribution, \nThe SciPost Team.' +
['comments@scipost.org'], '\n\n' + comment.comment_text)
reply_to=['comments@scipost.org']) emailmessage = EmailMessage('SciPost Comment published', email_text,
emailmessage.send(fail_silently=False) 'comments@scipost.org',
elif form.cleaned_data['action_option'] == '2': [comment.author.user.email],
# the comment request is simply rejected ['comments@scipost.org'],
comment.status = int(form.cleaned_data['refusal_reason']) reply_to=['comments@scipost.org'])
if comment.status == 0: emailmessage.send(fail_silently=False)
comment.status == -1 elif form.cleaned_data['action_option'] == '2':
comment.save() # the comment request is simply rejected
comment.status = int(form.cleaned_data['refusal_reason'])
new_comment.submission.add_event_for_eic('A Comment has been rejected.') if comment.status == 0:
comment.status == -1
email_text = ('Dear ' + comment.author.get_title_display() + ' ' comment.save()
+ comment.author.user.last_name
+ ', \n\nThe Comment you have submitted, ' comment.submission.add_event_for_eic('A Comment has been rejected.')
'concerning publication with title ')
if comment.commentary is not None: email_text = ('Dear ' + comment.author.get_title_display() + ' '
email_text += comment.commentary.pub_title + ' by ' +\ + comment.author.user.last_name
comment.commentary.author_list + ', \n\nThe Comment you have submitted, '
elif comment.submission is not None: 'concerning publication with title ')
email_text += comment.submission.title + ' by ' +\ if comment.commentary is not None:
comment.submission.author_list email_text += comment.commentary.pub_title + ' by ' +\
elif comment.thesislink is not None: comment.commentary.author_list
email_text += comment.thesislink.title + ' by ' + comment.thesislink.author elif comment.submission is not None:
email_text += (', has been rejected for the following reason: ' email_text += comment.submission.title + ' by ' +\
+ comment.get_status_display() + '.' + comment.submission.author_list
'\n\nWe copy it below for your convenience.' + elif comment.thesislink is not None:
'\n\nThank you for your contribution, \n\nThe SciPost Team.') email_text += comment.thesislink.title + ' by ' + comment.thesislink.author
if form.cleaned_data['email_response_field']: email_text += (', has been rejected for the following reason: '
email_text += '\n\nFurther explanations: ' +\ + comment.get_status_display() + '.' +
form.cleaned_data['email_response_field'] '\n\nWe copy it below for your convenience.' +
email_text += '\n\n' + comment.comment_text '\n\nThank you for your contribution, \n\nThe SciPost Team.')
emailmessage = EmailMessage('SciPost Comment rejected', email_text, if form.cleaned_data['email_response_field']:
'comments@scipost.org', email_text += '\n\nFurther explanations: ' +\
[comment.author.user.email], form.cleaned_data['email_response_field']
['comments@scipost.org'], email_text += '\n\n' + comment.comment_text
reply_to=['comments@scipost.org']) emailmessage = EmailMessage('SciPost Comment rejected', email_text,
emailmessage.send(fail_silently=False) 'comments@scipost.org',
[comment.author.user.email],
# context = {} ['comments@scipost.org'],
# return render(request, 'comments/vet_submitted_comment_ack.html', context) reply_to=['comments@scipost.org'])
context = {'ack_header': 'Submitted Comment vetted.', emailmessage.send(fail_silently=False)
'followup_message': 'Back to ',
'followup_link': reverse('comments:vet_submitted_comments'), messages.success(request, 'Submitted Comment vetted.')
'followup_link_label': 'submitted Comments page'} if comment.submission and comment.submission.editor_in_charge == request.user.contributor:
return render(request, 'scipost/acknowledgement.html', context) # Redirect a EIC back to the Editorial Page!
return redirect(reverse('submissions:editorial_page',
args=(comment.submission.arxiv_identifier_w_vn_nr,)))
elif request.user.has_perm('scipost.can_vet_comments'):
# Redirect vetters back to check for other unvetted comments!
return redirect(reverse('comments:vet_submitted_comments_list'))
return redirect(comment.get_absolute_url())
context = {
'comment': comment,
'form': form
}
return(render(request, 'comments/vet_submitted_comment.html', context))
@permission_required('scipost.can_submit_comments', raise_exception=True) @permission_required('scipost.can_submit_comments', raise_exception=True)
......
from django.db import models
from django.core.urlresolvers import reverse
from staff.behaviors import WhiteLabelClientMixin, TimeStampedMixin
from .managers import LocationManager
class Location(WhiteLabelClientMixin):
"""
Physical location to be related to WCLs.
"""
code = models.CharField(max_length=64)
client = models.ForeignKey('clients.Client', related_name='locations', blank=True, null=True)
subtitle = models.CharField(max_length=128, blank=True)
address = models.CharField(max_length=512)
postal_code = models.CharField(max_length=512, blank=True)
main_phone = models.CharField(max_length=32, blank=True)
city = models.CharField(max_length=512, blank=True)
description = models.TextField(blank=True)
objects = LocationManager()
class Meta:
unique_together = ('white_label_client', 'code',)
ordering = ('-code',)
def __str__(self):
return '%s, %s' % (self.address, self.city)
def get_absolute_url(self):
return reverse('locations:detailview', args=(self.code,))
def get_edit_url(self):
return reverse('locations:editview', args=(self.code,))
class GeoLocation(TimeStampedMixin):
"""
Geocode which links `Location` objects to the 2D map.
"""
location = models.OneToOneField('locations.Location')
latitude = models.CharField(max_length=64)
longitude = models.CharField(max_length=64)
class LocationObject(TimeStampedMixin):
"""
An physical object can be assigned to a `Location` object.
"""
location = models.ForeignKey('locations.Location', related_name='location_objects')
code = models.CharField(max_length=64, blank=True)
name = models.CharField(max_length=255)
description = models.TextField(blank=True)
def __str__(self):
_str = self.name
if self.code:
_str += ' (%s)' % self.code
return _str
...@@ -250,7 +250,7 @@ ...@@ -250,7 +250,7 @@
<li><a href="{% url 'commentaries:vet_commentary_requests' %}">Vet Commentary Page requests</a> ({{ nr_commentary_page_requests_to_vet }})</li> <li><a href="{% url 'commentaries:vet_commentary_requests' %}">Vet Commentary Page requests</a> ({{ nr_commentary_page_requests_to_vet }})</li>
{% endif %} {% endif %}
{% if perms.scipost.can_vet_comments %} {% if perms.scipost.can_vet_comments %}
<li><a href="{% url 'comments:vet_submitted_comments' %}">Vet submitted Comments</a> ({{ nr_comments_to_vet }})</li> <li><a href="{% url 'comments:vet_submitted_comments_list' %}">Vet submitted Comments</a> ({{ nr_comments_to_vet }})</li>
{% endif %} {% endif %}
{% if perms.scipost.can_vet_thesislink_requests %} {% if perms.scipost.can_vet_thesislink_requests %}
<li><a href="{% url 'theses:unvetted_thesislinks' %}">Vet Thesis Link Requests</a> ({{ nr_thesislink_requests_to_vet }})</li> <li><a href="{% url 'theses:unvetted_thesislinks' %}">Vet Thesis Link Requests</a> ({{ nr_thesislink_requests_to_vet }})</li>
......
...@@ -171,6 +171,20 @@ ...@@ -171,6 +171,20 @@
</form> </form>
</li> </li>
<li><a href="{% url 'submissions:vet_submitted_reports' %}">Vet submitted Reports</a> ({{ submission.reports.awaiting_vetting.count }})</li> <li><a href="{% url 'submissions:vet_submitted_reports' %}">Vet submitted Reports</a> ({{ submission.reports.awaiting_vetting.count }})</li>
{% with submission.comments.awaiting_vetting as comments %}
{% if comments %}
<li>
Vet submitted Comments:
<ul class="mb-1">
{% for comment in comments %}
<li><a href="{% url 'comments:vet_submitted_comment' comment.id %}">{{comment}}</a></li>
{% endfor %}
</ul>
</li>
{% else %}
<li>All Comments have been vetted.</li>
{% endif %}
{% endwith %}
{% if not submission.reporting_deadline_has_passed %} {% if not submission.reporting_deadline_has_passed %}
<li><a href="{% url 'submissions:close_refereeing_round' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr %}">Close the refereeing round</a> &nbsp;(deactivates submission of new Reports and Comments)</li> <li><a href="{% url 'submissions:close_refereeing_round' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr %}">Close the refereeing round</a> &nbsp;(deactivates submission of new Reports and Comments)</li>
{% endif %} {% endif %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment