From b6a0fa4ddbcc27bba71e2ccf175bcd07d6374d9c Mon Sep 17 00:00:00 2001 From: "J.-S. Caux" <J.S.Caux@uva.nl> Date: Mon, 21 Dec 2015 13:47:25 +0100 Subject: [PATCH] General overhaul. Introduced Categories for Comments. --- commentaries/migrations/0001_initial.py | 15 +- commentaries/models.py | 3 +- .../commentaries/commentary_detail.html | 76 ++++++++-- commentaries/views.py | 12 +- comments/forms.py | 9 ++ comments/migrations/0001_initial.py | 28 ++-- comments/models.py | 28 ++++ comments/views.py | 40 ++++- contributors/migrations/0001_initial.py | 47 +++--- .../migrations/0002_auto_20151212_2020.py | 86 ----------- .../templates/contributors/login.html | 29 ++-- .../templates/contributors/personal_page.html | 42 +++--- contributors/views.py | 2 +- journals/templates/journals/journals.html | 98 ++++++------ ratings/migrations/0001_initial.py | 68 ++++----- ratings/migrations/0002_auto_20151215_0748.py | 139 ------------------ reports/migrations/0001_initial.py | 18 +-- scipost/static/scipost/SciPost.css | 17 +++ scipost/templates/scipost/index.html | 6 +- submissions/migrations/0001_initial.py | 22 +-- submissions/models.py | 2 +- .../submissions/submission_detail.html | 28 ++-- 22 files changed, 393 insertions(+), 422 deletions(-) delete mode 100644 contributors/migrations/0002_auto_20151212_2020.py delete mode 100644 ratings/migrations/0002_auto_20151215_0748.py diff --git a/commentaries/migrations/0001_initial.py b/commentaries/migrations/0001_initial.py index f149c3a83..1ecadfa89 100644 --- a/commentaries/migrations/0001_initial.py +++ b/commentaries/migrations/0001_initial.py @@ -15,7 +15,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Commentary', fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), + ('id', models.AutoField(serialize=False, primary_key=True, verbose_name='ID', auto_created=True)), ('vetted', models.BooleanField(default=False)), ('type', models.CharField(max_length=9)), ('open_for_commenting', models.BooleanField(default=True)), @@ -26,17 +26,18 @@ class Migration(migrations.Migration): ('pub_date', models.DateField(verbose_name='date of original publication')), ('pub_abstract', models.TextField()), ('nr_clarity_ratings', models.IntegerField(default=0)), - ('clarity_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('clarity_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_validity_ratings', models.IntegerField(default=0)), - ('validity_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('validity_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_rigour_ratings', models.IntegerField(default=0)), - ('rigour_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('rigour_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_originality_ratings', models.IntegerField(default=0)), - ('originality_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('originality_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_significance_ratings', models.IntegerField(default=0)), - ('significance_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('significance_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('latest_activity', models.DateTimeField(default=django.utils.timezone.now)), - ('authors', models.ManyToManyField(related_name='authors_com', blank=True, null=True, to='contributors.Contributor')), + ('authors', models.ManyToManyField(related_name='authors_com', blank=True, to='contributors.Contributor')), + ('requested_by', models.ForeignKey(null=True, related_name='requested_by', blank=True, to='contributors.Contributor')), ('vetted_by', models.ForeignKey(null=True, to='contributors.Contributor', blank=True)), ], ), diff --git a/commentaries/models.py b/commentaries/models.py index 59340acc5..e842d6236 100644 --- a/commentaries/models.py +++ b/commentaries/models.py @@ -13,6 +13,7 @@ COMMENTARY_TYPES = ( class Commentary(models.Model): """ A Commentary contains all the contents of a SciPost Commentary page for a given publication. """ + requested_by = models.ForeignKey (Contributor, blank=True, null=True, related_name='requested_by') vetted = models.BooleanField(default=False) vetted_by = models.ForeignKey (Contributor, blank=True, null=True) type = models.CharField(max_length=9) # published paper or arxiv preprint @@ -22,7 +23,7 @@ class Commentary(models.Model): pub_DOI_link = models.URLField(verbose_name='DOI link to the original publication') author_list = models.CharField(max_length=1000) # Authors which have been mapped to contributors: - authors = models.ManyToManyField (Contributor, blank=True, null=True, related_name='authors_com') + authors = models.ManyToManyField (Contributor, blank=True, related_name='authors_com') pub_date = models.DateField(verbose_name='date of original publication') pub_abstract = models.TextField() diff --git a/commentaries/templates/commentaries/commentary_detail.html b/commentaries/templates/commentaries/commentary_detail.html index 6180f0126..b88660554 100644 --- a/commentaries/templates/commentaries/commentary_detail.html +++ b/commentaries/templates/commentaries/commentary_detail.html @@ -12,6 +12,9 @@ $("#commentsbutton").click(function(){ $("#commentslist").toggle(); }); + $("#ratingsbutton").click(function() { + $(".ratingsdata").toggle(); + }); }); </script> @@ -21,7 +24,15 @@ <section> - <h1>SciPost Commentary Page (for non-SciPost publications)</h1> + <div class="row"> + <div class="col-11"> + <h1>SciPost Commentary Page (for non-SciPost publications)</h1> + </div> + <div class="col-1"> + <br/> + <button id="ratingsbutton">Toggle ratings view</button> + </div> + </div> </section> <section> @@ -54,7 +65,7 @@ <h3>Abstract:</h3> <p>{{ commentary.pub_abstract }}</p> - {% if user.is_authenticated %} + {% if user.is_authenticated and user.contributor.rank > 0 %} <form action="{% url 'ratings:vote_on_commentary' commentary_id=commentary.id %}" method="post" class="ratingsdata"> {% csrf_token %} <ul> @@ -77,8 +88,14 @@ {% if comments %} <section> - <h2>Comments on this publication</h2> - <button id="commentsbutton">Toggle view</button> + <div class="row"> + <div class="col-10"> + <h2>Comments on this publication</h2> + </div> + <div class="col-2"> + <button id="commentsbutton">Toggle comments/ratings view</button> + </div> + </div> <hr> <div id="commentslist"> @@ -91,6 +108,18 @@ </div> <div class="col-8"> + <ul class="commentcategorydisplay"> + <li>Categories:</li> + {% if comment.is_rem %}<li>remark</li>{% endif %} + {% if comment.is_que %}<li>question</li>{% endif %} + {% if comment.is_ans %}<li>answer to question</li>{% endif %} + {% if comment.is_obj %}<li>objection</li>{% endif %} + {% if comment.is_rep %}<li>reply to objection</li>{% endif %} + {% if comment.is_val %}<li>validation or rederivation</li>{% endif %} + {% if comment.is_lit %}<li>pointer to related literature</li>{% endif %} + {% if comment.is_sug %}<li>suggestion for further work</li>{% endif %} + </ul> + <br/><br/> <ul class="ratingsdata"> <li>Ratings: </li> <li>relevance: {{ comment.relevance_rating }}% ({{ comment.nr_relevance_ratings }})</li> @@ -105,11 +134,11 @@ <div class="row"> <!-- <div class="col-1"></div> --> <div class="col-10"> - <p>{{ comment.comment_text }}</p> + <p>{{ comment.comment_text|linebreaks }}</p> </div> </div> - {% if user.is_authenticated %} + {% if user.is_authenticated and user.contributor.rank > 0 %} <div class="row"> <!-- <div class="col-1"></div> --> <div class="col-10"> @@ -148,10 +177,10 @@ <div class="row"> <div class="col-1"></div> <div class="col-10"> - <p>{{ reply.reply_text }}</p> + <p>{{ reply.reply_text|linebreaks }}</p> </div> </div> - {% if user.is_authenticated %} + {% if user.is_authenticated and user.contributor.rank > 0 %} <div class="row"> <div class="col-1"></div> <div class="col-10"> @@ -170,6 +199,7 @@ {% endif %} {% endfor %} + {% if user.is_authenticated and user.contributor.rank > 0 %} <hr style="border-style: dotted;" /> <div class="row"> <div class="col-6"> @@ -180,26 +210,46 @@ </div> </div> <hr> + {% endif %} {% endfor %} </div id="commentslist"> </section> {% endif %} -{% if user.is_authenticated and commentary.open_for_commenting %} +{% if user.is_authenticated and commentary.open_for_commenting and user.contributor.rank > 0 %} <section> <div class="row"> - <div class="col-2"> + <div class="col-3"> <h1>Contribute a Comment</h1> + <p>Specify whick category your comment belongs to (you can choose more than one).</p> + <p>In your comment, you can use LaTeX \$...\$ for in-text equations or \ [ ... \ ] for separate equations.</p> </div> - <div class="col-10"> + <div class="col-9"> <form action="{% url 'commentaries:commentary' commentary.id %}" method="post"> {% csrf_token %} - {{ form }} - <input type="submit" value="Submit your Comment"> + <div class="col-4"> + <ul class="commentcategorychoices"> + <li>{{ form.is_rem }} remark</li> + <li>{{ form.is_que }} question</li> + <li>{{ form.is_ans }} answer to question</li> + <li>{{ form.is_obj }} objection</li> + <li>{{ form.is_rep }} reply to objection</li> + <li>{{ form.is_val }} validation or rederivation</li> + <li>{{ form.is_lit }} pointer to related literature</li> + <li>{{ form.is_sug }} suggestion for further work</li> + </ul> + </div> + <div class="col-1"></div> + <div class="col-7"> + {{ form.comment_text }} + <input type="submit" value="Submit your Comment"> + </div> </form> </div> </div> </section> {% endif %} +<p>{{ debugnote }}</p> + {% include 'scipost/footer.html' %} diff --git a/commentaries/views.py b/commentaries/views.py index 1dbd64d32..9aeb06009 100644 --- a/commentaries/views.py +++ b/commentaries/views.py @@ -31,6 +31,7 @@ def request_commentary(request): if form.is_valid(): contributor = Contributor.objects.get(user=request.user) commentary = Commentary ( + requested_by = contributor, type = form.cleaned_data['type'], pub_title = form.cleaned_data['pub_title'], arxiv_link = form.cleaned_data['arxiv_link'], @@ -133,11 +134,18 @@ def commentary_detail(request, commentary_id): commentary = commentary, in_reply_to = None, author = author, + is_rem = form.cleaned_data['is_rem'], + is_que = form.cleaned_data['is_que'], + is_ans = form.cleaned_data['is_ans'], + is_obj = form.cleaned_data['is_obj'], + is_rep = form.cleaned_data['is_rep'], + is_val = form.cleaned_data['is_val'], + is_lit = form.cleaned_data['is_lit'], + is_sug = form.cleaned_data['is_sug'], comment_text = form.cleaned_data['comment_text'], date_submitted = timezone.now(), ) newcomment.save() -# author.nr_comments += 1 author.nr_comments = Comment.objects.filter(author=author).count() author.save() request.session['commentary_id'] = commentary_id @@ -152,5 +160,5 @@ def commentary_detail(request, commentary_id): author_replies = AuthorReply.objects.filter(commentary=commentary) except AuthorReply.DoesNotExist: author_replies = () - context = {'commentary': commentary, 'comments': comments.filter(status__gte=1).order_by('date_submitted'), 'author_replies': author_replies, 'form': form, 'commentary_rating_form': commentary_rating_form, 'comment_rating_form': comment_rating_form, 'authorreply_rating_form': authorreply_rating_form} + context = {'commentary': commentary, 'comments': comments.filter(status__gte=1).order_by('date_submitted'), 'author_replies': author_replies, 'form': form, 'commentary_rating_form': commentary_rating_form, 'comment_rating_form': comment_rating_form, 'authorreply_rating_form': authorreply_rating_form } return render(request, 'commentaries/commentary_detail.html', context) diff --git a/comments/forms.py b/comments/forms.py index aaf8f0f70..12e89fbed 100644 --- a/comments/forms.py +++ b/comments/forms.py @@ -34,6 +34,15 @@ AUTHOR_REPLY_REFUSAL_CHOICES = ( class CommentForm(forms.Form): +# category = forms.MultipleChoiceField(choices=COMMENT_CATEGORIES, widget=forms.CheckboxSelectMultiple(), label='Please categorize your comment (multiple choices allowed):') + is_rem = forms.BooleanField(required=False, label='remark') + is_que = forms.BooleanField(required=False, label='question') + is_ans = forms.BooleanField(required=False, label='answer to question') + is_obj = forms.BooleanField(required=False, label='objection') + is_rep = forms.BooleanField(required=False, label='reply to objection') + is_val = forms.BooleanField(required=False, label='validation or rederivation') + is_lit = forms.BooleanField(required=False, label='pointer to related literature') + is_sug = forms.BooleanField(required=False, label='suggestions for further work') comment_text = forms.CharField(widget=forms.Textarea(attrs={'rows': 10, 'cols':80}), label='', required=True) # need TextField but doesn't exist class VetCommentForm(forms.Form): diff --git a/comments/migrations/0001_initial.py b/comments/migrations/0001_initial.py index 6e797d0fc..30f9afa2f 100644 --- a/comments/migrations/0001_initial.py +++ b/comments/migrations/0001_initial.py @@ -7,30 +7,30 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ + ('contributors', '0001_initial'), + ('submissions', '0001_initial'), ('reports', '0001_initial'), ('commentaries', '0001_initial'), - ('submissions', '0001_initial'), - ('contributors', '0001_initial'), ] operations = [ migrations.CreateModel( name='AuthorReply', fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), + ('id', models.AutoField(serialize=False, primary_key=True, verbose_name='ID', auto_created=True)), ('status', models.SmallIntegerField(default=0)), ('reply_text', models.TextField()), ('date_submitted', models.DateTimeField(verbose_name='date submitted')), ('nr_relevance_ratings', models.IntegerField(default=0)), - ('relevance_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('relevance_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_importance_ratings', models.IntegerField(default=0)), - ('importance_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('importance_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_clarity_ratings', models.IntegerField(default=0)), - ('clarity_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('clarity_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_validity_ratings', models.IntegerField(default=0)), - ('validity_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('validity_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_rigour_ratings', models.IntegerField(default=0)), - ('rigour_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('rigour_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('author', models.ForeignKey(to='contributors.Contributor')), ('commentary', models.ForeignKey(null=True, to='commentaries.Commentary', blank=True)), ], @@ -38,20 +38,20 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Comment', fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), + ('id', models.AutoField(serialize=False, primary_key=True, verbose_name='ID', auto_created=True)), ('status', models.SmallIntegerField(default=0)), ('comment_text', models.TextField()), ('date_submitted', models.DateTimeField(verbose_name='date submitted')), ('nr_relevance_ratings', models.IntegerField(default=0)), - ('relevance_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('relevance_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_importance_ratings', models.IntegerField(default=0)), - ('importance_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('importance_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_clarity_ratings', models.IntegerField(default=0)), - ('clarity_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('clarity_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_validity_ratings', models.IntegerField(default=0)), - ('validity_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('validity_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_rigour_ratings', models.IntegerField(default=0)), - ('rigour_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('rigour_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('author', models.ForeignKey(to='contributors.Contributor')), ('commentary', models.ForeignKey(null=True, to='commentaries.Commentary', blank=True)), ('in_reply_to', models.ForeignKey(null=True, to='comments.Comment', blank=True)), diff --git a/comments/models.py b/comments/models.py index 5822553ac..96fa7c120 100644 --- a/comments/models.py +++ b/comments/models.py @@ -15,6 +15,25 @@ from contributors.models import Contributor from reports.models import Report from submissions.models import Submission + +COMMENT_CATEGORIES = ( + ('REM', 'remark'), + ('QUE', 'question'), + ('ANS', 'answer to question'), + ('OBJ', 'objection'), + ('REP', 'reply to objection'), + ('VAL', 'validation or rederivation'), + ('LIT', 'pointer to related literature'), + ('SUG', 'suggestion for further work'), + ) + +class CommentCategory(models.Model): + category = models.CharField(max_length=3, default='REM') + + def __str__ (self): + return self.category + + class Comment(models.Model): """ A Comment is an unsollicited note, submitted by a Contributor, on a particular publication or in reply to an earlier Comment. """ # status: @@ -28,6 +47,15 @@ class Comment(models.Model): submission = models.ForeignKey(Submission, blank=True, null=True) in_reply_to = models.ForeignKey('self', blank=True, null=True) author = models.ForeignKey(Contributor) +# categories = models.ManyToManyField(CommentCategory) + is_rem = models.BooleanField(default=False, verbose_name='remark') + is_que = models.BooleanField(default=False, verbose_name='question') + is_ans = models.BooleanField(default=False, verbose_name='answer to question') + is_obj = models.BooleanField(default=False, verbose_name='objection') + is_rep = models.BooleanField(default=False, verbose_name='reply to objection') + is_val = models.BooleanField(default=False, verbose_name='validation or rederivation') + is_lit = models.BooleanField(default=False, verbose_name='pointer to related literature') + is_sug = models.BooleanField(default=False, verbose_name='suggestion for further work') comment_text = models.TextField() date_submitted = models.DateTimeField('date submitted') # Aggregates of ratings applied to this comment: diff --git a/comments/views.py b/comments/views.py index 4051ab5c1..33337e719 100644 --- a/comments/views.py +++ b/comments/views.py @@ -3,7 +3,8 @@ from django.utils import timezone from django.shortcuts import get_object_or_404, render from django.contrib.auth import authenticate, login, logout from django.contrib.auth.models import User -from django.core.mail import send_mail +#from django.core.mail import send_mail +from django.core.mail import EmailMessage from django.core.urlresolvers import reverse from django.http import HttpResponse, HttpResponseRedirect from django.views.decorators.csrf import csrf_protect @@ -36,10 +37,28 @@ def vet_submitted_comment_ack(request, comment_id): # accept the comment as is comment.status = 1 comment.save() + email_text = 'The Comment you have submitted, concerning publication with title ' + if comment.commentary is not None: + email_text + comment.commentary.pub_title + ' by ' + comment.commentary.author_list + elif comment.submission is not None: + email_text + comment.submission.title + ' by ' + comment.submission.author_list + email_text += ', has been accepted and published online.' + '\n\nThank you for your contribution, \nThe SciPost Team.' + emailmessage = EmailMessage('SciPost Comment published', email_text, 'noreply@scipost.org', ['jscaux@gmail.com'], reply_to=['J.S.Caux@uva.nl']) + emailmessage.send(fail_silently=False) elif form.cleaned_data['action_option'] == '2': # the comment request is simply rejected comment.status = form.cleaned_data['refusal_reason'] comment.save() + email_text = 'The Comment you have submitted, concerning publication with title ' + if comment.commentary is not None: + email_text + comment.commentary.pub_title + ' by ' + comment.commentary.author_list + elif comment.submission is not None: + email_text + comment.submission.title + ' by ' + comment.submission.author_list + email_text += ', has been rejected for the following reason:' + form.cleaned_data['refusal_reason'] + '.\n\nThank you for your contribution, \nThe SciPost Team.' + if form.cleaned_data['email_response_field']: + email_text += '\n\nFurther explanations: ' + form.cleaned_data['email_response_field'] + emailmessage = EmailMessage('SciPost Comment rejected', email_text, 'noreply@scipost.org', ['jscaux@gmail.com'], reply_to=['J.S.Caux@uva.nl']) + emailmessage.send(fail_silently=False) context = {} return render(request, 'comments/vet_submitted_comment_ack.html', context) @@ -133,11 +152,28 @@ def vet_author_reply_ack(request, reply_id): # accept the reply as is reply.status = 1 reply.save() + email_text = 'The Author Reply you have submitted, concerning publication with title ' + if reply.commentary is not None: + email_text + reply.commentary.pub_title + ' by ' + reply.commentary.author_list + elif reply.submission is not None: + email_text + reply.submission.title + ' by ' + reply.submission.author_list + email_text += ', has been accepted and published online.' + '\n\nThank you for your contribution, \nThe SciPost Team.' + emailmessage = EmailMessage('SciPost Author Reply published', email_text, 'noreply@scipost.org', ['jscaux@gmail.com'], reply_to=['J.S.Caux@uva.nl']) + emailmessage.send(fail_silently=False) elif form.cleaned_data['action_option'] == '2': # the reply is simply rejected reply.status = form.cleaned_data['refusal_reason'] reply.save() - # email author + email_text = 'The Author Reply you have submitted, concerning publication with title ' + if reply.commentary is not None: + email_text + reply.commentary.pub_title + ' by ' + reply.commentary.author_list + elif reply.submission is not None: + email_text + reply.submission.title + ' by ' + reply.submission.author_list + email_text += ', has been rejected for the following reason:' + form.cleaned_data['refusal_reason'] + '.\n\nThank you for your contribution, \nThe SciPost Team.' + if form.cleaned_data['email_response_field']: + email_text += '\n\nFurther explanations: ' + form.cleaned_data['email_response_field'] + emailmessage = EmailMessage('SciPost AuthorReply rejected', email_text, 'noreply@scipost.org', ['jscaux@gmail.com'], reply_to=['J.S.Caux@uva.nl']) + emailmessage.send(fail_silently=False) context = {} return render(request, 'comments/vet_author_reply_ack.html', context) diff --git a/contributors/migrations/0001_initial.py b/contributors/migrations/0001_initial.py index 6ab9e67f8..23d294569 100644 --- a/contributors/migrations/0001_initial.py +++ b/contributors/migrations/0001_initial.py @@ -15,35 +15,46 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Contributor', fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), + ('id', models.AutoField(serialize=False, primary_key=True, verbose_name='ID', auto_created=True)), ('rank', models.SmallIntegerField(default=0, choices=[(0, 'newly registered'), (1, 'normal user'), (2, 'SciPost Commentary Editor'), (3, 'SciPost Journal Editor'), (4, 'SciPost Journal Editor-in-chief'), (5, 'SciPost Lead Editor'), (-1, 'not a professional scientist'), (-2, 'other account already exists'), (-3, 'barred from SciPost'), (-4, 'account disabled')])), - ('title', models.CharField(choices=[('PR', 'Prof.'), ('DR', 'Dr'), ('MR', 'Mr'), ('MRS', 'Mrs')], max_length=4)), - ('orcid_id', models.CharField(default='', verbose_name='ORCID id', max_length=20, blank=True, null=True)), + ('title', models.CharField(max_length=4, choices=[('PR', 'Prof.'), ('DR', 'Dr'), ('MR', 'Mr'), ('MRS', 'Mrs')])), + ('orcid_id', models.CharField(verbose_name='ORCID id', default='', null=True, blank=True, max_length=20)), ('affiliation', models.CharField(verbose_name='affiliation', max_length=300)), - ('address', models.CharField(verbose_name='address', max_length=1000, blank=True)), + ('address', models.CharField(verbose_name='address', blank=True, max_length=1000)), ('personalwebpage', models.URLField(verbose_name='personal web page', blank=True)), ('nr_comments', models.PositiveSmallIntegerField(default=0)), + ('nr_comment_relevance_ratings', models.IntegerField(default=0)), + ('comment_relevance_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), + ('nr_comment_importance_ratings', models.IntegerField(default=0)), + ('comment_importance_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), ('nr_comment_clarity_ratings', models.IntegerField(default=0)), - ('comment_clarity_rating', models.DecimalField(default=0, decimal_places=0, max_digits=3)), + ('comment_clarity_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), ('nr_comment_validity_ratings', models.IntegerField(default=0)), - ('comment_validity_rating', models.DecimalField(default=0, decimal_places=0, max_digits=3)), + ('comment_validity_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), ('nr_comment_rigour_ratings', models.IntegerField(default=0)), - ('comment_rigour_rating', models.DecimalField(default=0, decimal_places=0, max_digits=3)), - ('nr_comment_originality_ratings', models.IntegerField(default=0)), - ('comment_originality_rating', models.DecimalField(default=0, decimal_places=0, max_digits=3)), - ('nr_comment_significance_ratings', models.IntegerField(default=0)), - ('comment_significance_rating', models.DecimalField(default=0, decimal_places=0, max_digits=3)), + ('comment_rigour_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), + ('nr_authorreplies', models.PositiveSmallIntegerField(default=0)), + ('nr_authorreply_relevance_ratings', models.IntegerField(default=0)), + ('authorreply_relevance_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), + ('nr_authorreply_importance_ratings', models.IntegerField(default=0)), + ('authorreply_importance_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), + ('nr_authorreply_clarity_ratings', models.IntegerField(default=0)), + ('authorreply_clarity_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), + ('nr_authorreply_validity_ratings', models.IntegerField(default=0)), + ('authorreply_validity_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), + ('nr_authorreply_rigour_ratings', models.IntegerField(default=0)), + ('authorreply_rigour_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), ('nr_reports', models.PositiveSmallIntegerField(default=0)), + ('nr_report_relevance_ratings', models.IntegerField(default=0)), + ('report_relevance_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), + ('nr_report_importance_ratings', models.IntegerField(default=0)), + ('report_importance_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), ('nr_report_clarity_ratings', models.IntegerField(default=0)), - ('report_clarity_rating', models.DecimalField(default=0, decimal_places=0, max_digits=3)), + ('report_clarity_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), ('nr_report_validity_ratings', models.IntegerField(default=0)), - ('report_validity_rating', models.DecimalField(default=0, decimal_places=0, max_digits=3)), + ('report_validity_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), ('nr_report_rigour_ratings', models.IntegerField(default=0)), - ('report_rigour_rating', models.DecimalField(default=0, decimal_places=0, max_digits=3)), - ('nr_report_originality_ratings', models.IntegerField(default=0)), - ('report_originality_rating', models.DecimalField(default=0, decimal_places=0, max_digits=3)), - ('nr_report_significance_ratings', models.IntegerField(default=0)), - ('report_significance_rating', models.DecimalField(default=0, decimal_places=0, max_digits=3)), + ('report_rigour_rating', models.DecimalField(max_digits=3, default=0, decimal_places=0)), ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)), ], ), diff --git a/contributors/migrations/0002_auto_20151212_2020.py b/contributors/migrations/0002_auto_20151212_2020.py deleted file mode 100644 index 7029f9c7b..000000000 --- a/contributors/migrations/0002_auto_20151212_2020.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('contributors', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='contributor', - name='comment_originality_rating', - ), - migrations.RemoveField( - model_name='contributor', - name='comment_significance_rating', - ), - migrations.RemoveField( - model_name='contributor', - name='nr_comment_originality_ratings', - ), - migrations.RemoveField( - model_name='contributor', - name='nr_comment_significance_ratings', - ), - migrations.RemoveField( - model_name='contributor', - name='nr_report_originality_ratings', - ), - migrations.RemoveField( - model_name='contributor', - name='nr_report_significance_ratings', - ), - migrations.RemoveField( - model_name='contributor', - name='report_originality_rating', - ), - migrations.RemoveField( - model_name='contributor', - name='report_significance_rating', - ), - migrations.AddField( - model_name='contributor', - name='comment_importance_rating', - field=models.DecimalField(max_digits=3, default=0, decimal_places=0), - ), - migrations.AddField( - model_name='contributor', - name='comment_relevance_rating', - field=models.DecimalField(max_digits=3, default=0, decimal_places=0), - ), - migrations.AddField( - model_name='contributor', - name='nr_comment_importance_ratings', - field=models.IntegerField(default=0), - ), - migrations.AddField( - model_name='contributor', - name='nr_comment_relevance_ratings', - field=models.IntegerField(default=0), - ), - migrations.AddField( - model_name='contributor', - name='nr_report_importance_ratings', - field=models.IntegerField(default=0), - ), - migrations.AddField( - model_name='contributor', - name='nr_report_relevance_ratings', - field=models.IntegerField(default=0), - ), - migrations.AddField( - model_name='contributor', - name='report_importance_rating', - field=models.DecimalField(max_digits=3, default=0, decimal_places=0), - ), - migrations.AddField( - model_name='contributor', - name='report_relevance_rating', - field=models.DecimalField(max_digits=3, default=0, decimal_places=0), - ), - ] diff --git a/contributors/templates/contributors/login.html b/contributors/templates/contributors/login.html index 5dd0fbd4b..e6a6e2626 100644 --- a/contributors/templates/contributors/login.html +++ b/contributors/templates/contributors/login.html @@ -5,16 +5,25 @@ {% include 'scipost/navbar.html' %} <section> - <h1>Log in to SciPost</h1> - <form action="{% url 'contributors:login' %}" method="post"> - {% csrf_token %} - <table> - <ul> - {{ form.as_table }} - </ul> - </table> - <input type="submit" value="Login" /> - </form> + <div class="row"> + <div class="col-6"> + <h1>Log in to SciPost</h1> + <form action="{% url 'contributors:login' %}" method="post"> + {% csrf_token %} + <table> + <ul> + {{ form.as_table }} + </ul> + </table> + <input type="submit" value="Login" /> + </form> + </div> + <div class="col-6"> + <h1>Not registered as a Contributor to SciPost?</h1> + <p>If you are a professional scientist (PhD student and above), you can register by filling the + <a href="{% url 'contributors:register' %}">registration form</a>.</p> + </div> + </div> </section> diff --git a/contributors/templates/contributors/personal_page.html b/contributors/templates/contributors/personal_page.html index d31671494..ed8da6840 100644 --- a/contributors/templates/contributors/personal_page.html +++ b/contributors/templates/contributors/personal_page.html @@ -12,28 +12,34 @@ <section> <h1>Pending SciPost Editorial Actions</h1> <br> + <div class="row"> {% if contributor.rank >= 4 %} - <h3>Registration actions</h3> - <ul> - <li><a href="{% url 'contributors:vet_registration_requests' %}">Vet Registration requests</a> ({{ nr_reg_to_vet }})</li> - </ul> + <div class="col-4"> + <h3>Registration actions</h3> + <ul> + <li><a href="{% url 'contributors:vet_registration_requests' %}">Vet Registration requests</a> ({{ nr_reg_to_vet }})</li> + </ul> + </div> {% endif %} - <h3>Vetting actions</h3> - <ul> - <li><a href="{% url 'commentaries:vet_commentary_requests' %}">Vet Commentary Page requests</a> ({{ nr_commentary_page_requests_to_vet }})</li> - <li><a href="{% url 'comments:vet_submitted_comments' %}">Vet submitted Comments</a> ({{ nr_comments_to_vet }})</li> - <li><a href="{% url 'comments:vet_author_replies' %}">Vet submitted Author Replies</a> ({{ nr_author_replies_to_vet }})</li> - <li><a href="{% url 'reports:vet_submitted_reports' %}">Vet submitted Reports</a> ({{ nr_reports_to_vet }})</li> - </ul> - + <div class="col-4"> + <h3>Vetting actions</h3> + <ul> + <li><a href="{% url 'commentaries:vet_commentary_requests' %}">Vet Commentary Page requests</a> ({{ nr_commentary_page_requests_to_vet }})</li> + <li><a href="{% url 'comments:vet_submitted_comments' %}">Vet submitted Comments</a> ({{ nr_comments_to_vet }})</li> + <li><a href="{% url 'comments:vet_author_replies' %}">Vet submitted Author Replies</a> ({{ nr_author_replies_to_vet }})</li> + <li><a href="{% url 'reports:vet_submitted_reports' %}">Vet submitted Reports</a> ({{ nr_reports_to_vet }})</li> + </ul> + </div> {% if contributor.rank >= 3 %} - <h3>Submissions processing</h3> - <ul> - {% if contributor.rank >= 4 %} - <li><a href="{% url 'submissions:process_new_submissions' %}">Process new SciPost Submissions</a> ({{ nr_submissions_to_process }})</li> - {% endif %} - </ul> + <div class="col-4"> + <h3>Submissions processing</h3> + <ul> + {% if contributor.rank >= 4 %} + <li><a href="{% url 'submissions:process_new_submissions' %}">Process new SciPost Submissions</a> ({{ nr_submissions_to_process }})</li> + {% endif %} + </ul> + </div> {% endif %} </section> diff --git a/contributors/views.py b/contributors/views.py index a6fe4152f..53b5f8023 100644 --- a/contributors/views.py +++ b/contributors/views.py @@ -76,7 +76,7 @@ def vet_registration_request_ack(request, contributor_id): if form.cleaned_data['promote_to_rank_1']: contributor.rank = 1 contributor.save() - email_text = 'Dear' + contributor.title + ' ' + contributor.user.last_name + ', \n Your registration to the SciPost publication portal has been accepted. You can now login and contribute. \n\n The SciPost Team.' + email_text = 'Dear ' + contributor.title + ' ' + contributor.user.last_name + ', \n Your registration to the SciPost publication portal has been accepted. You can now login and contribute. \n\n The SciPost Team.' #send_mail('SciPost registration accepted', email_text, 'noreply@scipost.org', [contributor.user.email, 'noreply@scipost.org'], fail_silently=False) emailmessage = EmailMessage('SciPost registration accepted', email_text, 'noreply@scipost.org', [contributor.user.email, 'jscaux@gmail.com'], reply_to=['J.S.Caux@uva.nl']) emailmessage.send(fail_silently=False) diff --git a/journals/templates/journals/journals.html b/journals/templates/journals/journals.html index 31fefb1f2..07b9e3a61 100644 --- a/journals/templates/journals/journals.html +++ b/journals/templates/journals/journals.html @@ -6,62 +6,76 @@ <section> <h1>SciPost Journals</h1> - <p>SciPost publishes a family of online Journals covering all domains and specialties in the field of Physics.</p> - <p>Manuscripts submitted to SciPost undergo the extremely stringent <a href="{% url 'scipost:peer_witnessed_refereeing' %}">peer-witnessed refereeing</a> process (see details below), guaranteeing that papers published in SciPost Journals meet the highest possible academic standards.</p> - <p>All SciPost Journals are subscription-free and perpetually openly accessible.</p> <div class="row"> <div class="col-6"> - <h3>SciPost Physics Select</h3><p>(Editorially-selected Letters of superlative quality)</p> - <h3>SciPost Physics Letters</h3><p>(Letters of broad interest and outstanding quality)</p> + <p>SciPost publishes a family of online scientific Journals.</p> + <p>All SciPost Journals are subscription-free and perpetually openly accessible.</p> </div> <div class="col-6"> - <h3>SciPost Physics X</h3><p>(articles of exceptional quality)</p> - <h3>SciPost Physics </h3><p>(Experimental, Theoretical and Computational Physics)</p> - <h3>SciPost Physics Lecture Notes</h3><p>(Research-level didactic material)</p> + <p>Manuscripts submitted to SciPost undergo the extremely stringent <a href="{% url 'scipost:peer_witnessed_refereeing' %}">peer-witnessed refereeing</a> process, guaranteeing that papers published in SciPost Journals meet the highest possible academic standards.</p> </div> </div> </section> <section> - <h1>SciPost Physics Select</h1> - <p>SciPost Physics Select publishes Letters of superlative quality in the field of Physics.</p> - <p>Authors cannot submit directly to this Journal; SPS papers are editorially selected from the most outstanding Submissions to SciPost Physics Letters.</p> -</section> + <h1>SciPost Physics Journals</h1> + <hr> -<section> - <h1>SciPost Physics Letters</h1> - <p>SciPost Physics Letters publishes outstanding-quality, broad-interest papers in all fields of Physics.</p> -</section> + <div class="row"> + <div class="col-5"> + <h1>SciPost Physics Select</h1> + <p>SciPost Physics Select publishes Letters of superlative quality in the field of Physics.</p> + <p>Authors cannot submit directly to this Journal; SPS papers are editorially selected from the most outstanding Submissions to SciPost Physics Letters.</p> + <br/> + <h1>SciPost Physics Letters</h1> + <p>SciPost Physics Letters publishes outstanding-quality, broad-interest papers in all fields of Physics.</p> + <br/><br/> + <h1>SciPost Physics Lecture Notes</h1> + <p>SciPost Physics Lecture Notes publishes high-quality, research-level didactic material in all domains and specializations of Physics.</p> + </div> -<section> - <h1>SciPost Physics X</h1> - <p>SciPost Physics X publishes papers of superlative quality in the field of Physics.</p> - <p>Similarly to SPS, authors cannot submit directly to this Journal; SPX papers are editorially selected from the most outstanding Submissions to SciPost Physics.</p> -</section> + <div class="col-1"></div> -<section> - <h1>SciPost Physics</h1> - <p>SciPost Physics publishes high-quality papers in Physics. It covers the three major domains of modern Physics, namely E (Experimental), T (Theoretical) and C (Computational) Physics, which encompass the following specialties:</p> - <ul> - <li>A: Atomic, Molecular and Optical Physics</li> - <li>B: Biophysics</li> - <li>C: Condensed Matter Physics</li> - <li>F: Fluid Dynamics</li> - <li>G: Gravitation, Cosmology and Astroparticle Physics</li> - <li>H: High-Energy Physics</li> - <li>M: Mathematical Physics</li> - <li>N: Nuclear Physics</li> - <li>Q: Quantum Statistical Mechanics</li> - <li>S: Statistical and Soft Matter Physics</li> - </ul> -</section> + <div class="col-5"> + <h1>SciPost Physics X</h1> + <p>SciPost Physics X publishes papers of superlative quality in the field of Physics.</p> + <p>Similarly to SPS, authors cannot submit directly to this Journal; SPX papers are editorially selected from the most outstanding Submissions to SciPost Physics.</p> + <br/> + <h1>SciPost Physics</h1> + <p>SciPost Physics publishes high-quality papers in Physics. It covers the three major domains of modern Physics, namely E (Experimental), T (Theoretical) and C (Computational) Physics, which encompass the following specialties:</p> + <ul> + <li>A: Atomic, Molecular and Optical Physics</li> + <li>B: Biophysics</li> + <li>C: Condensed Matter Physics</li> + <li>F: Fluid Dynamics</li> + <li>G: Gravitation, Cosmology and Astroparticle Physics</li> + <li>H: High-Energy Physics</li> + <li>M: Mathematical Physics</li> + <li>N: Nuclear Physics</li> + <li>Q: Quantum Statistical Mechanics</li> + <li>S: Statistical and Soft Matter Physics</li> + </ul> + </div> + </div> -<section> - <h1>SciPost Physics Lecture Notes</h1> - <p>SciPost Physics Lecture Notes publishes high-quality, research-level didactic material in all domains and specializations of Physics.</p> -</section> -<section> + + +<!-- + <div class="row"> + <div class="col-6"> + <h3>SciPost Physics Select</h3><p>(Editorially-selected Letters of superlative quality)</p> + <h3>SciPost Physics Letters</h3><p>(Letters of broad interest and outstanding quality)</p> + </div> + <div class="col-6"> + <h3>SciPost Physics X</h3><p>(articles of exceptional quality)</p> + <h3>SciPost Physics </h3><p>(Experimental, Theoretical and Computational Physics)</p> + <h3>SciPost Physics Lecture Notes</h3><p>(Research-level didactic material)</p> + </div> + </div> +--> + <br/> + <hr> <h1><a href="{% url 'submissions:sub_and_ref_procedure' %}">Submission and Refereeing procedure</a></h1> </section> diff --git a/ratings/migrations/0001_initial.py b/ratings/migrations/0001_initial.py index 066a7e8e8..52ae5b00f 100644 --- a/ratings/migrations/0001_initial.py +++ b/ratings/migrations/0001_initial.py @@ -7,25 +7,25 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('reports', '0001_initial'), - ('commentaries', '0001_initial'), - ('comments', '0001_initial'), ('contributors', '0001_initial'), ('submissions', '0001_initial'), + ('reports', '0001_initial'), + ('comments', '0001_initial'), + ('commentaries', '0001_initial'), ] operations = [ migrations.CreateModel( name='AuthorReplyRating', fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), - ('relevance', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('importance', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('clarity', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('validity', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('rigour', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), + ('id', models.AutoField(serialize=False, primary_key=True, verbose_name='ID', auto_created=True)), + ('relevance', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('importance', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('clarity', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('validity', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('rigour', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('authorreply', models.ForeignKey(to='comments.AuthorReply')), ('rater', models.ForeignKey(to='contributors.Contributor')), - ('reply', models.ForeignKey(to='comments.AuthorReply')), ], options={ 'abstract': False, @@ -34,12 +34,12 @@ class Migration(migrations.Migration): migrations.CreateModel( name='CommentaryRating', fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), - ('clarity', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('validity', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('rigour', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('originality', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('significance', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), + ('id', models.AutoField(serialize=False, primary_key=True, verbose_name='ID', auto_created=True)), + ('clarity', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('validity', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('rigour', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('originality', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('significance', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), ('commentary', models.ForeignKey(to='commentaries.Commentary')), ('rater', models.ForeignKey(to='contributors.Contributor')), ], @@ -50,12 +50,12 @@ class Migration(migrations.Migration): migrations.CreateModel( name='CommentRating', fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), - ('relevance', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('importance', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('clarity', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('validity', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('rigour', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), + ('id', models.AutoField(serialize=False, primary_key=True, verbose_name='ID', auto_created=True)), + ('relevance', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('importance', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('clarity', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('validity', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('rigour', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), ('comment', models.ForeignKey(to='comments.Comment')), ('rater', models.ForeignKey(to='contributors.Contributor')), ], @@ -66,12 +66,12 @@ class Migration(migrations.Migration): migrations.CreateModel( name='ReportRating', fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), - ('relevance', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('importance', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('clarity', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('validity', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('rigour', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), + ('id', models.AutoField(serialize=False, primary_key=True, verbose_name='ID', auto_created=True)), + ('relevance', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('importance', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('clarity', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('validity', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('rigour', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), ('rater', models.ForeignKey(to='contributors.Contributor')), ('report', models.ForeignKey(to='reports.Report')), ], @@ -82,12 +82,12 @@ class Migration(migrations.Migration): migrations.CreateModel( name='SubmissionRating', fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), - ('clarity', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('validity', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('rigour', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('originality', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), - ('significance', models.PositiveSmallIntegerField(default=0, verbose_name=((101, 'abstain'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True)), + ('id', models.AutoField(serialize=False, primary_key=True, verbose_name='ID', auto_created=True)), + ('clarity', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('validity', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('rigour', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('originality', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), + ('significance', models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), default=0, null=True)), ('rater', models.ForeignKey(to='contributors.Contributor')), ('submission', models.ForeignKey(to='submissions.Submission')), ], diff --git a/ratings/migrations/0002_auto_20151215_0748.py b/ratings/migrations/0002_auto_20151215_0748.py deleted file mode 100644 index caaf83c29..000000000 --- a/ratings/migrations/0002_auto_20151215_0748.py +++ /dev/null @@ -1,139 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ratings', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='authorreplyrating', - name='clarity', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='authorreplyrating', - name='importance', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='authorreplyrating', - name='relevance', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='authorreplyrating', - name='rigour', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='authorreplyrating', - name='validity', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='commentaryrating', - name='clarity', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='commentaryrating', - name='originality', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='commentaryrating', - name='rigour', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='commentaryrating', - name='significance', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='commentaryrating', - name='validity', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='commentrating', - name='clarity', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='commentrating', - name='importance', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='commentrating', - name='relevance', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='commentrating', - name='rigour', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='commentrating', - name='validity', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='reportrating', - name='clarity', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='reportrating', - name='importance', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='reportrating', - name='relevance', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='reportrating', - name='rigour', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='reportrating', - name='validity', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='submissionrating', - name='clarity', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='submissionrating', - name='originality', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='submissionrating', - name='rigour', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='submissionrating', - name='significance', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - migrations.AlterField( - model_name='submissionrating', - name='validity', - field=models.PositiveSmallIntegerField(verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')), null=True, default=0), - ), - ] diff --git a/reports/migrations/0001_initial.py b/reports/migrations/0001_initial.py index 54a3d2c4e..1f4c45c7a 100644 --- a/reports/migrations/0001_initial.py +++ b/reports/migrations/0001_initial.py @@ -7,15 +7,15 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('submissions', '0001_initial'), ('contributors', '0001_initial'), + ('submissions', '0001_initial'), ] operations = [ migrations.CreateModel( name='Report', fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), + ('id', models.AutoField(serialize=False, primary_key=True, verbose_name='ID', auto_created=True)), ('status', models.SmallIntegerField(default=0)), ('qualification', models.PositiveSmallIntegerField(default=0)), ('strengths', models.TextField()), @@ -23,20 +23,20 @@ class Migration(migrations.Migration): ('report', models.TextField()), ('requested_changes', models.TextField()), ('recommendation', models.SmallIntegerField(choices=[(1, 'Publish as Tier I (top 10% of papers in this journal)'), (2, 'Publish as Tier II (top 50% of papers in this journal)'), (3, 'Publish as Tier III (meets the criteria of this journal)'), (-1, 'Ask for minor revision'), (-2, 'Ask for major revision'), (-3, 'Reject')])), - ('date_invited', models.DateTimeField(verbose_name='date invited', blank=True, null=True)), + ('date_invited', models.DateTimeField(verbose_name='date invited', null=True, blank=True)), ('date_submitted', models.DateTimeField(verbose_name='date submitted')), ('nr_relevance_ratings', models.IntegerField(default=0)), - ('relevance_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('relevance_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_importance_ratings', models.IntegerField(default=0)), - ('importance_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('importance_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_clarity_ratings', models.IntegerField(default=0)), - ('clarity_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('clarity_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_validity_ratings', models.IntegerField(default=0)), - ('validity_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('validity_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_rigour_ratings', models.IntegerField(default=0)), - ('rigour_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('rigour_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('author', models.ForeignKey(to='contributors.Contributor')), - ('invited_by', models.ForeignKey(null=True, to='contributors.Contributor', blank=True, related_name='invited_by')), + ('invited_by', models.ForeignKey(null=True, related_name='invited_by', blank=True, to='contributors.Contributor')), ('submission', models.ForeignKey(to='submissions.Submission')), ], ), diff --git a/scipost/static/scipost/SciPost.css b/scipost/static/scipost/SciPost.css index 4732dfb10..a9693075c 100644 --- a/scipost/static/scipost/SciPost.css +++ b/scipost/static/scipost/SciPost.css @@ -67,6 +67,23 @@ a:hover { } +.commentcategorychoices { + list-style-type: none; // for categorizing comments +} +.commentcategorydisplay { + list-style-type: circle; + display: inline; +} +.commentcategorydisplay li { + float: left; + list-style-type: square; + padding: 2px 5px; + margin: 1px 0px; + background-color: #eeeeee; + border-right: 1px solid black; +} + + header { // background-color: #333333; // background-color: #102040; diff --git a/scipost/templates/scipost/index.html b/scipost/templates/scipost/index.html index 879351ab7..b620f971a 100644 --- a/scipost/templates/scipost/index.html +++ b/scipost/templates/scipost/index.html @@ -37,8 +37,9 @@ <h3>Registered contributors:</h3> <a href="{% url 'contributors:login' %}">Login to your Personal Page</a> </div> <div class="col-4"> - <h3>Register as a Contributor to SciPost:</h3> - <a href="{% url 'contributors:register' %}">Fill the registration form</a> + <h1>Register</h1> + <p>Professional scientists (PhD students and above) can become Contributors to SciPost by filling the + <a href="{% url 'contributors:register' %}">registration form</a>.</p> </div> <div class="col-4"> <h4>Registered contributors can:</h4> @@ -46,6 +47,7 @@ <li>Submit manuscripts to SciPost Journals</li> <li>Post reports and comments</li> <li>Rate reports and comments</li> + <li>Manage notifications</li> <li>... and much more</li> </ul> </div> diff --git a/submissions/migrations/0001_initial.py b/submissions/migrations/0001_initial.py index 6c80daf51..c86385d75 100644 --- a/submissions/migrations/0001_initial.py +++ b/submissions/migrations/0001_initial.py @@ -15,11 +15,11 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Submission', fields=[ - ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), + ('id', models.AutoField(serialize=False, primary_key=True, verbose_name='ID', auto_created=True)), ('vetted', models.BooleanField(default=False)), - ('submitted_to_journal', models.CharField(choices=[('SciPost Physics Select', 'SciPost Physics Select'), ('SciPost Physics Letters', 'SciPost Physics Letters'), ('SciPost Physics X', 'SciPost Physics X (cross-division)'), ('SciPost Physics', 'SciPost Physics (Experimental, Theoretical and Computational)'), ('SciPost Physics Lecture Notes', 'SciPost Physics Lecture Notes')], max_length=30)), - ('domain', models.CharField(default='E', choices=[('E', 'Experimental'), ('T', 'Theoretical'), ('C', 'Computational')], max_length=1)), - ('specialization', models.CharField(choices=[('A', 'Atomic, Molecular and Optical Physics'), ('B', 'Biophysics'), ('C', 'Condensed Matter Physics'), ('F', 'Fluid Dynamics'), ('G', 'Gravitation, Cosmology and Astroparticle Physics'), ('H', 'High-Energy Physics'), ('M', 'Mathematical Physics'), ('N', 'Nuclear Physics'), ('Q', 'Quantum Statistical Mechanics'), ('S', 'Statistical and Soft Matter Physics')], max_length=1)), + ('submitted_to_journal', models.CharField(max_length=30, choices=[('SciPost Physics Select', 'SciPost Physics Select'), ('SciPost Physics Letters', 'SciPost Physics Letters'), ('SciPost Physics X', 'SciPost Physics X (cross-division)'), ('SciPost Physics', 'SciPost Physics (Experimental, Theoretical and Computational)'), ('SciPost Physics Lecture Notes', 'SciPost Physics Lecture Notes')])), + ('domain', models.CharField(default='E', max_length=1, choices=[('E', 'Experimental'), ('T', 'Theoretical'), ('C', 'Computational')])), + ('specialization', models.CharField(max_length=1, choices=[('A', 'Atomic, Molecular and Optical Physics'), ('B', 'Biophysics'), ('C', 'Condensed Matter Physics'), ('F', 'Fluid Dynamics'), ('G', 'Gravitation, Cosmology and Astroparticle Physics'), ('H', 'High-Energy Physics'), ('M', 'Mathematical Physics'), ('N', 'Nuclear Physics'), ('Q', 'Quantum Statistical Mechanics'), ('S', 'Statistical and Soft Matter Physics')])), ('status', models.SmallIntegerField(choices=[(0, 'unassigned'), (1, 'editor in charge assigned'), (2, 'under review'), (3, 'reviewed, peer checking period'), (4, 'reviewed, peer checked, editorial decision pending'), (5, 'editorial decision')])), ('open_for_reporting', models.BooleanField(default=True)), ('open_for_commenting', models.BooleanField(default=True)), @@ -29,18 +29,18 @@ class Migration(migrations.Migration): ('arxiv_link', models.URLField(verbose_name='arXiv link (including version nr)')), ('submission_date', models.DateField(verbose_name='date of original publication')), ('nr_clarity_ratings', models.IntegerField(default=0)), - ('clarity_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('clarity_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_validity_ratings', models.IntegerField(default=0)), - ('validity_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('validity_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_rigour_ratings', models.IntegerField(default=0)), - ('rigour_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('rigour_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_originality_ratings', models.IntegerField(default=0)), - ('originality_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('originality_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('nr_significance_ratings', models.IntegerField(default=0)), - ('significance_rating', models.DecimalField(default=0, decimal_places=0, null=True, max_digits=3)), + ('significance_rating', models.DecimalField(max_digits=3, default=0, null=True, decimal_places=0)), ('latest_activity', models.DateTimeField(default=django.utils.timezone.now)), - ('authors', models.ManyToManyField(related_name='authors_sub', blank=True, null=True, to='contributors.Contributor')), - ('editor_in_charge', models.ForeignKey(null=True, to='contributors.Contributor', blank=True, related_name='editor_in_charge')), + ('authors', models.ManyToManyField(related_name='authors_sub', blank=True, to='contributors.Contributor')), + ('editor_in_charge', models.ForeignKey(null=True, related_name='editor_in_charge', blank=True, to='contributors.Contributor')), ('submitted_by', models.ForeignKey(to='contributors.Contributor')), ], ), diff --git a/submissions/models.py b/submissions/models.py index 386c2cfee..e61084e41 100644 --- a/submissions/models.py +++ b/submissions/models.py @@ -31,7 +31,7 @@ class Submission(models.Model): title = models.CharField(max_length=300) author_list = models.CharField(max_length=1000) # Authors which have been mapped to contributors: - authors = models.ManyToManyField (Contributor, blank=True, null=True, related_name='authors_sub') + authors = models.ManyToManyField (Contributor, blank=True, related_name='authors_sub') abstract = models.TextField() arxiv_link = models.URLField(verbose_name='arXiv link (including version nr)') submission_date = models.DateField(verbose_name='date of original publication') diff --git a/submissions/templates/submissions/submission_detail.html b/submissions/templates/submissions/submission_detail.html index c51cdb170..60f25e21c 100644 --- a/submissions/templates/submissions/submission_detail.html +++ b/submissions/templates/submissions/submission_detail.html @@ -49,15 +49,14 @@ <h3>Abstract:</h3> <p>{{ submission.abstract }}</p> - {% if user.is_authenticated %} + {% if user.is_authenticated and user.contributor.rank > 0 %} <form action="{% url 'ratings:vote_on_submission' submission_id=submission.id %}" method="post" class="ratingsdata"> {% csrf_token %} <ul> <li>Rate this publication:</li> {{ submission_rating_form.as_ul }} <li><input type="submit" value="Submit"></li> - </ul> - + </ul> </form> {% endif %} </section> @@ -110,7 +109,7 @@ <p>{{ report.report }}</p> </div> </div> - {% if user.is_authenticated %} + {% if user.is_authenticated and user.contributor.rank > 0 %} <form action="{% url 'ratings:vote_on_report' report_id=report.id %}" method="post" class="ratingsdata"> {% csrf_token %} <ul> @@ -143,10 +142,10 @@ <div class="row"> <div class="col-1"></div> <div class="col-10" - <p>{{ reply.reply_text }}</p> + <p>{{ reply.reply_text|linebreaks }}</p> </div> </div> - {% if user.is_authenticated %} + {% if user.is_authenticated and user.contributor.rank > 0 %} <div class="row"> <div class="col-1"></div> <div class="col-10"> @@ -165,6 +164,7 @@ {% endif %} {% endfor %} + {% if user.is_authenticated and user.contributor.rank > 0 %} <hr style="border-style: dotted;" /> <div class="row"> <div class="col-6"> @@ -172,12 +172,13 @@ </div> </div> <hr> + {% endif %} {% endfor %} </section> {% endif %} -{% if user.is_authenticated and submission.open_for_reporting %} +{% if user.is_authenticated and submission.open_for_reporting and user.contributor.rank > 0 %} <section> <div class="row"> <div class="col-3"> @@ -216,11 +217,11 @@ <div class="row"> <div class="col-1"></div> <div class="col-10"> - <p>{{ comment.comment_text }}</p> + <p>{{ comment.comment_text|linebreaks }}</p> </div> <div class="col-1"></div> </div> - {% if user.is_authenticated %} + {% if user.is_authenticated and user.contributor.rank > 0 %} <form action="{% url 'ratings:vote_on_comment' comment_id=comment.id %}" method="post" class="ratingsdata"> {% csrf_token %} <ul> @@ -252,10 +253,10 @@ <div class="row"> <div class="col-1"></div> <div class="col-10"> - <p>{{ reply.reply_text }}</p> + <p>{{ reply.reply_text|linebreaks }}</p> </div> </div> - {% if user.is_authenticated %} + {% if user.is_authenticated and user.contributor.rank > 0 %} <div class="row"> <div class="col-1"></div> <div class="col-10"> @@ -274,6 +275,7 @@ {% endif %} {% endfor %} + {% if user.is_authenticated and user.contributor.rank > 0 %} <hr style="border-style: dotted;" /> <div class="row"> <div class="col-6"> @@ -284,11 +286,13 @@ </div> </div> <hr> + {% endif %} + {% endfor %} </section> {% endif %} -{% if user.is_authenticated and submission.open_for_commenting %} +{% if user.is_authenticated and submission.open_for_commenting and user.contributor.rank > 0 %} <section> <div class="row"> <div class="col-3"> -- GitLab