diff --git a/scipost_django/journals/urls/general.py b/scipost_django/journals/urls/general.py index 5ae2a35b4bf357fbfeec4e1301126b373846336a..ac79842869a580628808aa3011f3aa6b8c85926b 100644 --- a/scipost_django/journals/urls/general.py +++ b/scipost_django/journals/urls/general.py @@ -6,9 +6,6 @@ from django.conf.urls import url from django.urls import path, re_path, reverse_lazy from django.views.generic import TemplateView, RedirectView -from submissions.constants import SUBMISSIONS_COMPLETE_REGEX - -from journals.regexes import PUBLICATION_DOI_LABEL_REGEX from journals import views as journals_views @@ -23,8 +20,8 @@ urlpatterns = [ name='publication-autocomplete', ), # Journals - url( - r'^$', + path( + '', journals_views.JournalListView.as_view(), name='journals' ), @@ -33,197 +30,273 @@ urlpatterns = [ journals_views.JournalListView.as_view(), name='journals_in_acad_spec' ), - url(r'^publications$', journals_views.PublicationListView.as_view(), name='publications'), - url(r'scipost_physics', RedirectView.as_view(url=reverse_lazy('scipost:landing_page', - args=['SciPostPhys']))), - url(r'^journals_terms_and_conditions$', - TemplateView.as_view(template_name='journals/journals_terms_and_conditions.html'), - name='journals_terms_and_conditions'), - url(r'^crossmark_policy$', - TemplateView.as_view(template_name='journals/crossmark_policy.html'), - name='crossmark_policy'), + path( + 'publications', + journals_views.PublicationListView.as_view(), + name='publications' + ), + path( + 'scipost_physics', + RedirectView.as_view( + url=reverse_lazy('scipost:landing_page', args=['SciPostPhys'])) + ), + path( + 'journals_terms_and_conditions', + TemplateView.as_view( + template_name='journals/journals_terms_and_conditions.html'), + name='journals_terms_and_conditions' + ), + path( + 'crossmark_policy', + TemplateView.as_view( + template_name='journals/crossmark_policy.html'), + name='crossmark_policy' + ), # Publication creation - url(r'^admin/publications/{regex}/$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + path( + 'admin/publications/<identifier:identifier_w_vn_nr>/', journals_views.DraftPublicationUpdateView.as_view(), - name='update_publication'), - url(r'^admin/publications/(?P<doi_label>{regex})/publish$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='update_publication' + ), + path( + 'admin/publications/<publication_doi_label:doi_label>/publish', journals_views.PublicationPublishView.as_view(), - name='publish_publication'), - url(r'^admin/publications/(?P<doi_label>{regex})/approval$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='publish_publication' + ), + path( + 'admin/publications/<publication_doi_label:doi_label>/approval', journals_views.DraftPublicationApprovalView.as_view(), - name='send_publication_for_approval'), - url(r'^admin/publications/(?P<doi_label>{regex})/authors$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), - # journals_views.PublicationAuthorOrderingView.as_view(), + name='send_publication_for_approval' + ), + path( + 'admin/publications/<publication_doi_label:doi_label>/authors', journals_views.publication_authors_ordering, - name='update_author_ordering'), - url(r'^admin/publications/(?P<doi_label>{regex})/grants$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='update_author_ordering' + ), + path( + 'admin/publications/<publication_doi_label:doi_label>/grants', journals_views.PublicationGrantsView.as_view(), - name='update_grants'), - url(r'^admin/publications/(?P<doi_label>{regex})/grants/(?P<grant_id>[0-9]+)/remove$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='update_grants' + ), + path( + 'admin/publications/<publication_doi_label:doi_label>/grants/<int:grant_id>/remove', journals_views.PublicationGrantsRemovalView.as_view(), - name='remove_grant'), + name='remove_grant' + ), # Editorial and Administrative Workflow - url(r'^admin/(?P<doi_label>{regex})/authors/add$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + path( + 'admin/<publication_doi_label:doi_label>/authors/add', journals_views.add_author, - name='add_author'), - url(r'^admin/(?P<doi_label>{regex})/manage_metadata/$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='add_author' + ), + path( + 'admin/<publication_doi_label:doi_label>/manage_metadata/', journals_views.manage_metadata, - name='manage_metadata'), - url(r'^admin/manage_metadata/$', + name='manage_metadata' + ), + path( + 'admin/manage_metadata/', journals_views.manage_metadata, - name='manage_metadata'), - url(r'^admin/(?P<doi_label>{regex})/authoraffiliations/$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='manage_metadata' + ), + path( + 'admin/<publication_doi_label:doi_label>/authoraffiliations/', journals_views.AuthorAffiliationView.as_view(), - name='author_affiliations'), - url(r'^admin/(?P<doi_label>{regex})/authoraffiliations/(?P<pk>[0-9]+)/add/$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), - #journals_views.AddAffiliationView.as_view(), + name='author_affiliations' + ), + path( + 'admin/<publication_doi_label:doi_label>/authoraffiliations/<int:pk>/add/', journals_views.add_affiliation, - name='author_affiliation_update'), - url(r'^admin/(?P<doi_label>{regex})/authoraffiliations/(?P<pk>[0-9]+)/remove/(?P<organization_id>[0-9]+)/$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), - #journals_views.AddAffiliationView.as_view(), + name='author_affiliation_update' + ), + path( + 'admin/<publication_doi_label:doi_label>/authoraffiliations/<int:pk>/remove/<int:organization_id>/', journals_views.remove_affiliation, - name='author_affiliation_remove'), - url(r'^admin/(?P<doi_label>{regex})/citation_list_metadata$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='author_affiliation_remove' + ), + path( + 'admin/<publication_doi_label:doi_label>/citation_list_metadata', journals_views.CitationUpdateView.as_view(), - name='create_citation_list_metadata'), - url(r'^admin/(?P<doi_label>{regex})/abstract_jats$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='create_citation_list_metadata' + ), + path( + 'admin/<publication_doi_label:doi_label>/abstract_jats', journals_views.AbstractJATSUpdateView.as_view(), - name='abstract_jats'), - url(r'^admin/(?P<doi_label>{regex})/update_references$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), - journals_views.update_references, name='update_references'), - url(r'^admin/(?P<doi_label>{regex})/funders/create_metadata$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='abstract_jats' + ), + path( + 'admin/<publication_doi_label:doi_label>/update_references', + journals_views.update_references, + name='update_references' + ), + path( + 'admin/<publication_doi_label:doi_label>/funders/create_metadata', journals_views.FundingInfoView.as_view(), - name='create_funding_info_metadata'), - url(r'^admin/(?P<doi_label>{regex})/funders/add_generic$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='create_funding_info_metadata' + ), + path( + 'admin/<publication_doi_label:doi_label>/funders/add_generic', journals_views.add_generic_funder, - name='add_generic_funder'), - url(r'^admin/(?P<doi_label>{regex})/grants/add$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='add_generic_funder' + ), + path( + 'admin/<publication_doi_label:doi_label>/grants/add', journals_views.add_associated_grant, - name='add_associated_grant'), + name='add_associated_grant' + ), # Admin: Volumes and Issues - url(r'^admin/volumes/$', + path( + 'admin/volumes/', journals_views.VolumesAdminListView.as_view(), - name='admin_volumes_list'), - url(r'^admin/volumes/add$', + name='admin_volumes_list' + ), + path( + 'admin/volumes/add', journals_views.VolumesAdminAddView.as_view(), - name='add_volume'), - url(r'^admin/volumes/(?P<pk>[0-9]+)/$', + name='add_volume' + ), + path( + 'admin/volumes/<int:pk>/', journals_views.VolumesAdminUpdateView.as_view(), - name='update_volume'), - url(r'^admin/issues/$', + name='update_volume' + ), + path( + 'admin/issues/', journals_views.IssuesAdminListView.as_view(), - name='admin_issue_list'), - url(r'^admin/issues/add$', + name='admin_issue_list' + ), + path( + 'admin/issues/add', journals_views.IssuesAdminAddView.as_view(), - name='add_issue'), - url(r'^admin/issues/(?P<pk>[0-9]+)/$', + name='add_issue' + ), + path( + 'admin/issues/<int:pk>/', journals_views.IssuesAdminUpdateView.as_view(), - name='update_issue'), + name='update_issue' + ), # Metadata handling - url(r'^admin/(?P<doi_label>{regex})/metadata/crossref/create$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + path( + 'admin/<publication_doi_label:doi_label>/metadata/crossref/create', journals_views.CreateMetadataXMLView.as_view(), - name='create_metadata_xml'), - url(r'^admin/(?P<doi_label>{regex})/metadata/crossref/deposit/(?P<option>[a-z]+)$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='create_metadata_xml' + ), + path( + 'admin/<publication_doi_label:doi_label>/metadata/crossref/deposit/<str:option>', journals_views.metadata_xml_deposit, - name='metadata_xml_deposit'), - url(r'^admin/(?P<doi_label>{regex})/metadata/DOAJ$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='metadata_xml_deposit' + ), + path( + 'admin/<publication_doi_label:doi_label>/metadata/DOAJ', journals_views.produce_metadata_DOAJ, - name='produce_metadata_DOAJ'), - url(r'^admin/(?P<doi_label>{regex})/metadata/DOAJ/deposit$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='produce_metadata_DOAJ' + ), + path( + 'admin/<publication_doi_label:doi_label>/metadata/DOAJ/deposit', journals_views.metadata_DOAJ_deposit, - name='metadata_DOAJ_deposit'), - url(r'^admin/metadata/crossref/(?P<deposit_id>[0-9]+)/mark/(?P<success>[0-1])$', + name='metadata_DOAJ_deposit' + ), + path( + 'admin/metadata/crossref/<int:deposit_id>/mark/<int:success>', journals_views.mark_deposit_success, - name='mark_deposit_success'), - url(r'^admin/metadata/DOAJ/(?P<deposit_id>[0-9]+)/mark/(?P<success>[0-1])$', + name='mark_deposit_success' + ), + path( + 'admin/metadata/DOAJ/<int:deposit_id>/mark/<int:success>', journals_views.mark_doaj_deposit_success, - name='mark_doaj_deposit_success'), - url(r'^admin/metadata/generic/(?P<type_of_object>[a-z]+)/(?P<object_id>[0-9]+)/metadata$', + name='mark_doaj_deposit_success' + ), + path( + 'admin/metadata/generic/<str:type_of_object>/<int:object_id>/metadata', journals_views.generic_metadata_xml_deposit, - name='generic_metadata_xml_deposit'), - url(r'^admin/metadata/generic/(?P<deposit_id>[0-9]+)/mark/(?P<success>[0-1])$', + name='generic_metadata_xml_deposit' + ), + path( + 'admin/metadata/generic/<int:deposit_id>/mark/<int:success>', journals_views.mark_generic_deposit_success, - name='mark_generic_deposit_success'), - url(r'^admin/generic/(?P<type_of_object>[a-z]+)/(?P<object_id>[0-9]+)/email_made_citable$', + name='mark_generic_deposit_success' + ), + path( + 'admin/generic/<str:type_of_object>/<int:object_id>/email_made_citable', journals_views.email_object_made_citable, - name='email_object_made_citable'), + name='email_object_made_citable' + ), # Topics: - url(r'^publication_add_topic/(?P<doi_label>{regex})$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + path( + 'publication_add_topic/<publication_doi_label:doi_label>', 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_LABEL_REGEX), + name='publication_add_topic' + ), + path( + 'publication_remove_topic/<publication_doi_label:doi_label>/<slug:slug>/', journals_views.publication_remove_topic, - name='publication_remove_topic'), + name='publication_remove_topic' + ), # PubFraction allocation: - url(r'^allocate_orgpubfractions/(?P<doi_label>{regex})$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + path( + 'allocate_orgpubfractions/<publication_doi_label:doi_label>', journals_views.allocate_orgpubfractions, - name='allocate_orgpubfractions'), - url(r'^request_pubfrac_check/(?P<doi_label>{regex})$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='allocate_orgpubfractions' + ), + path( + 'request_pubfrac_check/<publication_doi_label:doi_label>', journals_views.request_pubfrac_check, - name='request_pubfrac_check'), + name='request_pubfrac_check' + ), # Citedby - url(r'^admin/citedby/$', + path( + 'admin/citedby/', journals_views.harvest_citedby_list, - name='harvest_citedby_list'), - url(r'^admin/citedby/(?P<doi_label>{regex})/harvest$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='harvest_citedby_list' + ), + path( + 'admin/citedby/<publication_doi_label:doi_label>/harvest', journals_views.harvest_citedby_links, - name='harvest_citedby_links'), + name='harvest_citedby_links' + ), # Reports - url(r'^reports/$', + path( + 'reports/', journals_views.manage_report_metadata, - name='manage_report_metadata'), - url(r'^reports/(?P<report_id>[0-9]+)/sign$', + name='manage_report_metadata' + ), + path( + 'reports/<int:report_id>/sign', journals_views.sign_existing_report, - name='sign_existing_report'), - url(r'^reports/(?P<report_id>[0-9]+)/mark_doi_needed/(?P<needed>[0-1])$', + name='sign_existing_report' + ), + path( + 'reports/<int:report_id>/mark_doi_needed/<int:needed>', journals_views.mark_report_doi_needed, - name='mark_report_doi_needed'), + name='mark_report_doi_needed' + ), # Comments - url(r'^comments/$', + path( + 'comments/', journals_views.manage_comment_metadata, - name='manage_comment_metadata'), - url(r'^comments/(?P<comment_id>[0-9]+)/mark_doi_needed/(?P<needed>[0-1])$', + name='manage_comment_metadata' + ), + path( + 'comments/<int:comment_id>/mark_doi_needed/<int:needed>', journals_views.mark_comment_doi_needed, - name='mark_comment_doi_needed'), + name='mark_comment_doi_needed' + ), # PublicationUpdates - url(r'^updates/$', + path( + 'updates/', journals_views.manage_update_metadata, - name='manage_update_metadata'), + name='manage_update_metadata' + ), ] diff --git a/scipost_django/journals/urls/journal.py b/scipost_django/journals/urls/journal.py index 9c7fa9d8fb9d14ad9f51de45a8854be1ae29c86b..9c2299ea55749b9c0098adcc78696bc5f02f9fc5 100644 --- a/scipost_django/journals/urls/journal.py +++ b/scipost_django/journals/urls/journal.py @@ -2,7 +2,6 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" -from django.conf.urls import url from django.urls import path from journals import views as journals_views @@ -12,12 +11,36 @@ app_name = 'urls.journals' urlpatterns = [ # Journal routes - url(r'^issues$', journals_views.IssuesView.as_view(), name='issues'), - url(r'^recent$', journals_views.redirect_to_about, name='recent'), - url(r'^accepted$', journals_views.redirect_to_about, name='accepted'), - url(r'^authoring$', journals_views.authoring, name='authoring'), - url(r'^refereeing$', journals_views.refereeing, name='refereeing'), - url(r'^about$', journals_views.about, name='about'), + path( + 'issues', + journals_views.IssuesView.as_view(), + name='issues' + ), + path( + 'recent', + journals_views.redirect_to_about, + name='recent' + ), + path( + 'accepted', + journals_views.redirect_to_about, + name='accepted' + ), + path( + 'authoring', + journals_views.authoring, + name='authoring' + ), + path( + 'refereeing', + journals_views.refereeing, + name='refereeing' + ), + path( + 'about', + journals_views.about, + name='about' + ), path( 'metrics/<specialty:specialty>', journals_views.metrics, diff --git a/scipost_django/journals/views.py b/scipost_django/journals/views.py index 635afdc2823b72559353c2d605536822c024536d..26a761a69ee33ddc24912826941df86c64bdfbde 100644 --- a/scipost_django/journals/views.py +++ b/scipost_django/journals/views.py @@ -210,7 +210,10 @@ def landing_page(request, doi_label): The landing page of a Journal lists either the latest and the current issue of a Journal or paginates its individual Publications. """ + print(doi_label) journal = get_object_or_404(Journal, doi_label=doi_label) + print(journal) + print(len(Submission.objects.accepted())) accepted_submission_ids = [sub.id for sub in Submission.objects.accepted() \ if sub.editorial_decision.for_journal==journal] context = { @@ -907,10 +910,12 @@ def metadata_xml_deposit(request, doi_label, option='test'): @permission_required('scipost.can_publish_accepted_submission', return_403=True) def mark_deposit_success(request, deposit_id, success): deposit = get_object_or_404(Deposit, pk=deposit_id) - if success == '1': + if success == 1: deposit.deposit_successful = True - elif success == '0': + elif success == 0: deposit.deposit_successful = False + else: + return Http404 deposit.save() return redirect('journals:manage_metadata') @@ -1097,10 +1102,12 @@ def request_pubfrac_check(request, doi_label): @permission_required('scipost.can_publish_accepted_submission', return_403=True) def mark_doaj_deposit_success(request, deposit_id, success): deposit = get_object_or_404(DOAJDeposit, pk=deposit_id) - if success == '1': + if success == 1: deposit.deposit_successful = True - elif success == '0': + elif success == 0: deposit.deposit_successful = False + else: + raise Http404 deposit.save() return redirect('journals:manage_metadata') @@ -1234,10 +1241,12 @@ def manage_update_metadata(request): @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) - if needed == '1': + if needed == 1: report.needs_doi = True - elif needed == '0': + elif needed == 0: report.needs_doi = False + else: + raise Http404 report.save() return redirect(reverse('journals:manage_report_metadata')) @@ -1245,10 +1254,12 @@ def mark_report_doi_needed(request, report_id, needed): @permission_required('scipost.can_publish_accepted_submission', return_403=True) def mark_comment_doi_needed(request, comment_id, needed): comment = get_object_or_404(Comment, pk=comment_id) - if needed == '1': + if needed == 1: comment.needs_doi = True - elif needed == '0': + elif needed == 0: comment.needs_doi = False + else: + raise Http404 comment.save() return redirect(reverse('journals:manage_comment_metadata')) @@ -1418,12 +1429,14 @@ def generic_metadata_xml_deposit(request, **kwargs): @permission_required('scipost.can_publish_accepted_submission', return_403=True) def mark_generic_deposit_success(request, deposit_id, success): deposit = get_object_or_404(GenericDOIDeposit, pk=deposit_id) - if success == '1': + if success == 1: deposit.deposit_successful = True deposit.content_object.doideposit_needs_updating = False deposit.content_object.save() - elif success == '0': + elif success == 0: deposit.deposit_successful = False + else: + raise Http404 deposit.save() if deposit.content_type.name == 'report': return redirect(reverse('journals:manage_report_metadata')) diff --git a/scipost_django/mailing_lists/urls.py b/scipost_django/mailing_lists/urls.py index c3abb11cf84a1d963b086b940c1a4b9258da0295..cb5463424b2ba2dafa656fb15b4cc4fadf4ff52d 100644 --- a/scipost_django/mailing_lists/urls.py +++ b/scipost_django/mailing_lists/urls.py @@ -2,7 +2,7 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" -from django.conf.urls import url +from django.urls import path from . import views @@ -10,10 +10,29 @@ app_name = 'mailing_lists' urlpatterns = [ # Mailchimp - url(r'^$', views.MailchimpListView.as_view(), name='overview'), - url(r'^sync$', views.syncronize_lists, name='sync_lists'), - url(r'^sync/(?P<list_id>[0-9a-zA-Z]+)/members$', views.syncronize_members, name='sync_members'), - url(r'^(?P<list_id>[0-9a-zA-Z]+)/$', views.ListDetailView.as_view(), name='list_detail'), - url(r'^non_registered/export$', views.export_non_registered_invitations, - name='export_non_registered_invitations'), + path( + '', + views.MailchimpListView.as_view(), + name='overview' + ), + path( + 'sync', + views.syncronize_lists, + name='sync_lists' + ), + path( + 'sync/<str:list_id>/members', + views.syncronize_members, + name='sync_members' + ), + path( + '<str:list_id>/', + views.ListDetailView.as_view(), + name='list_detail' + ), + path( + 'non_registered/export', + views.export_non_registered_invitations, + name='export_non_registered_invitations' + ), ] diff --git a/scipost_django/markup/urls.py b/scipost_django/markup/urls.py index dd40e75981328843a434980e57144cd64c8c689e..be914d898485676be8e6dbe73ab8e81d8fb216fa 100644 --- a/scipost_django/markup/urls.py +++ b/scipost_django/markup/urls.py @@ -2,7 +2,7 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" -from django.conf.urls import url +from django.urls import path from . import views @@ -10,28 +10,28 @@ app_name = 'markup' urlpatterns = [ - url( - r'^process/$', + path( + 'process/', views.process, name='process' ), - url( - r'^help/$', + path( + 'help/', views.markup_help, name='help' ), - url( - r'^help/plaintext$', + path( + 'help/plaintext', views.plaintext_help, name='plaintext_help' ), - url( - r'^help/Markdown$', + path( + 'help/Markdown', views.markdown_help, name='markdown_help' ), - url( - r'^help/reStructuredText$', + path( + 'help/reStructuredText', views.restructuredtext_help, name='restructuredtext_help' ), diff --git a/scipost_django/news/urls.py b/scipost_django/news/urls.py index e6209bd7ed0993bd242bf420ca5658039de88941..116efb248331d1af99f8659d0dccb1cd2aad6c74 100644 --- a/scipost_django/news/urls.py +++ b/scipost_django/news/urls.py @@ -2,43 +2,64 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" -from django.conf.urls import url +from django.urls import path from . import views app_name = 'news' urlpatterns = [ - url(r'^manage/$', + path( + 'manage/', views.NewsManageView.as_view(), - name='manage'), - url(r'^newsletter/(?P<year>[0-9]{4,})-(?P<month>[0-9]{2,})-(?P<day>[0-9]{2,})/$', + name='manage' + ), + path( + 'newsletter/<YYYY:year>-<MM:month>-<DD:day>/', views.NewsLetterView.as_view(), - name='newsletter_detail'), - url(r'^newsletter/add/$', + name='newsletter_detail' + ), + path( + 'newsletter/add/', views.NewsLetterCreateView.as_view(), - name='newsletter_create'), - url(r'^newsletter/(?P<pk>[0-9]+)/update/$', + name='newsletter_create' + ), + path( + 'newsletter/<int:pk>/update/', views.NewsLetterUpdateView.as_view(), - name='newsletter_update'), - url(r'^newsletter/(?P<pk>[0-9]+)/update_ordering/$', - #views.NewsLetterNewsItemsOrderingUpdateView.as_view(), + name='newsletter_update' + ), + path( + 'newsletter/<int:pk>/update_ordering/', views.newsletter_update_ordering, - name='newsletter_update_ordering'), - url(r'^newsletter/(?P<pk>[0-9]+)/delete/$', + name='newsletter_update_ordering' + ), + path( + 'newsletter/<int:pk>/delete/', views.NewsLetterDeleteView.as_view(), - name='newsletter_delete'), - url(r'^newsitem/add/$', + name='newsletter_delete' + ), + path( + 'newsitem/add/', views.NewsItemCreateView.as_view(), - name='newsitem_create'), - url(r'^newsitem/(?P<pk>[0-9]+)/update/$', + name='newsitem_create' + ), + path( + 'newsitem/<int:pk>/update/', views.NewsItemUpdateView.as_view(), - name='newsitem_update'), - url(r'^newsitem/(?P<pk>[0-9]+)/delete/$', + name='newsitem_update' + ), + path( + 'newsitem/<int:pk>/delete/', views.NewsItemDeleteView.as_view(), - name='newsitem_delete'), - url(r'^add_newsitem_to_newsletter/(?P<nlpk>[0-9]+)/$', + name='newsitem_delete' + ), + path( + 'add_newsitem_to_newsletter/<int:nlpk>/', views.NewsLetterNewsItemsTableCreateView.as_view(), - name='add_newsitem_to_newsletter'), - url(r'^$', views.NewsListView.as_view(), name='news'), + name='add_newsitem_to_newsletter' + ), + path( + '', views.NewsListView.as_view(), name='news' + ), ] diff --git a/scipost_django/news/views.py b/scipost_django/news/views.py index 80f1864ccf8252349efe293e400446bf7027d80e..71cb4b805e6073a6721a6df607d5ed50d0ff72be 100644 --- a/scipost_django/news/views.py +++ b/scipost_django/news/views.py @@ -84,36 +84,6 @@ def newsletter_update_ordering(request, pk): return render(request, 'news/newsletter_update_ordering.html', context) -class NewsLetterNewsItemsOrderingUpdateView(PermissionsMixin, UpdateView): - """ - Update the ordering of News Items within a Newsletter. - """ - permission_required = 'scipost.can_manage_news' - model = NewsLetterNewsItemsTable - fields = ['order'] - template_name = 'news/newsletter_update_ordering.html' - success_url = reverse_lazy('news:news') - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - newsletter = get_object_or_404(NewsLetter, id=self.kwargs['pk']) - context['ni_formset'] = NewsLetterNewsItemsOrderingFormSet( - self.request.POST or None, - queryset=newsletter.newsletternewsitemstable_set.order_by('order')) - return context - - # def form_valid(self, form): - # context = self.get_context_data() - # ni_formset = context['ni_formset'] - # if ni_formset.is_valid(): - # # self.object = form.save() - # # ni_formset.instance = self.object - # ni_formset.save() - # return redirect(self.success_url) - # else: - # return self.render_to_response(self.get_context_data(form=form)) - - class NewsLetterDeleteView(PermissionsMixin, DeleteView): """ Delete a NewsLetter. diff --git a/scipost_django/ontology/urls.py b/scipost_django/ontology/urls.py index dba3e54cb66b9d39f1a53c317023135bc695b9dc..f9b9bef54e6044129992018cbfa5fe8420eee37d 100644 --- a/scipost_django/ontology/urls.py +++ b/scipost_django/ontology/urls.py @@ -2,7 +2,6 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" -from django.conf.urls import url from django.urls import path from . import views @@ -35,48 +34,48 @@ urlpatterns = [ views.TopicLinkedAutocompleteView.as_view(), name='topic-linked-autocomplete', ), - url( - r'^$', + path( + '', views.ontology, name='ontology' ), - url( - r'^topic/add/$', + path( + 'topic/add/', views.TopicCreateView.as_view(), name='topic_create' ), - url( - r'^topic/(?P<slug>[-\w]+)/add_tags/$', + path( + 'topic/<slug:slug>/add_tags/', views.topic_add_tags, name='topic_add_tags' ), - url( - r'^topic/(?P<slug>[-\w]+)/remove_tag/(?P<tag_id>[0-9]+)/$', + path( + 'topic/<slug:slug>/remove_tag/<int:tag_id>/', views.topic_remove_tag, name='topic_remove_tag' ), - url( - r'^topic/(?P<slug>[-\w]+)/update/$', + path( + 'topic/<slug:slug>/update/', views.TopicUpdateView.as_view(), name='topic_update' ), - url( - r'^topic/(?P<slug>[-\w]+)/$', + path( + 'topic/<slug:slug>/', views.TopicDetailView.as_view(), name='topic_details' ), - url( - r'^topics/$', + path( + 'topics/', views.TopicListView.as_view(), name='topics' ), - url( - r'^add_relation_asym/(?P<slug>[-\w]+)/$', + path( + 'add_relation_asym/<slug:slug>/', views.add_relation_asym, name='add_relation_asym' ), - url( - r'^delete_relation_asym/(?P<relation_id>[0-9]+)/(?P<slug>[-\w]+)/$', + path( + 'delete_relation_asym/<int:relation_id>/<slug:slug>/', views.delete_relation_asym, name='delete_relation_asym' ), diff --git a/scipost_django/organizations/urls.py b/scipost_django/organizations/urls.py index 4284fec2a6787fe425dccd668a6441d1f120dcbc..9cc17ef6188bcfec63934093701b4a89cab69a46 100644 --- a/scipost_django/organizations/urls.py +++ b/scipost_django/organizations/urls.py @@ -2,7 +2,6 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" -from django.conf.urls import url from django.urls import path from . import views @@ -15,123 +14,124 @@ urlpatterns = [ views.OrganizationAutocompleteView.as_view(), name='organization-autocomplete', ), - url( - r'^$', + path( + '', views.OrganizationListView.as_view(), name='organizations' ), - url( - r'^add/$', + path( + 'add/', views.OrganizationCreateView.as_view(), name='organization_create' ), - url( - r'^(?P<pk>[0-9]+)/update/$', + path( + '<int:pk>/update/', views.OrganizationUpdateView.as_view(), name='organization_update' ), - url( - r'^(?P<pk>[0-9]+)/delete/$', + path( + '<int:pk>/delete/', views.OrganizationDeleteView.as_view(), name='organization_delete' ), - url( - r'^(?P<pk>[0-9]+)/$', + path( + '<int:pk>/', views.OrganizationDetailView.as_view(), name='organization_detail' ), - url( - r'^get_organization_detail$', + path( + 'get_organization_detail', views.get_organization_detail, name='get_organization_detail' ), - url( - r'^(?P<pk>[0-9]+)/orgevent/add/$', + path( + '<int:pk>/orgevent/add/', views.OrganizationEventCreateView.as_view(), name='organizationevent_create' ), - url( - r'^organizationevents/$', + path( + 'organizationevents/', views.OrganizationEventListView.as_view(), name='organizationevent_list' ), - url( - r'^add_contactperson/(?P<organization_id>[0-9]+)/$', + path( + 'add_contactperson/<organization_id>/', views.ContactPersonCreateView.as_view(), name='contactperson_create' ), - url( - r'^contactperson/add/$', + path( + 'contactperson/add/', views.ContactPersonCreateView.as_view(), name='contactperson_create' ), - url( - r'^contactperson/(?P<pk>[0-9]+)/update/$', + path( + 'contactperson/<int:pk>/update/', views.ContactPersonUpdateView.as_view(), name='contactperson_update' ), - url( - r'^contactperson/(?P<pk>[0-9]+)/delete/$', + path( + 'contactperson/<int:pk>/delete/', views.ContactPersonDeleteView.as_view(), name='contactperson_delete' ), - url( - r'^contactpersons/$', + path( + 'contactpersons/', views.ContactPersonListView.as_view(), name='contactperson_list' ), - url( - r'^contactperson/(?P<contactperson_id>[0-9]+)/email/(?P<mail>followup)$', + path( + 'contactperson/<int:contactperson_id>/email/<str:mail>', views.email_contactperson, name='email_contactperson' ), - url( - r'^contactperson/(?P<contactperson_id>[0-9]+)/email/$', + path( + 'contactperson/<int:contactperson_id>/email/', views.email_contactperson, name='email_contactperson' ), - url( + path( # For upgrading a ContactPerson to a Contact - r'^add_contact/(?P<organization_id>[0-9]+)/(?P<contactperson_id>[0-9]+)/$', + 'add_contact/<int:organization_id>/<int:contactperson_id>/', views.organization_add_contact, name='add_contact' ), - url( - r'^add_contact/(?P<organization_id>[0-9]+)/$', + path( + 'add_contact/<int:organization_id>/', views.organization_add_contact, name='add_contact' ), - url( - r'^activate/(?P<activation_key>.+)$', + path( + 'activate/<str:activation_key>', views.activate_account, name='activate_account' ), - url( - r'^dashboard/$', + path( + 'dashboard/', views.dashboard, name='dashboard' ), - url(r'^contact/(?P<pk>[0-9]+)/$', + path( + 'contact/<int:pk>/', views.ContactDetailView.as_view(), name='contact_details' ), - url( - r'^contactrole/(?P<pk>[0-9]+)/update/$', + path( + 'contactrole/<int:pk>/update/', views.ContactRoleUpdateView.as_view(), name='contactrole_update' ), - url( - r'^contactrole/(?P<pk>[0-9]+)/delete/$', + path( + 'contactrole/<int:pk>/delete/', views.ContactRoleDeleteView.as_view(), name='contactrole_delete' ), - url( - r'^contactrole/(?P<contactrole_id>[0-9]+)/email/(?P<mail>renewal)$', + path( + 'contactrole/<contactrole_id>/email/<str:mail>', views.email_contactrole, name='email_contactrole' ), - url( - r'^contactrole/(?P<contactrole_id>[0-9]+)/email/$', + path( + 'contactrole/<contactrole_id>/email/', views.email_contactrole, name='email_contactrole' ), diff --git a/scipost_django/organizations/views.py b/scipost_django/organizations/views.py index 077aa0819a7be1b33dd27dcb45ef4b6540773dbb..95e43ce0be3c82a8b2d53577e003d677c1bb014a 100644 --- a/scipost_django/organizations/views.py +++ b/scipost_django/organizations/views.py @@ -430,6 +430,7 @@ class ContactRoleDeleteView(PermissionsMixin, DeleteView): def email_contactrole(request, contactrole_id, mail=None): contactrole = get_object_or_404(ContactRole, pk=contactrole_id) + print(f'mail = {mail}') suffix = '' if mail == 'renewal': mail_code = 'org_contacts/contactrole_subsidy_renewal_mail' diff --git a/scipost_django/petitions/urls.py b/scipost_django/petitions/urls.py index e7e42d64db2fb27115b8b55c70b272953c728fbf..19c98d7f1e246aaae450928a36bb4b0ef4427485 100644 --- a/scipost_django/petitions/urls.py +++ b/scipost_django/petitions/urls.py @@ -2,14 +2,21 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" -from django.conf.urls import url +from django.urls import path from . import views app_name = 'petitions' urlpatterns = [ - url(r'^(?P<slug>[-\w]+)/verify_signature/(?P<key>.+)$', - views.verify_signature, name='verify_signature'), - url(r'^(?P<slug>[-\w]+)$', views.petition, name='petition'), + path( + '<slug:slug>/verify_signature/<str:key>', + views.verify_signature, + name='verify_signature' + ), + path( + '<slug:slug>', + views.petition, + name='petition' + ), ] diff --git a/scipost_django/preprints/urls.py b/scipost_django/preprints/urls.py index d683be114944e74633fb0313d210404cd1c99a44..71cc84bde5ba703098b6f07ede5ef73ed2d6ceea 100644 --- a/scipost_django/preprints/urls.py +++ b/scipost_django/preprints/urls.py @@ -2,19 +2,22 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" -from django.conf.urls import url +from django.urls import path from . import views -from submissions.constants import SUBMISSIONS_WO_VN_REGEX, SUBMISSIONS_COMPLETE_REGEX app_name = 'preprints' urlpatterns = [ - url(r'^{regex}/$'.format(regex=SUBMISSIONS_WO_VN_REGEX), + path( + '<identifier_wo_vn_nr:identifier_wo_vn_nr>/', views.preprint_pdf_wo_vn_nr, - name='preprint_wo_vn_nr'), - url(r'^{regex}/$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + name='preprint_wo_vn_nr' + ), + path( + '<identifier:identifier_w_vn_nr>/', views.preprint_pdf, - name='pdf'), + name='pdf' + ), ] diff --git a/scipost_django/preprints/views.py b/scipost_django/preprints/views.py index fafc358b3bf3b8444ec66b2336b3f11542b708e8..212ee89f16fe61783d379173cb00a2653f526d93 100644 --- a/scipost_django/preprints/views.py +++ b/scipost_django/preprints/views.py @@ -17,6 +17,7 @@ def preprint_pdf_wo_vn_nr(request, identifier_wo_vn_nr): """ submissions = get_list_or_404( Submission, preprint__identifier_w_vn_nr__startswith=identifier_wo_vn_nr) + print(submissions) latest = submissions[0].get_latest_version() return redirect(reverse( 'preprints:pdf', diff --git a/scipost_django/scipost/urls.py b/scipost_django/scipost/urls.py index b58cf497f7401f1c001fe327f213885d896e0c13..a748fd02b57eb3d3192fd39bb68bc4bbcac9182c 100644 --- a/scipost_django/scipost/urls.py +++ b/scipost_django/scipost/urls.py @@ -29,12 +29,19 @@ app_name = 'scipost' urlpatterns = [ # redirect for favicon - re_path(r'^favicon\.ico$', favicon_view), + path( + 'favicon\.ico', + favicon_view + ), # Utilities: # Test Sentry installation - url(r'sentry-debug/$', views.trigger_error, name='trigger_error'), + path( + 'sentry-debug/', + views.trigger_error, + name='trigger_error' + ), # Autocomplete path( @@ -49,75 +56,162 @@ urlpatterns = [ ), # Search - url(r'^search_old$', views.SearchView.as_view(), name='search_old'), - url( - r'^search$', + path( + 'search_old', + views.SearchView.as_view(), + name='search_old' + ), + path( + 'search', TemplateView.as_view(template_name='search/search.html'), name='search' ), - url(r'^$', views.index, name='index'), - url(r'^files/secure/(?P<path>.*)$', views.protected_serve, name='secure_file'), + path( + '', + views.index, + name='index' + ), + path( + 'files/secure/<path:path>', + views.protected_serve, + name='secure_file' + ), # General use pages - url(r'^error$', TemplateView.as_view(template_name='scipost/error.html'), name='error'), - url(r'^acknowledgement$', TemplateView.as_view(template_name='scipost/acknowledgement.html'), - name='acknowledgement'), + path( + 'error', + TemplateView.as_view( + template_name='scipost/error.html'), + name='error' + ), + path( + 'acknowledgement', + TemplateView.as_view( + template_name='scipost/acknowledgement.html'), + name='acknowledgement' + ), # Info - url(r'^about$', TemplateView.as_view(template_name='scipost/about.html'), name='about'), + path( + 'about', + TemplateView.as_view( + template_name='scipost/about.html'), + name='about' + ), path( 'contact', TemplateView.as_view(template_name='scipost/contact.html'), name='contact' ), - url(r'^call$', TemplateView.as_view(template_name='scipost/call.html'), name='call'), - url(r'^donations/thank-you/$', TemplateView.as_view(template_name='scipost/donation_thank_you.html'), name='donation_thank_you'), - url( - r'^ExpSustDrive2018$', + path( + 'call', + TemplateView.as_view( + template_name='scipost/call.html'), + name='call' + ), + path( + 'donations/thank-you/', + TemplateView.as_view( + template_name='scipost/donation_thank_you.html'), + name='donation_thank_you' + ), + path( + 'ExpSustDrive2018', TemplateView.as_view(template_name='scipost/ExpSustDrive2018.html'), name='ExpSustDrive2018' ), - url( - r'^PlanSciPost$', + path( + 'PlanSciPost', TemplateView.as_view(template_name='scipost/PlanSciPost.html'), name='PlanSciPost' ), - url(r'^foundation$', TemplateView.as_view(template_name='scipost/foundation.html'), - name='foundation'), - url(r'^tour$', TemplateView.as_view(template_name='scipost/quick_tour.html'), - name='quick_tour'), - url(r'^FAQ$', TemplateView.as_view(template_name='scipost/FAQ.html'), name='FAQ'), - url(r'^terms_and_conditions$', + path( + 'foundation', + TemplateView.as_view(template_name='scipost/foundation.html'), + name='foundation' + ), + path( + 'tour', + TemplateView.as_view(template_name='scipost/quick_tour.html'), + name='quick_tour' + ), + path( + 'FAQ', + TemplateView.as_view(template_name='scipost/FAQ.html'), + name='FAQ' + ), + path( + 'terms_and_conditions', TemplateView.as_view(template_name='scipost/terms_and_conditions.html'), - name='terms_and_conditions'), - url(r'^privacy_policy$', TemplateView.as_view(template_name='scipost/privacy_policy.html'), - name='privacy_policy'), + name='terms_and_conditions' + ), + path( + 'privacy_policy', + TemplateView.as_view(template_name='scipost/privacy_policy.html'), + name='privacy_policy' + ), # Feeds - url(r'^feeds$', views.feeds, name='feeds'), - url(r'^rss/news/$', LatestNewsFeedRSS(), name='feeds_rss_news'), - url(r'^atom/news/$', LatestNewsFeedAtom(), name='feeds_atom_news'), - url(r'^rss/comments/$', LatestCommentsFeedRSS(), name='feeds_rss_comments'), - url(r'^atom/comments/$', LatestCommentsFeedAtom(), name='feeds_atom_comments'), - url(r'^rss/submissions/$', LatestSubmissionsFeedRSS(), name='feeds_rss_submissions'), + path( + 'feeds', + views.feeds, + name='feeds' + ), + path( + 'rss/news/', + LatestNewsFeedRSS(), + name='feeds_rss_news' + ), + path( + 'atom/news/', + LatestNewsFeedAtom(), + name='feeds_atom_news' + ), + path( + 'rss/comments/', + LatestCommentsFeedRSS(), + name='feeds_rss_comments' + ), + path( + 'atom/comments/', + LatestCommentsFeedAtom(), + name='feeds_atom_comments' + ), + path( + 'rss/submissions/', + LatestSubmissionsFeedRSS(), + name='feeds_rss_submissions' + ), path( 'rss/submissions/<specialty:specialty>', LatestSubmissionsFeedRSS(), name='sub_feed_spec_rss' ), - url(r'^atom/submissions/$', LatestSubmissionsFeedAtom(), name='feeds_atom_submissions'), + path( + 'atom/submissions/', + LatestSubmissionsFeedAtom(), + name='feeds_atom_submissions' + ), path( 'atom/submissions/<specialty:specialty>', LatestSubmissionsFeedAtom(), name='sub_feed_spec_atom' ), - url(r'^rss/publications/$', LatestPublicationsFeedRSS(), name='feeds_rss_publications'), + path( + 'rss/publications/', + LatestPublicationsFeedRSS(), + name='feeds_rss_publications' + ), path( 'rss/publications/<specialty:specialty>', LatestPublicationsFeedRSS(), name='pub_feed_spec_rss' ), - url(r'^atom/publications/$', LatestPublicationsFeedAtom(), name='feeds_atom_publications'), + path( + 'atom/publications/', + LatestPublicationsFeedAtom(), + name='feeds_atom_publications' + ), path( 'atom/publications/<specialty:specialty>', LatestPublicationsFeedAtom(), @@ -130,54 +224,90 @@ urlpatterns = [ ################ # Contributor info (public view) - url(r'^contributor/(?P<contributor_id>[0-9]+)$', views.contributor_info, - name="contributor_info"), + path( + 'contributor/<int:contributor_id>', + views.contributor_info, + name='contributor_info' + ), # Registration - url(r'^register$', views.register, name='register'), - url(r'^thanks_for_registering$', - TemplateView.as_view(template_name='scipost/thanks_for_registering.html'), - name='thanks_for_registering'), - url(r'^activation/(?P<contributor_id>[0-9]+)/(?P<key>.+)/$', - views.activation, name='activation'), - url(r'^activation/(?P<contributor_id>[0-9]+)/(?P<key>.+)/renew$', - views.request_new_activation_link, name='request_new_activation_link'), - url(r'^unsubscribe/(?P<contributor_id>[0-9]+)/(?P<key>.+)$', views.unsubscribe, - name='unsubscribe'), - url(r'^vet_registration_requests$', - views.vet_registration_requests, name='vet_registration_requests'), - url(r'^vet_registration_request_ack/(?P<contributor_id>[0-9]+)$', - views.vet_registration_request_ack, name='vet_registration_request_ack'), - url(r'^registration_requests$', views.registration_requests, name="registration_requests"), - url(r'^registration_requests/(?P<contributor_id>[0-9]+)/reset$', - views.registration_requests_reset, name="registration_requests_reset"), + path( + 'register', + views.register, + name='register' + ), + path( + 'thanks_for_registering', + TemplateView.as_view( + template_name='scipost/thanks_for_registering.html'), + name='thanks_for_registering' + ), + path( + 'activation/<int:contributor_id>/<str:key>/', + views.activation, + name='activation' + ), + path( + 'activation/<int:contributor_id>/<str:key>/renew', + views.request_new_activation_link, + name='request_new_activation_link' + ), + path( + 'unsubscribe/<int:contributor_id>/<str:key>', + views.unsubscribe, + name='unsubscribe' + ), + path( + 'vet_registration_requests', + views.vet_registration_requests, + name='vet_registration_requests' + ), + path( + 'vet_registration_request_ack/<int:contributor_id>', + views.vet_registration_request_ack, + name='vet_registration_request_ack' + ), + path( + 'registration_requests', + views.registration_requests, + name='registration_requests' + ), + path( + 'registration_requests/<int:contributor_id>/reset', + views.registration_requests_reset, + name='registration_requests_reset' + ), # Registration invitations (Never change this route! Thank you.) - url(r'^invitation/(?P<key>.+)$', views.invitation, name='invitation'), + path( + 'invitation/<str:key>', + views.invitation, + name='invitation' + ), # Authentication - url( - r'^login/$', + path( + 'login/', views.SciPostLoginView.as_view(), name='login' ), - url( - r'^login/info/$', + path( + 'login/info/', views.raw_user_auth_info, name='login_info' ), - url( - r'^logout/$', + path( + 'logout/', views.SciPostLogoutView.as_view(), name='logout' ), - url( - r'^password_change$', + path( + 'password_change', views.SciPostPasswordChangeView.as_view(), name='password_change' ), - url( - r'^password_reset/$', + path( + 'password_reset/', views.SciPostPasswordResetView.as_view(), name='password_reset' ), @@ -186,10 +316,26 @@ urlpatterns = [ views.SciPostPasswordResetConfirmView.as_view(), name='password_reset_confirm' ), - url(r'^update_personal_data$', views.update_personal_data, name='update_personal_data'), - url(r'^totp/$', views.TOTPListView.as_view(), name='totp'), - url(r'^totp/create$', views.TOTPDeviceCreateView.as_view(), name='totp_create'), - url(r'^totp/(?P<device_id>[0-9]+)/delete$', views.TOTPDeviceDeleteView.as_view(), name='totp_delete'), + path( + 'update_personal_data', + views.update_personal_data, + name='update_personal_data' + ), + path( + 'totp/', + views.TOTPListView.as_view(), + name='totp' + ), + path( + 'totp/create', + views.TOTPDeviceCreateView.as_view(), + name='totp_create' + ), + path( + 'totp/<int:device_id>/delete', + views.TOTPDeviceDeleteView.as_view(), + name='totp_delete' + ), # Single sign-on [for GitLab: see api/urls] path( @@ -199,128 +345,232 @@ urlpatterns = [ ), # Personal Page - url(r'^personal_page/$', views.personal_page, name='personal_page'), - url(r'^personal_page/account$', views.personal_page, - name='personal_page_account', kwargs={'tab': 'account'}), - url(r'^personal_page/admin_actions$', views.personal_page, - name='personal_page_admin_actions', kwargs={'tab': 'admin_actions'}), - url(r'^personal_page/editorial_actions$', views.personal_page, - name='personal_page_editorial_actions', kwargs={'tab': 'editorial_actions'}), - url(r'^personal_page/refereeing$', views.personal_page, - name='personal_page_refereeing', kwargs={'tab': 'refereeing'}), - url(r'^personal_page/publications$', views.personal_page, - name='personal_page_publications', kwargs={'tab': 'publications'}), - url(r'^personal_page/submissions$', views.personal_page, - name='personal_page_submissions', kwargs={'tab': 'submissions'}), - url(r'^personal_page/commentaries$', views.personal_page, - name='personal_page_commentaries', kwargs={'tab': 'commentaries'}), - url(r'^personal_page/theses$', views.personal_page, - name='personal_page_theses', kwargs={'tab': 'theses'}), - url(r'^personal_page/comments$', views.personal_page, - name='personal_page_comments', kwargs={'tab': 'comments'}), - url(r'^personal_page/author_replies$', views.personal_page, - name='personal_page_author_replies', kwargs={'tab': 'author_replies'}), + path( + 'personal_page/', + views.personal_page, + name='personal_page' + ), + path( + 'personal_page/account', + views.personal_page, + name='personal_page_account', kwargs={'tab': 'account'} + ), + path( + 'personal_page/admin_actions', + views.personal_page, + name='personal_page_admin_actions', kwargs={'tab': 'admin_actions'} + ), + path( + 'personal_page/editorial_actions', + views.personal_page, + name='personal_page_editorial_actions', kwargs={'tab': 'editorial_actions'} + ), + path( + 'personal_page/refereeing', + views.personal_page, + name='personal_page_refereeing', kwargs={'tab': 'refereeing'} + ), + path( + 'personal_page/publications', + views.personal_page, + name='personal_page_publications', kwargs={'tab': 'publications'} + ), + path( + 'personal_page/submissions', + views.personal_page, + name='personal_page_submissions', kwargs={'tab': 'submissions'} + ), + path( + 'personal_page/commentaries', + views.personal_page, + name='personal_page_commentaries', kwargs={'tab': 'commentaries'} + ), + path( + 'personal_page/theses', + views.personal_page, + name='personal_page_theses', kwargs={'tab': 'theses'} + ), + path( + 'personal_page/comments', + views.personal_page, + name='personal_page_comments', kwargs={'tab': 'comments'} + ), + path( + 'personal_page/author_replies', + views.personal_page, + name='personal_page_author_replies', kwargs={'tab': 'author_replies'} + ), # Unavailabilities - url(r'^unavailable_period$', views.mark_unavailable_period, name='mark_unavailable_period'), - url(r'^unavailable_period/(?P<period_id>[0-9]+)/delete$', views.delete_unavailable_period, - name='delete_unavailable_period'), + path( + 'unavailable_period', + views.mark_unavailable_period, + name='mark_unavailable_period' + ), + path( + 'unavailable_period/<int:period_id>/delete', + views.delete_unavailable_period, + name='delete_unavailable_period' + ), # Authorship claims - url(r'^claim_authorships$', views.claim_authorships, name="claim_authorships"), - url(r'^claim_sub_authorship/(?P<submission_id>[0-9]+)/(?P<claim>[0-1])$', - views.claim_sub_authorship, name='claim_sub_authorship'), - url(r'^claim_com_authorship/(?P<commentary_id>[0-9]+)/(?P<claim>[0-1])$', - views.claim_com_authorship, name='claim_com_authorship'), - url(r'^claim_thesis_authorship/(?P<thesis_id>[0-9]+)/(?P<claim>[0-1])$', - views.claim_thesis_authorship, name='claim_thesis_authorship'), - url(r'^vet_authorship_claims$', views.vet_authorship_claims, name="vet_authorship_claims"), - url(r'^vet_authorship_claim/(?P<claim_id>[0-9]+)/(?P<claim>[0-1])$', - views.vet_authorship_claim, name='vet_authorship_claim'), + path( + 'claim_authorships', + views.claim_authorships, + name='claim_authorships' + ), + path( + 'claim_sub_authorship/<int:submission_id>/<int:claim>', + views.claim_sub_authorship, + name='claim_sub_authorship' + ), + path( + 'claim_com_authorship/<int:commentary_id>/<int:claim>', + views.claim_com_authorship, + name='claim_com_authorship' + ), + path( + 'claim_thesis_authorship/<int:thesis_id>/<int:claim>', + views.claim_thesis_authorship, + name='claim_thesis_authorship' + ), + path( + 'vet_authorship_claims', + views.vet_authorship_claims, + name='vet_authorship_claims' + ), + path( + 'vet_authorship_claim/<int:claim_id>/<int:claim>', + views.vet_authorship_claim, + name='vet_authorship_claim' + ), # Potential duplicates - url(r'contributor_duplicates/$', + path( + 'contributor_duplicates/', views.ContributorDuplicateListView.as_view(), - name='contributor_duplicates'), - url(r'contributor_merge/$', + name='contributor_duplicates' + ), + path( + 'contributor_merge/', views.contributor_merge, - name='contributor_merge'), + name='contributor_merge' + ), #################### # Email facilities # #################### - url('^email_group_members$', views.email_group_members, name='email_group_members'), - url('^email_particular$', views.email_particular, name='email_particular'), - url('^send_precooked_email$', views.send_precooked_email, name='send_precooked_email'), + path( + 'email_group_members', + views.email_group_members, + name='email_group_members' + ), + path( + 'email_particular', + views.email_particular, + name='email_particular' + ), + path( + 'send_precooked_email', + views.send_precooked_email, + name='send_precooked_email' + ), ##################### # Editorial College # ##################### - url(r'^EdCol_by-laws$', views.EdCol_bylaws, name='EdCol_by-laws'), - url(r'^EdCol_by-laws_Changes_2021_04$', views.EdCol_bylaws_Changes_2021_04, name='EdCol_by-laws_Changes_2021_04'), + path( + 'EdCol_by-laws', + views.EdCol_bylaws, + name='EdCol_by-laws' + ), + path( + 'EdCol_by-laws_Changes_2021_04', + views.EdCol_bylaws_Changes_2021_04, + name='EdCol_by-laws_Changes_2021_04' + ), ################ # Publications # ################ # Reports - url(r'^(?P<doi_label>SciPost.Report.[0-9]+)$', - journals_views.report_detail, - name='report_detail'), - url(r'^10.21468/(?P<doi_label>SciPost.Report.[0-9]+)$', + path( + '<report_doi_label:doi_label>', journals_views.report_detail, - name='report_detail'), + name='report_detail' + ), # Comments - url(r'^(?P<doi_label>SciPost.Comment.[0-9]+)$', - journals_views.comment_detail, - name='comment_detail'), - url(r'^10.21468/(?P<doi_label>SciPost.Comment.[0-9]+)$', + path( + '<comment_doi_label:doi_label>', journals_views.comment_detail, - name='comment_detail'), + name='comment_detail' + ), # Author Replies - url(r'^(?P<doi_label>SciPost.AuthorReply.[0-9]+)$', - journals_views.author_reply_detail, - name='author_reply_detail'), - url(r'^10.21468/(?P<doi_label>SciPost.AuthorReply.[0-9]+)$', + path( + '<author_reply_doi_label:doi_label>', journals_views.author_reply_detail, - name='author_reply_detail'), + name='author_reply_detail' + ), # Publication detail (+pdf) - url(r'^10.21468/{pattern}$'.format(pattern=DOI_DISPATCH_PATTERN), - journals_views.doi_dispatch, name='doi_dispatch'), - url(r'^{pattern}$'.format(pattern=DOI_DISPATCH_PATTERN), - journals_views.doi_dispatch, name='doi_dispatch'), - url(r'^10.21468/(?P<doi_label>{regex})$'.format(regex=PUBLICATION_DOI_LABEL_REGEX), + re_path( + '^10.21468/{pattern}$'.format(pattern=DOI_DISPATCH_PATTERN), + journals_views.doi_dispatch, + name='doi_dispatch' + ), + re_path( + '^{pattern}$'.format(pattern=DOI_DISPATCH_PATTERN), + journals_views.doi_dispatch, + name='doi_dispatch' + ), + path( + '10.21468/<publication_doi_label:doi_label>', journals_views.publication_detail, - name='publication_detail'), - url(r'^(?P<doi_label>{regex})$'.format(regex=PUBLICATION_DOI_LABEL_REGEX), + name='publication_detail' + ), + path( + '<publication_doi_label:doi_label>', journals_views.publication_detail, - name='publication_detail'), - url(r'^10.21468/(?P<doi_label>{regex})/pdf$'.format(regex=PUBLICATION_DOI_LABEL_REGEX), + name='publication_detail' + ), + path( + '10.21468/<publication_doi_label:doi_label>/pdf', journals_views.publication_detail_pdf, - name='publication_pdf'), - url(r'^(?P<doi_label>{regex})/pdf$'.format(regex=PUBLICATION_DOI_LABEL_REGEX), + name='publication_pdf' + ), + path( + '<publication_doi_label:doi_label>/pdf', journals_views.publication_detail_pdf, - name='publication_pdf'), + name='publication_pdf' + ), # Publication updates - url(r'^(?P<doi_label>{regex})-update-(?P<update_nr>[0-9]+)$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + path( + '<publication_doi_label:doi_label>-update-<int:update_nr>', journals_views.publication_update_detail, - name='publication_update_detail'), - url(r'^10.21468/(?P<doi_label>{regex})-update-(?P<update_nr>[0-9]+)$'.format( - regex=PUBLICATION_DOI_LABEL_REGEX), + name='publication_update_detail' + ), + path( + '10.21468/<publication_doi_label:doi_label>-update-<int:update_nr>', journals_views.publication_update_detail, - name='publication_update_detail'), + name='publication_update_detail' + ), # Journal issue - url(r'^10.21468/(?P<doi_label>{regex})$'.format(regex=ISSUE_DOI_LABEL_REGEX), - journals_views.issue_detail, name='issue_detail'), - url(r'^(?P<doi_label>{regex})$'.format(regex=ISSUE_DOI_LABEL_REGEX), - journals_views.issue_detail, name='issue_detail'), + path( + '10.21468/<issue_doi_label:doi_label>', + journals_views.issue_detail, + name='issue_detail' + ), + path( + '<issue_doi_label:doi_label>', + journals_views.issue_detail, + name='issue_detail' + ), # Journal landing page path( @@ -344,23 +594,25 @@ urlpatterns = [ # Howto guides # ################ - url(r'^howto$', + path( + 'howto', TemplateView.as_view(template_name='scipost/howto.html'), - name='howto'), - url(r'^howto/production$', + name='howto' + ), + path( + 'howto/production', TemplateView.as_view(template_name='scipost/howto_production.html'), - name='howto_production'), - - # Temporary fix, due to mails sent with wrong urls - url(r'^decline_ref_invitation/(?P<invitation_key>.+)$', - submission_views.decline_ref_invitation), + name='howto_production' + ), ######################## - # Pawning verification # + # Pwning verification # ######################## - url(r'^have-i-been-pwned-verification.txt$', + path( + 'have-i-been-pwned-verification.txt', views.have_i_been_pwned, - name='have_i_been_pwned'), + name='have_i_been_pwned' + ), ] diff --git a/scipost_django/scipost/views.py b/scipost_django/scipost/views.py index a7b01bdf1a58228b64c9b89f89dc391ce558402a..418347755078f19565308d5024bab2d6b94c13e0 100644 --- a/scipost_django/scipost/views.py +++ b/scipost_django/scipost/views.py @@ -1017,12 +1017,14 @@ def claim_sub_authorship(request, submission_id, claim): if request.method == 'POST': contributor = Contributor.objects.get(user=request.user) submission = get_object_or_404(Submission, pk=submission_id) - if claim == '1': + if claim == 1: submission.authors_claims.add(contributor) newclaim = AuthorshipClaim(claimant=contributor, submission=submission) newclaim.save() - elif claim == '0': + elif claim == 0: submission.authors_false_claims.add(contributor) + else: + raise Http404 submission.save() return redirect('scipost:claim_authorships') @@ -1033,12 +1035,14 @@ def claim_com_authorship(request, commentary_id, claim): if request.method == 'POST': contributor = Contributor.objects.get(user=request.user) commentary = get_object_or_404(Commentary, pk=commentary_id) - if claim == '1': + if claim == 1: commentary.authors_claims.add(contributor) newclaim = AuthorshipClaim(claimant=contributor, commentary=commentary) newclaim.save() - elif claim == '0': + elif claim == 0: commentary.authors_false_claims.add(contributor) + else: + raise Http404 commentary.save() return redirect('scipost:claim_authorships') @@ -1049,12 +1053,14 @@ def claim_thesis_authorship(request, thesis_id, claim): if request.method == 'POST': contributor = Contributor.objects.get(user=request.user) thesislink = get_object_or_404(ThesisLink, pk=thesis_id) - if claim == '1': + if claim == 1: thesislink.author_claims.add(contributor) newclaim = AuthorshipClaim(claimant=contributor, thesislink=thesislink) newclaim.save() - elif claim == '0': + elif claim == 0: thesislink.author_false_claims.add(contributor) + else: + raise Http404 thesislink.save() return redirect('scipost:claim_authorships') diff --git a/scipost_django/submissions/converters.py b/scipost_django/submissions/converters.py index 67294fb2cffb9a5d968928c7e85022bd90044951..5d67cc9a04e8ab43a2fa59a7285dea0315f0e8c0 100644 --- a/scipost_django/submissions/converters.py +++ b/scipost_django/submissions/converters.py @@ -4,8 +4,31 @@ __license__ = "AGPL v3" from django.urls.converters import StringConverter -from .regexes import IDENTIFIER_REGEX +from .regexes import IDENTIFIER_WO_VN_NR_REGEX, IDENTIFIER_REGEX + + +class IdentifierWithoutVersionNumberConverter(StringConverter): + regex = IDENTIFIER_WO_VN_NR_REGEX class IdentifierConverter(StringConverter): regex = IDENTIFIER_REGEX + + +class ReportDOILabelConverter: + regex = r'^(10.21468/)?SciPost.Report.[0-9]+' + + def to_python(self, value): + """Strip the DOI prefix if present; check if Comment exists.""" + doi_label = value + if doi_label.startswith('10.21468/'): + doi_label = doi_label.partition('10.21468/')[2] + from submissions.models import Report + try: + return Report.objects.get(doi_label=doi_label).doi_label + except Report.DoesNotExist: + return ValueError + return doi_label + + def to_url(self, value): + return value diff --git a/scipost_django/submissions/regexes.py b/scipost_django/submissions/regexes.py index 63651859ec5921681186632732a3e84edbeb5223..88e2fefea31bfa36b886b11dab388f59bd5f08b4 100644 --- a/scipost_django/submissions/regexes.py +++ b/scipost_django/submissions/regexes.py @@ -21,7 +21,7 @@ socarxiv_regex = 'socarxiv_[a-z0-9]+' # Preprints with structurally no version number # (like OSFPreprints-based ones: SocArXiv, ...) # must not match SUBMISSIONS_WO_VN_REGEX to avoid ambiguities. -SUBMISSIONS_WO_VN_REGEX = '|'.join([ +IDENTIFIER_WO_VN_NR_REGEX = '|'.join([ scipost_regex_wo_vn, arxiv_regex_wo_vn, chemrxiv_regex_wo_vn, diff --git a/scipost_django/submissions/urls.py b/scipost_django/submissions/urls.py index ee8d3f336b2220df7f118d9152599d390c57fd48..91c4202ac3555c1200336f3d59e84483c19e080b 100644 --- a/scipost_django/submissions/urls.py +++ b/scipost_django/submissions/urls.py @@ -2,12 +2,10 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" -from django.conf.urls import url from django.urls import path, re_path from django.views.generic import TemplateView from . import views -from .constants import SUBMISSIONS_WO_VN_REGEX, SUBMISSIONS_COMPLETE_REGEX app_name = 'submissions' @@ -20,105 +18,169 @@ urlpatterns = [ name='submission-autocomplete' ), # Submissions - url(r'^$', views.SubmissionListView.as_view(), name='submissions'), - url(r'^author_guidelines$', - TemplateView.as_view(template_name='submissions/author_guidelines.html'), - name='author_guidelines'), - url(r'^refereeing_procedure$', - TemplateView.as_view(template_name='submissions/refereeing_procedure.html'), - name='refereeing_procedure'), - url(r'^referee_guidelines$', - TemplateView.as_view(template_name='submissions/referee_guidelines.html'), - name='referee_guidelines'), - url(r'^{regex}/$'.format(regex=SUBMISSIONS_WO_VN_REGEX), views.submission_detail_wo_vn_nr, - name='submission_wo_vn_nr'), - url(r'^{regex}/$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.submission_detail, name='submission'), - url(r'^{regex}/reports/(?P<report_nr>[0-9]+)/pdf$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.report_detail_pdf, name='report_detail_pdf'), - url(r'^{regex}/reports/(?P<report_nr>[0-9]+)/attachment$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), views.report_attachment, name='report_attachment'), - url(r'^{regex}/reports/pdf$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.submission_refereeing_package_pdf, name='refereeing_package_pdf'), + path( + '', + views.SubmissionListView.as_view(), + name='submissions' + ), + path( + 'author_guidelines', + TemplateView.as_view( + template_name='submissions/author_guidelines.html'), + name='author_guidelines' + ), + path( + 'refereeing_procedure', + TemplateView.as_view( + template_name='submissions/refereeing_procedure.html'), + name='refereeing_procedure' + ), + path( + 'referee_guidelines', + TemplateView.as_view( + template_name='submissions/referee_guidelines.html'), + name='referee_guidelines' + ), + path( + '<identifier_wo_vn_nr:identifier_wo_vn_nr>/', + views.submission_detail_wo_vn_nr, + name='submission_wo_vn_nr' + ), + path( + '<identifier:identifier_w_vn_nr>/', + views.submission_detail, + name='submission' + ), + path( + '<identifier:identifier_w_vn_nr>/reports/<int:report_nr>/pdf', + views.report_detail_pdf, + name='report_detail_pdf' + ), + path( + '<identifier:identifier_w_vn_nr>/reports/<int:report_nr>/attachment', + views.report_attachment, + name='report_attachment' + ), + path( + '<identifier:identifier_w_vn_nr>/reports/pdf', + views.submission_refereeing_package_pdf, + name='refereeing_package_pdf' + ), # Topics - url(r'^submission_add_topic/{regex}/'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + path( + 'submission_add_topic/<identifier:identifier_w_vn_nr>/', views.submission_add_topic, - name='submission_add_topic'), - url(r'^submission_remove_topic/{regex}/(?P<slug>[-\w]+)/'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + name='submission_add_topic' + ), + path( + 'submission_remove_topic/<identifier:identifier_w_vn_nr>/<slug:slug>/', views.submission_remove_topic, - name='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), - views.PreScreeningView.as_view(), name='do_prescreening'), - url(r'^admin/{regex}/conflicts$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.SubmissionConflictsView.as_view(), name='conflicts'), - url(r'^admin/{regex}/editor_invitations$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.editor_invitations, name='editor_invitations'), - url(r'^admin/{regex}/editor_invitations/(?P<assignment_id>[0-9]+)$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), views.send_editorial_assignment_invitation, - name='send_editorial_assignment_invitation'), - url(r'^admin/{regex}/reassign_editor$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), views.SubmissionReassignmentView.as_view(), - name='reassign_submission'), - url(r'^admin/{regex}/reports/compile$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.treated_submission_pdf_compile, name='treated_submission_pdf_compile'), - url(r'^admin/{regex}/plagiarism$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.PlagiarismView.as_view(), name='plagiarism'), - url(r'^admin/{regex}/plagiarism/report$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.PlagiarismReportPDFView.as_view(), name='plagiarism_report'), -url(r'^admin/{regex}/plagiarism/internal$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.PlagiarismInternalView.as_view(), name='plagiarism_internal'), - url( - r'^admin/{regex}/recommendation$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), views.EICRecommendationDetailView.as_view(), + path( + 'admin/treated', + views.treated_submissions_list, + name='treated_submissions_list' + ), + path( + 'admin/<identifier:identifier_w_vn_nr>/prescreening', + views.PreScreeningView.as_view(), + name='do_prescreening' + ), + path( + 'admin/<identifier:identifier_w_vn_nr>/conflicts', + views.SubmissionConflictsView.as_view(), + name='conflicts' + ), + path( + 'admin/<identifier:identifier_w_vn_nr>/editor_invitations', + views.editor_invitations, + name='editor_invitations' + ), + path( + 'admin/<identifier:identifier_w_vn_nr>/editor_invitations/<int:assignment_id>', + views.send_editorial_assignment_invitation, + name='send_editorial_assignment_invitation' + ), + path( + 'admin/<identifier:identifier_w_vn_nr>/reassign_editor', + views.SubmissionReassignmentView.as_view(), + name='reassign_submission' + ), + path( + 'admin/<identifier:identifier_w_vn_nr>/reports/compile', + views.treated_submission_pdf_compile, + name='treated_submission_pdf_compile' + ), + path( + 'admin/<identifier:identifier_w_vn_nr>/plagiarism', + views.PlagiarismView.as_view(), + name='plagiarism' + ), + path( + 'admin/<identifier:identifier_w_vn_nr>/plagiarism/report', + views.PlagiarismReportPDFView.as_view(), + name='plagiarism_report' + ), + path( + 'admin/<identifier:identifier_w_vn_nr>/plagiarism/internal', + views.PlagiarismInternalView.as_view(), + name='plagiarism_internal' + ), + path( + 'admin/<identifier:identifier_w_vn_nr>/recommendation', + views.EICRecommendationDetailView.as_view(), name='eic_recommendation_detail' ), - url( - r'^admin/{regex}/editorial_decision/create$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), + path( + 'admin/<identifier:identifier_w_vn_nr>/editorial_decision/create', views.EditorialDecisionCreateView.as_view(), name='editorial_decision_create' ), - url( - r'^admin/{regex}/editorial_decision$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), + path( + 'admin/<identifier:identifier_w_vn_nr>/editorial_decision', views.EditorialDecisionDetailView.as_view(), name='editorial_decision_detail' ), - url( - r'^admin/{regex}/editorial_decision/update$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), + path( + 'admin/<identifier:identifier_w_vn_nr>/editorial_decision/update', views.EditorialDecisionUpdateView.as_view(), name='editorial_decision_update' ), - url( - r'^admin/{regex}/editorial_decision/fix$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), + path( + 'admin/<identifier:identifier_w_vn_nr>/editorial_decision/fix', views.fix_editorial_decision, name='fix_editorial_decision' ), - url( - r'^{regex}/accept_puboffer$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), + path( + '<identifier:identifier_w_vn_nr>/accept_puboffer', views.accept_puboffer, name='accept_puboffer' ), - url( - r'admin/{regex}/restart_refereeing$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), + path( + 'admin/<identifier:identifier_w_vn_nr>/restart_refereeing', views.restart_refereeing, name='restart_refereeing' ), - - url(r'^admin/reports$', views.reports_accepted_list, name='reports_accepted_list'), - url(r'^admin/reports/(?P<report_id>[0-9]+)/compile$', - views.report_pdf_compile, name='report_pdf_compile'), - url(r'^admin/reports/(?P<report_id>[0-9]+)/compile$', - views.report_pdf_compile, name='report_pdf_compile'), + path( + 'admin/reports', + views.reports_accepted_list, + name='reports_accepted_list' + ), + path( + 'admin/reports/<int:report_id>/compile', + views.report_pdf_compile, + name='report_pdf_compile' + ), + path( + 'admin/reports/<int:report_id>/compile', + views.report_pdf_compile, + name='report_pdf_compile' + ), # Submission, resubmission, withdrawal @@ -165,8 +227,8 @@ url(r'^admin/{regex}/plagiarism/internal$'.format(regex=SUBMISSIONS_COMPLETE_REG name='submit_manuscript_osfpreprints' ), - url( - r'^withdraw_manuscript/{regex}/$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + path( + 'withdraw_manuscript/<identifier:identifier_w_vn_nr>/', views.withdraw_manuscript, name='withdraw_manuscript' ), @@ -182,97 +244,199 @@ url(r'^admin/{regex}/plagiarism/internal$'.format(regex=SUBMISSIONS_COMPLETE_REG views.pool_hx_submissions_list, name='pool_hx_submissions_list' ), - re_path( - 'pool/submissions/{regex}'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + path( + 'pool/submissions/<identifier:identifier_w_vn_nr>', views.pool_hx_submission_details, name='pool_hx_submission_details' ), - url(r'^pool/$', views.pool, name='pool'), - url(r'^pool/{regex}/$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), views.pool, name='pool'), - url(r'^add_remark/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.add_remark, name='add_remark'), + path( + 'pool/', + views.pool, + name='pool' + ), + path( + 'pool/<identifier:identifier_w_vn_nr>/', + views.pool, + name='pool' + ), + path( + 'add_remark/<identifier:identifier_w_vn_nr>', + views.add_remark, + name='add_remark' + ), # Assignment of Editor-in-charge - url(r'^pool/assignment_request/(?P<assignment_id>[0-9]+)$', - views.assignment_request, name='assignment_request'), - url(r'^pool/{regex}/editorial_assignment/$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), views.editorial_assignment, - name='editorial_assignment'), - url(r'^pool/{regex}/editorial_assignment/(?P<assignment_id>[0-9]+)/$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), views.editorial_assignment, - name='editorial_assignment'), - url(r'^update_authors_screening/{regex}/(?P<nrweeks>[1-2])$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), - views.update_authors_screening, name='update_authors_screening'), - url(r'^assignment_failed/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.assignment_failed, name='assignment_failed'), + path( + 'pool/assignment_request/<int:assignment_id>', + views.assignment_request, + name='assignment_request' + ), + path( + 'pool/<identifier:identifier_w_vn_nr>/editorial_assignment/', + views.editorial_assignment, + name='editorial_assignment' + ), + path( + 'pool/<identifier:identifier_w_vn_nr>/editorial_assignment/<int:assignment_id>/', + views.editorial_assignment, + name='editorial_assignment' + ), + path( + 'update_authors_screening/<identifier:identifier_w_vn_nr>/<int:nrweeks>', + views.update_authors_screening, + name='update_authors_screening' + ), + path( + 'assignment_failed/<identifier:identifier_w_vn_nr>', + views.assignment_failed, + name='assignment_failed' + ), # Editorial workflow and refereeing - url(r'^editorial_workflow$', views.editorial_workflow, name='editorial_workflow'), - url(r'^assignments$', views.assignments, name='assignments'), - url(r'^editorial_page/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.editorial_page, name='editorial_page'), - url(r'^select_referee/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.select_referee, name='select_referee'), - url(r'^add_referee_profile/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.add_referee_profile, name='add_referee_profile'), - url(r'^invite_referee/{regex}/(?P<profile_id>[0-9]+)' - '/(?P<auto_reminders_allowed>[0-1])$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), - views.invite_referee, name='invite_referee'), - url(r'^set_refinv_auto_reminder/(?P<invitation_id>[0-9]+)/(?P<auto_reminders>[0-1])$', - views.set_refinv_auto_reminder, name='set_refinv_auto_reminder'), - url(r'^accept_or_decline_ref_invitations/$', - views.accept_or_decline_ref_invitations, name='accept_or_decline_ref_invitations'), - url(r'^accept_or_decline_ref_invitations/(?P<invitation_id>[0-9]+)$', - views.accept_or_decline_ref_invitations, name='accept_or_decline_ref_invitations'), - url(r'^decline_ref_invitation/(?P<invitation_key>.+)$', - views.decline_ref_invitation, name='decline_ref_invitation'), - url(r'^ref_invitation_reminder/{regex}/(?P<invitation_id>[0-9]+)$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), - views.ref_invitation_reminder, name='ref_invitation_reminder'), - url(r'^cancel_ref_invitation/{regex}/(?P<invitation_id>[0-9]+)$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), - views.cancel_ref_invitation, name='cancel_ref_invitation'), - url(r'^extend_refereeing_deadline/{regex}/(?P<days>[0-9]+)$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), - views.extend_refereeing_deadline, name='extend_refereeing_deadline'), - url(r'^set_refereeing_deadline/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.set_refereeing_deadline, name='set_refereeing_deadline'), - url(r'^close_refereeing_round/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.close_refereeing_round, name='close_refereeing_round'), - url(r'^refereeing_overview$', views.refereeing_overview, name='refereeing_overview'), - url(r'^communication/{regex}/(?P<comtype>[a-zA-Z]{{4,}})$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), - views.communication, name='communication'), - url(r'^communication/{regex}/(?P<comtype>[a-zA-Z]{{4,}})/(?P<referee_id>[0-9]+)$'.format( - regex=SUBMISSIONS_COMPLETE_REGEX), - views.communication, name='communication'), - url(r'^eic_recommendation/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.eic_recommendation, name='eic_recommendation'), - url(r'^eic_recommendation/{regex}/reformulate$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.reformulate_eic_recommendation, name='reformulate_eic_recommendation'), - url(r'^cycle/{regex}/submit$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.cycle_form_submit, name='cycle_confirmation'), + path( + 'editorial_workflow', + views.editorial_workflow, + name='editorial_workflow' + ), + path( + 'assignments', + views.assignments, + name='assignments' + ), + path( + 'editorial_page/<identifier:identifier_w_vn_nr>', + views.editorial_page, + name='editorial_page' + ), + path( + 'select_referee/<identifier:identifier_w_vn_nr>', + views.select_referee, + name='select_referee' + ), + path( + 'add_referee_profile/<identifier:identifier_w_vn_nr>', + views.add_referee_profile, + name='add_referee_profile' + ), + path( + 'invite_referee/<identifier:identifier_w_vn_nr>/<int:profile_id>/<int:auto_reminders_allowed>', + views.invite_referee, + name='invite_referee' + ), + path( + 'set_refinv_auto_reminder/<int:invitation_id>/<int:auto_reminders>', + views.set_refinv_auto_reminder, + name='set_refinv_auto_reminder' + ), + path( + 'accept_or_decline_ref_invitations/', + views.accept_or_decline_ref_invitations, + name='accept_or_decline_ref_invitations' + ), + path( + 'accept_or_decline_ref_invitations/<int:invitation_id>', + views.accept_or_decline_ref_invitations, + name='accept_or_decline_ref_invitations' + ), + path( + 'decline_ref_invitation/<str:invitation_key>', + views.decline_ref_invitation, + name='decline_ref_invitation' + ), + path( + 'ref_invitation_reminder/<identifier:identifier_w_vn_nr>/<int:invitation_id>', + views.ref_invitation_reminder, + name='ref_invitation_reminder' + ), + path( + 'cancel_ref_invitation/<identifier:identifier_w_vn_nr>/<int:invitation_id>', + views.cancel_ref_invitation, + name='cancel_ref_invitation' + ), + path( + 'extend_refereeing_deadline/<identifier:identifier_w_vn_nr>/<int:days>', + views.extend_refereeing_deadline, + name='extend_refereeing_deadline' + ), + path( + 'set_refereeing_deadline/<identifier:identifier_w_vn_nr>', + views.set_refereeing_deadline, + name='set_refereeing_deadline' + ), + path( + 'close_refereeing_round/<identifier:identifier_w_vn_nr>', + views.close_refereeing_round, + name='close_refereeing_round' + ), + path( + 'refereeing_overview', + views.refereeing_overview, + name='refereeing_overview' + ), + path( + 'communication/<identifier:identifier_w_vn_nr>/<str:comtype>', + views.communication, + name='communication' + ), + path( + 'communication/<identifier:identifier_w_vn_nr>/<str:comtype>/<int:referee_id>', + views.communication, + name='communication' + ), + path( + 'eic_recommendation/<identifier:identifier_w_vn_nr>', + views.eic_recommendation, + name='eic_recommendation' + ), + path( + 'eic_recommendation/<identifier:identifier_w_vn_nr>/reformulate', + views.reformulate_eic_recommendation, + name='reformulate_eic_recommendation' + ), + path( + 'cycle/<identifier:identifier_w_vn_nr>/submit', + views.cycle_form_submit, + name='cycle_confirmation' + ), # Reports - url(r'^{regex}/reports/submit$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.submit_report, name='submit_report'), - url(r'^reports/vet$', views.vet_submitted_reports_list, name='vet_submitted_reports_list'), - url(r'^reports/(?P<report_id>[0-9]+)/vet$', views.vet_submitted_report, - name='vet_submitted_report'), + path( + '<identifier:identifier_w_vn_nr>/reports/submit', + views.submit_report, + name='submit_report' + ), + path( + 'reports/vet', + views.vet_submitted_reports_list, + name='vet_submitted_reports_list' + ), + path( + 'reports/<int:report_id>/vet', + views.vet_submitted_report, + name='vet_submitted_report' + ), # Voting - url(r'^prepare_for_voting/(?P<rec_id>[0-9]+)$', views.prepare_for_voting, - name='prepare_for_voting'), - url(r'^vote_on_rec/(?P<rec_id>[0-9]+)$', views.vote_on_rec, name='vote_on_rec'), + path( + 'prepare_for_voting/<int:rec_id>', + views.prepare_for_voting, + name='prepare_for_voting' + ), + path( + 'vote_on_rec/<int:rec_id>', + views.vote_on_rec, + name='vote_on_rec' + ), path( 'claim_voting_right/<int:rec_id>', views.claim_voting_right, name='claim_voting_right' ), - url(r'^remind_Fellows_to_vote/(?P<rec_id>[0-9]+)$', views.remind_Fellows_to_vote, - name='remind_Fellows_to_vote'), + path( + 'remind_Fellows_to_vote/<int:rec_id>', + views.remind_Fellows_to_vote, + name='remind_Fellows_to_vote' + ), # Monitoring path( diff --git a/scipost_django/submissions/views.py b/scipost_django/submissions/views.py index cb2bcb7e47b6706af29f347b0d47244be025ce8a..9a8a1851cd8c8120bc2c273e7c48b1f913ee913c 100644 --- a/scipost_django/submissions/views.py +++ b/scipost_django/submissions/views.py @@ -980,10 +980,12 @@ def update_authors_screening(request, identifier_w_vn_nr, nrweeks): """ submission = get_object_or_404(Submission.objects.pool(request.user).unassigned(), preprint__identifier_w_vn_nr=identifier_w_vn_nr) - mail_code = 'authors/update_authors_screening_1week' - if nrweeks == '2': + if nrweeks == 1: + mail_code = 'authors/update_authors_screening_1week' + elif nrweeks == 2: mail_code = 'authors/update_authors_screening_2weeks' - + else: + raise Http404 mail_editor_view = MailEditorSubview( request, mail_code=mail_code, instance=submission) if mail_editor_view.is_valid(): diff --git a/scipost_django/theses/urls.py b/scipost_django/theses/urls.py index 957ae942da90789f7b6fb73533b60ef8ed841dee..97dcd8a4b85e4ec0317f787ce2476eae8a63ff26 100644 --- a/scipost_django/theses/urls.py +++ b/scipost_django/theses/urls.py @@ -2,7 +2,7 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" -from django.conf.urls import include, url +from django.urls import include, path, re_path from django.views.generic import TemplateView from . import views @@ -11,10 +11,34 @@ app_name = 'theses' urlpatterns = [ # Thesis Links - url(r'^$', views.ThesisListView.as_view(), name='theses'), - url(r'^browse/(?P<nrweeksback>[0-9]{1,3})/$', views.ThesisListView.as_view(), name='browse'), - url(r'^(?P<thesislink_id>[0-9]+)/$', views.thesis_detail, name='thesis'), - url(r'^request_thesislink$', views.RequestThesisLink.as_view(), name='request_thesislink'), - url(r'^unvetted_thesislinks$', views.UnvettedThesisLinks.as_view(), name='unvetted_thesislinks'), - url(r'^vet_thesislink/(?P<pk>[0-9]+)/$', views.VetThesisLink.as_view(), name='vet_thesislink'), + path( + '', + views.ThesisListView.as_view(), + name='theses' + ), + re_path( + r'^browse/(?P<nrweeksback>[0-9]{1,3})/$', + views.ThesisListView.as_view(), + name='browse' + ), + path( + '<int:thesislink_id>/', + views.thesis_detail, + name='thesis' + ), + path( + 'request_thesislink', + views.RequestThesisLink.as_view(), + name='request_thesislink' + ), + path( + 'unvetted_thesislinks', + views.UnvettedThesisLinks.as_view(), + name='unvetted_thesislinks' + ), + path( + 'vet_thesislink/<int:pk>/', + views.VetThesisLink.as_view(), + name='vet_thesislink' + ), ]