diff --git a/journals/views.py b/journals/views.py index 56b8bddb0079fdc57bfa08d5353537e71170fd25..5fb0e5dcf9cd1900a686a246241afc9a2cce7640 100644 --- a/journals/views.py +++ b/journals/views.py @@ -792,11 +792,13 @@ def publication_add_topic(request, doi_label): @permission_required('scipost.can_manage_ontology', return_403=True) def publication_remove_topic(request, doi_label, slug): """ - Remove the Topic from the Publication. + Remove the Topic from the Publication, and from all associated Submissions. """ publication = get_object_or_404(Publication, doi_label=doi_label) topic = get_object_or_404(Topic, slug=slug) publication.topics.remove(topic) + for sub in publication.accepted_submission.thread: + sub.topics.remove(topic) messages.success(request, 'Successfully removed Topic') return redirect(reverse('scipost:publication_detail', kwargs={'doi_label': publication.doi_label})) diff --git a/ontology/templates/ontology/_topic_card.html b/ontology/templates/ontology/_topic_card.html index 337fd04950b91ed2fe116f3c9ee96f56d2964896..ff13e915346e10b09ce3f1a77ce86aa1069bf9d1 100644 --- a/ontology/templates/ontology/_topic_card.html +++ b/ontology/templates/ontology/_topic_card.html @@ -99,15 +99,20 @@ </div> <div class="card"> <div class="card-header"> - Submissions + Submissions (unpublished only) </div> <div class="card-body"> <ul> {% for sub in topic.submission_set.public_newest %} + {% if not sub.publication and not sub.publication.is_published %} <li> <a href="{{ sub.get_absolute_url }}">{{ sub.title }}</a> <br>by {{ sub.author_list }} + <br>(submitted {{ sub.submission_date|date:"Y-m-d" }} to {{ sub.get_submitted_to_journal_display }}) </li> + {% else %} + <li>No Submission found</li> + {% endif %} {% empty %} <li>No Submission found</li> {% endfor %} diff --git a/submissions/forms.py b/submissions/forms.py index 760caedcc777698782d07ac08c64c4c3f944f579..b9cdc971b8963c3926a960484b04e1723a2f05a3 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -397,6 +397,9 @@ class RequestSubmissionForm(SubmissionChecks, forms.ModelForm): Submission.objects.filter(id=self.last_submission.id).update( is_current=False, open_for_reporting=False, status=STATUS_RESUBMITTED) + # Copy Topics + submission.topics.add(*self.last_submission.topics.all()) + # Open for comment and reporting and copy EIC info Submission.objects.filter(id=submission.id).update( open_for_reporting=True, diff --git a/submissions/templates/partials/submissions/submission_topics_card.html b/submissions/templates/partials/submissions/submission_topics_card.html new file mode 100644 index 0000000000000000000000000000000000000000..0a9309ea82e56d1982dc3e5e5cfbd8020b587859 --- /dev/null +++ b/submissions/templates/partials/submissions/submission_topics_card.html @@ -0,0 +1,35 @@ +{% load user_groups %} + +{% is_scipost_admin request.user as is_scipost_admin %} +{% is_edcol_admin request.user as is_edcol_admin %} + +{% if submission.topics.all or is_scipost_admin or is_edcol_admin %} +<div class="card"> + <div class="card-header"> + <a href="{% url 'ontology:ontology' %}">Ontology</a>/<a href="{% url 'ontology:topics' %}">Topics</a> + </div> + <div class="card-body"> + <ul class="list-inline mb-0"> + {% for topic in submission.topics.all %} + <li class="list-inline-item p-1"><a href="{% url 'ontology:topic_details' slug=topic.slug %}">{{ topic }}</a>{% if perms.scipost.can_manage_ontology %} <a href="{% url 'submissions:submission_remove_topic' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr slug=topic.slug %}"><i class="fa fa-times-circle text-danger"></i></a>{% endif %}</li> + {% empty %} + <li class="list-inline-item">No Topic has yet been associated to this Submission</li> + {% endfor %} + </ul> + {% if perms.scipost.can_manage_ontology %} + <ul class="list-inline"> + <li class="list-inline-item"> + <form class="form-inline" action="{% url 'submissions:submission_add_topic' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr %}" method="post"> + <ul class="list-inline"> + <li class="list-inline-item">Add an existing Topic:</li> + <li class="list-inline-item">{% csrf_token %}{{ select_topic_form }}</li> + <li class="list-inline-item"><input class="btn btn-outline-secondary" type="submit" value="Link"></li> + </ul> + </form> + </li> + <li class="list-inline-item p-2">Can't find the Topic you need? <a href="{% url 'ontology:topic_create' %}" target="_blank">Create it</a> (opens in new window)</li> + </ul> + {% endif %} + </div> +</div> +{% endif %} diff --git a/submissions/templates/submissions/submission_detail.html b/submissions/templates/submissions/submission_detail.html index f1cd3d7542af3e47e71033667d9d623087d25305..a343545a4cec455804c116484c9d342bf59ee2c0 100644 --- a/submissions/templates/submissions/submission_detail.html +++ b/submissions/templates/submissions/submission_detail.html @@ -66,8 +66,9 @@ {% include 'partials/submissions/submission_status.html' with submission=submission %} - <br> - <br> + <br/> + {% include 'partials/submissions/submission_topics_card.html' with submission=submission %} + {% if submission.author_comments %} <h3>Author comments upon resubmission</h3> <div class="blockquote"> @@ -213,3 +214,9 @@ {% endif %} {% endblock content %} + + +{% block footer_script %} +{{ block.super }} +{{ select_topic_form.media }} +{% endblock footer_script %} diff --git a/submissions/urls.py b/submissions/urls.py index 4c4d6c387a56a7c7d51b8cf2344439f648361700..57711856f0e8f01895dce1c5fb10285626125496 100644 --- a/submissions/urls.py +++ b/submissions/urls.py @@ -33,6 +33,14 @@ urlpatterns = [ url(r'^{regex}/reports/pdf$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), views.submission_refereeing_package_pdf, name='refereeing_package_pdf'), + # Topics + url(r'^submission_add_topic/{regex}/'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + views.submission_add_topic, + name='submission_add_topic'), + url(r'^submission_remove_topic/{regex}/(?P<slug>[-\w]+)/'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + views.submission_remove_topic, + name='submission_remove_topic'), + # Editorial Administration url(r'^admin/treated$', views.treated_submissions_list, name='treated_submissions_list'), url(r'^admin/{regex}/prescreening$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), diff --git a/submissions/views.py b/submissions/views.py index ad850a1aadde0a76911ff8294ed57a3930c3f38d..86026817e5f689e45c4793fd79a7586ce6a15077 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -44,6 +44,8 @@ from colleges.permissions import fellowship_required, fellowship_or_admin_requir from comments.forms import CommentForm from journals.models import Journal from mails.views import MailEditingSubView +from ontology.models import Topic +from ontology.forms import SelectTopicForm from production.forms import ProofsDecisionForm from profiles.models import Profile from scipost.forms import RemarkForm @@ -237,7 +239,8 @@ def submission_detail(request, identifier_w_vn_nr): """Public detail page of Submission.""" submission = get_object_or_404(Submission, preprint__identifier_w_vn_nr=identifier_w_vn_nr) context = { - 'can_read_editorial_information': False + 'can_read_editorial_information': False, + 'select_topic_form': SelectTopicForm(), } # Check if Contributor is author of the Submission @@ -514,6 +517,50 @@ def add_remark(request, identifier_w_vn_nr): return redirect(reverse('submissions:pool', args=(identifier_w_vn_nr,))) +@permission_required('scipost.can_manage_ontology', raise_exception=True) +def submission_add_topic(request, identifier_w_vn_nr): + """ + Add a predefined Topic to an existing Submission object. + This also adds the Topic to all Submissions predating this one, + and to any existing associated Publication object. + """ + submission = get_object_or_404(Submission, + preprint__identifier_w_vn_nr=identifier_w_vn_nr) + select_topic_form = SelectTopicForm(request.POST or None) + if select_topic_form.is_valid(): + submission.topics.add(select_topic_form.cleaned_data['topic']) + for sub in submission.get_other_versions(): + sub.topics.add(select_topic_form.cleaned_data['topic']) + try: + if submission.publication: + submission.publication.topics.add(select_topic_form.cleaned_data['topic']) + except: + pass + messages.success(request, 'Successfully linked Topic to this Submission') + return submission_detail(request, identifier_w_vn_nr) + + +@permission_required('scipost.can_manage_ontology', raise_exception=True) +def submission_remove_topic(request, identifier_w_vn_nr, slug): + """ + Remove the Topic from the Submission, from all associated Submissions + and from any existing associated Publication object. + """ + submission = get_object_or_404(Submission, + preprint__identifier_w_vn_nr=identifier_w_vn_nr) + topic = get_object_or_404(Topic, slug=slug) + submission.topics.remove(topic) + for sub in submission.get_other_versions(): + sub.topics.remove(topic) + try: + if submission.publication: + submission.publication.topics.remove(topic) + except: + pass + messages.success(request, 'Successfully removed Topic') + return submission_detail(request, identifier_w_vn_nr) + + @login_required @permission_required('scipost.can_assign_submissions', raise_exception=True) def assign_submission(request, identifier_w_vn_nr):