From e3682390ef1d152b9daa46773c8e9fed8eb43049 Mon Sep 17 00:00:00 2001 From: George Katsikas <giorgakis.katsikas@gmail.com> Date: Thu, 12 Sep 2024 17:15:56 +0200 Subject: [PATCH] add proceedings management page part of #165 --- .../templates/journals/_manage_link_list.html | 5 + .../journals/manage_proceedings_metadata.html | 125 ++++++++++++++++++ scipost_django/journals/urls/general.py | 10 ++ scipost_django/journals/views.py | 34 ++++- scipost_django/proceedings/models.py | 8 ++ .../scipost/personal_page/_hx_edadmin.html | 1 + 6 files changed, 181 insertions(+), 2 deletions(-) create mode 100644 scipost_django/journals/templates/journals/manage_proceedings_metadata.html diff --git a/scipost_django/journals/templates/journals/_manage_link_list.html b/scipost_django/journals/templates/journals/_manage_link_list.html index 967f89977..2256ca9a8 100644 --- a/scipost_django/journals/templates/journals/_manage_link_list.html +++ b/scipost_django/journals/templates/journals/_manage_link_list.html @@ -14,6 +14,11 @@ {% if active == "proceedings" %}class="active"{% endif %} href="{% url 'proceedings:proceedings' %}">Manage Proceedings Issues</a> </li> + <li> + <a + {% if active == "proceedings_metadata" %}class="active"{% endif %} + href="{% url 'journals:manage_proceedings_metadata' %}">Manage Proceedings metadata</a> + </li> <li> <a {% if active == "publication" %}class="active"{% endif %} diff --git a/scipost_django/journals/templates/journals/manage_proceedings_metadata.html b/scipost_django/journals/templates/journals/manage_proceedings_metadata.html new file mode 100644 index 000000000..f620d2751 --- /dev/null +++ b/scipost_django/journals/templates/journals/manage_proceedings_metadata.html @@ -0,0 +1,125 @@ +{% extends 'scipost/_personal_page_base.html' %} + +{% block pagetitle %} + : Manage Proceedings metadata +{% endblock pagetitle %} + +{% load bootstrap %} +{% load static %} + +{% load journals_extras %} + +{% block breadcrumb_items %} + {{ block.super }} + <span class="breadcrumb-item">Manage Proceedings metadata</span> +{% endblock %} + +{% block content %} + <h1 class="highlight">Manage Proceedings metadata</h1> + {% include "journals/_manage_link_list.html" with active="proceedings_metadata" %} + + <h2 class="mt-4">Proceedings</h2> + + <table class="table table-hover"> + <thead class="table-light"> + <tr> + <th>Proceedings</th> + <th>Latest successful Crossref deposit</th> + <th>Deposit needs updating?</th> + </tr> + </thead> + + <tbody id="accordion" role="tablist" aria-multiselectable="true"> + + {% for proceedings in proceedings_set %} + <tr data-bs-toggle="collapse" + data-parent="#accordion" + href="#collapse{{ proceedings.id }}" + aria-expanded="true" + aria-controls="collapse{{ proceedings.id }}" + style="cursor: pointer"> + <td>{{ proceedings }}</td> + <td>{{ proceedings|latest_successful_crossref_generic_deposit }}</td> + <td>{{ proceedings.doideposit_needs_updating|yesno:'Yes,No,-' }}</td> + </tr> + <tr id="collapse{{ proceedings.id }}" + class="collapse" + role="tabpanel" + aria-labelledby="heading{{ proceedings.id }}" + style="background-color: #fff"> + <td> + <p> + <a href="{{ proceedings.get_absolute_url }}">Proceedings {{ proceedings }}</a> + </p> + + <h2 class="ms-3">Actions</h2> + <ul> + <li> + <a href="{% url 'proceedings:proceedings_edit' proceedings.id %}">Edit Proceedings</a> (add publication date) + </li> + <li> + <a href="{% url 'journals:create_proceedings_metadata_xml' proceedings.pk %}">Create XML metadata</a> + </li> + <li> + <a href="{% url 'journals:generic_metadata_xml_deposit' type_of_object='proceedings' object_id=proceedings.id %}" {% if not proceedings.metadata_xml %}class="pe-none text-muted"{% endif %}>Deposit to Crossref</a> + </li> + </ul> + + </td> + <td colspan="4"> + <h3 class="mt-4">Crossref Deposits</h3> + <table class="table table-sm bg-white"> + <thead class="table-light"> + <th>Timestamp</th> + <th>batch id</th> + <th>deposition date</th> + <th>Successful?</th> + <th>actions</th> + </thead> + <tbody> + + {% for deposit in proceedings.genericdoideposit.all %} + <tr> + <td>{{ deposit.timestamp }}</td> + <td>{{ deposit.doi_batch_id }}</td> + <td> + + {% if deposit.deposition_date %} + {{ deposit.deposition_date }} + {% else %} + Not deposited + {% endif %} + + </td> + <td>{{ deposit.deposit_successful|yesno:'Yes,No,-' }}</td> + <td> + Mark deposit as + <ul> + <li> + <a href="{% url 'journals:mark_generic_deposit_success' deposit_id=deposit.id success=1 %}">successful</a> + </li> + <li> + <a href="{% url 'journals:mark_generic_deposit_success' deposit_id=deposit.id success=0 %}">unsuccessful</a> + </li> + </ul> + </td> + </tr> + {% empty %} + <tr> + <td colspan="5">No Deposits found for this Proceedings</td> + </tr> + {% endfor %} + + </tbody> + </table> + + </td> + </tr> + {% endfor %} + + </tbody> + </table> + + <div class="col-12">{% include '_pagination.html' with page_obj=page_obj %}</div> + +{% endblock content %} diff --git a/scipost_django/journals/urls/general.py b/scipost_django/journals/urls/general.py index 93f940bec..f59b77266 100644 --- a/scipost_django/journals/urls/general.py +++ b/scipost_django/journals/urls/general.py @@ -255,6 +255,16 @@ urlpatterns = [ name="update_issue", ), # Metadata handling + path( + "admin/proceedings/metadata/", + journals_views.manage_proceedings_metadata, + name="manage_proceedings_metadata", + ), + path( + "admin/proceedings/<int:pk>/metadata/crossref/create", + journals_views.CreateProceedingsMetadataXMLView.as_view(), + name="create_proceedings_metadata_xml", + ), path( "admin/<publication_doi_label:doi_label>/metadata/crossref/create", journals_views.CreateMetadataXMLView.as_view(), diff --git a/scipost_django/journals/views.py b/scipost_django/journals/views.py index cdac7653f..af2337e4b 100644 --- a/scipost_django/journals/views.py +++ b/scipost_django/journals/views.py @@ -1836,6 +1836,31 @@ def manage_update_metadata(request): return render(request, "journals/manage_update_metadata.html", context) +@permission_required("scipost.can_publish_accepted_submission", return_403=True) +def manage_proceedings_metadata(request): + """ + This page offers Editorial Administrators tools for managing + the metadata of Proceedings. + """ + proceedings = Proceedings.objects.all() + + paginator = Paginator(proceedings, 25) + page = request.GET.get("page") + try: + proceedings = paginator.page(page) + except PageNotAnInteger: + proceedings = paginator.page(1) + except EmptyPage: + proceedings = paginator.page(paginator.num_pages) + + context = { + "proceedings_set": proceedings, + "page_obj": proceedings, + "paginator": paginator, + } + return render(request, "journals/manage_proceedings_metadata.html", context) + + @permission_required("scipost.can_publish_accepted_submission", return_403=True) def mark_report_doi_needed(request, report_id, needed): report = get_object_or_404(Report, pk=report_id) @@ -1894,6 +1919,10 @@ def generic_metadata_xml_deposit(request, **kwargs): _object = get_object_or_404(Comment, id=object_id) elif type_of_object == "update": _object = get_object_or_404(PublicationUpdate, id=object_id) + elif type_of_object == "proceedings": + _object = get_object_or_404(Proceedings, id=object_id) + else: + raise Http404 if not _object.doi_label: _object.create_doi_label() @@ -1910,9 +1939,10 @@ def generic_metadata_xml_deposit(request, **kwargs): idsalt = idsalt.encode("utf8") doi_batch_id = hashlib.sha1(salt + idsalt).hexdigest() - if type_of_object == "update": + if isinstance(_object, PublicationUpdate): metadata_xml = _object.xml(doi_batch_id=doi_batch_id) - + elif isinstance(_object, Proceedings): + metadata_xml = _object.metadata_xml else: # Report or Comment relation_to_published = ( _object.relation_to_published diff --git a/scipost_django/proceedings/models.py b/scipost_django/proceedings/models.py index 9ccd6dccd..23d6e8d09 100644 --- a/scipost_django/proceedings/models.py +++ b/scipost_django/proceedings/models.py @@ -2,6 +2,7 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" +from django.contrib.contenttypes.fields import GenericRelation from django.urls import reverse from django.db import models from django.utils import timezone @@ -66,6 +67,9 @@ class Proceedings(TimeStampedModel): # Metadata metadata_xml = models.TextField(blank=True) + genericdoideposit = GenericRelation( + "journals.GenericDOIDeposit", related_query_name="genericdoideposit" + ) # Templates template_latex_tgz = models.FileField( @@ -95,3 +99,7 @@ class Proceedings(TimeStampedModel): @property def open_for_submission(self): return self.submissions_open <= today and self.submissions_close >= today + + @property + def doi_label(self): + return self.issue.doi_label diff --git a/scipost_django/scipost/templates/scipost/personal_page/_hx_edadmin.html b/scipost_django/scipost/templates/scipost/personal_page/_hx_edadmin.html index fe83058c6..32eaed418 100644 --- a/scipost_django/scipost/templates/scipost/personal_page/_hx_edadmin.html +++ b/scipost_django/scipost/templates/scipost/personal_page/_hx_edadmin.html @@ -52,6 +52,7 @@ {% endif %} {% if perms.scipost.can_publish_accepted_submission %} <li><a href="{% url 'journals:manage_metadata' %}">Manage Publication metadata</a></li> + <li><a href="{% url 'journals:manage_proceedings_metadata' %}">Manage Proceedings metadata</a></li> <li><a href="{% url 'journals:manage_update_metadata' %}">Manage PublicationUpdate metadata</a></li> <li><a href="{% url 'journals:manage_comment_metadata' %}">Manage Comment metadata</a></li> <li><a href="{% url 'journals:manage_report_metadata' %}">Manage Report metadata</a></li> -- GitLab