diff --git a/journals/templates/journals/publication_detail.html b/journals/templates/journals/publication_detail.html index 8c03853e661a4aa85ac6021b587ac5bdaa3b77e7..b640b83dcf2c5c72a340738373c255ffafd8e1ab 100644 --- a/journals/templates/journals/publication_detail.html +++ b/journals/templates/journals/publication_detail.html @@ -6,9 +6,6 @@ {% load scipost_extras %} {% load user_groups %} -{% is_scipost_admin request.user as is_scipost_admin %} -{% is_edcol_admin request.user as is_edcol_admin %} - {% block pagetitle %}: {{ publication.citation }} - {{ publication.title }}{% endblock pagetitle %} {% block body_class %}{{ block.super }} publication{% endblock %} @@ -57,6 +54,10 @@ {% endblock headsup %} {% block content %} + +{% is_scipost_admin request.user as is_scipost_admin %} +{% is_edcol_admin request.user as is_edcol_admin %} + {% if not publication.is_published and perms.can_publish_accepted_submission %} <div class="card bg-warning text-white"> <div class="card-body"> @@ -96,6 +97,37 @@ {% endif %} <hr/> +{% if publication.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 publication.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 'journals:publication_remove_topic' doi_label=publication.doi_label 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 Publication</li> + {% endfor %} + </ul> + {% if perms.scipost.can_manage_ontology %} + <ul class="list-inline"> + <li class="list-inline-item"> + <form class="form-inline" action="{% url 'journals:publication_add_topic' doi_label=publication.doi_label %}" method="post"> + <ul class="list-inline"> + <li class="list-inline-item">Add a 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 %} + <div class="card"> <div class="card-header"> Author{{ publication.authors.all|length|pluralize }}/Affiliation{{ affiliations_list|length|pluralize }}: mappings to Contributors and <a href="{% url 'organizations:organizations' %}" target="_blank">Organizations</a> @@ -145,6 +177,7 @@ </div> {% endif %} + {% if is_scipost_admin or is_edcol_admin %} {% if publication.institutions.all %} <div class="card"> @@ -190,3 +223,8 @@ {% endif %} {% endblock content %} + +{% block footer_script %} +{{ block.super }} +{{ select_topic_form.media }} +{% endblock footer_script %} diff --git a/journals/urls/general.py b/journals/urls/general.py index 3ddd5a071c652791c1fe0b5ac6e04bb388f02334..65ce483561024601291220e74fdbd537507739fb 100644 --- a/journals/urls/general.py +++ b/journals/urls/general.py @@ -135,6 +135,14 @@ urlpatterns = [ journals_views.email_object_made_citable, name='email_object_made_citable'), + # Topics: + url(r'^publication_add_topic/(?P<doi_label>{regex})$'.format(regex=PUBLICATION_DOI_REGEX), + journals_views.publication_add_topic, + name='publication_add_topic'), + url(r'^publication_remove_topic/(?P<doi_label>{regex})/(?P<slug>[-\w]+)/$'.format(regex=PUBLICATION_DOI_REGEX), + journals_views.publication_remove_topic, + name='publication_remove_topic'), + # PubFraction allocation: url(r'^allocate_orgpubfractions/(?P<doi_label>{regex})$'.format(regex=PUBLICATION_DOI_REGEX), journals_views.allocate_orgpubfractions, diff --git a/journals/views.py b/journals/views.py index 555f39b80176a6e998831b001dc1e9c1c1457566..ed68542becec5eceabaefb05069539a35aa72b85 100644 --- a/journals/views.py +++ b/journals/views.py @@ -46,6 +46,8 @@ from comments.models import Comment from funders.forms import FunderSelectForm, GrantSelectForm from funders.models import Grant from mails.views import MailEditingSubView +from ontology.models import Topic +from ontology.forms import SelectTopicForm from organizations.models import Organization from submissions.constants import STATUS_PUBLISHED from submissions.models import Submission, Report @@ -774,13 +776,28 @@ def metadata_DOAJ_deposit(request, doi_label): def publication_add_topic(request, doi_label): """ Add a predefined Topic to an existing Publication object. - This also adds the Topic to all authors' Profiles. """ publication = get_object_or_404(Publication, doi_label=doi_label) select_topic_form = SelectTopicForm(request.POST or None) if select_topic_form.is_valid(): publication.topics.add(select_topic_form.cleaned_data['topic']) publication.save() + messages.success(request, 'Successfully linked Topic to this publication') + return redirect(reverse('scipost:publication_detail', + kwargs={'doi_label': publication.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. + """ + publication = get_object_or_404(Publication, doi_label=doi_label) + topic = get_object_or_404(Topic, slug=slug) + publication.topics.remove(topic) + messages.success(request, 'Successfully removed Topic') + return redirect(reverse('scipost:publication_detail', + kwargs={'doi_label': publication.doi_label})) @login_required @@ -1281,6 +1298,7 @@ def publication_detail(request, doi_label): 'publication': publication, 'affiliations_list': publication.get_all_affiliations(), 'journal': publication.get_journal(), + 'select_topic_form': SelectTopicForm(), } return render(request, 'journals/publication_detail.html', context) diff --git a/ontology/forms.py b/ontology/forms.py index dcd7c7e09b9a7e0ed69e4f700447f64ef84207b2..7f85b113c511c8453a278f11acb4c538f5d56c35 100644 --- a/ontology/forms.py +++ b/ontology/forms.py @@ -14,7 +14,7 @@ class SelectTagForm(forms.Form): class SelectTopicForm(forms.Form): - topic = AutoCompleteSelectField('topic_lookup') + topic = AutoCompleteSelectField('topic_lookup', label='', help_text='') class SelectLinkedTopicForm(forms.Form):